178 lines
3.4 KiB
TypeScript
178 lines
3.4 KiB
TypeScript
import { supabase } from "@/lib/supabase/browser-client"
|
|
import { TablesInsert, TablesUpdate } from "@/supabase/types"
|
|
|
|
export const getPromptById = async (promptId: string) => {
|
|
const { data: prompt, error } = await supabase
|
|
.from("prompts")
|
|
.select("*")
|
|
.eq("id", promptId)
|
|
.single()
|
|
|
|
if (!prompt) {
|
|
throw new Error(error.message)
|
|
}
|
|
|
|
return prompt
|
|
}
|
|
|
|
export const getPromptWorkspacesByWorkspaceId = async (workspaceId: string) => {
|
|
const { data: workspace, error } = await supabase
|
|
.from("workspaces")
|
|
.select(
|
|
`
|
|
id,
|
|
name,
|
|
prompts (*)
|
|
`
|
|
)
|
|
.eq("id", workspaceId)
|
|
.single()
|
|
|
|
if (!workspace) {
|
|
throw new Error(error.message)
|
|
}
|
|
|
|
return workspace
|
|
}
|
|
|
|
export const getPromptWorkspacesByPromptId = async (promptId: string) => {
|
|
const { data: prompt, error } = await supabase
|
|
.from("prompts")
|
|
.select(
|
|
`
|
|
id,
|
|
name,
|
|
workspaces (*)
|
|
`
|
|
)
|
|
.eq("id", promptId)
|
|
.single()
|
|
|
|
if (!prompt) {
|
|
throw new Error(error.message)
|
|
}
|
|
|
|
return prompt
|
|
}
|
|
|
|
export const createPrompt = async (
|
|
prompt: TablesInsert<"prompts">,
|
|
workspace_id: string
|
|
) => {
|
|
const { data: createdPrompt, error } = await supabase
|
|
.from("prompts")
|
|
.insert([prompt])
|
|
.select("*")
|
|
.single()
|
|
|
|
if (error) {
|
|
throw new Error(error.message)
|
|
}
|
|
|
|
await createPromptWorkspace({
|
|
user_id: createdPrompt.user_id,
|
|
prompt_id: createdPrompt.id,
|
|
workspace_id
|
|
})
|
|
|
|
return createdPrompt
|
|
}
|
|
|
|
export const createPrompts = async (
|
|
prompts: TablesInsert<"prompts">[],
|
|
workspace_id: string
|
|
) => {
|
|
const { data: createdPrompts, error } = await supabase
|
|
.from("prompts")
|
|
.insert(prompts)
|
|
.select("*")
|
|
|
|
if (error) {
|
|
throw new Error(error.message)
|
|
}
|
|
|
|
await createPromptWorkspaces(
|
|
createdPrompts.map(prompt => ({
|
|
user_id: prompt.user_id,
|
|
prompt_id: prompt.id,
|
|
workspace_id
|
|
}))
|
|
)
|
|
|
|
return createdPrompts
|
|
}
|
|
|
|
export const createPromptWorkspace = async (item: {
|
|
user_id: string
|
|
prompt_id: string
|
|
workspace_id: string
|
|
}) => {
|
|
const { data: createdPromptWorkspace, error } = await supabase
|
|
.from("prompt_workspaces")
|
|
.insert([item])
|
|
.select("*")
|
|
.single()
|
|
|
|
if (error) {
|
|
throw new Error(error.message)
|
|
}
|
|
|
|
return createdPromptWorkspace
|
|
}
|
|
|
|
export const createPromptWorkspaces = async (
|
|
items: { user_id: string; prompt_id: string; workspace_id: string }[]
|
|
) => {
|
|
const { data: createdPromptWorkspaces, error } = await supabase
|
|
.from("prompt_workspaces")
|
|
.insert(items)
|
|
.select("*")
|
|
|
|
if (error) throw new Error(error.message)
|
|
|
|
return createdPromptWorkspaces
|
|
}
|
|
|
|
export const updatePrompt = async (
|
|
promptId: string,
|
|
prompt: TablesUpdate<"prompts">
|
|
) => {
|
|
const { data: updatedPrompt, error } = await supabase
|
|
.from("prompts")
|
|
.update(prompt)
|
|
.eq("id", promptId)
|
|
.select("*")
|
|
.single()
|
|
|
|
if (error) {
|
|
throw new Error(error.message)
|
|
}
|
|
|
|
return updatedPrompt
|
|
}
|
|
|
|
export const deletePrompt = async (promptId: string) => {
|
|
const { error } = await supabase.from("prompts").delete().eq("id", promptId)
|
|
|
|
if (error) {
|
|
throw new Error(error.message)
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
export const deletePromptWorkspace = async (
|
|
promptId: string,
|
|
workspaceId: string
|
|
) => {
|
|
const { error } = await supabase
|
|
.from("prompt_workspaces")
|
|
.delete()
|
|
.eq("prompt_id", promptId)
|
|
.eq("workspace_id", workspaceId)
|
|
|
|
if (error) throw new Error(error.message)
|
|
|
|
return true
|
|
}
|