import { eq, sql } from "drizzle-orm"; import { Router } from "express"; import z from "zod"; import { db } from "../db/db.controller.js"; import { dockDoorScans } from "../db/schema/dockdoor.scans.schema.js"; import { dockDoorScanners } from "../db/schema/dockdoor.schema.js"; import { runProdApi } from "../utils/prodEndpoint.utils.js"; import { apiReturn } from "../utils/returnHelper.utils.js"; import { tryCatch } from "../utils/trycatch.utils.js"; const r = Router(); const endLoading = z.object({ loadingOrder: z.string(), dockId: z.string(), }); r.post("/", async (req, res) => { // TODO: setup the emitter to just emit the data when we post to the db try { const validated = endLoading.parse(req.body); const orders = (await runProdApi({ method: "post", endpoint: `/public/v1.0/OutboundDeliveries/LoadingOrders/${req.body.loadingOrder}/Finish`, data: [ { printDeliveryDocuments: true, }, ], })) as any; if (orders?.data.errors) { console.log(orders.data.errors); return apiReturn(res, { success: false, level: "error", module: "dockdoor", subModule: "loadingOrder", message: `Failed to finish the order.`, data: (orders.data.errors as any) ?? [], status: 400, }); } await tryCatch( db .update(dockDoorScans) .set({ upd_date: sql`NOW()`, upd_user: req.user?.username ?? "lst-dock-system", }) .where(eq(dockDoorScanners.currentLoadingOrder, validated.loadingOrder)) .returning(), ); const { data, error } = await tryCatch( db .update(dockDoorScanners) .set({ currentLoadingOrder: "", upd_date: sql`NOW()`, upd_user: req.user?.username ?? "lst-dock-system", }) .where(eq(dockDoorScanners.dockId, validated.dockId)) .returning(), ); if (error) { return apiReturn(res, { success: false, level: "error", module: "dockdoor", subModule: "loadingOrder", message: `Failed to updating the dock.`, data: (error as any) ?? [], status: 400, }); } return apiReturn(res, { success: orders.data.errors ? false : true, level: orders.data.errors ? "error" : "info", module: "dockdoor", subModule: "loadingOrder", message: orders.data.errors ? `Loading order was cleared but encountered an error: \n${orders.data.errors[0].message} \nPossible reason for this is the loading order was completed via scanner or other means.` : `Loading order ${validated.loadingOrder} was just closed.`, data: data ?? [], status: orders.data.errors ? 400 : 200, }); } catch (error) { return apiReturn(res, { success: false, level: "error", module: "dockdoor", subModule: "loadingOrder", message: `Failed to Close loading order.`, data: (error as any) ?? [], status: 400, }); } }); export default r;