diff --git a/controllers/notification_error_user.controller.js b/controllers/notification_error_user.controller.js index c2b4342..bed4cb7 100644 --- a/controllers/notification_error_user.controller.js +++ b/controllers/notification_error_user.controller.js @@ -66,6 +66,24 @@ class NotificationErrorUserController { res.status(response.statusCode).json(response); } + + static async resend(req, res) { + try { + const { id } = req.params; + + const results = await NotificationErrorUserService.resendNotification(id); + + const response = await setResponse( + results.data, + results.message, + ); + + res.status(response.statusCode).json(response); + } catch (error) { + const response = setResponse(null, error.message, error.statusCode || 500); + res.status(response.statusCode).json(response); + } + } } module.exports = NotificationErrorUserController; diff --git a/db/notification_error_user.db.js b/db/notification_error_user.db.js index 5893d1c..eaad27d 100644 --- a/db/notification_error_user.db.js +++ b/db/notification_error_user.db.js @@ -55,8 +55,11 @@ const getAllNotificationErrorUserDb = async (searchParams = {}) => { const getNotificationErrorUserByIdDb = async (id) => { const queryText = ` SELECT - a.* + a.*, + b. is_active as contact_is_active + FROM notification_error_user a + LEFT JOIN contact b ON a.contact_phone = b.contact_phone WHERE a.notification_error_user_id = $1 AND a.deleted_at IS NULL `; const result = await pool.query(queryText, [id]); diff --git a/routes/notification_error_user.route.js b/routes/notification_error_user.route.js index 473a0a7..b68aacc 100644 --- a/routes/notification_error_user.route.js +++ b/routes/notification_error_user.route.js @@ -1,17 +1,38 @@ -const express = require('express'); -const NotificationErrorUserController = require('../controllers/notification_error_user.controller'); -const verifyToken = require("../middleware/verifyToken") -const verifyAccess = require("../middleware/verifyAccess") +const express = require("express"); +const NotificationErrorUserController = require("../controllers/notification_error_user.controller"); +const verifyToken = require("../middleware/verifyToken"); +const verifyAccess = require("../middleware/verifyAccess"); const router = express.Router(); -router.route("/") - .get(verifyToken.verifyAccessToken, NotificationErrorUserController.getAll) - .post(verifyToken.verifyAccessToken, verifyAccess(), NotificationErrorUserController.create); +router + .route("/") + .get(verifyToken.verifyAccessToken, NotificationErrorUserController.getAll) + .post( + verifyToken.verifyAccessToken, + verifyAccess(), + NotificationErrorUserController.create + ); -router.route("/:id") - .get(verifyToken.verifyAccessToken, NotificationErrorUserController.getById) - .put(verifyToken.verifyAccessToken, verifyAccess(), NotificationErrorUserController.update) - .delete(verifyToken.verifyAccessToken, verifyAccess(), NotificationErrorUserController.delete); +router + .route("/:id") + .get(verifyToken.verifyAccessToken, NotificationErrorUserController.getById) + .put( + verifyToken.verifyAccessToken, + verifyAccess(), + NotificationErrorUserController.update + ) + .delete( + verifyToken.verifyAccessToken, + verifyAccess(), + NotificationErrorUserController.delete + ); -module.exports = router; \ No newline at end of file +router.post( + "/resend/:id", + verifyToken.verifyAccessToken, + verifyAccess(), + NotificationErrorUserController.resend +); + +module.exports = router; diff --git a/services/notification_error_user.service.js b/services/notification_error_user.service.js index f589a7a..de2ef7c 100644 --- a/services/notification_error_user.service.js +++ b/services/notification_error_user.service.js @@ -3,9 +3,16 @@ const { getNotificationErrorUserByIdDb, createNotificationErrorUserDb, updateNotificationErrorUserDb, - deleteNotificationErrorUserDb -} = require('../db/notification_error_user.db'); -const { ErrorHandler } = require('../helpers/error'); + deleteNotificationErrorUserDb, +} = require("../db/notification_error_user.db"); + +const { + generateTokenRedirect, + shortUrltiny, + sendNotifikasi, +} = require("../db/notification_wa.db"); + +const { ErrorHandler } = require("../helpers/error"); class NotificationErrorUserService { // Get all Contact @@ -13,10 +20,9 @@ class NotificationErrorUserService { try { const results = await getAllNotificationErrorUserDb(param); - results.data.map(element => { - }); + results.data.map((element) => {}); - return results + return results; } catch (error) { throw new ErrorHandler(error.statusCode, error.message); } @@ -27,7 +33,8 @@ class NotificationErrorUserService { try { const result = await getNotificationErrorUserByIdDb(id); - if (result.length < 1) throw new ErrorHandler(404, 'NotificationErrorUser not found'); + if (result.length < 1) + throw new ErrorHandler(404, "NotificationErrorUser not found"); return result; } catch (error) { @@ -38,7 +45,7 @@ class NotificationErrorUserService { // Create NotificationErrorUser static async createNotificationErrorUser(data) { try { - if (!data || typeof data !== 'object') data = {}; + if (!data || typeof data !== "object") data = {}; const result = await createNotificationErrorUserDb(data); @@ -51,12 +58,12 @@ class NotificationErrorUserService { // Update NotificationErrorUser static async updateNotificationErrorUser(id, data) { try { - if (!data || typeof data !== 'object') data = {}; + if (!data || typeof data !== "object") data = {}; const dataExist = await getNotificationErrorUserByIdDb(id); if (dataExist.length < 1) { - throw new ErrorHandler(404, 'NotificationErrorUser not found'); + throw new ErrorHandler(404, "NotificationErrorUser not found"); } const result = await updateNotificationErrorUserDb(id, data); @@ -73,7 +80,7 @@ class NotificationErrorUserService { const dataExist = await getNotificationErrorUserByIdDb(id); if (dataExist.length < 1) { - throw new ErrorHandler(404, 'NotificationErrorUser not found'); + throw new ErrorHandler(404, "NotificationErrorUser not found"); } const result = await deleteNotificationErrorUserDb(id, userId); @@ -83,6 +90,72 @@ class NotificationErrorUserService { throw new ErrorHandler(error.statusCode, error.message); } } + + static async resendNotification(id) { + try { + const dataExist = await getNotificationErrorUserByIdDb(id); + if (!dataExist || dataExist.length < 1) { + throw new ErrorHandler( + 404, + "Data Notification Error User tidak ditemukan" + ); + } + const data = dataExist[0]; + + if (data.contact_is_active === 1) { + throw new ErrorHandler( + 400, + `Kontak dengan nomor ${ + data.contact_phone || "terkait" + } tidak aktif.` + ); + } + + const tokenRedirect = await generateTokenRedirect( + data.contact_phone, + data.contact_name, + data.notification_error_id + ); + + const encodedToken = encodeURIComponent(tokenRedirect); + const shortUrl = await shortUrltiny(encodedToken); + + const bodyBase = + `Hai Operator\n` + + `Terjadi peringatan pada device, silahkan cek detail pada link berikut :\n`; + + const bodyWithUrl = `${bodyBase}\nšŸ”— ${shortUrl}`; + + const resultSend = await sendNotifikasi(data.contact_phone, bodyWithUrl); + + const isSuccess = resultSend?.error ? false : true; + + const updateData = { + is_send: isSuccess, + message_error_issue: bodyWithUrl, + }; + + await updateNotificationErrorUserDb(id, updateData); + + if (!isSuccess) { + throw new ErrorHandler( + 500, + `WhatsApp API Gagal mengirim pesan: ${ + resultSend?.message || "Unknown Error" + }` + ); + } + + return { + notification_error_user_id: id, + is_send: isSuccess, + short_url: shortUrl, + message: "Berhasil mengirim ulang notifikasi", + }; + } catch (error) { + throw new ErrorHandler(error.statusCode || 500, error.message); + } + } } module.exports = NotificationErrorUserService; diff --git a/services/notifikasi-wa.service.js b/services/notifikasi-wa.service.js index 210b454..d21a1f5 100644 --- a/services/notifikasi-wa.service.js +++ b/services/notifikasi-wa.service.js @@ -75,6 +75,8 @@ class NotifikasiWaService { let bodyWithUrl = `${param.bodyMessage}\nšŸ”— ${shortUrl}`; + console.log(bodyWithUrl) + param.bodyMessage = bodyWithUrl const resultNotificationErrorUser = await createNotificationErrorUserDb({