fix wrong exit entry detection

This commit is contained in:
Bilal Catic
2019-12-12 09:19:33 +01:00
parent 3d7db8b156
commit b71d869f49

View File

@@ -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));
});