add: resend chat wa notif error user

This commit is contained in:
2025-12-31 15:11:34 +07:00
parent a704eb3235
commit 25ba80ab7e
5 changed files with 141 additions and 24 deletions

View File

@@ -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;

View File

@@ -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]);

View File

@@ -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;
router.post(
"/resend/:id",
verifyToken.verifyAccessToken,
verifyAccess(),
NotificationErrorUserController.resend
);
module.exports = router;

View File

@@ -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;

View File

@@ -75,6 +75,8 @@ class NotifikasiWaService {
let bodyWithUrl = `${param.bodyMessage}\n🔗 ${shortUrl}`;
console.log(bodyWithUrl)
param.bodyMessage = bodyWithUrl
const resultNotificationErrorUser = await createNotificationErrorUserDb({