136 lines
4.2 KiB
JavaScript
136 lines
4.2 KiB
JavaScript
'use strict';
|
|
|
|
const db = require('../../models/index');
|
|
const moment = require('moment-timezone');
|
|
const Op = require('sequelize').Op;
|
|
|
|
const { API } = require('../../helpers/api');
|
|
const { officeRnDAPIErrors } = require('../../constants/constants');
|
|
|
|
const fetchAllBookings = () => {
|
|
return new Promise((resolve, reject) => {
|
|
API.get('/bookings')
|
|
.then((result) => {
|
|
const cleanedBookingReservations = [];
|
|
const bookingData = result && result.data ? result.data : [];
|
|
|
|
bookingData.forEach((fullBookingEntry) => {
|
|
cleanedBookingReservations.push({
|
|
reservationId: fullBookingEntry['_id'],
|
|
memberId: fullBookingEntry.member,
|
|
officeId: fullBookingEntry.office,
|
|
resourceId: fullBookingEntry.resourceId,
|
|
start: fullBookingEntry.start.dateTime,
|
|
end: fullBookingEntry.end.dateTime,
|
|
timezone: fullBookingEntry.timezone,
|
|
canceled: fullBookingEntry.canceled || false,
|
|
});
|
|
});
|
|
resolve(cleanedBookingReservations);
|
|
})
|
|
.catch((error) => {
|
|
console.log(officeRnDAPIErrors.FAILED_TO_FETCH_BOOKINGS);
|
|
console.log('Details : ', error);
|
|
reject(officeRnDAPIErrors.FAILED_TO_FETCH_BOOKINGS);
|
|
});
|
|
});
|
|
};
|
|
|
|
const getAllFinishedBookings = () => {
|
|
const attributes = ['reservationId', 'memberId', 'resourceId', 'start', 'end', 'timezone'];
|
|
const filters = {
|
|
canceled: false,
|
|
end: {
|
|
[Op.lt]: moment().toISOString()
|
|
}
|
|
};
|
|
|
|
return db.bookingReservation.findAll({
|
|
attributes,
|
|
where: filters,
|
|
order: [
|
|
['start', 'ASC'],
|
|
]
|
|
})
|
|
};
|
|
|
|
const getFirstNextBooking = (reservation) => {
|
|
return new Promise ((resolve, reject) => {
|
|
const {resourceId, start, timezone} = reservation;
|
|
const endOfTheDay = moment.tz(start, timezone).endOf('Day').toISOString();
|
|
|
|
const attributes = ['reservationId', 'memberId', 'resourceId', 'start', 'end', 'timezone'];
|
|
const filters = {
|
|
canceled: false,
|
|
start: {
|
|
[Op.gt]: start
|
|
},
|
|
end: {
|
|
[Op.lte]: endOfTheDay
|
|
},
|
|
resourceId,
|
|
};
|
|
const order = [['start', 'ASC']];
|
|
|
|
db.bookingReservation.findAll({
|
|
attributes,
|
|
where: filters,
|
|
order,
|
|
})
|
|
.then((reservations) => {
|
|
if (reservations && reservations[0]){
|
|
resolve(reservations[0]);
|
|
}else{
|
|
resolve(undefined);
|
|
}
|
|
})
|
|
.catch((error) => reject(error));
|
|
});
|
|
};
|
|
|
|
const getFirstPreviousBooking = (reservation) => {
|
|
return new Promise ((resolve, reject) => {
|
|
const {resourceId, start, timezone} = reservation;
|
|
const startOfTheDay = moment.tz(start, timezone).startOf('Day').toISOString();
|
|
|
|
const attributes = ['reservationId', 'memberId', 'resourceId', 'start', 'end', 'timezone'];
|
|
const filters = {
|
|
canceled: false,
|
|
start: {
|
|
[Op.gte]: startOfTheDay
|
|
},
|
|
end: {
|
|
[Op.lte]: start
|
|
},
|
|
resourceId,
|
|
};
|
|
const order = [['end', 'DESC']];
|
|
|
|
db.bookingReservation.findAll({
|
|
attributes,
|
|
where: filters,
|
|
order,
|
|
})
|
|
.then((reservations) => {
|
|
if (reservations && reservations[0]){
|
|
resolve(reservations[0]);
|
|
}else{
|
|
resolve(undefined);
|
|
}
|
|
})
|
|
.catch((error) => reject(error));
|
|
});
|
|
};
|
|
|
|
const writeBookingReservation = (bookingReservation) => {
|
|
return db.bookingReservation.findOrCreate({where: {...bookingReservation}, defaults: {...bookingReservation}});
|
|
};
|
|
|
|
module.exports = {
|
|
fetchAllBookings,
|
|
writeBookingReservation,
|
|
getAllFinishedBookings,
|
|
getFirstNextBooking,
|
|
getFirstPreviousBooking,
|
|
};
|