feat(avrop): Created mock-api and models for avrop. (TV-288)

Squashed commit of the following:

commit 36959e892dea1213659ba26ceba797b81e1c7769
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Fri Aug 6 14:28:04 2021 +0200

    Added relationships to the mock-api data

commit e2b86b43908952cd4c46af7f58885c6e34b7eb2e
Merge: ece070a 229fb83
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Fri Aug 6 10:08:37 2021 +0200

    Merge branch 'develop' into feature/TV-288-avrop-mock-and-models

commit ece070ac9f04a3aa1984611371586b32c9d5a222
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Fri Aug 6 09:25:59 2021 +0200

    Removed duplicates from avrop mock-data

commit 005acd29f452316f1337132cf4721e4b3a409097
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Thu Aug 5 14:53:03 2021 +0200

    Added more mock-data

commit 23ce076912c5b9e7dfa9615d28654d8d09622775
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Thu Aug 5 12:04:37 2021 +0200

    Added example api-call to avrop-api service

commit 01629a1e1089e38914825408991276b5e847a709
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Thu Aug 5 11:43:48 2021 +0200

    Added mappings

commit b489c2edb99e07929b84309f784eb097d43f31cd
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Thu Aug 5 11:22:49 2021 +0200

    Added avrop models and mock-data

commit fe3d61962115e8e5b8bac3bade1609c2ef6a9bac
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Wed Aug 4 15:16:33 2021 +0200

    WIP
This commit is contained in:
Erik Tiekstra
2021-08-09 07:24:00 +02:00
parent 229fb838e5
commit f7207ae1e0
17 changed files with 627 additions and 4138 deletions

View File

@@ -1,43 +1,64 @@
import faker from 'faker';
import services from './services.js';
import kommuner from './kommuner.js';
import languages from './languages.js';
import organizations from './organizations.js';
import kommuner from './kommuner.js';
import tjanster from './tjanster.js';
faker.locale = 'sv';
const SERVICES = services.generate();
const TJANSTER = tjanster.generate();
const SUPORTLANGUAGES = languages.generate();
const TRACK = ['a', 'b', 'c'];
const TRACK = ['A', 'B', 'C'];
const ORGANIZATIONS = organizations.generate();
const KOMMUNER = kommuner.generate();
const FREKVENSER = ['25%', '50%', '75%', '100%'];
function generateIncomingAvrop(amount = 10) {
const avropList = [];
const language = SUPORTLANGUAGES[Math.floor(Math.random() * SUPORTLANGUAGES.length)];
function generateAvrop(amount = 10, deltagare) {
const avrop = [];
for (let i = 1; i <= amount; ++i) {
const avrop = {
const organization = ORGANIZATIONS[Math.floor(Math.random() * ORGANIZATIONS.length)];
const kommun = KOMMUNER[Math.floor(Math.random() * KOMMUNER.length)];
const tjanst = TJANSTER[Math.floor(Math.random() * TJANSTER.length)];
const track = TRACK[Math.floor(Math.random() * TRACK.length)];
const currentDeltagare = deltagare[i - 1];
avrop.push({
id: faker.datatype.uuid(),
firstName: faker.name.firstName(),
lastName: faker.name.lastName(),
service: SERVICES[Math.floor(Math.random() * SERVICES.length)].name,
track: TRACK[Math.floor(Math.random() * TRACK.length)],
errandNumber: faker.datatype.number({ min: 100000, max: 999999 }),
startDate: faker.date.recent(),
endDate: faker.date.future(),
supportLanguage: language.name,
interpreter: language.name,
organization: ORGANIZATIONS[Math.floor(Math.random() * ORGANIZATIONS.length)],
kommun: KOMMUNER[Math.floor(Math.random() * KOMMUNER.length)].kommun,
};
avropList.push({ ...avrop, fullName: `${avrop.firstName} ${avrop.lastName}` });
deltagare: currentDeltagare.fullName,
genomforandeReferens: faker.datatype.number({ min: 100000000, max: 999999999 }),
orgId: faker.datatype.uuid(),
leverantorId: faker.datatype.number({ min: 1000, max: 99999 }),
organisationsnummer: organization.organizationNumber,
utforandeVerksamhetId: organization.id,
utforandeverksamhet: organization.name,
kommunKod: kommun.kommunCode,
kommun: kommun.kommun,
utforandeAdressId: faker.datatype.number({ min: 10000, max: 99999 }),
adress: `${organization.address.street} ${organization.address.houseNumber}`,
ordernummer: `AKTTEST-${faker.datatype.number({ min: 10000, max: 99999 })}`,
bokningsId: faker.datatype.number({ min: 100000, max: 999999 }),
personnummer: currentDeltagare.personnummer,
sokandeId: currentDeltagare.id,
tjanstekod: tjanst.code,
tjansteNamn: tjanst.name,
deltagandeGrad: FREKVENSER[Math.floor(Math.random() * FREKVENSER.length)],
startdatumAvrop: faker.date.recent(),
slutdatumAvrop: faker.date.future(),
aktnummerDiariet: `Af-2021/0000 ${faker.datatype.number({ min: 1000, max: 9999 })}`,
tolkbehov: SUPORTLANGUAGES[Math.floor(Math.random() * SUPORTLANGUAGES.length)],
sprakstod: SUPORTLANGUAGES[Math.floor(Math.random() * SUPORTLANGUAGES.length)],
sparkod: track,
sparNamn: `Nivå ${track}: ${tjanst.name}`,
supervisorId: Math.random() > 0.3 && faker.datatype.uuid(),
recievedTimestamp: faker.date.recent(),
});
}
console.info('Incoming avrop generated...');
return avropList;
console.info('Avrop generated...');
return avrop;
}
export default {
generate: generateIncomingAvrop,
generate: generateAvrop,
};

View File

@@ -1,11 +1,11 @@
import faker from 'faker';
import authorizations from './authorizations.js';
import organizations from './organizations.js';
import services from './services.js';
import tjanster from './tjanster.js';
faker.locale = 'sv';
const SERVICES = services.generate();
const TJANSTER = tjanster.generate();
const ORGANIZATIONS = organizations.generate();
function generateEmployees(amount = 10) {
@@ -23,7 +23,7 @@ function generateEmployees(amount = 10) {
}
)}`,
organizations: [ORGANIZATIONS[Math.floor(Math.random() * ORGANIZATIONS.length)]],
services: [SERVICES[Math.floor(Math.random() * SERVICES.length)]],
services: [TJANSTER[Math.floor(Math.random() * TJANSTER.length)]],
authorizations: authorizations.generate(),
createdAt: Date.now(),
};

View File

@@ -5,22 +5,76 @@ import avrop from './avrop.js';
import currentUser from './current-user.js';
import deltagare from './deltagare.js';
import employees from './employees.js';
import kommuner from './kommuner.js';
import languages from './languages.js';
import organizations from './organizations.js';
import participants from './participants.js';
import services from './services.js';
const generatedEmployees = employees.generate(50);
const generatedDeltagare = deltagare.generate(50);
const generatedAvrop = avrop.generate(10, generatedDeltagare.slice(0, 10));
const tjanster = [];
const organizations = [];
const kommuner = [];
generatedAvrop.forEach(({ tjanstekod, tjansteNamn, utforandeVerksamhetId, utforandeverksamhet, kommunKod, kommun }) => {
const tjanstExists = tjanster.find(tjanst => tjanst.code === tjanstekod);
const organizationExists = organizations.find(organization => organization.id === utforandeVerksamhetId);
const kommunExists = kommuner.find(kommun => kommun.kommunCode === kommunKod);
if (tjanstExists) {
if (!tjanstExists.related_utforandeverksamhetIds.includes(utforandeVerksamhetId)) {
tjanstExists.related_utforandeverksamhetIds.push(utforandeVerksamhetId);
}
if (!tjanstExists.related_kommunCodes.includes(kommunKod)) {
tjanstExists.related_kommunCodes.push(kommunKod);
}
} else {
tjanster.push({
code: tjanstekod,
name: tjansteNamn,
related_utforandeverksamhetIds: [utforandeVerksamhetId],
related_kommunCodes: [kommunKod],
});
}
if (organizationExists) {
if (!organizationExists.related_tjanstIds.includes(tjanstekod)) {
organizationExists.related_tjanstIds.push(tjanstekod);
}
if (!organizationExists.related_kommunCodes.includes(kommunKod)) {
organizationExists.related_kommunCodes.push(kommunKod);
}
} else {
organizations.push({
id: utforandeVerksamhetId,
name: utforandeverksamhet,
related_tjanstIds: [tjanstekod],
related_kommunCodes: [kommunKod],
});
}
if (kommunExists) {
if (!kommunExists.related_tjanstIds.includes(tjanstekod)) {
kommunExists.related_tjanstIds.push(tjanstekod);
}
if (!kommunExists.related_utforandeverksamhetIds.includes(utforandeVerksamhetId)) {
kommunExists.related_utforandeverksamhetIds.push(utforandeVerksamhetId);
}
} else {
kommuner.push({
kommunCode: kommunKod,
kommun,
related_tjanstIds: [tjanstekod],
related_utforandeverksamhetIds: [utforandeVerksamhetId],
});
}
});
const apiData = {
services: services.generate(),
languages: languages.generate(),
employees: generatedEmployees,
kommuner: kommuner.generate(),
organizations: organizations.generate(),
avrop: avrop.generate(3),
deltagare: deltagare.generate(50),
avrop: generatedAvrop,
tjanster,
organizations,
kommuner,
deltagare: generatedDeltagare,
participants: participants.generate(50).map(participant => ({
...participant,
employeeId: generatedEmployees[Math.floor(Math.random() * generatedEmployees.length)].id,

File diff suppressed because it is too large Load Diff

View File

@@ -1,9 +1,9 @@
import faker from 'faker';
import services from './services.js';
import tjanster from './tjanster.js';
faker.locale = 'sv';
const SERVICES = services.generate();
const TJANSTER = tjanster.generate();
const STATUSES = ['active', 'follow-up'];
const STEPS = ['Gemensam planering', 'Periodisk rapport', 'Resultatrapport', 'Slutrapport'];
@@ -16,7 +16,7 @@ function generateParticipants(amount = 10) {
firstName: faker.name.firstName(),
lastName: faker.name.lastName(),
status: STATUSES[Math.floor(Math.random() * STATUSES.length)],
service: SERVICES[Math.floor(Math.random() * SERVICES.length)].name,
service: TJANSTER[Math.floor(Math.random() * TJANSTER.length)].name,
nextStep: STEPS[Math.floor(Math.random() * STEPS.length)],
errandNumber: faker.datatype.number({ min: 100000, max: 999999 }),
startDate: faker.date.recent(),

View File

@@ -1,35 +0,0 @@
import faker from 'faker';
faker.locale = 'sv';
function generateServices() {
const services = [
{
id: faker.datatype.uuid(),
name: 'KROM',
},
{
id: faker.datatype.uuid(),
name: 'KVL',
},
// {
// id: faker.datatype.uuid(),
// name: 'STOM',
// },
// {
// id: faker.datatype.uuid(),
// name: 'YSM',
// },
// {
// id: faker.datatype.uuid(),
// name: 'AUB',
// },
];
console.info('Services generated...');
return services;
}
export default {
generate: generateServices,
};

View File

@@ -0,0 +1,35 @@
import faker from 'faker';
faker.locale = 'sv';
function generateTjanster() {
const tjanster = [
{
code: faker.datatype.uuid(),
name: 'Kundval Rusta och matcha',
},
{
code: faker.datatype.uuid(),
name: 'Karriärvägledning',
},
// {
// code: faker.datatype.uuid(),
// name: 'STOM',
// },
// {
// code: faker.datatype.uuid(),
// name: 'YSM',
// },
// {
// code: faker.datatype.uuid(),
// name: 'AUB',
// },
];
console.info('Tjanster generated...');
return tjanster;
}
export default {
generate: generateTjanster,
};

View File

@@ -18,6 +18,9 @@ server.use(
'/auth': '/currentUser',
'/customerinfo/*/*': '/deltagare/$2',
'/customerinfo': '/deltagare',
'/avrop/tjanster*': '/tjanster$1',
'/avrop/utforandeverksamheter*': '/organizations$1',
'/avrop/kommuner*': '/kommuner$1',
'*page=*': '$1_page=$2',
'*limit=*': '$1_limit=$2',
'*sort=*': '$1_sort=$2',
@@ -33,7 +36,11 @@ router.render = (req, res) => {
return res.status(401).jsonp({ error: 'No valid access-token' });
}
const params = new URLSearchParams(req._parsedUrl.query);
if (res.statusCode === 404) {
return res.status(404).jsonp({ error: `Can't find path: ${pathname}` });
}
const params = req._parsedUrl.query ? new URLSearchParams(req._parsedUrl.query) : null;
// Add createdAt to the body
if (req.originalMethod === 'POST') {
@@ -46,11 +53,27 @@ router.render = (req, res) => {
let data = res.locals.data;
const deltagareRegex = /(?:\/customerinfo\/)(contact|driverlicense|education\/highest|education|translator|work\/disability|work\/languages|work\/experience)/g;
const isDeltagarePath = deltagareRegex.exec(pathname);
const avropRegex = /(?:\/avrop\/)(tjanster|utforandeverksamheter|kommuner)/g;
const isAvropPath = avropRegex.exec(pathname);
if (isDeltagarePath) {
const deltagareSubPath = getDeltagareSubPath(isDeltagarePath[1]);
data = res.locals.data[deltagareSubPath] || {};
}
if (isAvropPath) {
if (params) {
const newData = [];
params.forEach((value, key) => {
if (key === 'kommunCodes') {
value = +value;
}
newData.push(...data.filter(item => item[`related_${key}`].includes(value)));
});
data = newData.filter((value, index, arr) => arr.findIndex(item => item.code === value.code) === index);
}
}
res.jsonp({
data,
...appendMetaData(params, res),
@@ -64,7 +87,7 @@ server.listen(8000, () => {
});
function appendMetaData(params, res) {
if (params.has('_page')) {
if (params && params.has('_page')) {
const limit = +params.get('_limit');
const page = +params.get('_page');
const count = res.get('X-Total-Count');