You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.4 KiB
63 lines
1.4 KiB
2 years ago
|
'use strict';
|
||
|
|
||
|
const Boom = require('@hapi/boom');
|
||
|
const Joi = require('joi');
|
||
|
const Rfr = require('rfr');
|
||
|
|
||
|
const Calls = Rfr('/server/sections/calls');
|
||
|
|
||
|
|
||
|
const mainHandler = async (request, h) => {
|
||
|
let options = {
|
||
|
activeSection: request.params.section
|
||
|
};
|
||
|
|
||
|
switch (request.params.section) {
|
||
|
case 'calls':
|
||
|
try {
|
||
|
options.filter = await Calls.getFilter(request.query);
|
||
|
} catch (e) {
|
||
|
throw Boom.badRequest(`CDR query failed validation: ${e}`);
|
||
|
}
|
||
|
|
||
|
options.cdr = await Calls.getCdr(options.filter);
|
||
|
options.title = 'Звонки';
|
||
|
|
||
|
break;
|
||
|
case 'settings':
|
||
|
options.title = 'Настройки';
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (!options.pageCard) {
|
||
|
options.pageCard = options.title;
|
||
|
}
|
||
|
|
||
|
return h.view(request.params.section, options);
|
||
|
}
|
||
|
|
||
|
module.exports = {
|
||
|
routes: [{
|
||
|
method: 'GET',
|
||
|
path: '/public/{file*}',
|
||
|
handler: {
|
||
|
directory: {
|
||
|
path: ['./client', './shared']
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
method: 'GET',
|
||
|
path: '/{section?}',
|
||
|
handler: mainHandler,
|
||
|
options: {
|
||
|
validate: {
|
||
|
params: Joi.object({
|
||
|
section: Joi.string().optional().valid('calls', 'reports', 'status', 'settings').default('calls')
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
}]
|
||
|
}
|