feat(backend): lessons CRUD service and routes
This commit is contained in:
@@ -1,28 +1,23 @@
|
||||
import express, { type Express, type NextFunction, type Request, type Response } from 'express';
|
||||
import { ZodError } from 'zod';
|
||||
import type { Db } from './db/client.js';
|
||||
import { ApiError } from './lib/errors.js';
|
||||
import { lessonsRouter } from './routes/lessons.js';
|
||||
|
||||
export function createApp(): Express {
|
||||
export function createApp(db: Db): Express {
|
||||
const app = express();
|
||||
app.use(express.json({ limit: '5mb' }));
|
||||
|
||||
app.get('/api/health', (_req, res) => {
|
||||
res.json({ ok: true });
|
||||
});
|
||||
|
||||
// Routes mounted in later tasks.
|
||||
app.get('/api/health', (_req, res) => res.json({ ok: true }));
|
||||
app.use('/api/lessons', lessonsRouter(db));
|
||||
|
||||
app.use((err: unknown, _req: Request, res: Response, _next: NextFunction) => {
|
||||
if (err instanceof ZodError) {
|
||||
res.status(400).json({
|
||||
error: { code: 'VALIDATION_ERROR', message: 'Invalid input', details: err.flatten() },
|
||||
});
|
||||
res.status(400).json({ error: { code: 'VALIDATION_ERROR', message: 'Invalid input', details: err.flatten() } });
|
||||
return;
|
||||
}
|
||||
if (err instanceof ApiError) {
|
||||
res.status(err.status).json({
|
||||
error: { code: err.code, message: err.message, details: err.details },
|
||||
});
|
||||
res.status(err.status).json({ error: { code: err.code, message: err.message, details: err.details } });
|
||||
return;
|
||||
}
|
||||
console.error(err);
|
||||
|
||||
Reference in New Issue
Block a user