feat(services-insert): added first proof of concept (PoC)

This commit is contained in:
dancingCycle 2023-11-23 15:40:12 +01:00
parent a844152fc2
commit 81adc47377
7 changed files with 85 additions and 39 deletions

View File

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

View File

@ -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?

View File

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

View File

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

View File

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

View File

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

View File

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