diff --git a/src/server/api/contracts/todo.contract.test.ts b/src/server/api/contracts/todo.contract.test.ts deleted file mode 100644 index 23a3f78..0000000 --- a/src/server/api/contracts/todo.contract.test.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { describe, expect, test } from 'bun:test' -import { createInsertSchema } from 'drizzle-zod' -import { generatedFieldKeys } from '@/server/db/fields' -import { todoTable } from '@/server/db/schema' - -describe('todo insert schema', () => { - const insertSchema = createInsertSchema(todoTable).omit(generatedFieldKeys) - - test('accepts a minimal valid input', () => { - expect(insertSchema.safeParse({ title: 'buy milk' }).success).toBe(true) - }) - - test('rejects missing title', () => { - expect(insertSchema.safeParse({}).success).toBe(false) - }) - - test('rejects non-string title', () => { - expect(insertSchema.safeParse({ title: 42 }).success).toBe(false) - }) -}) diff --git a/src/server/api/contracts/todo.contract.ts b/src/server/api/contracts/todo.contract.ts deleted file mode 100644 index df1f5fc..0000000 --- a/src/server/api/contracts/todo.contract.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { oc } from '@orpc/contract' -import { createInsertSchema, createSelectSchema, createUpdateSchema } from 'drizzle-zod' -import { z } from 'zod' -import { generatedFieldKeys } from '@/server/db/fields' -import { todoTable } from '@/server/db/schema' - -const selectSchema = createSelectSchema(todoTable) - -const insertSchema = createInsertSchema(todoTable).omit(generatedFieldKeys) - -const updateSchema = createUpdateSchema(todoTable) - .omit(generatedFieldKeys) - .refine((data) => Object.keys(data).length > 0, { message: 'At least one field is required' }) - -export const list = oc.input(z.void()).output(z.array(selectSchema)) - -export const create = oc.input(insertSchema).output(selectSchema) - -export const update = oc - .input( - z.object({ - id: z.uuid(), - data: updateSchema, - }), - ) - .output(selectSchema) - -export const remove = oc - .input( - z.object({ - id: z.uuid(), - }), - ) - .output(z.void()) diff --git a/src/server/api/routers/todo.router.ts b/src/server/api/routers/todo.router.ts deleted file mode 100644 index c8c7c33..0000000 --- a/src/server/api/routers/todo.router.ts +++ /dev/null @@ -1,39 +0,0 @@ -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') - } -})