import { ORPCError } from '@orpc/server' import { eq } from 'drizzle-orm' import { os } from '@/server/api/server' import { db } from '@/server/db' import { todoTable } from '@/server/db/schema' export const list = os.todo.list.handler(async () => { return db.query.todoTable.findMany({ orderBy: (table, { desc }) => desc(table.createdAt), }) }) export const create = os.todo.create.handler(async ({ input }) => { const [newTodo] = await db.insert(todoTable).values(input).returning() if (!newTodo) { throw new ORPCError('INTERNAL_SERVER_ERROR', { message: 'Failed to create todo' }) } return newTodo }) export const update = os.todo.update.handler(async ({ input }) => { const [updatedTodo] = await db.update(todoTable).set(input.data).where(eq(todoTable.id, input.id)).returning() if (!updatedTodo) { throw new ORPCError('NOT_FOUND') } return updatedTodo }) export const remove = os.todo.remove.handler(async ({ input }) => { const [deleted] = await db.delete(todoTable).where(eq(todoTable.id, input.id)).returning({ id: todoTable.id }) if (!deleted) { throw new ORPCError('NOT_FOUND') } })