From 27cbe1f51cd09a37eb00018ce0552db1d219754a Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Wed, 21 Aug 2019 06:45:43 +0200 Subject: [PATCH 1/5] fix non-returning promise warning --- services/integration/bookingChangeCharges.js | 53 +++++++++++++++++--- services/integration/bookingChangeLog.js | 4 +- services/integration/checkBookingChange.js | 10 ++-- services/officeRnD/bookings.js | 35 +++++++------ 4 files changed, 74 insertions(+), 28 deletions(-) diff --git a/services/integration/bookingChangeCharges.js b/services/integration/bookingChangeCharges.js index a880225..7299e79 100644 --- a/services/integration/bookingChangeCharges.js +++ b/services/integration/bookingChangeCharges.js @@ -12,22 +12,22 @@ const { incidentType } = require('../../constants/constants'); + const bulkWriteBookingChangeIncidents = (incidents) => { return new Promise((resolve, reject) => { const asyncJobs = []; + incidents.forEach((incident) => { asyncJobs.push(db.bookingChangeIncident.findOrCreate({where: incident, defaults: incident})); }); Promise.all(asyncJobs) - .then(() => { - resolve(); - }) + .then(() => resolve()) .catch((error) => reject(error)); }); }; -const chargeBookingChanges = (changes) => { +const getIncidentsFromChanges = (changes) => { return new Promise((resolve, reject) => { if (Array.isArray(changes)){ const incidents = []; @@ -52,21 +52,45 @@ const chargeBookingChanges = (changes) => { const differenceFromNow = oldStart.diff(moment.utc(), 'minutes'); + console.log('Change detected : '); + console.log('\tOld reservation :'); + console.log('\t\tResource : ', oldResourceId); + console.log('\t\tStart : ', oldStart.format()); + console.log('\t\tEnd : ', oldEnd.format()); + console.log('\t\tLength : ', oldReservationLength); + console.log('\tNew Reservation :'); + console.log('\t\tResource : ', newReservation.resourceId); + console.log('\t\tStart : ', newStart.format()); + console.log('\t\tEnd : ', newEnd.format()); + console.log('\t\tLength : ', newReservationLength); + console.log('\t\tCanceled : ', canceled); + console.log('\t---------------------------------'); + console.log('\tDifference : ', differenceFromNow, 'minutes'); + console.log(''); + console.log('\tIs booking changed too late ? ', differenceFromNow, ' < ', CHARGE_BOOKING_CHANGE_UNDER_TIME); if (differenceFromNow < CHARGE_BOOKING_CHANGE_UNDER_TIME){ const { reservationId, memberId, resourceId } = newReservation; + console.log('\t\tYes'); + + console.log('\tIs booking canceled ?'); if (!canceled) { + console.log('\t\tNo'); // Check if new reservation is on same day const sameDay = oldStart.tz(reservationTimezone).isSame(newStart.tz(reservationTimezone), 'day'); - + console.log('\tIs new reservation on the same day ?'); if (sameDay) { + console.log('\t\tYes'); // Reservation moved in same day // Check if member shortened the reservation + console.log('\tIs reservation shortened ? ', newReservationLength, ' < ', oldReservationLength); if (newReservationLength < oldReservationLength) { + console.log('\t\tYes'); const differenceInLength = oldReservationLength - newReservationLength; const chargeFee = differenceInLength * reservationHourlyRate * BOOKING_CHANGE_PERCENTAGE_CHARGE / 100; + console.log('\t\t\tThis is [shortened] incident ! Charge fee : ', chargeFee); const incident = { reservationId, memberId, @@ -81,12 +105,15 @@ const chargeBookingChanges = (changes) => { }; incidents.push(incident); + }else{ + console.log('\t\tNo'); } } else { + console.log('\t\tNo'); // Reservation moved to another day // Add cancellation charge const chargeFee = oldReservationLength * reservationHourlyRate * BOOKING_CHANGE_PERCENTAGE_CHARGE / 100; - + console.log('\t\t\tThis is incident ! Charge fee : ', chargeFee); const incident = { reservationId, memberId, @@ -103,10 +130,15 @@ const chargeBookingChanges = (changes) => { incidents.push(incident); } }else{ + console.log('\t\tYes'); const differenceFromCreation = moment.utc().diff(reservationCreationTimestamp, 'minutes'); + console.log('\tIs booking created in past ', ALLOWED_BOOKING_CANCELLATION_TIME, ' minutes ?', differenceFromCreation, ' > ', ALLOWED_BOOKING_CANCELLATION_TIME); if (differenceFromCreation > ALLOWED_BOOKING_CANCELLATION_TIME){ + console.log('\t\tYes'); const chargeFee = reservationHourlyRate * oldReservationLength * BOOKING_CHANGE_PERCENTAGE_CHARGE / 100; + + console.log('\t\t\tThis is [cancellation] incident ! charge fee : ', chargeFee); const incident = { reservationId, memberId, @@ -124,10 +156,14 @@ const chargeBookingChanges = (changes) => { } } } + else{ + console.log('\t\tNo'); + } } } }); - resolve(bulkWriteBookingChangeIncidents(incidents)); + + resolve(incidents); }else{ reject('Input argument is not an array !'); } @@ -148,6 +184,7 @@ const getChargedCanceledReservations = (reservationIds) => { }; module.exports = { - chargeBookingChanges, getChargedCanceledReservations, + getIncidentsFromChanges, + bulkWriteBookingChangeIncidents, }; diff --git a/services/integration/bookingChangeLog.js b/services/integration/bookingChangeLog.js index c35f5d6..8ee8da5 100644 --- a/services/integration/bookingChangeLog.js +++ b/services/integration/bookingChangeLog.js @@ -2,7 +2,7 @@ const db = require('../../models/index'); -const bulkWriteChanges = ((changes) => { +const bulkWriteChanges = (changes) => { const changeLogsForDB = []; changes.forEach((change) => { @@ -48,7 +48,7 @@ const bulkWriteChanges = ((changes) => { return db.bookingReservationChangeLog.bulkCreate(changeLogsForDB); // console.log(changeLogsForDB); // return new Promise((resolve) => resolve()); -}); +}; module.exports = { bulkWriteChanges, diff --git a/services/integration/checkBookingChange.js b/services/integration/checkBookingChange.js index 3606c3e..599c9df 100644 --- a/services/integration/checkBookingChange.js +++ b/services/integration/checkBookingChange.js @@ -2,7 +2,7 @@ const { fetchAllBookings, bulkWriteReservationsWithChangesTracking } = require('../officeRnD/bookings'); -const { chargeBookingChanges } = require('./bookingChangeCharges'); +const { getIncidentsFromChanges, bulkWriteBookingChangeIncidents } = require('./bookingChangeCharges'); const { bulkWriteChanges } = require('./bookingChangeLog'); const checkBookingChanges = () => { @@ -13,9 +13,11 @@ const checkBookingChanges = () => { .then((changes) => { bulkWriteChanges(changes) .then(() => { - chargeBookingChanges(changes) - .then(() => { - resolve(true); + getIncidentsFromChanges(changes) + .then((incidents) => { + bulkWriteBookingChangeIncidents(incidents) + .then(() => resolve(true)) + .catch((error) => reject(error)); }) .catch((error) => { console.log('Error creating charges ', error); diff --git a/services/officeRnD/bookings.js b/services/officeRnD/bookings.js index 2f18f0c..49298d9 100644 --- a/services/officeRnD/bookings.js +++ b/services/officeRnD/bookings.js @@ -205,27 +205,34 @@ const bulkWriteReservationsWithChangesTracking = (reservations) => { individualHooks: true, }) .then(([updateCount, updatedInstances]) => { - if (updateCount === 0){ - const oldReservation = { - start: null, - end: null, - resourceId: null, - }; + try { + if (updateCount === 0) { + const oldReservation = { + start: null, + end: null, + resourceId: null, + }; - changes.push({ - oldReservation, - newReservation: reservation, - }); - resolve(db.bookingReservation.upsert(reservation)); - }else{ - resolve(); + changes.push({ + oldReservation, + newReservation: reservation, + }); + db.bookingReservation.upsert(reservation) + .then(() => resolve()) + .catch((error) => reject(error)); + } else { + resolve(); + } + }catch (e) { + console.log('CATCH E : ', e); + reject(e); } }) .catch((error) => { console.log('Error updating'); console.log(error); reject(error); - }) + }); }); }; From 69ebf36bb1dc6fa875ebc9dfab2752283c50bbdc Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Wed, 21 Aug 2019 06:49:12 +0200 Subject: [PATCH 2/5] add comment for possible future improvement --- services/integration/bookingChangeCharges.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/integration/bookingChangeCharges.js b/services/integration/bookingChangeCharges.js index 7299e79..108829d 100644 --- a/services/integration/bookingChangeCharges.js +++ b/services/integration/bookingChangeCharges.js @@ -14,6 +14,8 @@ const { const bulkWriteBookingChangeIncidents = (incidents) => { + //TODO: Check if this complete method can be replaced with + // return db.bookingChangeIncident.bulkCreate(incidents) return new Promise((resolve, reject) => { const asyncJobs = []; From 1bb87cb47623bcdf06204cb8a112ff5f8519b888 Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Thu, 22 Aug 2019 02:28:11 +0200 Subject: [PATCH 3/5] fix unhandled promise warning when new booking is detected --- models/bookingReservation.js | 1 + services/officeRnD/bookings.js | 85 +++++++++++++++++----------------- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/models/bookingReservation.js b/models/bookingReservation.js index d6ba4c7..0fbdca3 100644 --- a/models/bookingReservation.js +++ b/models/bookingReservation.js @@ -5,6 +5,7 @@ module.exports = (sequelize, DataTypes) => { reservationId: { type: DataTypes.TEXT, primaryKey: true, + unique: true, }, memberId: DataTypes.TEXT, officeId: DataTypes.TEXT, diff --git a/services/officeRnD/bookings.js b/services/officeRnD/bookings.js index 49298d9..0ae97e5 100644 --- a/services/officeRnD/bookings.js +++ b/services/officeRnD/bookings.js @@ -194,55 +194,54 @@ const bulkWriteReservationsWithChangesTracking = (reservations) => { } }); - reservations.forEach((reservation) => { - const asyncReservationUpdate = () => { - return new Promise((resolve, reject) => { - db.bookingReservation.update(reservation, { - where: { - reservationId: reservation.reservationId, - }, - returning: true, - individualHooks: true, - }) - .then(([updateCount, updatedInstances]) => { - try { - if (updateCount === 0) { - const oldReservation = { - start: null, - end: null, - resourceId: null, - }; + const newReservations = []; + const asyncReservationUpdate = (reservation) => { + return new Promise((resolve, reject) => { + db.bookingReservation.update(reservation, { + where: { + reservationId: reservation.reservationId, + }, + returning: true, + individualHooks: true, + }) + .then(([updateCount, updatedInstances]) => { + try { + if (updateCount === 0) { + const oldReservation = { + start: null, + end: null, + resourceId: null, + }; - changes.push({ - oldReservation, - newReservation: reservation, - }); - db.bookingReservation.upsert(reservation) - .then(() => resolve()) - .catch((error) => reject(error)); - } else { - resolve(); - } - }catch (e) { - console.log('CATCH E : ', e); - reject(e); + changes.push({ + oldReservation, + newReservation: reservation, + }); + + newReservations.push(reservation); } - }) - .catch((error) => { - console.log('Error updating'); - console.log(error); - reject(error); - }); - }); - }; - - asyncJobs.push(asyncReservationUpdate()); - }); + resolve(); + }catch (e) { + console.log('CATCH E : ', e); + reject(e); + } + }) + .catch((error) => { + console.log('Error updating'); + console.log(error); + reject(error); + }); + }); + }; + reservations.forEach((reservation) => asyncJobs.push(asyncReservationUpdate(reservation))); Promise.all(asyncJobs) .then(() => { db.bookingReservation.removeHook('updateHook'); - resolve(changes); + + db.bookingReservation.bulkCreate(newReservations) + .then(() => resolve(changes)) + .catch((error) => reject(error)); }) .catch((error) => reject(error)); }); From 934ffa90a71b45bdf5bfeefb7b8c25ce99d68dae Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Thu, 22 Aug 2019 11:14:35 +0200 Subject: [PATCH 4/5] add migration; insert 'deleted' column in booking change incidents table --- ...d-column-for-booking-change-incidents-table.js | 15 +++++++++++++++ models/bookingChangeIncident.js | 1 + services/integration/reports.js | 6 +++++- 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 migrations/20190822090157-add-deleted-column-for-booking-change-incidents-table.js diff --git a/migrations/20190822090157-add-deleted-column-for-booking-change-incidents-table.js b/migrations/20190822090157-add-deleted-column-for-booking-change-incidents-table.js new file mode 100644 index 0000000..aa84032 --- /dev/null +++ b/migrations/20190822090157-add-deleted-column-for-booking-change-incidents-table.js @@ -0,0 +1,15 @@ +'use strict'; + +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.addColumn('bookingChangeIncidents', 'deleted', { + type: Sequelize.BOOLEAN, + defaultValue: false, + after: 'chargeFee', + }); + }, + + down: (queryInterface, Sequelize) => { + return queryInterface.removeColumn('bookingChangeIncidents', 'deleted'); + } +}; diff --git a/models/bookingChangeIncident.js b/models/bookingChangeIncident.js index a5e9a75..5ed9ddc 100644 --- a/models/bookingChangeIncident.js +++ b/models/bookingChangeIncident.js @@ -12,6 +12,7 @@ module.exports = (sequelize, DataTypes) => { newBookingEnd: DataTypes.DATE, incidentType: DataTypes.INTEGER, chargeFee: DataTypes.FLOAT, + deleted: DataTypes.BOOLEAN, }, {}); bookingChangeIncident.associate = function(models) { // associations can be defined here diff --git a/services/integration/reports.js b/services/integration/reports.js index ae79c34..e5e0154 100644 --- a/services/integration/reports.js +++ b/services/integration/reports.js @@ -136,7 +136,9 @@ const getBookingChangeIncidents = (startDate, endDate, memberIds) => { 'createdAt' ]; - const filters = {}; + const filters = { + deleted: false, + }; if (startDate && endDate) { filters.createdAt = { @@ -280,6 +282,7 @@ const getAllIncidents = (dateRange, memberIds) => { newBookingEnd, incidentType, chargeFee, + deleted, createdAt, } = bookingChangeIncident; const memberName = membersMap[memberId].name; @@ -307,6 +310,7 @@ const getAllIncidents = (dateRange, memberIds) => { newBookingEndRaw: newBookingEnd, incidentType, totalChargeFee: chargeFee, + deleted, incidentTimestamp: formatTime(createdAt), incidentTimestampRaw: createdAt, }); From 9c855692b764f25e6f0a6ddb3ee9c24e1647edfd Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Sat, 24 Aug 2019 09:26:52 +0200 Subject: [PATCH 5/5] remove incidents if new duration is longer than initial duration --- services/integration/bookingChangeCharges.js | 149 +++++++++++++++---- services/integration/bookingChangeLog.js | 11 ++ services/integration/checkBookingChange.js | 30 +++- 3 files changed, 154 insertions(+), 36 deletions(-) diff --git a/services/integration/bookingChangeCharges.js b/services/integration/bookingChangeCharges.js index 108829d..086d0b0 100644 --- a/services/integration/bookingChangeCharges.js +++ b/services/integration/bookingChangeCharges.js @@ -12,6 +12,32 @@ const { incidentType } = require('../../constants/constants'); +const { getBookingChangeLogsForReservationId } = require('./bookingChangeLog'); + +const getShorteningIncidentsForReservationId = (reservationId) => { + const filter = { + reservationId, + incidentType: incidentType.BOOKING_SHORTENED, + deleted: false, + }; + + return db.bookingChangeIncident.findAll({where: filter}); +}; + +const getReservationIncidentsAndLogs = (reservationId) => { + return new Promise((resolve, reject) => { + const asyncDataFetch = [getShorteningIncidentsForReservationId(reservationId), getBookingChangeLogsForReservationId(reservationId)]; + + Promise.all(asyncDataFetch) + .then((reservationData) => { + resolve({ + incidents: reservationData[0], + changeLogs: reservationData[1], + }); + }) + .catch((error) => reject(error)); + }); +}; const bulkWriteBookingChangeIncidents = (incidents) => { //TODO: Check if this complete method can be replaced with @@ -33,6 +59,8 @@ const getIncidentsFromChanges = (changes) => { return new Promise((resolve, reject) => { if (Array.isArray(changes)){ const incidents = []; + const reservationsForAdditionalCheck = []; + changes.forEach((change) => { const { oldReservation, newReservation } = change; if (oldReservation && newReservation){ @@ -54,45 +82,45 @@ const getIncidentsFromChanges = (changes) => { const differenceFromNow = oldStart.diff(moment.utc(), 'minutes'); - console.log('Change detected : '); - console.log('\tOld reservation :'); - console.log('\t\tResource : ', oldResourceId); - console.log('\t\tStart : ', oldStart.format()); - console.log('\t\tEnd : ', oldEnd.format()); - console.log('\t\tLength : ', oldReservationLength); - console.log('\tNew Reservation :'); - console.log('\t\tResource : ', newReservation.resourceId); - console.log('\t\tStart : ', newStart.format()); - console.log('\t\tEnd : ', newEnd.format()); - console.log('\t\tLength : ', newReservationLength); - console.log('\t\tCanceled : ', canceled); - console.log('\t---------------------------------'); - console.log('\tDifference : ', differenceFromNow, 'minutes'); - console.log(''); - console.log('\tIs booking changed too late ? ', differenceFromNow, ' < ', CHARGE_BOOKING_CHANGE_UNDER_TIME); + // console.log('Change detected : '); + // console.log('\tOld reservation :'); + // console.log('\t\tResource : ', oldResourceId); + // console.log('\t\tStart : ', oldStart.format()); + // console.log('\t\tEnd : ', oldEnd.format()); + // console.log('\t\tLength : ', oldReservationLength); + // console.log('\tNew Reservation :'); + // console.log('\t\tResource : ', newReservation.resourceId); + // console.log('\t\tStart : ', newStart.format()); + // console.log('\t\tEnd : ', newEnd.format()); + // console.log('\t\tLength : ', newReservationLength); + // console.log('\t\tCanceled : ', canceled); + // console.log('\t---------------------------------'); + // console.log('\tDifference : ', differenceFromNow, 'minutes'); + // console.log(''); + // console.log('\tIs booking changed too late ? ', differenceFromNow, ' < ', CHARGE_BOOKING_CHANGE_UNDER_TIME); if (differenceFromNow < CHARGE_BOOKING_CHANGE_UNDER_TIME){ const { reservationId, memberId, resourceId } = newReservation; - console.log('\t\tYes'); + // console.log('\t\tYes'); - console.log('\tIs booking canceled ?'); + // console.log('\tIs booking canceled ?'); if (!canceled) { - console.log('\t\tNo'); + // console.log('\t\tNo'); // Check if new reservation is on same day const sameDay = oldStart.tz(reservationTimezone).isSame(newStart.tz(reservationTimezone), 'day'); - console.log('\tIs new reservation on the same day ?'); + // console.log('\tIs new reservation on the same day ?'); if (sameDay) { - console.log('\t\tYes'); + // console.log('\t\tYes'); // Reservation moved in same day // Check if member shortened the reservation - console.log('\tIs reservation shortened ? ', newReservationLength, ' < ', oldReservationLength); + // console.log('\tIs reservation shortened ? ', newReservationLength, ' < ', oldReservationLength); if (newReservationLength < oldReservationLength) { - console.log('\t\tYes'); + // console.log('\t\tYes'); const differenceInLength = oldReservationLength - newReservationLength; const chargeFee = differenceInLength * reservationHourlyRate * BOOKING_CHANGE_PERCENTAGE_CHARGE / 100; - console.log('\t\t\tThis is [shortened] incident ! Charge fee : ', chargeFee); + // console.log('\t\t\tThis is [shortened] incident ! Charge fee : ', chargeFee); const incident = { reservationId, memberId, @@ -108,14 +136,14 @@ const getIncidentsFromChanges = (changes) => { incidents.push(incident); }else{ - console.log('\t\tNo'); + reservationsForAdditionalCheck.push(reservationId); } } else { console.log('\t\tNo'); // Reservation moved to another day // Add cancellation charge const chargeFee = oldReservationLength * reservationHourlyRate * BOOKING_CHANGE_PERCENTAGE_CHARGE / 100; - console.log('\t\t\tThis is incident ! Charge fee : ', chargeFee); + // console.log('\t\t\tThis is incident ! Charge fee : ', chargeFee); const incident = { reservationId, memberId, @@ -132,15 +160,15 @@ const getIncidentsFromChanges = (changes) => { incidents.push(incident); } }else{ - console.log('\t\tYes'); + // console.log('\t\tYes'); const differenceFromCreation = moment.utc().diff(reservationCreationTimestamp, 'minutes'); - console.log('\tIs booking created in past ', ALLOWED_BOOKING_CANCELLATION_TIME, ' minutes ?', differenceFromCreation, ' > ', ALLOWED_BOOKING_CANCELLATION_TIME); + // console.log('\tIs booking created in past ', ALLOWED_BOOKING_CANCELLATION_TIME, ' minutes ?', differenceFromCreation, ' > ', ALLOWED_BOOKING_CANCELLATION_TIME); if (differenceFromCreation > ALLOWED_BOOKING_CANCELLATION_TIME){ - console.log('\t\tYes'); + // console.log('\t\tYes'); const chargeFee = reservationHourlyRate * oldReservationLength * BOOKING_CHANGE_PERCENTAGE_CHARGE / 100; - console.log('\t\t\tThis is [cancellation] incident ! charge fee : ', chargeFee); + // console.log('\t\t\tThis is [cancellation] incident ! charge fee : ', chargeFee); const incident = { reservationId, memberId, @@ -159,25 +187,69 @@ const getIncidentsFromChanges = (changes) => { } } else{ - console.log('\t\tNo'); + // console.log('\t\tNo'); } } } }); - resolve(incidents); + resolve({incidents, reservationsForAdditionalCheck}); }else{ reject('Input argument is not an array !'); } }); }; +const getReservationsIncidentsForRemoval = (reservations) => { + return new Promise((resolve, reject) => { + const asyncChecks = []; + reservations.forEach((reservationId) => { + asyncChecks.push(getReservationIncidentsAndLogs(reservationId)); + }); + + Promise.all(asyncChecks) + .then((possibleRemovals) => { + const incidentsToRemove = []; + possibleRemovals.forEach((possibleRemoval) => { + const { incidents, changeLogs } = possibleRemoval; + + if (incidents.length > 0){ + const initialReservation = changeLogs && changeLogs[0] ? changeLogs[0] : undefined; + const reservationLastChange = changeLogs && changeLogs[changeLogs.length-1] ? + changeLogs[changeLogs.length-1] : undefined; + + if (initialReservation && reservationLastChange){ + const initialNewStartMoment = moment.utc(initialReservation.newStart); + const initialNewEndMoment = moment.utc(initialReservation.newEnd); + const lastNewStartMoment = moment.utc(reservationLastChange.newStart); + const lastNewEndMoment = moment.utc(reservationLastChange.newEnd); + + if (initialNewStartMoment && initialNewEndMoment && + lastNewStartMoment && lastNewEndMoment){ + + const initialDuration = initialNewEndMoment.diff(initialNewStartMoment, 'hours', true); + const lastDuration = lastNewEndMoment.diff(lastNewStartMoment, 'hours', true); + + if (lastDuration > initialDuration){ + incidentsToRemove.push(...incidents); + } + } + } + } + }); + resolve(incidentsToRemove); + }) + .catch((error) => reject(error)); + }); +}; + const getChargedCanceledReservations = (reservationIds) => { const filters = { reservationId: { [Op.in]: reservationIds, }, incidentType: incidentType.BOOKING_CANCELED_LATE, + deleted: false, }; const attributes = ['memberId', 'oldBookingStart', 'oldBookingEnd', 'chargeFee']; @@ -185,8 +257,21 @@ const getChargedCanceledReservations = (reservationIds) => { return db.bookingChangeIncident.findAll({attributes, where: filters}); }; +const deleteBookingChangeIncidents = (incidents) => { + const asyncActions = []; + incidents.forEach((incident) => { + incident.set('deleted', true); + asyncActions.push(incident.save()); + }); + + return Promise.all(asyncActions); +}; + module.exports = { getChargedCanceledReservations, getIncidentsFromChanges, bulkWriteBookingChangeIncidents, + getShorteningIncidentsForReservationId, + getReservationsIncidentsForRemoval, + deleteBookingChangeIncidents, }; diff --git a/services/integration/bookingChangeLog.js b/services/integration/bookingChangeLog.js index 8ee8da5..be59dc3 100644 --- a/services/integration/bookingChangeLog.js +++ b/services/integration/bookingChangeLog.js @@ -50,6 +50,17 @@ const bulkWriteChanges = (changes) => { // return new Promise((resolve) => resolve()); }; +const getBookingChangeLogsForReservationId = (reservationId) => { + const filter = { + reservationId, + }; + + const order = [['createdAt', 'ASC']]; + + return db.bookingReservationChangeLog.findAll({where: filter, order}); +}; + module.exports = { bulkWriteChanges, + getBookingChangeLogsForReservationId, }; diff --git a/services/integration/checkBookingChange.js b/services/integration/checkBookingChange.js index 599c9df..2bb1031 100644 --- a/services/integration/checkBookingChange.js +++ b/services/integration/checkBookingChange.js @@ -2,7 +2,12 @@ const { fetchAllBookings, bulkWriteReservationsWithChangesTracking } = require('../officeRnD/bookings'); -const { getIncidentsFromChanges, bulkWriteBookingChangeIncidents } = require('./bookingChangeCharges'); +const { + getIncidentsFromChanges, + bulkWriteBookingChangeIncidents, + getReservationsIncidentsForRemoval, + deleteBookingChangeIncidents, +} = require('./bookingChangeCharges'); const { bulkWriteChanges } = require('./bookingChangeLog'); const checkBookingChanges = () => { @@ -14,10 +19,27 @@ const checkBookingChanges = () => { bulkWriteChanges(changes) .then(() => { getIncidentsFromChanges(changes) - .then((incidents) => { + .then(({incidents, reservationsForAdditionalCheck}) => { bulkWriteBookingChangeIncidents(incidents) - .then(() => resolve(true)) - .catch((error) => reject(error)); + .then(() => { + getReservationsIncidentsForRemoval(reservationsForAdditionalCheck) + .then((incidentsToRemove) => { + deleteBookingChangeIncidents(incidentsToRemove) + .then(() => resolve(true)) + .catch((error) => { + console.log('Error deleting incidents : ', error); + reject(error); + }); + }) + .catch((error) => { + console.log('Failed to fetch reservations possible incidents for removal', error); + reject(error); + }); + }) + .catch((error) => { + console.log('error', error); + reject(error); + }); }) .catch((error) => { console.log('Error creating charges ', error);