refactor(todo): 移除 Todo API 示例

This commit is contained in:
2026-05-11 20:51:34 +08:00
parent 334e387765
commit e722913468
3 changed files with 0 additions and 93 deletions
@@ -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)
})
})
-34
View File
@@ -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())
-39
View File
@@ -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')
}
})