chatbot-ui/db/models.ts

178 lines
3.4 KiB
TypeScript

import { supabase } from "@/lib/supabase/browser-client"
import { TablesInsert, TablesUpdate } from "@/supabase/types"
export const getModelById = async (modelId: string) => {
const { data: model, error } = await supabase
.from("models")
.select("*")
.eq("id", modelId)
.single()
if (!model) {
throw new Error(error.message)
}
return model
}
export const getModelWorkspacesByWorkspaceId = async (workspaceId: string) => {
const { data: workspace, error } = await supabase
.from("workspaces")
.select(
`
id,
name,
models (*)
`
)
.eq("id", workspaceId)
.single()
if (!workspace) {
throw new Error(error.message)
}
return workspace
}
export const getModelWorkspacesByModelId = async (modelId: string) => {
const { data: model, error } = await supabase
.from("models")
.select(
`
id,
name,
workspaces (*)
`
)
.eq("id", modelId)
.single()
if (!model) {
throw new Error(error.message)
}
return model
}
export const createModel = async (
model: TablesInsert<"models">,
workspace_id: string
) => {
const { data: createdModel, error } = await supabase
.from("models")
.insert([model])
.select("*")
.single()
if (error) {
throw new Error(error.message)
}
await createModelWorkspace({
user_id: model.user_id,
model_id: createdModel.id,
workspace_id: workspace_id
})
return createdModel
}
export const createModels = async (
models: TablesInsert<"models">[],
workspace_id: string
) => {
const { data: createdModels, error } = await supabase
.from("models")
.insert(models)
.select("*")
if (error) {
throw new Error(error.message)
}
await createModelWorkspaces(
createdModels.map(model => ({
user_id: model.user_id,
model_id: model.id,
workspace_id
}))
)
return createdModels
}
export const createModelWorkspace = async (item: {
user_id: string
model_id: string
workspace_id: string
}) => {
const { data: createdModelWorkspace, error } = await supabase
.from("model_workspaces")
.insert([item])
.select("*")
.single()
if (error) {
throw new Error(error.message)
}
return createdModelWorkspace
}
export const createModelWorkspaces = async (
items: { user_id: string; model_id: string; workspace_id: string }[]
) => {
const { data: createdModelWorkspaces, error } = await supabase
.from("model_workspaces")
.insert(items)
.select("*")
if (error) throw new Error(error.message)
return createdModelWorkspaces
}
export const updateModel = async (
modelId: string,
model: TablesUpdate<"models">
) => {
const { data: updatedModel, error } = await supabase
.from("models")
.update(model)
.eq("id", modelId)
.select("*")
.single()
if (error) {
throw new Error(error.message)
}
return updatedModel
}
export const deleteModel = async (modelId: string) => {
const { error } = await supabase.from("models").delete().eq("id", modelId)
if (error) {
throw new Error(error.message)
}
return true
}
export const deleteModelWorkspace = async (
modelId: string,
workspaceId: string
) => {
const { error } = await supabase
.from("model_workspaces")
.delete()
.eq("model_id", modelId)
.eq("workspace_id", workspaceId)
if (error) throw new Error(error.message)
return true
}