Spaces:
Runtime error
Runtime error
| import { Router } from "express"; | |
| import { db, timeEntriesTable } from "@workspace/db"; | |
| import { eq, and } from "drizzle-orm"; | |
| import { | |
| CreateTimeEntryBody, | |
| ListTimeEntriesQueryParams, | |
| DeleteTimeEntryParams, | |
| } from "@workspace/api-zod"; | |
| const router = Router(); | |
| router.get("/time-entries", async (req, res) => { | |
| const query = ListTimeEntriesQueryParams.safeParse(req.query); | |
| if (!query.success) { | |
| res.status(400).json({ error: query.error.message }); | |
| return; | |
| } | |
| const { projectId } = query.data; | |
| const entries = await db | |
| .select() | |
| .from(timeEntriesTable) | |
| .where(and(eq(timeEntriesTable.userId, req.user!.id), projectId !== undefined ? eq(timeEntriesTable.projectId, projectId) : undefined)) | |
| .orderBy(timeEntriesTable.createdAt); | |
| res.json(entries); | |
| }); | |
| router.post("/time-entries", async (req, res) => { | |
| const body = CreateTimeEntryBody.safeParse(req.body); | |
| if (!body.success) { | |
| res.status(400).json({ error: body.error.message }); | |
| return; | |
| } | |
| const [entry] = await db.insert(timeEntriesTable).values({ ...body.data, userId: req.user!.id }).returning(); | |
| res.status(201).json(entry); | |
| }); | |
| router.delete("/time-entries/:id", async (req, res) => { | |
| const params = DeleteTimeEntryParams.safeParse({ id: Number(req.params.id) }); | |
| if (!params.success) { | |
| res.status(400).json({ error: params.error.message }); | |
| return; | |
| } | |
| await db.delete(timeEntriesTable).where(and(eq(timeEntriesTable.id, params.data.id), eq(timeEntriesTable.userId, req.user!.id))); | |
| res.status(204).send(); | |
| }); | |
| export default router; | |