From 0d8b4cd60c9a21ed24cf48bb551489209454ab14 Mon Sep 17 00:00:00 2001 From: canove Date: Tue, 22 Sep 2020 11:09:52 -0300 Subject: [PATCH] migrated import contacts controller to typescript --- .../ImportPhoneContactsController.ts | 42 ++------- backend/src/controllers/WhatsAppController.ts | 3 +- backend/src/routes/contactRoutes.ts | 8 +- backend/src/server.ts | 3 +- .../WbotServices/ImportContactsService.ts | 28 ++++++ .../src/services/WbotServices/wbotMonitor.js | 86 ------------------ .../src/services/WbotServices/wbotMonitor.ts | 87 +++++++++++++++++++ 7 files changed, 131 insertions(+), 126 deletions(-) create mode 100644 backend/src/services/WbotServices/ImportContactsService.ts delete mode 100644 backend/src/services/WbotServices/wbotMonitor.js create mode 100644 backend/src/services/WbotServices/wbotMonitor.ts diff --git a/backend/src/controllers/ImportPhoneContactsController.ts b/backend/src/controllers/ImportPhoneContactsController.ts index 34f193a..01f1cfc 100644 --- a/backend/src/controllers/ImportPhoneContactsController.ts +++ b/backend/src/controllers/ImportPhoneContactsController.ts @@ -1,38 +1,8 @@ -// const Contact = require("../models/Contact"); -// const Whatsapp = require("../models/Whatsapp"); -// const { getIO } = require("../libs/socket"); -// const { getWbot, initWbot } = require("../libs/wbot"); +import { Request, Response } from "express"; +import ImportContactsService from "../services/WbotServices/ImportContactsService"; -// exports.store = async (req, res, next) => { -// const defaultWhatsapp = await Whatsapp.findOne({ -// where: { default: true } -// }); +export const store = async (req: Request, res: Response): Promise => { + await ImportContactsService(); -// if (!defaultWhatsapp) { -// return res -// .status(404) -// .json({ error: "No default WhatsApp found. Check Connection page." }); -// } - -// const io = getIO(); -// const wbot = getWbot(defaultWhatsapp); - -// let phoneContacts; - -// try { -// phoneContacts = await wbot.getContacts(); -// } catch (err) { -// console.log(err); -// return res.status(500).json({ -// error: "Could not check whatsapp contact. Check connection page." -// }); -// } - -// await Promise.all( -// phoneContacts.map(async ({ number, name }) => { -// await Contact.create({ number, name }); -// }) -// ); - -// return res.status(200).json({ message: "contacts imported" }); -// }; + return res.status(200).json({ message: "contacts imported" }); +}; diff --git a/backend/src/controllers/WhatsAppController.ts b/backend/src/controllers/WhatsAppController.ts index f0726f4..9e32ee6 100644 --- a/backend/src/controllers/WhatsAppController.ts +++ b/backend/src/controllers/WhatsAppController.ts @@ -2,6 +2,7 @@ import { Request, Response } from "express"; import { getIO } from "../libs/socket"; import { initWbot } from "../libs/wbot"; import wbotMessageListener from "../services/WbotServices/wbotMessageListener"; +import wbotMonitor from "../services/WbotServices/wbotMonitor"; import CreateWhatsAppService from "../services/WhatsappService/CreateWhatsAppService"; import DeleteWhatsAppService from "../services/WhatsappService/DeleteWhatsAppService"; @@ -39,7 +40,7 @@ export const store = async (req: Request, res: Response): Promise => { initWbot(whatsapp) .then(() => { wbotMessageListener(whatsapp); - // wbotMonitor(whatsapp); + wbotMonitor(whatsapp); }) .catch(err => console.log(err)); diff --git a/backend/src/routes/contactRoutes.ts b/backend/src/routes/contactRoutes.ts index b7a0222..5bbc100 100644 --- a/backend/src/routes/contactRoutes.ts +++ b/backend/src/routes/contactRoutes.ts @@ -2,11 +2,15 @@ import express from "express"; import isAuth from "../middleware/isAuth"; import * as ContactController from "../controllers/ContactController"; -// import ImportPhoneContactsController from "../controllers/ImportPhoneContactsController"; +import * as ImportPhoneContactsController from "../controllers/ImportPhoneContactsController"; const contactRoutes = express.Router(); -// contactRoutes.post("/contacts/import", isAuth, ImportPhoneContactsController.store); +contactRoutes.post( + "/contacts/import", + isAuth, + ImportPhoneContactsController.store +); contactRoutes.get("/contacts", isAuth, ContactController.index); diff --git a/backend/src/server.ts b/backend/src/server.ts index 37c88c3..6beb9a4 100644 --- a/backend/src/server.ts +++ b/backend/src/server.ts @@ -16,6 +16,7 @@ import { initWbot } from "./libs/wbot"; // const wbotMonitor = require("./services/wbotMonitor"); import Whatsapp from "./models/Whatsapp"; import wbotMessageListener from "./services/WbotServices/wbotMessageListener"; +import wbotMonitor from "./services/WbotServices/wbotMonitor"; Sentry.init({ dsn: process.env.SENTRY_DSN }); @@ -58,7 +59,7 @@ const startWhatsAppSessions = async () => { initWbot(whatsapp) .then(() => { wbotMessageListener(whatsapp); - // wbotMonitor(whatsapp); + wbotMonitor(whatsapp); }) .catch(err => console.log(err)); }); diff --git a/backend/src/services/WbotServices/ImportContactsService.ts b/backend/src/services/WbotServices/ImportContactsService.ts new file mode 100644 index 0000000..297893f --- /dev/null +++ b/backend/src/services/WbotServices/ImportContactsService.ts @@ -0,0 +1,28 @@ +import AppError from "../../errors/AppError"; +import GetDefaultWhatsApp from "../../helpers/GetDefaultWhatsApp"; +import { getWbot } from "../../libs/wbot"; +import Contact from "../../models/Contact"; + +const ImportContactsService = async (): Promise => { + const defaultWhatsapp = await GetDefaultWhatsApp(); + + const wbot = getWbot(defaultWhatsapp.id); + + let phoneContacts; + + try { + phoneContacts = await wbot.getContacts(); + } catch (err) { + throw new AppError( + "Could not check whatsapp contact. Check connection page." + ); + } + + await Promise.all( + phoneContacts.map(async ({ number, name }) => { + await Contact.create({ number, name }); + }) + ); +}; + +export default ImportContactsService; diff --git a/backend/src/services/WbotServices/wbotMonitor.js b/backend/src/services/WbotServices/wbotMonitor.js deleted file mode 100644 index 696b44d..0000000 --- a/backend/src/services/WbotServices/wbotMonitor.js +++ /dev/null @@ -1,86 +0,0 @@ -const Sentry = require("@sentry/node"); - -const wbotMessageListener = require("./wbotMessageListener"); - -const { getIO } = require("../libs/socket"); -const { getWbot, initWbot } = require("../libs/wbot"); - -const wbotMonitor = whatsapp => { - const io = getIO(); - const sessionName = whatsapp.name; - const wbot = getWbot(whatsapp.id); - - try { - wbot.on("change_state", async newState => { - console.log("Monitor session:", sessionName, newState); - try { - await whatsapp.update({ status: newState }); - } catch (err) { - Sentry.captureException(err); - console.log(err); - } - - io.emit("session", { - action: "update", - session: whatsapp, - }); - }); - - wbot.on("change_battery", async batteryInfo => { - const { battery, plugged } = batteryInfo; - console.log( - `Battery session: ${sessionName} ${battery}% - Charging? ${plugged}` - ); - - try { - await whatsapp.update({ battery, plugged }); - } catch (err) { - Sentry.captureException(err); - console.log(err); - } - - io.emit("session", { - action: "update", - session: whatsapp, - }); - }); - - wbot.on("disconnected", async reason => { - console.log("Disconnected session:", sessionName, reason); - try { - await whatsapp.update({ status: "disconnected" }); - } catch (err) { - Sentry.captureException(err); - console.log(err); - } - - io.emit("session", { - action: "update", - session: whatsapp, - }); - - setTimeout( - () => - initWbot(whatsapp) - .then(() => { - wbotMessageListener(whatsapp); - wbotMonitor(whatsapp); - }) - .catch(err => { - Sentry.captureException(err); - console.log(err); - }), - 2000 - ); - }); - - // setInterval(() => { - // wbot.resetState(); - // }, 20000); - } catch (err) { - Sentry.captureException(err); - console.log(err); - } -}; - -module.exports = wbotMonitor; diff --git a/backend/src/services/WbotServices/wbotMonitor.ts b/backend/src/services/WbotServices/wbotMonitor.ts new file mode 100644 index 0000000..5f1995e --- /dev/null +++ b/backend/src/services/WbotServices/wbotMonitor.ts @@ -0,0 +1,87 @@ +import * as Sentry from "@sentry/node"; + +import wbotMessageListener from "./wbotMessageListener"; + +import { getIO } from "../../libs/socket"; +import { getWbot, initWbot } from "../../libs/wbot"; +import Whatsapp from "../../models/Whatsapp"; + +const wbotMonitor = (whatsapp: Whatsapp): void => { + const io = getIO(); + const sessionName = whatsapp.name; + const wbot = getWbot(whatsapp.id); + + try { + wbot.on("change_state", async newState => { + console.log("Monitor session:", sessionName, newState); + try { + await whatsapp.update({ status: newState }); + } catch (err) { + Sentry.captureException(err); + console.log(err); + } + + io.emit("session", { + action: "update", + session: whatsapp + }); + }); + + wbot.on("change_battery", async batteryInfo => { + const { battery, plugged } = batteryInfo; + console.log( + `Battery session: ${sessionName} ${battery}% - Charging? ${plugged}` + ); + + try { + await whatsapp.update({ battery, plugged }); + } catch (err) { + Sentry.captureException(err); + console.log(err); + } + + io.emit("session", { + action: "update", + session: whatsapp + }); + }); + + wbot.on("disconnected", async reason => { + console.log("Disconnected session:", sessionName, reason); + try { + await whatsapp.update({ status: "disconnected" }); + } catch (err) { + Sentry.captureException(err); + console.log(err); + } + + io.emit("session", { + action: "update", + session: whatsapp + }); + + setTimeout( + () => + initWbot(whatsapp) + .then(() => { + wbotMessageListener(whatsapp); + wbotMonitor(whatsapp); + }) + .catch(err => { + Sentry.captureException(err); + console.log(err); + }), + 2000 + ); + }); + + // setInterval(() => { + // wbot.resetState(); + // }, 20000); + } catch (err) { + Sentry.captureException(err); + console.log(err); + } +}; + +export default wbotMonitor;