178 lines
3.3 KiB
TypeScript
178 lines
3.3 KiB
TypeScript
import { supabase } from "@/lib/supabase/browser-client"
|
|
import { TablesInsert, TablesUpdate } from "@/supabase/types"
|
|
|
|
export const getToolById = async (toolId: string) => {
|
|
const { data: tool, error } = await supabase
|
|
.from("tools")
|
|
.select("*")
|
|
.eq("id", toolId)
|
|
.single()
|
|
|
|
if (!tool) {
|
|
throw new Error(error.message)
|
|
}
|
|
|
|
return tool
|
|
}
|
|
|
|
export const getToolWorkspacesByWorkspaceId = async (workspaceId: string) => {
|
|
const { data: workspace, error } = await supabase
|
|
.from("workspaces")
|
|
.select(
|
|
`
|
|
id,
|
|
name,
|
|
tools (*)
|
|
`
|
|
)
|
|
.eq("id", workspaceId)
|
|
.single()
|
|
|
|
if (!workspace) {
|
|
throw new Error(error.message)
|
|
}
|
|
|
|
return workspace
|
|
}
|
|
|
|
export const getToolWorkspacesByToolId = async (toolId: string) => {
|
|
const { data: tool, error } = await supabase
|
|
.from("tools")
|
|
.select(
|
|
`
|
|
id,
|
|
name,
|
|
workspaces (*)
|
|
`
|
|
)
|
|
.eq("id", toolId)
|
|
.single()
|
|
|
|
if (!tool) {
|
|
throw new Error(error.message)
|
|
}
|
|
|
|
return tool
|
|
}
|
|
|
|
export const createTool = async (
|
|
tool: TablesInsert<"tools">,
|
|
workspace_id: string
|
|
) => {
|
|
const { data: createdTool, error } = await supabase
|
|
.from("tools")
|
|
.insert([tool])
|
|
.select("*")
|
|
.single()
|
|
|
|
if (error) {
|
|
throw new Error(error.message)
|
|
}
|
|
|
|
await createToolWorkspace({
|
|
user_id: createdTool.user_id,
|
|
tool_id: createdTool.id,
|
|
workspace_id
|
|
})
|
|
|
|
return createdTool
|
|
}
|
|
|
|
export const createTools = async (
|
|
tools: TablesInsert<"tools">[],
|
|
workspace_id: string
|
|
) => {
|
|
const { data: createdTools, error } = await supabase
|
|
.from("tools")
|
|
.insert(tools)
|
|
.select("*")
|
|
|
|
if (error) {
|
|
throw new Error(error.message)
|
|
}
|
|
|
|
await createToolWorkspaces(
|
|
createdTools.map(tool => ({
|
|
user_id: tool.user_id,
|
|
tool_id: tool.id,
|
|
workspace_id
|
|
}))
|
|
)
|
|
|
|
return createdTools
|
|
}
|
|
|
|
export const createToolWorkspace = async (item: {
|
|
user_id: string
|
|
tool_id: string
|
|
workspace_id: string
|
|
}) => {
|
|
const { data: createdToolWorkspace, error } = await supabase
|
|
.from("tool_workspaces")
|
|
.insert([item])
|
|
.select("*")
|
|
.single()
|
|
|
|
if (error) {
|
|
throw new Error(error.message)
|
|
}
|
|
|
|
return createdToolWorkspace
|
|
}
|
|
|
|
export const createToolWorkspaces = async (
|
|
items: { user_id: string; tool_id: string; workspace_id: string }[]
|
|
) => {
|
|
const { data: createdToolWorkspaces, error } = await supabase
|
|
.from("tool_workspaces")
|
|
.insert(items)
|
|
.select("*")
|
|
|
|
if (error) throw new Error(error.message)
|
|
|
|
return createdToolWorkspaces
|
|
}
|
|
|
|
export const updateTool = async (
|
|
toolId: string,
|
|
tool: TablesUpdate<"tools">
|
|
) => {
|
|
const { data: updatedTool, error } = await supabase
|
|
.from("tools")
|
|
.update(tool)
|
|
.eq("id", toolId)
|
|
.select("*")
|
|
.single()
|
|
|
|
if (error) {
|
|
throw new Error(error.message)
|
|
}
|
|
|
|
return updatedTool
|
|
}
|
|
|
|
export const deleteTool = async (toolId: string) => {
|
|
const { error } = await supabase.from("tools").delete().eq("id", toolId)
|
|
|
|
if (error) {
|
|
throw new Error(error.message)
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
export const deleteToolWorkspace = async (
|
|
toolId: string,
|
|
workspaceId: string
|
|
) => {
|
|
const { error } = await supabase
|
|
.from("tool_workspaces")
|
|
.delete()
|
|
.eq("tool_id", toolId)
|
|
.eq("workspace_id", workspaceId)
|
|
|
|
if (error) throw new Error(error.message)
|
|
|
|
return true
|
|
}
|