feat: add CRUD routes for teaching design books
This commit is contained in:
62
server/routes/books.ts
Normal file
62
server/routes/books.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
import type { Database } from 'bun:sqlite'
|
||||
import { Hono } from 'hono'
|
||||
import type { TeachingBook } from '../../src/domain/teachingDesign'
|
||||
import { createBook, deleteBook, getBook, listBooks, renameBook, saveBookData } from '../db'
|
||||
|
||||
export function createBooksRouter(db: Database): Hono {
|
||||
const app = new Hono()
|
||||
|
||||
app.get('/', (c) => {
|
||||
return c.json(listBooks(db))
|
||||
})
|
||||
|
||||
app.post('/', async (c) => {
|
||||
const body = (await c.req.json().catch(() => null)) as { name?: unknown } | null
|
||||
const name = body?.name
|
||||
|
||||
if (typeof name !== 'string' || name.trim() === '') {
|
||||
return c.json({ error: '请提供整本名称。' }, 400)
|
||||
}
|
||||
|
||||
return c.json(createBook(db, name.trim()))
|
||||
})
|
||||
|
||||
app.get('/:id', (c) => {
|
||||
const book = getBook(db, c.req.param('id'))
|
||||
if (!book) return c.json({ error: '整本不存在。' }, 404)
|
||||
return c.json(book)
|
||||
})
|
||||
|
||||
app.put('/:id', async (c) => {
|
||||
const body = (await c.req.json().catch(() => null)) as { data?: TeachingBook } | null
|
||||
if (!body?.data) {
|
||||
return c.json({ error: '请提供整本数据。' }, 400)
|
||||
}
|
||||
|
||||
const result = saveBookData(db, c.req.param('id'), body.data)
|
||||
if (!result) return c.json({ error: '整本不存在。' }, 404)
|
||||
return c.json(result)
|
||||
})
|
||||
|
||||
app.patch('/:id', async (c) => {
|
||||
const body = (await c.req.json().catch(() => null)) as { name?: unknown } | null
|
||||
const name = body?.name
|
||||
|
||||
if (typeof name !== 'string' || name.trim() === '') {
|
||||
return c.json({ error: '请提供整本名称。' }, 400)
|
||||
}
|
||||
|
||||
const result = renameBook(db, c.req.param('id'), name.trim())
|
||||
if (!result) return c.json({ error: '整本不存在。' }, 404)
|
||||
return c.json(result)
|
||||
})
|
||||
|
||||
app.delete('/:id', (c) => {
|
||||
if (!deleteBook(db, c.req.param('id'))) {
|
||||
return c.json({ error: '整本不存在。' }, 404)
|
||||
}
|
||||
return c.json({ ok: true })
|
||||
})
|
||||
|
||||
return app
|
||||
}
|
||||
Reference in New Issue
Block a user