chatbot-ui/db/assistants.ts

185 lines
3.7 KiB
TypeScript

import { supabase } from "@/lib/supabase/browser-client"
import { TablesInsert, TablesUpdate } from "@/supabase/types"
export const getAssistantById = async (assistantId: string) => {
const { data: assistant, error } = await supabase
.from("assistants")
.select("*")
.eq("id", assistantId)
.single()
if (!assistant) {
throw new Error(error.message)
}
return assistant
}
export const getAssistantWorkspacesByWorkspaceId = async (
workspaceId: string
) => {
const { data: workspace, error } = await supabase
.from("workspaces")
.select(
`
id,
name,
assistants (*)
`
)
.eq("id", workspaceId)
.single()
if (!workspace) {
throw new Error(error.message)
}
return workspace
}
export const getAssistantWorkspacesByAssistantId = async (
assistantId: string
) => {
const { data: assistant, error } = await supabase
.from("assistants")
.select(
`
id,
name,
workspaces (*)
`
)
.eq("id", assistantId)
.single()
if (!assistant) {
throw new Error(error.message)
}
return assistant
}
export const createAssistant = async (
assistant: TablesInsert<"assistants">,
workspace_id: string
) => {
const { data: createdAssistant, error } = await supabase
.from("assistants")
.insert([assistant])
.select("*")
.single()
if (error) {
throw new Error(error.message)
}
await createAssistantWorkspace({
user_id: createdAssistant.user_id,
assistant_id: createdAssistant.id,
workspace_id
})
return createdAssistant
}
export const createAssistants = async (
assistants: TablesInsert<"assistants">[],
workspace_id: string
) => {
const { data: createdAssistants, error } = await supabase
.from("assistants")
.insert(assistants)
.select("*")
if (error) {
throw new Error(error.message)
}
await createAssistantWorkspaces(
createdAssistants.map(assistant => ({
user_id: assistant.user_id,
assistant_id: assistant.id,
workspace_id
}))
)
return createdAssistants
}
export const createAssistantWorkspace = async (item: {
user_id: string
assistant_id: string
workspace_id: string
}) => {
const { data: createdAssistantWorkspace, error } = await supabase
.from("assistant_workspaces")
.insert([item])
.select("*")
.single()
if (error) {
throw new Error(error.message)
}
return createdAssistantWorkspace
}
export const createAssistantWorkspaces = async (
items: { user_id: string; assistant_id: string; workspace_id: string }[]
) => {
const { data: createdAssistantWorkspaces, error } = await supabase
.from("assistant_workspaces")
.insert(items)
.select("*")
if (error) throw new Error(error.message)
return createdAssistantWorkspaces
}
export const updateAssistant = async (
assistantId: string,
assistant: TablesUpdate<"assistants">
) => {
const { data: updatedAssistant, error } = await supabase
.from("assistants")
.update(assistant)
.eq("id", assistantId)
.select("*")
.single()
if (error) {
throw new Error(error.message)
}
return updatedAssistant
}
export const deleteAssistant = async (assistantId: string) => {
const { error } = await supabase
.from("assistants")
.delete()
.eq("id", assistantId)
if (error) {
throw new Error(error.message)
}
return true
}
export const deleteAssistantWorkspace = async (
assistantId: string,
workspaceId: string
) => {
const { error } = await supabase
.from("assistant_workspaces")
.delete()
.eq("assistant_id", assistantId)
.eq("workspace_id", workspaceId)
if (error) throw new Error(error.message)
return true
}