'use strict'; const { getMappingsFromDatabase, fetchOffices, fetchResources, saveNewMappingToDatabase } = require('../services/officeRnD/resources'); const { parseDoorLockDataFile, writeDoorLockEvent } = require('../services/doorLock'); const { fetchAllBookings, writeBookingReservation } = require('../services/officeRnD/bookings'); const { officeRnDAPIErrors } = require('../constants/constants'); const IncomingForm = require('formidable').IncomingForm; const uploadDoorLockData = (req, res) => { const form = new IncomingForm(); const fileParsers = []; form.on('file', (field, file) => { if (file && file.type === 'text/csv') { fileParsers.push(parseDoorLockDataFile(file)); } }); form.on('end', () => { Promise.all(fileParsers) .then((parserResults) => { const parsedData = []; const parserErrors = []; const unknownMembers = []; parserResults.forEach((parserResult) => { parsedData.push(...parserResult.parsedData); parserErrors.push(...parserResult.errors); unknownMembers.push(...parserResult.unknownMembers); }); res.json({ parsedData, parserErrors, unknownMembers }); fetchAllBookings() .then((bookingEntries) => { bookingEntries.forEach((bookingEntry) => writeBookingReservation(bookingEntry)); }) .catch((error) => { console.log('===> ERROR'); console.log(error); }); parsedData.forEach((entry) => { writeDoorLockEvent(entry); }); }) .catch((error) => { res.status(500).send(officeRnDAPIErrors.FAILED_TO_FETCH_MEMBERS); }); }); form.parse(req); }; const getKnownOfficeResourceMappings = (req, res) => { const dataToFetch = [getMappingsFromDatabase(), fetchOffices(), fetchResources() ]; Promise.all(dataToFetch) .then(result => { res.send({ existingMappings: result[0], offices: result[1], resources: result[2], }); }) .catch(error => { res.status(500).send(); }); }; const addNewMapping = (req, res) => { const newMapping = req.body && req.body.mapping ? req.body.mapping : null; if (newMapping && newMapping.officeSlug && newMapping.resourceSlug && newMapping.officeId && newMapping.resourceId){ saveNewMappingToDatabase(newMapping) .then(result => { res.send(newMapping); }) .catch(error => { res.status(500).send(error); }); } }; module.exports = { uploadDoorLockData, getKnownOfficeResourceMappings, addNewMapping, };