From 727c6c940f8f8285918a7c3b8b37e2c380488be0 Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Fri, 31 May 2019 06:15:19 +0200 Subject: [PATCH] fetch and save booking reservations --- controllers/doorLock.js | 10 +++++ ...90530140559-create-booking-reservations.js | 30 ++++++++++++++ models/bookingReservation.js | 15 +++++++ models/{DoorLockEvent.js => doorLockEvent.js} | 0 services/officeRnD/bookings.js | 40 +++++++++++++++++++ 5 files changed, 95 insertions(+) create mode 100644 migrations/20190530140559-create-booking-reservations.js create mode 100644 models/bookingReservation.js rename models/{DoorLockEvent.js => doorLockEvent.js} (100%) create mode 100644 services/officeRnD/bookings.js diff --git a/controllers/doorLock.js b/controllers/doorLock.js index c7bdf5e..3e57137 100644 --- a/controllers/doorLock.js +++ b/controllers/doorLock.js @@ -1,6 +1,7 @@ 'use strict'; const { parseDoorLockDataFile, writeDoorLockEvent } = require("../services/doorLock"); +const { fetchAllBookings, writeBookingReservation } = require('../services/officeRnD/bookings'); const { officeRnDAPIErrors } = require('../constants/constants'); const IncomingForm = require('formidable').IncomingForm; @@ -34,6 +35,15 @@ const uploadDoorLockData = (req, res) => { unknownMembers }); + fetchAllBookings() + .then((bookingEntries) => { + bookingEntries.forEach((bookingEntry) => writeBookingReservation(bookingEntry)); + }) + .catch((error) => { + console.log('===> ERROR'); + console.log(error); + }); + parsedData.forEach((entry) => { writeDoorLockEvent(entry); }); diff --git a/migrations/20190530140559-create-booking-reservations.js b/migrations/20190530140559-create-booking-reservations.js new file mode 100644 index 0000000..6c970bb --- /dev/null +++ b/migrations/20190530140559-create-booking-reservations.js @@ -0,0 +1,30 @@ +'use strict'; + +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.createTable('bookingReservations', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + reservationId: Sequelize.TEXT, + memberId: Sequelize.TEXT, + resource: Sequelize.TEXT, + start: Sequelize.DATE, + end: Sequelize.DATE, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }); + }, + down: (queryInterface, Sequelize) => { + return queryInterface.dropTable('bookingReservations'); + } +}; diff --git a/models/bookingReservation.js b/models/bookingReservation.js new file mode 100644 index 0000000..3a10d3e --- /dev/null +++ b/models/bookingReservation.js @@ -0,0 +1,15 @@ +'use strict'; + +module.exports = (sequelize, DataTypes) => { + const bookingReservation = sequelize.define('bookingReservation', { + reservationId: DataTypes.TEXT, + memberId: DataTypes.TEXT, + resource: DataTypes.TEXT, + start: DataTypes.DATE, + end: DataTypes.DATE, + }, {}); + bookingReservation.associate = function(models) { + // associations can be defined here + }; + return bookingReservation; +}; diff --git a/models/DoorLockEvent.js b/models/doorLockEvent.js similarity index 100% rename from models/DoorLockEvent.js rename to models/doorLockEvent.js diff --git a/services/officeRnD/bookings.js b/services/officeRnD/bookings.js new file mode 100644 index 0000000..ad834bd --- /dev/null +++ b/services/officeRnD/bookings.js @@ -0,0 +1,40 @@ +'use strict'; + +const db = require('../../models/index'); + +const { API } = require('../../helpers/api'); + +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, + resource: fullBookingEntry.resourceId, + start: fullBookingEntry.start.dateTime, + end: fullBookingEntry.end.dateTime, + }); + }); + resolve(cleanedBookingReservations); + }) + .catch((error) => { + reject(error); + }); + }); +}; + +const writeBookingReservation = (bookingReservation) => { + db.bookingReservation.findOrCreate({where: {...bookingReservation}, defaults: {...bookingReservation}}) + .then() + .catch(); +}; + +module.exports = { + fetchAllBookings, + writeBookingReservation, +};