trash_system/backend/src/controllers/QueueController.ts

108 lines
3.1 KiB
TypeScript

import { Request, Response } from "express";
import { getIO } from "../libs/socket";
import CreateQueueService from "../services/QueueService/CreateQueueService";
import DeleteQueueService from "../services/QueueService/DeleteQueueService";
import ListQueuesService from "../services/QueueService/ListQueuesService";
import ShowQueueService from "../services/QueueService/ShowQueueService";
import UpdateQueueService from "../services/QueueService/UpdateQueueService";
import { isNil } from "lodash";
type QueueFilter = {
companyId: number;
};
export const index = async (req: Request, res: Response): Promise<Response> => {
const { companyId: userCompanyId } = req.user;
const { companyId: queryCompanyId } = req.query as unknown as QueueFilter;
let companyId = userCompanyId;
if (!isNil(queryCompanyId)) {
companyId = +queryCompanyId;
}
const queues = await ListQueuesService({ companyId });
return res.status(200).json(queues);
};
export const store = async (req: Request, res: Response): Promise<Response> => {
const { name, color, greetingMessage, outOfHoursMessage, schedules, orderQueue, integrationId, promptId } =
req.body;
const { companyId } = req.user;
console.log("queue", integrationId, promptId)
const queue = await CreateQueueService({
name,
color,
greetingMessage,
companyId,
outOfHoursMessage,
schedules,
orderQueue: orderQueue === "" ? null : orderQueue,
integrationId: integrationId === "" ? null : integrationId,
promptId: promptId === "" ? null : promptId
});
const io = getIO();
io.to(`company-${companyId}-mainchannel`).emit(`company-${companyId}-queue`, {
action: "update",
queue
});
return res.status(200).json(queue);
};
export const show = async (req: Request, res: Response): Promise<Response> => {
const { queueId } = req.params;
const { companyId } = req.user;
const queue = await ShowQueueService(queueId, companyId);
return res.status(200).json(queue);
};
export const update = async (
req: Request,
res: Response
): Promise<Response> => {
const { queueId } = req.params;
const { companyId } = req.user;
const { name, color, greetingMessage, outOfHoursMessage, schedules, orderQueue, integrationId, promptId } =
req.body;
const queue = await UpdateQueueService(queueId, {
name,
color,
greetingMessage,
outOfHoursMessage,
schedules,
orderQueue: orderQueue === "" ? null : orderQueue,
integrationId: integrationId === "" ? null : integrationId,
promptId: promptId === "" ? null : promptId
}, companyId);
const io = getIO();
io.to(`company-${companyId}-mainchannel`).emit(`company-${companyId}-queue`, {
action: "update",
queue
});
return res.status(201).json(queue);
};
export const remove = async (
req: Request,
res: Response
): Promise<Response> => {
const { queueId } = req.params;
const { companyId } = req.user;
await DeleteQueueService(queueId, companyId);
const io = getIO();
io.to(`company-${companyId}-mainchannel`).emit(`company-${companyId}-queue`, {
action: "delete",
queueId: +queueId
});
return res.status(200).send();
};