import express, { Request, Response } from "express"; import { storage } from "../storage"; const router = express.Router(); router.get("/templates", async (req: Request, res: Response): Promise => { try { const userId = req.user?.id; if (!userId) return res.status(401).json({ message: "Unauthorized" }); const templates = await storage.getLabRxTemplates(userId); return res.json(templates); } catch (err) { return res.status(500).json({ error: "Failed to fetch lab RX templates", details: String(err) }); } }); router.post("/templates", async (req: Request, res: Response): Promise => { try { const userId = req.user?.id; if (!userId) return res.status(401).json({ message: "Unauthorized" }); const { name, labName, labPhone, labFax, labAddress, labAccount, caseType, material, instructions } = req.body; if (!name?.trim()) return res.status(400).json({ message: "Template name is required" }); const template = await storage.createLabRxTemplate(userId, { name: name.trim(), labName: labName?.trim() || undefined, labPhone: labPhone?.trim() || undefined, labFax: labFax?.trim() || undefined, labAddress: labAddress?.trim() || undefined, labAccount: labAccount?.trim() || undefined, caseType: caseType?.trim() || undefined, material: material?.trim() || undefined, instructions: instructions?.trim() || undefined, }); return res.status(201).json(template); } catch (err) { return res.status(500).json({ error: "Failed to create lab RX template", details: String(err) }); } }); router.put("/templates/:id", async (req: Request, res: Response): Promise => { try { const userId = req.user?.id; if (!userId) return res.status(401).json({ message: "Unauthorized" }); const id = Number(req.params.id); if (isNaN(id)) return res.status(400).json({ message: "Invalid ID" }); const { name, labName, labPhone, labFax, labAddress, labAccount, caseType, material, instructions } = req.body; if (name !== undefined && !name?.trim()) return res.status(400).json({ message: "Name cannot be empty" }); const template = await storage.updateLabRxTemplate(userId, id, { name: name?.trim(), labName: labName?.trim() || undefined, labPhone: labPhone?.trim() || undefined, labFax: labFax?.trim() || undefined, labAddress: labAddress?.trim() || undefined, labAccount: labAccount?.trim() || undefined, caseType: caseType?.trim() || undefined, material: material?.trim() || undefined, instructions: instructions?.trim() || undefined, }); return res.json(template); } catch (err) { return res.status(500).json({ error: "Failed to update lab RX template", details: String(err) }); } }); router.post("/templates/reorder", async (req: Request, res: Response): Promise => { try { const userId = req.user?.id; if (!userId) return res.status(401).json({ message: "Unauthorized" }); const { orderedIds } = req.body; if (!Array.isArray(orderedIds)) return res.status(400).json({ message: "orderedIds must be an array" }); await storage.reorderLabRxTemplates(userId, orderedIds); return res.status(204).send(); } catch (err) { return res.status(500).json({ error: "Failed to reorder templates", details: String(err) }); } }); router.delete("/templates/:id", async (req: Request, res: Response): Promise => { try { const userId = req.user?.id; if (!userId) return res.status(401).json({ message: "Unauthorized" }); const id = Number(req.params.id); if (isNaN(id)) return res.status(400).json({ message: "Invalid ID" }); const ok = await storage.deleteLabRxTemplate(userId, id); if (!ok) return res.status(404).json({ message: "Template not found" }); return res.status(204).send(); } catch (err) { return res.status(500).json({ error: "Failed to delete lab RX template", details: String(err) }); } }); export default router;