import type { CommittedMessage } from "../../types"; import { router, publicProcedure, createCallerFactory } from "./server"; export const conversations = router({ fetchAll: publicProcedure.query(async ({ ctx: { dbClient, jwt } }) => { const userId = jwt?.id as string | null; if (!userId) return []; const rows = await dbClient .selectFrom("conversations") .where("userId", "=", userId) .selectAll() .execute(); return rows; }), fetchOne: publicProcedure .input((x) => x as { id: string }) .query(async ({ input: { id }, ctx: { dbClient } }) => { const row = await dbClient .selectFrom("conversations") .selectAll() .where("id", "=", id) .execute(); return row[0]; }), start: publicProcedure.mutation(async ({ ctx: { dbClient, jwt } }) => { const row = { title: "New Conversation", userId: jwt?.id as string, }; const insertedRows = await dbClient .insertInto("conversations") .values(row) .returningAll() .execute(); return insertedRows[0]; }), deleteOne: publicProcedure .input((x) => x as { id: string }) .mutation(async ({ input: { id }, ctx: { dbClient } }) => { await dbClient.deleteFrom("conversations").where("id", "=", id).execute(); return { ok: true }; }), updateTitle: publicProcedure .input( (x) => x as { id: string; title: string; } ) .mutation(async ({ input: { id, title }, ctx: { dbClient } }) => { await dbClient .updateTable("conversations") .set({ title }) .where("id", "=", id) .execute(); return { ok: true }; }), fetchMessages: publicProcedure .input((x) => x as { conversationId: string }) .query(async ({ input: { conversationId }, ctx: { dbClient } }) => { const rows = await dbClient .selectFrom("messages") .selectAll() .where("conversationId", "=", conversationId) .execute(); return rows as Array; }), }); export const createCaller = createCallerFactory(conversations);