diff --git a/backend/src/controllers/WhatsAppController.ts b/backend/src/controllers/WhatsAppController.ts index dc1f9ef..bc7627c 100644 --- a/backend/src/controllers/WhatsAppController.ts +++ b/backend/src/controllers/WhatsAppController.ts @@ -1,5 +1,10 @@ import { Request, Response } from "express"; + import CreateWhatsAppService from "../services/WhatsappService/CreateWhatsAppService"; +import DeleteWhatsApprService from "../services/WhatsappService/DeleteWhatsApprService"; +import ListWhatsAppsService from "../services/WhatsappService/ListWhatsAppsService"; +import ShowWhatsAppService from "../services/WhatsappService/ShowWhatsAppService"; +import UpdateWhatsAppService from "../services/WhatsappService/UpdateWhatsAppService"; // import Yup from "yup"; // import Whatsapp from "../models/Whatsapp"; // import { getIO } from "../libs/socket"; @@ -7,8 +12,6 @@ import CreateWhatsAppService from "../services/WhatsappService/CreateWhatsAppSer // import wbotMessageListener from "../services/wbotMessageListener"; // import wbotMonitor from "../services/wbotMonitor"; -import ListWhatsAppsService from "../services/WhatsappService/ListWhatsAppsService"; - export const index = async (req: Request, res: Response): Promise => { const whatsapps = await ListWhatsAppsService(); @@ -47,89 +50,54 @@ export const store = async (req: Request, res: Response): Promise => { return res.status(200).json(whatsapp); }; -// export const show = async (req: Request, res: Response): Promise => { -// const { whatsappId } = req.params; -// const whatsapp = await Whatsapp.findByPk(whatsappId); +export const show = async (req: Request, res: Response): Promise => { + const { whatsappId } = req.params; -// if (!whatsapp) { -// return res.status(200).json({ message: "Session not found" }); -// } + const whatsapp = await ShowWhatsAppService(whatsappId); -// return res.status(200).json(whatsapp); -// }; + return res.status(200).json(whatsapp); +}; -// export const update = async ( -// req: Request, -// res: Response -// ): Promise => { -// const { whatsappId } = req.params; +export const update = async ( + req: Request, + res: Response +): Promise => { + const { whatsappId } = req.params; + const whatsappData = req.body; -// const schema = Yup.object().shape({ -// name: Yup.string().required().min(2), -// default: Yup.boolean() -// .required() -// .test( -// "Check-default", -// "Only one default whatsapp is permited", -// async value => { -// if (value === true) { -// const whatsappFound = await Whatsapp.findOne({ -// where: { default: true } -// }); -// if (whatsappFound) { -// return !(whatsappFound.id !== +whatsappId); -// } else { -// return true; -// } -// } else return true; -// } -// ) -// }); + const whatsapp = await UpdateWhatsAppService({ whatsappData, whatsappId }); + // const io = getIO(); -// try { -// await schema.validate(req.body); -// } catch (err) { -// return res.status(400).json({ error: err.message }); -// } + // const whatsapp = await Whatsapp.findByPk(whatsappId); -// const io = getIO(); + // if (!whatsapp) { + // return res.status(404).json({ message: "Whatsapp not found" }); + // } -// const whatsapp = await Whatsapp.findByPk(whatsappId); + // await whatsapp.update(req.body); -// if (!whatsapp) { -// return res.status(404).json({ message: "Whatsapp not found" }); -// } + // io.emit("whatsapp", { + // action: "update", + // whatsapp: whatsapp + // }); -// await whatsapp.update(req.body); + return res.status(200).json(whatsapp); +}; -// io.emit("whatsapp", { -// action: "update", -// whatsapp: whatsapp -// }); +export const remove = async ( + req: Request, + res: Response +): Promise => { + // const io = getIO(); + const { whatsappId } = req.params; -// return res.status(200).json({ message: "Whatsapp updated" }); -// }; + await DeleteWhatsApprService(whatsappId); + // removeWbot(whatsapp.id); -// export const remove = async ( -// req: Request, -// res: Response -// ): Promise => { -// const io = getIO(); -// const { whatsappId } = req.params; + // io.emit("whatsapp", { + // action: "delete", + // whatsappId: whatsapp.id + // }); -// const whatsapp = await Whatsapp.findByPk(whatsappId); - -// if (!whatsapp) { -// return res.status(404).json({ message: "Whatsapp not found" }); -// } - -// await whatsapp.destroy(); -// removeWbot(whatsapp.id); - -// io.emit("whatsapp", { -// action: "delete", -// whatsappId: whatsapp.id -// }); - -// return res.status(200).json({ message: "Whatsapp deleted." }); -// }; + return res.status(200).json({ message: "Whatsapp deleted." }); +}; diff --git a/backend/src/routes/whatsappRoutes.ts b/backend/src/routes/whatsappRoutes.ts index de7fa28..dc187a7 100644 --- a/backend/src/routes/whatsappRoutes.ts +++ b/backend/src/routes/whatsappRoutes.ts @@ -9,14 +9,14 @@ whatsappRoutes.get("/whatsapp/", isAuth, WhatsAppController.index); whatsappRoutes.post("/whatsapp/", isAuth, WhatsAppController.store); -// whatsappRoutes.get("/whatsapp/:whatsappId", isAuth, WhatsAppController.show); +whatsappRoutes.get("/whatsapp/:whatsappId", isAuth, WhatsAppController.show); -// whatsappRoutes.put("/whatsapp/:whatsappId", isAuth, WhatsAppController.update); +whatsappRoutes.put("/whatsapp/:whatsappId", isAuth, WhatsAppController.update); -// whatsappRoutes.remove( -// "/whatsapp/:whatsappId", -// isAuth, -// WhatsAppController.delete -// ); +whatsappRoutes.delete( + "/whatsapp/:whatsappId", + isAuth, + WhatsAppController.remove +); export default whatsappRoutes; diff --git a/backend/src/services/WhatsappService/DeleteWhatsApprService.ts b/backend/src/services/WhatsappService/DeleteWhatsApprService.ts new file mode 100644 index 0000000..4f597c3 --- /dev/null +++ b/backend/src/services/WhatsappService/DeleteWhatsApprService.ts @@ -0,0 +1,16 @@ +import Whatsapp from "../../models/Whatsapp"; +import AppError from "../../errors/AppError"; + +const DeleteWhatsApprService = async (id: string): Promise => { + const whatsapp = await Whatsapp.findOne({ + where: { id } + }); + + if (!whatsapp) { + throw new AppError("No whatsapp found with this ID.", 404); + } + + await whatsapp.destroy(); +}; + +export default DeleteWhatsApprService; diff --git a/backend/src/services/WhatsappService/ShowWhatsAppService.ts b/backend/src/services/WhatsappService/ShowWhatsAppService.ts new file mode 100644 index 0000000..00050fb --- /dev/null +++ b/backend/src/services/WhatsappService/ShowWhatsAppService.ts @@ -0,0 +1,18 @@ +import Whatsapp from "../../models/Whatsapp"; +import AppError from "../../errors/AppError"; + +const ShowWhatsAppService = async ( + id: string +): Promise => { + const whatsapp = await Whatsapp.findOne({ + where: { id } + }); + + if (!whatsapp) { + throw new AppError("No whatsapp found with this ID.", 404); + } + + return whatsapp; +}; + +export default ShowWhatsAppService; diff --git a/backend/src/services/WhatsappService/UpdateWhatsAppService.ts b/backend/src/services/WhatsappService/UpdateWhatsAppService.ts new file mode 100644 index 0000000..d818e21 --- /dev/null +++ b/backend/src/services/WhatsappService/UpdateWhatsAppService.ts @@ -0,0 +1,66 @@ +import * as Yup from "yup"; + +import AppError from "../../errors/AppError"; +import Whatsapp from "../../models/Whatsapp"; + +interface WhatsappData { + name?: string; + status?: string; + isDefault?: boolean; +} + +interface Request { + whatsappData: WhatsappData; + whatsappId: string; +} + +const UpdateWhatsAppService = async ({ + whatsappData, + whatsappId +}: Request): Promise => { + const schema = Yup.object().shape({ + name: Yup.string().min(2), + default: Yup.boolean().test( + "Check-default", + "Only one default whatsapp is permited", + async value => { + if (value === true) { + const whatsappFound = await Whatsapp.findOne({ + where: { default: true } + }); + if (whatsappFound) { + return !(whatsappFound.id !== +whatsappId); + } + return true; + } + return true; + } + ) + }); + + const { name, status, isDefault } = whatsappData; + + try { + await schema.validate({ name, status, isDefault }); + } catch (err) { + throw new AppError(err.message); + } + + const whatsapp = await Whatsapp.findOne({ + where: { id: whatsappId } + }); + + if (!whatsapp) { + throw new AppError("No whatsapp found with this ID.", 404); + } + + await whatsapp.update({ + name, + status, + isDefault + }); + + return whatsapp; +}; + +export default UpdateWhatsAppService;