import { ORPCError } from '@orpc/server' import { eq } from 'drizzle-orm' import { dbProvider } from '@/api/middlewares' import { os } from '@/api/server' import { todoTable } from '@/db/schema' export const list = os.todo.list .use(dbProvider) .handler(async ({ context }) => { const todos = await context.db.query.todoTable.findMany({ orderBy: (todos, { desc }) => [desc(todos.createdAt)], }) return todos }) export const create = os.todo.create .use(dbProvider) .handler(async ({ context, input }) => { const [newTodo] = await context.db .insert(todoTable) .values(input) .returning() if (!newTodo) { throw new ORPCError('NOT_FOUND') } return newTodo }) export const update = os.todo.update .use(dbProvider) .handler(async ({ context, input }) => { const [updatedTodo] = await context.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 .use(dbProvider) .handler(async ({ context, input }) => { await context.db.delete(todoTable).where(eq(todoTable.id, input.id)) })