feat: use gpt to create project, readme

This commit is contained in:
2025-09-30 15:39:32 +08:00
parent e23d5e829f
commit 99a97139df
50 changed files with 7476 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
import type { Request, Response } from 'express';
import {
createVisit,
deleteVisit,
getVisit,
listVisits,
updateVisit
} from './visit.service';
import { visitInputSchema, visitUpdateSchema } from './visit.types';
import { toVisitDto } from './visit.mapper';
export async function listVisitsHandler(_req: Request, res: Response) {
const visits = await listVisits();
res.json(visits.map(toVisitDto));
}
export async function createVisitHandler(req: Request, res: Response) {
const parsed = visitInputSchema.safeParse(req.body);
if (!parsed.success) {
return res.status(400).json({ errors: parsed.error.flatten() });
}
const visit = await createVisit(parsed.data);
res.status(201).json(toVisitDto(visit));
}
export async function getVisitHandler(req: Request, res: Response) {
const visit = await getVisit(req.params.id);
if (!visit) {
return res.status(404).json({ message: 'Visit not found' });
}
res.json(toVisitDto(visit));
}
export async function updateVisitHandler(req: Request, res: Response) {
const parsed = visitUpdateSchema.safeParse(req.body);
if (!parsed.success) {
return res.status(400).json({ errors: parsed.error.flatten() });
}
const visit = await updateVisit(req.params.id, parsed.data);
if (!visit) {
return res.status(404).json({ message: 'Visit not found' });
}
res.json(toVisitDto(visit));
}
export async function deleteVisitHandler(req: Request, res: Response) {
await deleteVisit(req.params.id);
res.status(204).send();
}