mirror of
https://github.com/cheveguerra/whaticket-community.git
synced 2026-04-20 12:49:32 +00:00
feat: finished queues crud services
This commit is contained in:
@@ -32,11 +32,7 @@ app.use(Sentry.Handlers.errorHandler());
|
|||||||
|
|
||||||
app.use(async (err: Error, req: Request, res: Response, _: NextFunction) => {
|
app.use(async (err: Error, req: Request, res: Response, _: NextFunction) => {
|
||||||
if (err instanceof AppError) {
|
if (err instanceof AppError) {
|
||||||
if (err.statusCode === 403) {
|
logger.warn(err);
|
||||||
logger.warn(err);
|
|
||||||
} else {
|
|
||||||
logger.error(err);
|
|
||||||
}
|
|
||||||
return res.status(err.statusCode).json({ error: err.message });
|
return res.status(err.statusCode).json({ error: err.message });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
import { Request, Response } from "express";
|
import { Request, Response } from "express";
|
||||||
import Queue from "../models/Queue";
|
import CreateQueueService from "../services/QueueService/CreateQueueService";
|
||||||
|
import DeleteQueueService from "../services/QueueService/DeleteQueueService";
|
||||||
// import { getIO } from "../libs/socket";
|
import ListQueuesService from "../services/QueueService/ListQueuesService";
|
||||||
// import AppError from "../errors/AppError";
|
import ShowQueueService from "../services/QueueService/ShowQueueService";
|
||||||
|
import UpdateQueueService from "../services/QueueService/UpdateQueueService";
|
||||||
|
|
||||||
export const index = async (req: Request, res: Response): Promise<Response> => {
|
export const index = async (req: Request, res: Response): Promise<Response> => {
|
||||||
const queues = await Queue.findAll();
|
const queues = await ListQueuesService();
|
||||||
|
|
||||||
return res.status(200).json(queues);
|
return res.status(200).json(queues);
|
||||||
};
|
};
|
||||||
@@ -13,7 +14,37 @@ export const index = async (req: Request, res: Response): Promise<Response> => {
|
|||||||
export const store = async (req: Request, res: Response): Promise<Response> => {
|
export const store = async (req: Request, res: Response): Promise<Response> => {
|
||||||
const { name, color, greetingMessage } = req.body;
|
const { name, color, greetingMessage } = req.body;
|
||||||
|
|
||||||
const queue = await Queue.create({ name, color, greetingMessage });
|
const queue = await CreateQueueService({ name, color, greetingMessage });
|
||||||
|
|
||||||
return res.status(200).json(queue);
|
return res.status(200).json(queue);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const show = async (req: Request, res: Response): Promise<Response> => {
|
||||||
|
const { queueId } = req.params;
|
||||||
|
|
||||||
|
const queue = await ShowQueueService(queueId);
|
||||||
|
|
||||||
|
return res.status(200).json(queue);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const update = async (
|
||||||
|
req: Request,
|
||||||
|
res: Response
|
||||||
|
): Promise<Response> => {
|
||||||
|
const { queueId } = req.params;
|
||||||
|
|
||||||
|
const queue = await UpdateQueueService(queueId, req.body);
|
||||||
|
|
||||||
|
return res.status(201).json(queue);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const remove = async (
|
||||||
|
req: Request,
|
||||||
|
res: Response
|
||||||
|
): Promise<Response> => {
|
||||||
|
const { queueId } = req.params;
|
||||||
|
|
||||||
|
await DeleteQueueService(queueId);
|
||||||
|
|
||||||
|
return res.status(200).send();
|
||||||
|
};
|
||||||
|
|||||||
@@ -9,4 +9,10 @@ queueRoutes.get("/queue", isAuth, QueueController.index);
|
|||||||
|
|
||||||
queueRoutes.post("/queue", isAuth, QueueController.store);
|
queueRoutes.post("/queue", isAuth, QueueController.store);
|
||||||
|
|
||||||
|
queueRoutes.get("/queue/:queueId", isAuth, QueueController.show);
|
||||||
|
|
||||||
|
queueRoutes.put("/queue/:queueId", isAuth, QueueController.update);
|
||||||
|
|
||||||
|
queueRoutes.delete("/queue/:queueId", isAuth, QueueController.remove);
|
||||||
|
|
||||||
export default queueRoutes;
|
export default queueRoutes;
|
||||||
|
|||||||
67
backend/src/services/QueueService/CreateQueueService.ts
Normal file
67
backend/src/services/QueueService/CreateQueueService.ts
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
import * as Yup from "yup";
|
||||||
|
import AppError from "../../errors/AppError";
|
||||||
|
import Queue from "../../models/Queue";
|
||||||
|
|
||||||
|
interface QueueData {
|
||||||
|
name: string;
|
||||||
|
color: string;
|
||||||
|
greetingMessage?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const CreateQueueService = async (queueData: QueueData): Promise<Queue> => {
|
||||||
|
const { color, name } = queueData;
|
||||||
|
|
||||||
|
const queueSchema = Yup.object().shape({
|
||||||
|
name: Yup.string()
|
||||||
|
.min(2, "ERR_QUEUE_INVALID_NAME")
|
||||||
|
.required("ERR_QUEUE_INVALID_NAME")
|
||||||
|
.test(
|
||||||
|
"Check-unique-name",
|
||||||
|
"ERR_QUEUE_NAME_ALREADY_EXISTS",
|
||||||
|
async value => {
|
||||||
|
if (value) {
|
||||||
|
const queueWithSameName = await Queue.findOne({
|
||||||
|
where: { name: value }
|
||||||
|
});
|
||||||
|
|
||||||
|
return !queueWithSameName;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
),
|
||||||
|
color: Yup.string()
|
||||||
|
.required("ERR_QUEUE_INVALID_COLOR")
|
||||||
|
.test("Check-color", "ERR_QUEUE_INVALID_COLOR", async value => {
|
||||||
|
if (value) {
|
||||||
|
const colorTestRegex = /^#[0-9a-f]{3,6}$/i;
|
||||||
|
return colorTestRegex.test(value);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
.test(
|
||||||
|
"Check-color-exists",
|
||||||
|
"ERR_QUEUE_COLOR_ALREADY_EXISTS",
|
||||||
|
async value => {
|
||||||
|
if (value) {
|
||||||
|
const queueWithSameColor = await Queue.findOne({
|
||||||
|
where: { color: value }
|
||||||
|
});
|
||||||
|
return !queueWithSameColor;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
await queueSchema.validate({ color, name });
|
||||||
|
} catch (err) {
|
||||||
|
throw new AppError(err.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
const queue = await Queue.create(queueData);
|
||||||
|
|
||||||
|
return queue;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default CreateQueueService;
|
||||||
9
backend/src/services/QueueService/DeleteQueueService.ts
Normal file
9
backend/src/services/QueueService/DeleteQueueService.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import ShowQueueService from "./ShowQueueService";
|
||||||
|
|
||||||
|
const DeleteQueueService = async (queueId: number | string): Promise<void> => {
|
||||||
|
const queue = await ShowQueueService(queueId);
|
||||||
|
|
||||||
|
await queue.destroy();
|
||||||
|
};
|
||||||
|
|
||||||
|
export default DeleteQueueService;
|
||||||
9
backend/src/services/QueueService/ListQueuesService.ts
Normal file
9
backend/src/services/QueueService/ListQueuesService.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import Queue from "../../models/Queue";
|
||||||
|
|
||||||
|
const ListQueuesService = async (): Promise<Queue[]> => {
|
||||||
|
const queues = await Queue.findAll();
|
||||||
|
|
||||||
|
return queues;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ListQueuesService;
|
||||||
14
backend/src/services/QueueService/ShowQueueService.ts
Normal file
14
backend/src/services/QueueService/ShowQueueService.ts
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import AppError from "../../errors/AppError";
|
||||||
|
import Queue from "../../models/Queue";
|
||||||
|
|
||||||
|
const ShowQueueService = async (queueId: number | string): Promise<Queue> => {
|
||||||
|
const queue = await Queue.findByPk(queueId);
|
||||||
|
|
||||||
|
if (!queue) {
|
||||||
|
throw new AppError("ERR_QUEUE_NOT_FOUND");
|
||||||
|
}
|
||||||
|
|
||||||
|
return queue;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ShowQueueService;
|
||||||
73
backend/src/services/QueueService/UpdateQueueService.ts
Normal file
73
backend/src/services/QueueService/UpdateQueueService.ts
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
import { Op } from "sequelize";
|
||||||
|
import * as Yup from "yup";
|
||||||
|
import AppError from "../../errors/AppError";
|
||||||
|
import Queue from "../../models/Queue";
|
||||||
|
import ShowQueueService from "./ShowQueueService";
|
||||||
|
|
||||||
|
interface QueueData {
|
||||||
|
name?: string;
|
||||||
|
color?: string;
|
||||||
|
greetingMessage?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const UpdateQueueService = async (
|
||||||
|
queueId: number | string,
|
||||||
|
queueData: QueueData
|
||||||
|
): Promise<Queue> => {
|
||||||
|
const { color, name } = queueData;
|
||||||
|
|
||||||
|
const queueSchema = Yup.object().shape({
|
||||||
|
name: Yup.string()
|
||||||
|
.min(2, "ERR_QUEUE_INVALID_NAME")
|
||||||
|
.test(
|
||||||
|
"Check-unique-name",
|
||||||
|
"ERR_QUEUE_NAME_ALREADY_EXISTS",
|
||||||
|
async value => {
|
||||||
|
if (value) {
|
||||||
|
const queueWithSameName = await Queue.findOne({
|
||||||
|
where: { name: value, id: { [Op.not]: queueId } }
|
||||||
|
});
|
||||||
|
|
||||||
|
return !queueWithSameName;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
),
|
||||||
|
color: Yup.string()
|
||||||
|
.required("ERR_QUEUE_INVALID_COLOR")
|
||||||
|
.test("Check-color", "ERR_QUEUE_INVALID_COLOR", async value => {
|
||||||
|
if (value) {
|
||||||
|
const colorTestRegex = /^#[0-9a-f]{3,6}$/i;
|
||||||
|
return colorTestRegex.test(value);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
})
|
||||||
|
.test(
|
||||||
|
"Check-color-exists",
|
||||||
|
"ERR_QUEUE_COLOR_ALREADY_EXISTS",
|
||||||
|
async value => {
|
||||||
|
if (value) {
|
||||||
|
const queueWithSameColor = await Queue.findOne({
|
||||||
|
where: { color: value, id: { [Op.not]: queueId } }
|
||||||
|
});
|
||||||
|
return !queueWithSameColor;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
await queueSchema.validate({ color, name });
|
||||||
|
} catch (err) {
|
||||||
|
throw new AppError(err.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
const queue = await ShowQueueService(queueId);
|
||||||
|
|
||||||
|
await queue.update(queueData);
|
||||||
|
|
||||||
|
return queue;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default UpdateQueueService;
|
||||||
Reference in New Issue
Block a user