import { eq } from "drizzle-orm"; import { type Response, Router } from "express"; import z from "zod"; import { db } from "../db/db.controller.js"; import { notifications } from "../db/schema/notifications.schema.js"; import { requirePermission } from "../middleware/auth.requiredPerms.middleware.js"; import { apiReturn } from "../utils/returnHelper.utils.js"; import { tryCatch } from "../utils/trycatch.utils.js"; import { modifiedNotification } from "./notification.controller.js"; const r = Router(); const updateNote = z.object({ description: z.string().optional(), active: z.boolean().optional(), interval: z.string().optional(), options: z.array(z.record(z.string(), z.unknown())).optional(), }); r.patch( "/:id", requirePermission({ notifications: ["update"] }), async (req, res: Response) => { const { id } = req.params; try { const validated = updateNote.parse(req.body); const { data: nName, error: nError } = await tryCatch( db .update(notifications) .set(validated) .where(eq(notifications.id, id as string)) .returning(), ); await modifiedNotification(id as string); if (nError) { return apiReturn(res, { success: false, level: "error", module: "notification", subModule: "update", message: `There was an error getting the notifications `, data: [nError], status: 400, }); } return apiReturn(res, { success: true, level: "info", module: "notification", subModule: "update", message: `Notification was updated`, data: nName ?? [], status: 200, }); } catch (err) { if (err instanceof z.ZodError) { const flattened = z.flattenError(err); // return res.status(400).json({ // error: "Validation failed", // details: flattened, // }); return apiReturn(res, { success: false, level: "error", //connect.success ? "info" : "error", module: "routes", subModule: "notification", message: "Validation failed", data: [flattened.fieldErrors], status: 400, //connect.success ? 200 : 400, }); } } }, ); export default r;