feat(services-insert): added first proof of concept (PoC)
This commit is contained in:
parent
a844152fc2
commit
81adc47377
|
@ -3,6 +3,7 @@ const debug=require('debug')('debug');
|
|||
|
||||
const calendarAll = require('./service/calendar-all');
|
||||
const serviceAvailability = require('./service/service-availability');
|
||||
const servicesInsert = require('./service/services-insert');
|
||||
|
||||
run().catch(err => {
|
||||
debug('run: error');
|
||||
|
@ -20,29 +21,26 @@ async function run() {
|
|||
}
|
||||
|
||||
if ( !Object.prototype.toString.call(rsp) === '[object Array]') {
|
||||
debug('ERROR: run: NO Array!');
|
||||
console.error('ERROR: run: NO Array!');
|
||||
return;
|
||||
}
|
||||
|
||||
debug('run: Array!');
|
||||
|
||||
const rspLngth = rsp.length
|
||||
debug('run: rsp.length: ' + rspLngth );
|
||||
debug('run: rspLength: ' + rspLngth );
|
||||
//debug('run: rsp: ' + JSON.stringify( rsp ) );
|
||||
|
||||
if ( rspLngth === 0 ) {
|
||||
debug('ERROR: run: Why the heck is Array empty?');
|
||||
console.error('ERROR: run: Why the heck is Array empty?');
|
||||
return;
|
||||
}
|
||||
|
||||
//init services map
|
||||
const mapServices = new Map();
|
||||
debug('run: mapServices.size: '+mapServices.size);
|
||||
//debug('run: mapServices.size: '+mapServices.size);
|
||||
|
||||
//TODO clean up for ( let i = 0; i < rspLngth; i++ ) {
|
||||
for ( let i = 0; i < 1; i++ ) {
|
||||
for ( let i = 0; i < rspLngth; i++ ) {
|
||||
const serviceId = rsp[i].service_id;
|
||||
debug('run: serviceId: ' + serviceId );
|
||||
//debug('run: serviceId: ' + serviceId );
|
||||
|
||||
//get service
|
||||
let service = [];
|
||||
|
@ -52,8 +50,15 @@ async function run() {
|
|||
}else{
|
||||
service = mapServices.get(serviceId);
|
||||
}
|
||||
debug('run: service.length: '+service.length);
|
||||
}
|
||||
//debug('run: serviceId: ' + serviceId );
|
||||
//debug('run: service.length: ' + service.length);
|
||||
//debug('run: service: ' + JSON.stringify( service ));
|
||||
|
||||
//create dates string
|
||||
let dates = '';
|
||||
service.forEach((item) => dates = dates.concat(item).concat(','));
|
||||
//debug('run: dates: ' + dates);
|
||||
servicesInsert.set(serviceId, dates);
|
||||
}
|
||||
debug('run: done.');
|
||||
};
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
const DEBUG=require('debug')('debug');
|
||||
DEBUG('config start...');
|
||||
|
||||
require('dotenv').config();
|
||||
|
||||
|
@ -18,5 +17,7 @@ DEBUG('config host: '+config.db.host);
|
|||
DEBUG('config port: '+config.db.port);
|
||||
DEBUG('config user: '+config.db.user);
|
||||
DEBUG('config database: '+config.db.database);
|
||||
DEBUG('config schema: '+config.db.schema);
|
||||
module.exports = config;
|
||||
DEBUG('config done.');
|
||||
//TODO Shall we use config.* or process.*?
|
||||
//TODO Shall we add schema?
|
||||
|
|
|
@ -10,20 +10,27 @@ const mapping=require('../utils/mapping');
|
|||
* @return Array of dates
|
||||
*/
|
||||
async function get(serviceId = 0) {
|
||||
debug('datesServiceAdded serviceId: '+serviceId);
|
||||
//debug('datesServiceAdded serviceId: '+serviceId);
|
||||
|
||||
const schema = process.env.DB_SCHEMA || 'schema';
|
||||
debug('schema: ' + schema );
|
||||
////debug('schema: ' + schema );
|
||||
|
||||
const query=`SELECT calendar_dates.date FROM ` + schema + `.calendar, ` + schema + `.calendar_dates WHERE calendar.service_id = calendar_dates.service_id AND calendar.service_id = '${serviceId}' and calendar_dates.exception_type = '1';`;
|
||||
debug('datesServiceAdded query: '+query);
|
||||
//debug('datesServiceAdded query: '+query);
|
||||
|
||||
const dates = await db.query(query);
|
||||
debug('datesServiceAdded dates.length: '+dates.length);
|
||||
//debug('datesServiceAdded dates.length: '+dates.length);
|
||||
|
||||
const setDatesServiceAdded = new Set();
|
||||
dates.forEach( ( date ) => setDatesServiceAdded.add( date.date.getTime() ) );
|
||||
debug('datesServiceAdded setDatesServiceAdded.size: ' + setDatesServiceAdded.size );
|
||||
dates.forEach( ( date ) => {
|
||||
const dateShort = date.date.getFullYear() + '-' + (date.date.getMonth()+1) + '-' + date.date.getDate();
|
||||
//TODO clean up
|
||||
////debug('datesServiceAdded date: ' + date.date + ' in ts: ' + date.date.getTime());
|
||||
////debug('datesServiceAdded dateShort: ' + dateShort );
|
||||
//setDatesServiceAdded.add( date.date.getTime() );
|
||||
setDatesServiceAdded.add( dateShort );
|
||||
});
|
||||
//debug('datesServiceAdded setDatesServiceAdded.size: ' + setDatesServiceAdded.size );
|
||||
return mapping.set2Array(setDatesServiceAdded);
|
||||
};
|
||||
|
||||
|
|
|
@ -14,13 +14,13 @@ async function get(serviceId = 0) {
|
|||
//debug('datesServiceAvailable serviceId: '+serviceId);
|
||||
|
||||
const schema = process.env.DB_SCHEMA || 'schema';
|
||||
debug('schema: ' + schema );
|
||||
//debug('schema: ' + schema );
|
||||
|
||||
const query=`SELECT * FROM ` + schema + `.calendar WHERE service_id = '${serviceId}';`;
|
||||
debug('datesServiceAvailable query: ' + query);
|
||||
//debug('datesServiceAvailable query: ' + query);
|
||||
|
||||
const dataService = await db.query(query);
|
||||
debug('datesServiceAvailable dataService.length: ' + dataService.length);
|
||||
//debug('datesServiceAvailable dataService.length: ' + dataService.length);
|
||||
|
||||
const monday=dataService[0].monday;
|
||||
const tuesday=dataService[0].tuesday;
|
||||
|
@ -30,9 +30,12 @@ async function get(serviceId = 0) {
|
|||
const saturday=dataService[0].saturday;
|
||||
const sunday=dataService[0].sunday;
|
||||
|
||||
const dateStart = dataService[0].start_date;
|
||||
const dateEnd = dataService[0].end_date;
|
||||
const dateStart = new Date( dataService[0].start_date );
|
||||
//debug('datesServiceAvailable start: ' + dateStart);
|
||||
const dateEnd = new Date ( dataService[0].end_date );
|
||||
//debug('datesServiceAvailable end: ' + dateEnd);
|
||||
let dateNext = new Date( dateStart );
|
||||
//debug('datesServiceAvailable next: ' + dateNext);
|
||||
|
||||
const setDatesServiceAvailable = new Set();
|
||||
while( dateNext.getTime() <= dateEnd.getTime() ) {
|
||||
|
@ -43,13 +46,15 @@ async function get(serviceId = 0) {
|
|||
(weekday===date.weekday.thursday && thursday) ||
|
||||
(weekday===date.weekday.friday && friday) ||
|
||||
(weekday===date.weekday.saturday && saturday) ||
|
||||
(weekday===date.weekday.sunday && sunday)){
|
||||
setDatesServiceAvailable.add( dateNext.getTime() );
|
||||
(weekday===date.weekday.sunday && sunday)){
|
||||
//TODO clean up
|
||||
//setDatesServiceAvailable.add( dateNext.getTime() );
|
||||
setDatesServiceAvailable.add( dateNext.getFullYear() + '-' + (dateNext.getMonth()+1) + '-' + dateNext.getDate());
|
||||
}
|
||||
//TODO Optimize!
|
||||
dateNext = new Date( dateNext.setDate( dateNext.getDate() + 1 ));
|
||||
}
|
||||
debug('setDatesServiceAvailable size: ' + setDatesServiceAvailable.size );
|
||||
//debug('setDatesServiceAvailable size: ' + setDatesServiceAvailable.size );
|
||||
return mapping.set2Array(setDatesServiceAvailable);
|
||||
};
|
||||
|
||||
|
|
|
@ -10,20 +10,24 @@ const mapping=require('../utils/mapping');
|
|||
* @return Array of dates
|
||||
*/
|
||||
async function get(serviceId = 0) {
|
||||
debug('datesServiceRemoved serviceId: '+serviceId);
|
||||
//debug('datesServiceRemoved serviceId: '+serviceId);
|
||||
|
||||
const schema = process.env.DB_SCHEMA || 'schema';
|
||||
debug('schema: ' + schema );
|
||||
//debug('schema: ' + schema );
|
||||
|
||||
const query=`SELECT calendar_dates.date FROM ` + schema + `.calendar, ` + schema + `.calendar_dates WHERE calendar.service_id = calendar_dates.service_id AND calendar.service_id = '${serviceId}' and calendar_dates.exception_type = '2';`;
|
||||
debug('datesServiceRemoved query: '+query);
|
||||
//debug('datesServiceRemoved query: '+query);
|
||||
|
||||
const dates = await db.query(query);
|
||||
debug('datesServiceRemoved dates.length: '+dates.length);
|
||||
//debug('datesServiceRemoved dates.length: '+dates.length);
|
||||
|
||||
const setDatesServiceRemoved = new Set();
|
||||
dates.forEach( ( date ) => setDatesServiceRemoved.add( date.date.getTime() ) );
|
||||
debug('datesServiceAdded setDatesServiceRemoved.size: ' + setDatesServiceRemoved.size );
|
||||
dates.forEach( ( date ) => {
|
||||
//TODO clean up
|
||||
//setDatesServiceRemoved.add( date.date.getTime() );
|
||||
setDatesServiceRemoved.add( date.date.getFullYear() + '-' + (date.date.getMonth()+1) + '-' + date.date.getDate());
|
||||
});
|
||||
//debug('datesServiceAdded setDatesServiceRemoved.size: ' + setDatesServiceRemoved.size );
|
||||
return mapping.set2Array(setDatesServiceRemoved);
|
||||
};
|
||||
|
||||
|
|
|
@ -8,35 +8,37 @@ const mapping=require('../utils/mapping');
|
|||
|
||||
/**
|
||||
* Create array of days in timestamp format
|
||||
*
|
||||
* @return Array
|
||||
*/
|
||||
async function get(serviceId = 0) {
|
||||
//debug('serviceAvailability serviceId: '+serviceId);
|
||||
|
||||
//array[date in timestamp format]
|
||||
const available = await datesServiceAvailable.get(serviceId);
|
||||
debug('serviceAvailability available: ' + available.length);
|
||||
//debug('serviceAvailability available: ' + available.length);
|
||||
|
||||
//TODO Make sure this function works with not weekday set at all!
|
||||
|
||||
//array[date in timestamp format]
|
||||
const added = await datesServiceAdded.get(serviceId);
|
||||
debug('serviceAvailability added: ' + added.length);
|
||||
//debug('serviceAvailability added: ' + added.length);
|
||||
|
||||
//array[date in timestamp format]
|
||||
const removed = await datesServiceRemoved.get(serviceId);
|
||||
debug('serviceAvailability removed: ' + removed.length);
|
||||
//debug('serviceAvailability removed: ' + removed.length);
|
||||
|
||||
const setAvail = new Set( available );
|
||||
debug('serviceAvailability setAvail.size: ' + setAvail.size );
|
||||
//debug('serviceAvailability setAvail.size: ' + setAvail.size );
|
||||
|
||||
removed.forEach( rmEntry => setAvail.delete( rmEntry ) );
|
||||
debug('serviceAvailability setAvailWithRmed.size: ' + setAvail.size );
|
||||
//debug('serviceAvailability setAvail.size: ' + setAvail.size );
|
||||
|
||||
//add dates to service
|
||||
//TODO optimize!
|
||||
const setAvailWithAdded = new Set( [...setAvail, ...new Set( added ) ] );
|
||||
|
||||
debug('serviceAvailability size: ' + setAvailWithAdded.size);
|
||||
//debug('serviceAvailability setAvailWithAdded size: ' + setAvailWithAdded.size);
|
||||
return mapping.set2Array(setAvailWithAdded);
|
||||
};
|
||||
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
require('dotenv').config();
|
||||
|
||||
const db = require('./db');
|
||||
|
||||
/**
|
||||
* Insert row in tabl service
|
||||
*
|
||||
* @return PostreSQL command tag
|
||||
*/
|
||||
async function set(serviceId = 0, dates = '') {
|
||||
const schema = process.env.DB_SCHEMA || 'schema';
|
||||
|
||||
const query = `INSERT INTO ` + schema + `.services (feed_index, service_id, dates) VALUES (1, '${serviceId}', '${dates}');`
|
||||
|
||||
const rsp = await db.query(query);
|
||||
|
||||
return rsp;
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
set
|
||||
};
|
Loading…
Reference in New Issue