'use strict'; const db = require('../../models/index'); const { incidentType } = require('../../constants/constants'); const { fetchAllMembers } = require('../officeRnD/members'); const getUnlockedIncidents = () => { const attributes = ['id', 'memberId', 'resourceId', 'bookingStart', 'bookingEnd', 'incidentLevel', 'incidentLevelPrice']; return db.unlockedIncident.findAll({ attributes, sort: [ ['bookingStart', 'ASC'] ] }); }; const getUnscheduledIncidents = () => { const attributes = [ 'id', 'memberId', 'resourceId', 'bookingStart', 'bookingEnd', 'doorLockEventTimestamp', 'doorLockEventType', 'timeIntervalsToCharge', 'chargePrice', 'totalChargeFee' ]; return db.unscheduledIncident.findAll({ attributes, sort: [ ['bookingStart', 'ASC'] ] }); }; const getAllDoorLockIncidents = () => { return new Promise ((resolve, reject) => { const dataFetchJobs = [fetchAllMembers(), getUnlockedIncidents(), getUnscheduledIncidents()]; Promise.all(dataFetchJobs) .then((data) => { const members = data[0]; const unlockedIncidents = data[1]; const unscheduledIncidents = data[2]; const membersMap = {}; members.forEach((member) => membersMap[member.memberId] = member); const allIncidents = []; unlockedIncidents.forEach((unlockedIncident) => { allIncidents.push({ incidentId: unlockedIncident.id, memberId: unlockedIncident.memberId, memberName: membersMap[unlockedIncident.memberId].name, resourceName: '', officeName: '', bookingStart: unlockedIncident.bookingStart, bookingEnd: unlockedIncident.bookingEnd, incidentType: incidentType.UNLOCKED_INCIDENT, incidentLevel: unlockedIncident.incidentLevel, incidentPrice: unlockedIncident.incidentLevelPrice, }); }); unscheduledIncidents.forEach((unscheduledIncident) => { allIncidents.push({ incidentId: unscheduledIncident.id, memberId: unscheduledIncident.memberId, memberName: membersMap[unscheduledIncident.memberId].name, resourceName: '', officeName: '', bookingStart: unscheduledIncident.bookingStart, bookingEnd: unscheduledIncident.bookingEnd, incidentType: incidentType.UNSCHEDULED_INCIDENT, timeIntervalsToCharge: unscheduledIncident.timeIntervalsToCharge, chargePrice: unscheduledIncident.chargePrice, totalChargeFee: unscheduledIncident.totalChargeFee, }); }); resolve(allIncidents); }) .catch((error) => reject(error)); }); }; module.exports = { getUnlockedIncidents, getUnscheduledIncidents, getAllDoorLockIncidents, };