chatbot-ui/db/prompts.ts

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
}