import { SupabaseProjectStore } from "@imemio/sdk"; import { z } from "zod"; import { createClient } from "~/lib/supabase/server"; import { createTRPCRouter, protectedProcedure } from "~/server/api/trpc"; const globalProjectName = "global"; export const projectRouter = createTRPCRouter({ list: protectedProcedure.query(async ({ ctx: context }) => { const supabaseClient = await createClient(); const projectStore = new SupabaseProjectStore( supabaseClient, context.user.id, ); const result = await projectStore.list(); if (!result.success) { return []; } return result.value; }), create: protectedProcedure .input( z.object({ name: z.string().min(1), description: z.string().optional(), isGlobal: z.boolean().optional().default(false), }), ) .mutation(async ({ ctx: context, input }) => { const supabaseClient = await createClient(); const projectStore = new SupabaseProjectStore( supabaseClient, context.user.id, ); const result = await projectStore.create({ name: input.name, description: input.description, isGlobal: input.isGlobal, }); if (!result.success) { throw new Error("Failed to create project"); } return result.value; }), getOrCreateGlobal: protectedProcedure.query(async ({ ctx: context }) => { const supabaseClient = await createClient(); const projectStore = new SupabaseProjectStore( supabaseClient, context.user.id, ); const listResult = await projectStore.list(); if (listResult.success) { const existingGlobal = listResult.value.find( (project) => project.isGlobal, ); if (existingGlobal) { return existingGlobal; } } const createResult = await projectStore.create({ name: globalProjectName, isGlobal: true, }); if (!createResult.success) { throw new Error("Failed to create global project"); } return createResult.value; }), });