diff --git a/services/doorLock/doorLock.js b/services/doorLock/doorLock.js index 95ef497..1171261 100644 --- a/services/doorLock/doorLock.js +++ b/services/doorLock/doorLock.js @@ -333,7 +333,7 @@ const getLockEntryForReservation = (reservation, nextReservation) => { resourceId, }; - const order = [['timestamp', 'ASC']]; + const order = [['timestamp', 'DESC']]; db.doorLockEvent.findAll({ attributes, @@ -341,47 +341,31 @@ const getLockEntryForReservation = (reservation, nextReservation) => { order, }) .then((entries) => { - let candidateLockEntry = null; - let pairedUnlockEntry = null; - let eventFound = false; - const entriesAfterReservationEnd = entries.filter((entry) => moment.utc(entry.timestamp).isAfter(reservation.end)); + const entriesBeforeReservationEnd = entries.filter(entry => moment.utc(entry.timestamp).isBefore(reservation.end)); - entriesAfterReservationEnd.forEach((entry) => { - if (!eventFound) { - if (entry.event === doorLockEvents.USER_LOCKED) { - if (pairedUnlockEntry) { - pairedUnlockEntry = null; - candidateLockEntry = null; - } else { - candidateLockEntry = entry; - eventFound = true; - } - } - if (entry.event === doorLockEvents.USER_UNLOCKED){ - pairedUnlockEntry = entry; - } + if (entriesBeforeReservationEnd.length > 0){ + const lastEntryInReservationTime = entriesBeforeReservationEnd[0]; + if (lastEntryInReservationTime.event === doorLockEvents.USER_LOCKED){ + resolve(lastEntryInReservationTime); + return; } - }); - - if (eventFound){ - resolve(candidateLockEntry); - } else { - candidateLockEntry = null; - const numberOfEntriesLeft = entries.length - entriesAfterReservationEnd.length; - const entriesBeforeReservationEnd = entries.slice(0, numberOfEntriesLeft); - - entriesBeforeReservationEnd.reverse().forEach((entry) => { - if (!eventFound) { - if (entry.event === doorLockEvents.USER_LOCKED) { - eventFound = true; - candidateLockEntry = entry; - } - } - }); - - resolve(candidateLockEntry); } + + + + // Phase 2 + const numberOfEntriesLeft = entries.length - entriesBeforeReservationEnd.length; + const entriesAfterReservationEnd = entries.slice(0, numberOfEntriesLeft).reverse(); + if (entriesAfterReservationEnd.length > 0){ + const firstEntryAfterReservation = entriesAfterReservationEnd[0]; + if (firstEntryAfterReservation.event === doorLockEvents.USER_LOCKED){ + resolve(firstEntryAfterReservation); + return; + } + } + + resolve(null); }) .catch((error) => reject(error)); });