Files
DentalManagement09/apps/Backend/src/routes/procedure-timeslot.ts
T
GiteadandClaude Sonnet 4.6 ceb95f1915 feat: add Procedure Duration/Time Slot settings and custom appointment type
- Add Settings > Advanced > Procedure Duration/Time Slot page with three sections:
  1. Procedure Duration: CDT codes with durations (editable table, save per section)
  2. Doctor Time Slot: drag-to-block visual grid (A/B/C columns, 8 AM–9 PM, edit/delete slots)
  3. Hygienist Time Slot: procedure descriptions with durations
- Backend: ProcedureTimeslot Prisma model, storage, and GET/PUT /api/procedure-timeslot route
- DB migration: procedure_timeslot table
- Appointment form: when type is "Other", show a free-text input for custom description; saved as other:<description> and decoded for display on the schedule card

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 23:08:34 -04:00

38 lines
1.2 KiB
TypeScript

import express, { Request, Response } from "express";
import { storage } from "../storage";
const router = express.Router();
// GET /api/procedure-timeslot
router.get("/", async (req: Request, res: Response): Promise<any> => {
try {
const userId = req.user?.id;
if (!userId) return res.status(401).json({ message: "Unauthorized" });
const record = await storage.getProcedureTimeslot(userId);
return res.status(200).json(record ?? null);
} catch (err) {
return res.status(500).json({ error: "Failed to fetch procedure timeslot", details: String(err) });
}
});
// PUT /api/procedure-timeslot
router.put("/", async (req: Request, res: Response): Promise<any> => {
try {
const userId = req.user?.id;
if (!userId) return res.status(401).json({ message: "Unauthorized" });
const { data } = req.body;
if (!data || typeof data !== "object") {
return res.status(400).json({ error: "Invalid data payload" });
}
const record = await storage.upsertProcedureTimeslot(userId, data);
return res.status(200).json(record);
} catch (err) {
return res.status(500).json({ error: "Failed to save procedure timeslot", details: String(err) });
}
});
export default router;