From 0ea4dbea51e06338d3a3867948eac4bf13c1a988 Mon Sep 17 00:00:00 2001 From: canove Date: Sat, 19 Sep 2020 09:40:24 -0300 Subject: [PATCH] all routes changed to typescript --- backend/src/controllers/TicketController.ts | 5 +- backend/src/controllers/WhatsAppController.ts | 136 +++++++++ .../src/controllersOld/TicketController.js | 270 +++++++++--------- .../src/controllersOld/WhatsAppController.js | 194 ++++++------- backend/src/routes/index.ts | 10 +- backend/src/routes/messageRoutes.ts | 12 + backend/src/routes/routes/messages.js | 12 - backend/src/routes/routes/whatsapp.js | 18 -- backend/src/routes/whatsappRoutes.ts | 22 ++ .../WhatsappService/CreateWhatsAppService.ts | 47 +++ .../WhatsappService/ListWhatsAppsService.ts | 13 + 11 files changed, 469 insertions(+), 270 deletions(-) create mode 100644 backend/src/controllers/WhatsAppController.ts create mode 100644 backend/src/routes/messageRoutes.ts delete mode 100644 backend/src/routes/routes/messages.js delete mode 100644 backend/src/routes/routes/whatsapp.js create mode 100644 backend/src/routes/whatsappRoutes.ts create mode 100644 backend/src/services/WhatsappService/CreateWhatsAppService.ts create mode 100644 backend/src/services/WhatsappService/ListWhatsAppsService.ts diff --git a/backend/src/controllers/TicketController.ts b/backend/src/controllers/TicketController.ts index 00303c5..6b43b3b 100644 --- a/backend/src/controllers/TicketController.ts +++ b/backend/src/controllers/TicketController.ts @@ -109,7 +109,8 @@ export const store = async (req: Request, res: Response): Promise => { } const ticket: Ticket = await defaultWhatsapp.$create("ticket", req.body); - const contact = await ticket.$get("contact"); + + await ticket.$get("contact"); const wapp = await ticket.$get("whatsapp"); @@ -122,7 +123,7 @@ export const store = async (req: Request, res: Response): Promise => { // ticket: serializaedTicket // }); - return res.status(200).json({ ticket, contact, wapp, tickets }); + return res.status(200).json({ ticket }); }; // export const update = (req: Request, res: Response): Promise => { diff --git a/backend/src/controllers/WhatsAppController.ts b/backend/src/controllers/WhatsAppController.ts new file mode 100644 index 0000000..00c6137 --- /dev/null +++ b/backend/src/controllers/WhatsAppController.ts @@ -0,0 +1,136 @@ +import { Request, Response } from "express"; +import CreateWhatsAppService from "../services/WhatsappService/CreateWhatsAppService"; +// import Yup from "yup"; +// import Whatsapp from "../models/Whatsapp"; +// import { getIO } from "../libs/socket"; +// import { getWbot, initWbot, removeWbot } from "../libs/wbot"; +// 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(); + + return res.status(200).json(whatsapps); +}; + +interface WhatsappData { + name: string; + status: string; +} + +export const store = async (req: Request, res: Response): Promise => { + // const io = getIO(); + + console.log("aqui"); + + const { name, status }: WhatsappData = req.body; + + const whatsapp = await CreateWhatsAppService({ name, status }); + + // if (!whatsapp) { + // return res.status(400).json({ error: "Cannot create whatsapp session." }); + // } + + // initWbot(whatsapp) + // .then(() => { + // wbotMessageListener(whatsapp); + // wbotMonitor(whatsapp); + // }) + // .catch(err => console.log(err)); + + // io.emit("whatsapp", { + // action: "update", + // whatsapp: whatsapp + // }); + + 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); + +// if (!whatsapp) { +// return res.status(200).json({ message: "Session not found" }); +// } + +// return res.status(200).json(whatsapp); +// }; + +// export const update = async ( +// req: Request, +// res: Response +// ): Promise => { +// const { whatsappId } = req.params; + +// 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; +// } +// ) +// }); + +// try { +// await schema.validate(req.body); +// } catch (err) { +// return res.status(400).json({ error: err.message }); +// } + +// const io = getIO(); + +// const whatsapp = await Whatsapp.findByPk(whatsappId); + +// if (!whatsapp) { +// return res.status(404).json({ message: "Whatsapp not found" }); +// } + +// await whatsapp.update(req.body); + +// io.emit("whatsapp", { +// action: "update", +// whatsapp: whatsapp +// }); + +// return res.status(200).json({ message: "Whatsapp updated" }); +// }; + +// export const remove = async ( +// req: Request, +// res: Response +// ): Promise => { +// const io = getIO(); +// const { whatsappId } = req.params; + +// 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." }); +// }; diff --git a/backend/src/controllersOld/TicketController.js b/backend/src/controllersOld/TicketController.js index 7fe06ae..fcd379c 100644 --- a/backend/src/controllersOld/TicketController.js +++ b/backend/src/controllersOld/TicketController.js @@ -9,177 +9,177 @@ const Whatsapp = require("../models/Whatsapp"); const { getIO } = require("../libs/socket"); exports.index = async (req, res) => { - const { - pageNumber = 1, - status = "", - date = "", - searchParam = "", - showAll, - } = req.query; + const { + pageNumber = 1, + status = "", + date = "", + searchParam = "", + showAll + } = req.query; - const userId = req.user.id; + const userId = req.user.id; - const limit = 20; - const offset = limit * (pageNumber - 1); + const limit = 20; + const offset = limit * (pageNumber - 1); - let includeCondition = [ - { - model: Contact, - as: "contact", - attributes: ["name", "number", "profilePicUrl"], - }, - ]; + let includeCondition = [ + { + model: Contact, + as: "contact", + attributes: ["name", "number", "profilePicUrl"] + } + ]; - let whereCondition = { userId: userId }; + let whereCondition = { userId: userId }; - if (showAll === "true") { - whereCondition = {}; - } + if (showAll === "true") { + whereCondition = {}; + } - if (status) { - whereCondition = { - ...whereCondition, - status: status, - }; - } + if (status) { + whereCondition = { + ...whereCondition, + status: status + }; + } - if (searchParam) { - includeCondition = [ - ...includeCondition, - { - model: Message, - as: "messages", - attributes: ["id", "body"], - where: { - body: Sequelize.where( - Sequelize.fn("LOWER", Sequelize.col("body")), - "LIKE", - "%" + searchParam.toLowerCase() + "%" - ), - }, - required: false, - duplicating: false, - }, - ]; + if (searchParam) { + includeCondition = [ + ...includeCondition, + { + model: Message, + as: "messages", + attributes: ["id", "body"], + where: { + body: Sequelize.where( + Sequelize.fn("LOWER", Sequelize.col("body")), + "LIKE", + "%" + searchParam.toLowerCase() + "%" + ) + }, + required: false, + duplicating: false + } + ]; - whereCondition = { - [Sequelize.Op.or]: [ - { - "$contact.name$": Sequelize.where( - Sequelize.fn("LOWER", Sequelize.col("name")), - "LIKE", - "%" + searchParam.toLowerCase() + "%" - ), - }, - { "$contact.number$": { [Sequelize.Op.like]: `%${searchParam}%` } }, - { - "$message.body$": Sequelize.where( - Sequelize.fn("LOWER", Sequelize.col("body")), - "LIKE", - "%" + searchParam.toLowerCase() + "%" - ), - }, - ], - }; - } + whereCondition = { + [Sequelize.Op.or]: [ + { + "$contact.name$": Sequelize.where( + Sequelize.fn("LOWER", Sequelize.col("name")), + "LIKE", + "%" + searchParam.toLowerCase() + "%" + ) + }, + { "$contact.number$": { [Sequelize.Op.like]: `%${searchParam}%` } }, + { + "$message.body$": Sequelize.where( + Sequelize.fn("LOWER", Sequelize.col("body")), + "LIKE", + "%" + searchParam.toLowerCase() + "%" + ) + } + ] + }; + } - if (date) { - whereCondition = { - ...whereCondition, - createdAt: { - [Sequelize.Op.between]: [ - startOfDay(parseISO(date)), - endOfDay(parseISO(date)), - ], - }, - }; - } + if (date) { + whereCondition = { + ...whereCondition, + createdAt: { + [Sequelize.Op.between]: [ + startOfDay(parseISO(date)), + endOfDay(parseISO(date)) + ] + } + }; + } - const { count, rows: tickets } = await Ticket.findAndCountAll({ - where: whereCondition, - distinct: true, - include: includeCondition, - limit, - offset, - order: [["updatedAt", "DESC"]], - }); + const { count, rows: tickets } = await Ticket.findAndCountAll({ + where: whereCondition, + distinct: true, + include: includeCondition, + limit, + offset, + order: [["updatedAt", "DESC"]] + }); - const hasMore = count > offset + tickets.length; + const hasMore = count > offset + tickets.length; - return res.status(200).json({ count, tickets, hasMore }); + return res.status(200).json({ count, tickets, hasMore }); }; exports.store = async (req, res) => { - const io = getIO(); + const io = getIO(); - const defaultWhatsapp = await Whatsapp.findOne({ - where: { default: true }, - }); + const defaultWhatsapp = await Whatsapp.findOne({ + where: { default: true } + }); - if (!defaultWhatsapp) { - return res - .status(404) - .json({ error: "No default WhatsApp found. Check Connection page." }); - } + if (!defaultWhatsapp) { + return res + .status(404) + .json({ error: "No default WhatsApp found. Check Connection page." }); + } - const ticket = await defaultWhatsapp.createTicket(req.body); + const ticket = await defaultWhatsapp.createTicket(req.body); - const contact = await ticket.getContact(); + const contact = await ticket.getContact(); - const serializaedTicket = { ...ticket.dataValues, contact: contact }; + const serializaedTicket = { ...ticket.dataValues, contact: contact }; - io.to("notification").emit("ticket", { - action: "create", - ticket: serializaedTicket, - }); + io.to("notification").emit("ticket", { + action: "create", + ticket: serializaedTicket + }); - return res.status(200).json(ticket); + return res.status(200).json(ticket); }; exports.update = async (req, res) => { - const io = getIO(); - const { ticketId } = req.params; + const io = getIO(); + const { ticketId } = req.params; - const ticket = await Ticket.findByPk(ticketId, { - include: [ - { - model: Contact, - as: "contact", - attributes: ["name", "number", "profilePicUrl"], - }, - ], - }); + const ticket = await Ticket.findByPk(ticketId, { + include: [ + { + model: Contact, + as: "contact", + attributes: ["name", "number", "profilePicUrl"] + } + ] + }); - if (!ticket) { - return res.status(404).json({ error: "No ticket found with this ID" }); - } + if (!ticket) { + return res.status(404).json({ error: "No ticket found with this ID" }); + } - await ticket.update(req.body); + await ticket.update(req.body); - io.to("notification").emit("ticket", { - action: "updateStatus", - ticket: ticket, - }); + io.to("notification").emit("ticket", { + action: "updateStatus", + ticket: ticket + }); - return res.status(200).json(ticket); + return res.status(200).json(ticket); }; exports.delete = async (req, res) => { - const io = getIO(); - const { ticketId } = req.params; + const io = getIO(); + const { ticketId } = req.params; - const ticket = await Ticket.findByPk(ticketId); + const ticket = await Ticket.findByPk(ticketId); - if (!ticket) { - return res.status(400).json({ error: "No ticket found with this ID" }); - } + if (!ticket) { + return res.status(400).json({ error: "No ticket found with this ID" }); + } - await ticket.destroy(); + await ticket.destroy(); - io.to("notification").emit("ticket", { - action: "delete", - ticketId: ticket.id, - }); + io.to("notification").emit("ticket", { + action: "delete", + ticketId: ticket.id + }); - return res.status(200).json({ message: "ticket deleted" }); + return res.status(200).json({ message: "ticket deleted" }); }; diff --git a/backend/src/controllersOld/WhatsAppController.js b/backend/src/controllersOld/WhatsAppController.js index 30fc5b3..6abf373 100644 --- a/backend/src/controllersOld/WhatsAppController.js +++ b/backend/src/controllersOld/WhatsAppController.js @@ -6,136 +6,136 @@ const wbotMessageListener = require("../services/wbotMessageListener"); const wbotMonitor = require("../services/wbotMonitor"); exports.index = async (req, res) => { - const whatsapps = await Whatsapp.findAll(); + const whatsapps = await Whatsapp.findAll(); - return res.status(200).json(whatsapps); + return res.status(200).json(whatsapps); }; exports.store = async (req, res) => { - 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 }, - }); - return !Boolean(whatsappFound); - } else return true; - } - ), - }); + 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 } + }); + return !Boolean(whatsappFound); + } else return true; + } + ) + }); - try { - await schema.validate(req.body); - } catch (err) { - return res.status(400).json({ error: err.message }); - } + try { + await schema.validate(req.body); + } catch (err) { + return res.status(400).json({ error: err.message }); + } - const io = getIO(); + const io = getIO(); - const whatsapp = await Whatsapp.create(req.body); + const whatsapp = await Whatsapp.create(req.body); - if (!whatsapp) { - return res.status(400).json({ error: "Cannot create whatsapp session." }); - } + if (!whatsapp) { + return res.status(400).json({ error: "Cannot create whatsapp session." }); + } - initWbot(whatsapp) - .then(() => { - wbotMessageListener(whatsapp); - wbotMonitor(whatsapp); - }) - .catch(err => console.log(err)); + initWbot(whatsapp) + .then(() => { + wbotMessageListener(whatsapp); + wbotMonitor(whatsapp); + }) + .catch(err => console.log(err)); - io.emit("whatsapp", { - action: "update", - whatsapp: whatsapp, - }); + io.emit("whatsapp", { + action: "update", + whatsapp: whatsapp + }); - return res.status(200).json(whatsapp); + return res.status(200).json(whatsapp); }; exports.show = async (req, res) => { - const { whatsappId } = req.params; - const whatsapp = await Whatsapp.findByPk(whatsappId); + const { whatsappId } = req.params; + const whatsapp = await Whatsapp.findByPk(whatsappId); - if (!whatsapp) { - return res.status(200).json({ message: "Session not found" }); - } + if (!whatsapp) { + return res.status(200).json({ message: "Session not found" }); + } - return res.status(200).json(whatsapp); + return res.status(200).json(whatsapp); }; exports.update = async (req, res) => { - const { whatsappId } = req.params; + const { whatsappId } = req.params; - 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 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; + } + ) + }); - try { - await schema.validate(req.body); - } catch (err) { - return res.status(400).json({ error: err.message }); - } + try { + await schema.validate(req.body); + } catch (err) { + return res.status(400).json({ error: err.message }); + } - const io = getIO(); + const io = getIO(); - const whatsapp = await Whatsapp.findByPk(whatsappId); + const whatsapp = await Whatsapp.findByPk(whatsappId); - if (!whatsapp) { - return res.status(404).json({ message: "Whatsapp not found" }); - } + if (!whatsapp) { + return res.status(404).json({ message: "Whatsapp not found" }); + } - await whatsapp.update(req.body); + await whatsapp.update(req.body); - io.emit("whatsapp", { - action: "update", - whatsapp: whatsapp, - }); + io.emit("whatsapp", { + action: "update", + whatsapp: whatsapp + }); - return res.status(200).json({ message: "Whatsapp updated" }); + return res.status(200).json({ message: "Whatsapp updated" }); }; exports.delete = async (req, res) => { - const io = getIO(); - const { whatsappId } = req.params; + const io = getIO(); + const { whatsappId } = req.params; - const whatsapp = await Whatsapp.findByPk(whatsappId); + const whatsapp = await Whatsapp.findByPk(whatsappId); - if (!whatsapp) { - return res.status(404).json({ message: "Whatsapp not found" }); - } + if (!whatsapp) { + return res.status(404).json({ message: "Whatsapp not found" }); + } - await whatsapp.destroy(); - removeWbot(whatsapp.id); + await whatsapp.destroy(); + removeWbot(whatsapp.id); - io.emit("whatsapp", { - action: "delete", - whatsappId: 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/index.ts b/backend/src/routes/index.ts index 5fe928a..744300e 100644 --- a/backend/src/routes/index.ts +++ b/backend/src/routes/index.ts @@ -5,10 +5,8 @@ import authRoutes from "./authRoutes"; import settingRoutes from "./settingRoutes"; import contactRoutes from "./contactRoutes"; import ticketRoutes from "./ticketRoutes"; - -// const MessagesRoutes = require("./routes/messages"); -// const WhatsRoutes = require("./routes/whatsapp"); -// const UsersRoutes = require("./routes/users"); +import whatsappRoutes from "./whatsappRoutes"; +import messageRoutes from "./messageRoutes"; const routes = Router(); @@ -17,7 +15,7 @@ routes.use("/auth", authRoutes); routes.use(settingRoutes); routes.use(contactRoutes); routes.use(ticketRoutes); -// routes.use(MessagesRoutes); -// routes.use(WhatsRoutes); +routes.use(whatsappRoutes); +routes.use(messageRoutes); export default routes; diff --git a/backend/src/routes/messageRoutes.ts b/backend/src/routes/messageRoutes.ts new file mode 100644 index 0000000..59d81db --- /dev/null +++ b/backend/src/routes/messageRoutes.ts @@ -0,0 +1,12 @@ +import { Router } from "express"; +// import isAuth from "../middleware/isAuth"; + +// import { index, store } from "../controllers/MessageController"; + +const messageRoutes = Router(); + +// messageRoutes.get("/messages/:ticketId", isAuth, index); + +// messageRoutes.post("/messages/:ticketId", isAuth, store); + +export default messageRoutes; diff --git a/backend/src/routes/routes/messages.js b/backend/src/routes/routes/messages.js deleted file mode 100644 index e48298b..0000000 --- a/backend/src/routes/routes/messages.js +++ /dev/null @@ -1,12 +0,0 @@ -const express = require("express"); -const isAuth = require("../../middleware/is-auth"); - -const MessageController = require("../../controllers/MessageController"); - -const routes = express.Router(); - -routes.get("/messages/:ticketId", isAuth, MessageController.index); - -routes.post("/messages/:ticketId", isAuth, MessageController.store); - -module.exports = routes; diff --git a/backend/src/routes/routes/whatsapp.js b/backend/src/routes/routes/whatsapp.js deleted file mode 100644 index 66d0318..0000000 --- a/backend/src/routes/routes/whatsapp.js +++ /dev/null @@ -1,18 +0,0 @@ -const express = require("express"); -const isAuth = require("../../middleware/is-auth"); - -const WhatsAppController = require("../../controllers/WhatsAppController"); - -const routes = express.Router(); - -routes.get("/whatsapp/", isAuth, WhatsAppController.index); - -routes.post("/whatsapp/", isAuth, WhatsAppController.store); - -routes.get("/whatsapp/:whatsappId", isAuth, WhatsAppController.show); - -routes.put("/whatsapp/:whatsappId", isAuth, WhatsAppController.update); - -routes.delete("/whatsapp/:whatsappId", isAuth, WhatsAppController.delete); - -module.exports = routes; diff --git a/backend/src/routes/whatsappRoutes.ts b/backend/src/routes/whatsappRoutes.ts new file mode 100644 index 0000000..de7fa28 --- /dev/null +++ b/backend/src/routes/whatsappRoutes.ts @@ -0,0 +1,22 @@ +import express from "express"; +import isAuth from "../middleware/isAuth"; + +import * as WhatsAppController from "../controllers/WhatsAppController"; + +const whatsappRoutes = express.Router(); + +whatsappRoutes.get("/whatsapp/", isAuth, WhatsAppController.index); + +whatsappRoutes.post("/whatsapp/", isAuth, WhatsAppController.store); + +// whatsappRoutes.get("/whatsapp/:whatsappId", isAuth, WhatsAppController.show); + +// whatsappRoutes.put("/whatsapp/:whatsappId", isAuth, WhatsAppController.update); + +// whatsappRoutes.remove( +// "/whatsapp/:whatsappId", +// isAuth, +// WhatsAppController.delete +// ); + +export default whatsappRoutes; diff --git a/backend/src/services/WhatsappService/CreateWhatsAppService.ts b/backend/src/services/WhatsappService/CreateWhatsAppService.ts new file mode 100644 index 0000000..423f436 --- /dev/null +++ b/backend/src/services/WhatsappService/CreateWhatsAppService.ts @@ -0,0 +1,47 @@ +import * as Yup from "yup"; + +import AppError from "../../errors/AppError"; +import Whatsapp from "../../models/Whatsapp"; + +interface Request { + name: string; + status?: string; +} + +const CreateWhatsAppService = async ({ + name, + status = "INITIALIZING" +}: Request): Promise => { + // 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 } + // }); + // return !Boolean(whatsappFound); + // } else return true; + // } + // ) + // }); + + // try { + // await schema.validate({ name, status }); + // } catch (err) { + // throw new AppError(err.message); + // } + + const whatsapp = await Whatsapp.create({ + name, + status + }); + + return whatsapp; +}; + +export default CreateWhatsAppService; diff --git a/backend/src/services/WhatsappService/ListWhatsAppsService.ts b/backend/src/services/WhatsappService/ListWhatsAppsService.ts new file mode 100644 index 0000000..2c2b884 --- /dev/null +++ b/backend/src/services/WhatsappService/ListWhatsAppsService.ts @@ -0,0 +1,13 @@ +import Whatsapp from "../../models/Whatsapp"; + +interface Response { + whatsapps: Whatsapp[]; +} + +const ListWhatsAppsService = async (): Promise => { + const whatsapps = await Whatsapp.findAll(); + + return { whatsapps }; +}; + +export default ListWhatsAppsService;