chatai/chatbot-ui/db/collections.ts

185 lines
3.7 KiB
TypeScript

import { supabase } from "@/lib/supabase/browser-client"
import { TablesInsert, TablesUpdate } from "@/supabase/types"
export const getCollectionById = async (collectionId: string) => {
const { data: collection, error } = await supabase
.from("collections")
.select("*")
.eq("id", collectionId)
.single()
if (!collection) {
throw new Error(error.message)
}
return collection
}
export const getCollectionWorkspacesByWorkspaceId = async (
workspaceId: string
) => {
const { data: workspace, error } = await supabase
.from("workspaces")
.select(
`
id,
name,
collections (*)
`
)
.eq("id", workspaceId)
.single()
if (!workspace) {
throw new Error(error.message)
}
return workspace
}
export const getCollectionWorkspacesByCollectionId = async (
collectionId: string
) => {
const { data: collection, error } = await supabase
.from("collections")
.select(
`
id,
name,
workspaces (*)
`
)
.eq("id", collectionId)
.single()
if (!collection) {
throw new Error(error.message)
}
return collection
}
export const createCollection = async (
collection: TablesInsert<"collections">,
workspace_id: string
) => {
const { data: createdCollection, error } = await supabase
.from("collections")
.insert([collection])
.select("*")
.single()
if (error) {
throw new Error(error.message)
}
await createCollectionWorkspace({
user_id: createdCollection.user_id,
collection_id: createdCollection.id,
workspace_id
})
return createdCollection
}
export const createCollections = async (
collections: TablesInsert<"collections">[],
workspace_id: string
) => {
const { data: createdCollections, error } = await supabase
.from("collections")
.insert(collections)
.select("*")
if (error) {
throw new Error(error.message)
}
await createCollectionWorkspaces(
createdCollections.map(collection => ({
user_id: collection.user_id,
collection_id: collection.id,
workspace_id
}))
)
return createdCollections
}
export const createCollectionWorkspace = async (item: {
user_id: string
collection_id: string
workspace_id: string
}) => {
const { data: createdCollectionWorkspace, error } = await supabase
.from("collection_workspaces")
.insert([item])
.select("*")
.single()
if (error) {
throw new Error(error.message)
}
return createdCollectionWorkspace
}
export const createCollectionWorkspaces = async (
items: { user_id: string; collection_id: string; workspace_id: string }[]
) => {
const { data: createdCollectionWorkspaces, error } = await supabase
.from("collection_workspaces")
.insert(items)
.select("*")
if (error) throw new Error(error.message)
return createdCollectionWorkspaces
}
export const updateCollection = async (
collectionId: string,
collection: TablesUpdate<"collections">
) => {
const { data: updatedCollection, error } = await supabase
.from("collections")
.update(collection)
.eq("id", collectionId)
.select("*")
.single()
if (error) {
throw new Error(error.message)
}
return updatedCollection
}
export const deleteCollection = async (collectionId: string) => {
const { error } = await supabase
.from("collections")
.delete()
.eq("id", collectionId)
if (error) {
throw new Error(error.message)
}
return true
}
export const deleteCollectionWorkspace = async (
collectionId: string,
workspaceId: string
) => {
const { error } = await supabase
.from("collection_workspaces")
.delete()
.eq("collection_id", collectionId)
.eq("workspace_id", workspaceId)
if (error) throw new Error(error.message)
return true
}