const { getAllNotificationDb, getNotificationByIdDb, InsertNotificationErrorDb, getUsersNotificationErrorDb, updateNotificationErrorDb, } = require("../db/notification_error.db"); const { getErrorCodeByIdDb } = require("../db/brand_code.db"); const { getSolutionsByErrorCodeIdDb } = require("../db/brand_code_solution.db"); const { getAllNotificationErrorLogDb, getNotificationErrorLogByNotificationErrorIdDb, } = require("../db/notification_error_log.db"); const { getSparepartsByErrorCodeIdDb } = require("../db/brand_sparepart.db"); const { getFileUploadByPathDb } = require("../db/file_uploads.db"); const { ErrorHandler } = require("../helpers/error"); class NotificationService { static async getAllNotification(param) { try { const results = await getAllNotificationDb(param); if (results && Array.isArray(results.data)) { results.data = await Promise.all( results.data.map(async (notification) => { const usersNotification = (await getUsersNotificationErrorDb(notification.notification_error_id)) || []; return { ...notification, users: usersNotification, }; }) ); } return results; } catch (error) { throw new ErrorHandler(error.statusCode, error.message); } } static async createNotificationError(data) { try { if (!data || typeof data !== "object") data = {}; const result = await InsertNotificationErrorDb(data); return result; } catch (error) { throw new ErrorHandler(error.statusCode, error.message); } } static async getNotificationById(id) { try { const notification = await getNotificationByIdDb(id); if ( !notification || (Array.isArray(notification) && notification.length < 1) ) { throw new ErrorHandler(404, "Notification not found"); } const usersNotification = (await getUsersNotificationErrorDb(id)) || []; // Get error code details if error_code_id exists if (notification.error_code_id) { const errorCode = await getErrorCodeByIdDb(notification.error_code_id); if (errorCode) { // Get solutions for this error code const solutions = (await getSolutionsByErrorCodeIdDb(errorCode.error_code_id)) || []; const spareparts = (await getSparepartsByErrorCodeIdDb(errorCode.error_code_id)) || []; const solutionsWithDetails = await Promise.all( solutions.map(async (solution) => { let fileData = null; if ( solution.path_solution && solution.type_solution && solution.type_solution !== "text" ) { try { fileData = await getFileUploadByPathDb( solution.path_solution ); } catch (e) { fileData = null; } } return { ...solution, file_upload_name: fileData?.file_upload_name || null, path_document: fileData?.path_document || null, }; }) ); notification.error_code = { ...errorCode, solution: solutionsWithDetails, spareparts: spareparts, }; } } // Get activity logs for this notification const notificationLogs = (await getNotificationErrorLogByNotificationErrorIdDb(id)) || []; notification.users = usersNotification; notification.activity_logs = notificationLogs; return notification; } catch (error) { throw new ErrorHandler(error.statusCode, error.message); } } static async updateNotificationError(id, data) { try { if (!data || typeof data !== "object") data = {}; const dataExist = await getNotificationByIdDb(id); if (dataExist.length < 1) { throw new ErrorHandler(404, "NotificationErrorUser not found"); } const result = await updateNotificationErrorDb(id, data); return result; } catch (error) { throw new ErrorHandler(error.statusCode, error.message); } } } module.exports = NotificationService;