const { getAllNotificationErrorUserDb, getNotificationErrorUserByIdDb, createNotificationErrorUserDb, updateNotificationErrorUserDb, 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 static async getAllNotificationErrorUser(param) { try { const results = await getAllNotificationErrorUserDb(param); results.data.map((element) => {}); return results; } catch (error) { throw new ErrorHandler(error.statusCode, error.message); } } // Get NotificationErrorUser by ID static async getNotificationErrorUserById(id) { try { const result = await getNotificationErrorUserByIdDb(id); if (result.length < 1) throw new ErrorHandler(404, "NotificationErrorUser not found"); return result; } catch (error) { throw new ErrorHandler(error.statusCode, error.message); } } // Create NotificationErrorUser static async createNotificationErrorUser(data) { try { if (!data || typeof data !== "object") data = {}; const result = await createNotificationErrorUserDb(data); return result; } catch (error) { throw new ErrorHandler(error.statusCode, error.message); } } // Update NotificationErrorUser static async updateNotificationErrorUser(id, data) { try { if (!data || typeof data !== "object") data = {}; const dataExist = await getNotificationErrorUserByIdDb(id); if (dataExist.length < 1) { throw new ErrorHandler(404, "NotificationErrorUser not found"); } const result = await updateNotificationErrorUserDb(id, data); return result; } catch (error) { throw new ErrorHandler(error.statusCode, error.message); } } // Soft delete NotificationErrorUser static async deleteNotificationErrorUser(id, userId) { try { const dataExist = await getNotificationErrorUserByIdDb(id); if (dataExist.length < 1) { throw new ErrorHandler(404, "NotificationErrorUser not found"); } const result = await deleteNotificationErrorUserDb(id, userId); return result; } catch (error) { 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;