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 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
|
|
}
|