Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_server
1 result
Show changes
Commits on Source (8)
......@@ -67,6 +67,7 @@ code_analysis:
stage: sonar-analysis
only:
- dev
- merge_requests
before_script:
- export NODE_PATH=$NODE_PATH:`npm root -g`
- npm install -g typescript
......@@ -79,7 +80,9 @@ code_analysis:
-Dsonar.projectBaseDir=.
-Dsonar.host.url=${SONAR_URL}
-Dsonar.projectKey=${SONAR_PROJECT_KEY}
-Dsonar.exclusions=scripts/**,**/*mock.*.ts,**/*spec.ts
-Dsonar.login=${SONAR_TOKEN}
-Dsonar.qualitygate.wait=true
mr:
image: docker:18.09
......
This diff is collapsed.
......@@ -84,7 +84,7 @@ services:
environment:
MYSQL_ROOT_PASSWORD: ${GHOST_DB_PASSWORD}
volumes:
- db-ghost
- db-ghost:/var/lib/mysql
es01:
image: elasticsearch:7.6.1
......@@ -96,7 +96,7 @@ services:
xpack.security.enabled: ${ELASTIC_SECURITY}
ELASTIC_PASSWORD: ${ELASTICSEARCH_PASSWORD}
volumes:
- db-elastic
- db-elastic:/usr/share/elasticsearch/data
networks:
- elastic
ports:
......@@ -120,10 +120,14 @@ services:
volumes:
db-ram:
driver: local
db-ghost:
driver: local
db-elastic:
driver: local
networks:
backend:
driver: bridge
elastic:
driver: bridge
{
"name": "ram_server",
"version": "1.9.0",
"version": "1.9.1",
"lockfileVersion": 2,
"requires": true,
"packages": {
{
"name": "ram_server",
"private": true,
"version": "1.9.0",
"version": "1.9.1",
"description": "Nest TypeScript starter repository",
"license": "MIT",
"scripts": {
......
// eslint-disable-next-line @typescript-eslint/no-var-requires
const mongoose = require('mongoose');
module.exports = {
data: [
{
_id: mongoose.Types.ObjectId('5fbb931c80a5c257dc0161f4'),
modules: [
{
id: 'accompagnantCaf',
text: 'Accompagnant CAF',
},
{
id: 'poleEmploi',
text: 'Pôle Emploi',
},
{
id: 'cpam',
text: 'CPAM',
},
{
id: 'impots',
text: 'Impôts',
},
{
id: 'logement',
text: 'Logement',
},
{
id: 'carsat',
text: 'CARSAT',
},
{
id: 'demarcheMetropolitaine',
text: 'Démarches Métropolitaines',
},
{
id: 'autres',
text: 'Autres',
},
],
name: 'Accompagnement des démarches',
id: 'proceduresAccompaniment',
__v: 0,
},
],
};
// eslint-disable-next-line @typescript-eslint/no-var-requires
const mongoose = require('mongoose');
module.exports = {
data: [
{
_id: mongoose.Types.ObjectId('5fbb933b80a5c257dc0161f5'),
modules: [
{
id: '84',
display_id: '84',
display_name: 'Modules APTIC - n°84',
digest: 'Pôle Emploi : faire ses déclarations en ligne',
text: 'Pôle Emploi : faire ses déclarations en ligne',
},
{
id: '85',
display_id: '85',
display_name: 'Modules APTIC - n°85',
digest: 'Déclarer ses revenus en ligne et découvertes des services proposés',
text: 'Déclarer ses revenus en ligne et découvertes des services proposés',
},
{
id: '86',
display_id: '86',
display_name: 'Modules APTIC - n°86',
digest: 'Accéder à ses droits sociaux et les gérer en ligne (RSA…)',
text: 'Accéder à ses droits sociaux et les gérer en ligne (RSA…)',
},
{
id: '87',
display_id: '87',
display_name: 'Modules APTIC - n°87',
digest: 'Ouvrir et gérer son dossier de retraite (CNAF/CARSAT) en ligne',
text: 'Ouvrir et gérer son dossier de retraite (CNAF/CARSAT) en ligne',
},
{
id: '88',
display_id: '88',
display_name: 'Modules APTIC - n°88',
digest: "Gérer son abonnement et ses factures d'électricité/gaz en ligne",
text: "Gérer son abonnement et ses factures d'électricité/gaz en ligne",
},
{
id: '89',
display_id: '89',
display_name: 'Modules APTIC - n°89',
digest: "Gérer ses droits d'assuré social en ligne/sur internet",
text: "Gérer ses droits d'assuré social en ligne/sur internet",
},
{
id: '93',
display_id: '93',
display_name: 'Modules APTIC - n°93',
digest: 'Plateforme Ameli.fr : la sécurité sociale en ligne',
text: 'Plateforme Ameli.fr : la sécurité sociale en ligne',
},
{
id: '95',
display_id: '95',
display_name: 'Modules APTIC - n°95',
digest: 'Plateforme France Connect',
text: 'Plateforme France Connect',
},
],
name: 'Accès aux droits',
id: 'accessRight',
__v: 0,
},
{
modules: [
{
id: '260',
display_id: '260',
display_name: 'Modules APTIC - n°260',
digest: 'Maitrise de l’environnement d’un ordinateur (clavier, souris)',
text: 'Maitrise de l’environnement d’un ordinateur (clavier, souris)',
},
{
id: '1',
display_id: '1',
display_name: 'Modules APTIC - n°1',
digest: 'Composantes et facettes de l’identité numérique',
text: 'Composantes et facettes de l’identité numérique',
},
{
id: '11',
display_id: '11',
display_name: 'Modules APTIC - n°11',
digest: 'Internet : fonctionnement et outils de navigation web',
text: 'Internet : fonctionnement et outils de navigation web',
},
{
id: '38',
display_id: '38',
display_name: 'Modules APTIC - n°38',
digest: 'Le smartphone : principes de fonctionnement',
text: 'Le smartphone : principes de fonctionnement',
},
{
id: '48',
display_id: '48',
display_name: 'Modules APTIC - n°48',
digest: 'Internet : envoyer, recevoir, gérer ses emails',
text: 'Internet : envoyer, recevoir, gérer ses emails',
},
{
id: '74',
display_id: '74',
display_name: 'Modules APTIC - n°74',
digest: 'Smartphones et Tablettes sous Androïd',
text: 'Smartphones et Tablettes sous Androïd',
},
{
id: '77',
display_id: '77',
display_name: 'Modules APTIC - n°77',
digest: "Smartphone : Les principaux gestes pour l'écran tactile",
text: "Smartphone : Les principaux gestes pour l'écran tactile",
},
],
name: 'Les compétences de base',
id: 'baseSkills',
__v: 0,
},
{
modules: [
{
id: '6',
display_id: '6',
display_name: 'Modules APTIC - n°6',
digest: "Utiliser les réseaux sociaux pour sa recherche d'emploi",
text: "Utiliser les réseaux sociaux pour sa recherche d'emploi",
},
{
id: '20',
display_id: '20',
display_name: 'Modules APTIC - n°20',
digest: 'Panorama des plateformes de recherche d’emploi',
text: 'Panorama des plateformes de recherche d’emploi',
},
{
id: '66',
display_id: '66',
display_name: 'Modules APTIC - n°66',
digest: 'Traitement de texte : découverte',
text: 'Traitement de texte : découverte',
},
{
id: '67',
display_id: '67',
display_name: 'Modules APTIC - n°67',
digest: 'Traitement de texte : utilisation de base',
text: 'Traitement de texte : utilisation de base',
},
{
id: '68',
display_id: '68',
display_name: 'Modules APTIC - n°68',
digest: 'Traitement de texte : utilisation avancée',
text: 'Traitement de texte : utilisation avancée',
},
{
id: '69',
display_id: '69',
display_name: 'Modules APTIC - n°69',
digest: 'Tableur : découverte',
text: 'Tableur : découverte',
},
{
id: '124',
display_id: '124',
display_name: 'Modules APTIC - n°124',
digest: 'Réalisation CV',
text: 'Réalisation CV',
},
{
id: '125',
display_id: '125',
display_name: 'Modules APTIC - n°125',
digest: 'Diffuser son CV en ligne',
text: 'Diffuser son CV en ligne',
},
{
id: '127',
display_id: '127',
display_name: 'Modules APTIC - n°127',
digest: "Organiser sa recherche d'emploi",
text: "Organiser sa recherche d'emploi",
},
],
name: 'Insertion sociale et professionnelle',
id: 'socialAndProfessional',
__v: 0,
},
{
_id: mongoose.Types.ObjectId('5fbb934c80a5c257dc0161f8'),
modules: [
{
id: '3',
display_id: '3',
display_name: 'Modules APTIC - n°3',
digest: "Être parent à l'ère numérique: connaître les usages, jouer son rôle de parent",
text: "Être parent à l'ère numérique: connaître les usages, jouer son rôle de parent",
},
{
id: '22',
display_id: '22',
display_name: 'Modules APTIC - n°22',
digest: 'Découvrir l’univers des jeux vidéo - 22',
text: 'Découvrir l’univers des jeux vidéo',
},
{
id: '82',
display_id: '82',
display_name: 'Modules APTIC - n°82',
digest: 'Suivre la scolarité de son enfant - 82',
text: 'Suivre la scolarité de son enfant',
},
{
id: '94',
display_id: '94',
display_name: 'Modules APTIC - n°94',
digest: "Découvrir les services en ligne de l'enfance de votre commune - 94",
text: "Découvrir les services en ligne de l'enfance de votre commune",
},
],
name: 'Aide à la parentalité',
id: 'parentingHelp',
__v: 0,
},
{
_id: mongoose.Types.ObjectId('5fbb935080a5c257dc0161f9'),
modules: [
{
id: '2',
display_id: '2',
display_name: 'Modules APTIC - n°2',
digest: 'Les conduites à risques et les bons usages du numérique - 02',
text: 'Les conduites à risques et les bons usages du numérique',
},
{
id: '5',
display_id: '5',
display_name: 'Modules APTIC - n°5',
digest: 'Découvrir les réseaux sociaux : définition, fonctionnement - 05',
text: 'Découvrir les réseaux sociaux : définition, fonctionnement',
},
{
id: '9',
display_id: '9',
display_name: 'Modules APTIC - n°9',
digest: 'Fablab : charte, valeurs et panorama des outils numériques - 09',
text: 'Fablab : charte, valeurs et panorama des outils numériques',
},
{
id: '28',
display_id: '28',
display_name: 'Modules APTIC - n°28',
digest: 'Les paiements en ligne - 28',
text: 'Les paiements en ligne',
},
{
id: '34',
display_id: '34',
display_name: 'Modules APTIC - n°34',
digest: 'Internet : comprendre les principes de fonctionnement - 35',
text: 'Internet : comprendre les principes de fonctionnement',
},
{
id: '39',
display_id: '39',
display_name: 'Modules APTIC - n°39',
digest: 'Techniques de vérification de l’information - 39',
text: 'Techniques de vérification de l’information',
},
{
id: '42',
display_id: '42',
display_name: 'Modules APTIC - n°42',
digest: 'Créer et paramétrer un compte Google - 42',
text: 'Créer et paramétrer un compte Google',
},
{
id: '51',
display_id: '51',
display_name: 'Modules APTIC - n°51',
digest: 'Gérer ses données : sauvegarde en ligne (dans le cloud) - 51',
text: 'Gérer ses données : sauvegarde en ligne (dans le cloud)',
},
{
id: '52',
display_id: '52',
display_name: 'Modules APTIC - n°52',
digest: 'Gérer ses données : sauvegardes locales (disques durs externes, clé USB) - 52',
text: 'Gérer ses données : sauvegardes locales (disques durs externes, clé USB)',
},
{
id: '54',
display_id: '54',
display_name: 'Modules APTIC - n°54',
digest: 'Classer, gérer et partager ses photos - 54',
text: 'Classer, gérer et partager ses photos',
},
{
id: '65',
display_id: '65',
display_name: 'Modules APTIC - n°65',
digest: 'Skype et autres outils de visioconférence - 65',
text: 'Skype et autres outils de visioconférence',
},
{
id: '96',
display_id: '96',
display_name: 'Modules APTIC - n°96',
digest: 'Connaitre et gérer son identité numérique - 96',
text: 'Connaitre et gérer son identité numérique',
},
{
id: '97',
display_id: '97',
display_name: 'Modules APTIC - n°97',
digest: 'Nettoyer son identité numérique - 97',
text: 'Nettoyer son identité numérique',
},
{
id: '98',
display_id: '98',
display_name: 'Modules APTIC - n°98',
digest: 'Effacer ses traces sur le web, protéger ses données personnelles - 98',
text: 'Effacer ses traces sur le web, protéger ses données personnelles',
},
],
name: 'Culture et sécurité numérique',
id: 'digitalCultureSecurity',
__v: 0,
},
],
};
// eslint-disable-next-line @typescript-eslint/no-var-requires
const mongoose = require('mongoose');
module.exports = {
data: [
{
_id: mongoose.Types.ObjectId('5fbb92dd80a5c257dc0161ef'),
modules: [
{
id: 'toutPublic',
text: 'Tout public',
},
{
id: 'moinsDe16Ans',
text: 'Moins de 16 ans',
},
{
id: 'jeunes1625Ans',
text: 'Jeunes (16-25 ans)',
},
{
id: 'adultes',
text: 'Adultes',
},
{
id: 'seniorsPlusDe65Ans',
text: 'Séniors (+ de 65 ans)',
},
],
name: 'Publics acceptés',
id: 'publics',
__v: 0,
},
{
_id: mongoose.Types.ObjectId('5fbb92e480a5c257dc0161f0'),
modules: [
{
id: 'aidantsConnect',
text: 'Aidants Connect',
},
{
id: 'espacePublicNumeriqueepn',
text: 'Espace public numérique',
},
{
id: 'fabriqueDeTerritoire',
text: 'Fabrique de territoire',
},
{
id: 'maisonFranceService',
text: 'Maison France Service',
},
{
id: 'passNumerique',
text: 'Pass numérique',
},
{
id: 'conseillerNumFranceServices',
text: 'Conseiller numérique France services',
},
],
name: 'Labels et qualifications',
id: 'labelsQualifications',
__v: 0,
},
{
_id: mongoose.Types.ObjectId('5fbb92e980a5c257dc0161f1'),
modules: [
{
id: 'accesLibre',
text: 'Accès libre',
},
{
id: 'telephoneVisio',
text: 'Téléphone / Visio',
},
{
id: 'surRdv',
text: 'Sur RDV',
},
],
name: "Modalités d'accès",
id: 'accessModality',
__v: 0,
},
{
_id: mongoose.Types.ObjectId('5fbb92ef80a5c257dc0161f2'),
modules: [
{
id: "Personnes en situation d'illetrisme",
text: "Personnes en situation d'illetrisme",
},
{
id: 'Langue étrangère (anglais)',
text: 'Langue étrangère (anglais)',
},
{
id: 'Langues étrangères (autres)',
text: 'Langues étrangères (autres)',
},
{
id: 'Surdité',
text: 'Surdité',
},
{
id: 'Déficience visuelle',
text: 'Déficience visuelle',
},
{
id: 'Handicap moteur',
text: 'Handicap moteur',
},
],
name: 'Accompagnement des publics spécifiques',
id: 'publicsAccompaniment',
__v: 0,
},
{
_id: mongoose.Types.ObjectId('5fbb92f380a5c257dc0161f3'),
modules: [
{
id: 'wifiEnAccesLibre',
text: 'Wifi en accès libre',
},
{
id: 'ordinateurs',
text: 'Ordinateurs',
},
{
id: 'tablettes',
text: 'Tablettes',
},
{
id: 'bornesNumeriques',
text: 'Bornes numériques',
},
{
id: 'imprimantes',
text: 'Imprimantes',
},
{
id: 'scanners',
text: 'Scanners',
},
{
id: 'donDeMateriels',
text: 'Prêt / don de matériels',
},
{
id: 'reconditionnementsDeMateriel',
text: 'Reconditionnements de matériel',
},
{
id: 'accesLivresInformatiques',
text: 'Accès à des revues ou livres informatiques et numériques',
},
],
name: 'Équipements et services proposés',
id: 'equipmentsAndServices',
__v: 0,
},
],
};
This diff is collapsed.
// eslint-disable-next-line @typescript-eslint/no-var-requires
const mongoose = require('mongoose');
module.exports = {
data: [
{
_id: mongoose.Types.ObjectId('601c223d3f612000068d4366'),
name: 'Publique',
values: [
'mairie',
'CAF',
'CCAS',
'CARSAT',
'poleEmploi',
'mdm',
'mediatheque',
'prefecture',
'bijPij',
'logement',
],
},
{
_id: mongoose.Types.ObjectId('601c22543f612000068d4367'),
name: 'Privée à but non lucratif',
values: ['association', 'centreSocio', 'mjc', 'pimms', 'sij', 'missionsLocales'],
},
{
_id: mongoose.Types.ObjectId('601c225e3f612000068d4368'),
name: 'Privée à but lucratif',
values: ['formation', 'insertion'],
},
],
};
......@@ -5,10 +5,7 @@ module.exports = {
data: [
{
pendingStructuresLink: [],
structuresLink: [
mongoose.Types.ObjectId('60059cf7dfb2ac4b00733db0'),
mongoose.Types.ObjectId('6001a48e16b08100062e4180'),
],
structuresLink: [],
phone: '06 06 06 06 06',
newEmail: null,
changeEmailToken: null,
......@@ -24,7 +21,7 @@ module.exports = {
{
structureOutdatedMailSent: [],
pendingStructuresLink: [],
structuresLink: [mongoose.Types.ObjectId('6001a48e16b08100062e4180')],
structuresLink: [mongoose.Types.ObjectId('6001a39c16b08100062e4164')],
newEmail: null,
changeEmailToken: null,
role: 0,
......@@ -39,7 +36,10 @@ module.exports = {
{
structureOutdatedMailSent: [],
pendingStructuresLink: [],
structuresLink: [mongoose.Types.ObjectId('6001a48e16b08100062e4180')],
structuresLink: [
mongoose.Types.ObjectId('6001a38516b08100062e4161'),
mongoose.Types.ObjectId('6001a3aa16b08100062e4166'),
],
newEmail: null,
changeEmailToken: null,
role: 0,
......
......@@ -2,6 +2,11 @@
const mongoose = require('mongoose');
// eslint-disable-next-line @typescript-eslint/no-var-requires
const userData = require('./data/users');
const structuresTypeData = require('./data/structuresType');
const categoriesOthersData = require('./data/categoriesOthers');
const categoriesAccompanementsData = require('./data/categoriesAccompanements');
const categoriesFormationData = require('./data/categoriesFormation');
const structuresData = require('./data/structures');
// eslint-disable-next-line @typescript-eslint/no-var-requires
const bcrypt = require('bcrypt');
// eslint-disable-next-line @typescript-eslint/no-var-requires
......@@ -28,6 +33,13 @@ function hashPassword() {
return bcrypt.hashSync(process.env.USER_PWD, process.env.SALT);
}
const handleError = async (name, err) => {
/* show messages */
if (err) {
if (err.code === 26) console.error(`-- ${name} collection does not exists --`);
else throw err;
} else console.log(`-- ${name} collection dropped --`);
};
// define Schema
var usersSchema = mongoose.Schema({
name: String,
......@@ -45,17 +57,82 @@ var usersSchema = mongoose.Schema({
password: String,
phone: String,
});
var structuresTypeSchema = mongoose.Schema(
{
name: String,
values: [],
},
{ collection: 'structuretype' }
);
var categoriesOthersSchema = mongoose.Schema({
name: String,
id: String,
modules: [],
});
var categoriesAccompanementsSchema = mongoose.Schema({
name: String,
id: String,
modules: [],
});
var categoriesFormationSchema = mongoose.Schema({
name: String,
id: String,
modules: [],
});
var structuresSchema = mongoose.Schema({
numero: String,
createdAt: String,
updatedAt: String,
structureName: String,
structureType: String,
description: String,
lockdownActivity: String,
address: Object,
contactPhone: String,
contactMail: String,
website: String,
facebook: String,
twitter: String,
instagram: String,
linkedin: String,
pmrAccess: Boolean,
accessModality: [],
otherDescription: String,
labelsQualifications: [],
publics: [],
exceptionalClosures: String,
publicsAccompaniment: [],
proceduresAccompaniment: [],
remoteAccompaniment: Boolean,
baseSkills: [],
accessRight: [],
socialAndProfessional: [],
parentingHelp: [],
digitalCultureSecurity: [],
equipmentsAndServices: [],
freeWorkShop: Boolean,
nbComputers: Number,
nbPrinters: Number,
nbTablets: Number,
nbNumericTerminal: Number,
nbScanners: Number,
hours: Object,
coord: [],
deletedAt: Date,
accountVerified: Boolean,
});
// compile schema to model
var User = mongoose.model('Users', usersSchema);
var structuresType = mongoose.model('structureType', structuresTypeSchema);
var categoriesOthers = mongoose.model('categoriesOthers', categoriesOthersSchema);
var categoriesAccompanements = mongoose.model('CategoriesAccompagnement', categoriesAccompanementsSchema);
var categoriesFormation = mongoose.model('categoriesFormation', categoriesFormationSchema);
var structures = mongoose.model('structures', structuresSchema);
/* drop users collections */
mongoose.connection.dropCollection('users', function (err) {
/* show messages */
if (err) {
if (err.code === 26) console.log('-- Users collection does not exists --');
else throw err;
} else console.log('-- Users collection dropped --');
mongoose.connection.dropCollection('users', async (err) => {
await handleError('Users', err);
// Init passsword
console.log('-- Users password encryption based on .env --');
......@@ -66,6 +143,43 @@ mongoose.connection.dropCollection('users', function (err) {
User.create(userData.data, function (error, user) {
if (error) return console.error(error);
console.log('-- Users collection initialized --');
});
});
/* Create structures ref */
mongoose.connection.dropCollection('structuretype', async (err) => {
await handleError('structureType', err);
structuresType.create(structuresTypeData.data, (error) => {
if (error) return console.error(error);
});
});
mongoose.connection.dropCollection('categoriesothers', async (err) => {
await handleError('categoriesOthers', err);
categoriesOthers.create(categoriesOthersData.data, (error) => {
if (error) return console.error(error);
});
});
mongoose.connection.dropCollection('categoriesaccompagnements', async (err) => {
await handleError('categoriesAccompanements', err);
categoriesAccompanements.create(categoriesAccompanementsData.data, (error) => {
if (error) return console.error(error);
});
});
mongoose.connection.dropCollection('categoriesformations', async (err) => {
await handleError('categoriesFormations', err);
categoriesFormation.create(categoriesFormationData.data, (error) => {
if (error) return console.error(error);
});
});
/* Create structures */
mongoose.connection.dropCollection('structures', async (err) => {
await handleError('structures', err);
structures.create(structuresData.data, (error) => {
if (error) return console.error(error);
process.exit(0);
});
});
const axios = require('axios');
const path = require('path');
require('dotenv').config({ path: path.resolve(__dirname, '../.env') });
axios
.post('http://localhost:3000/auth/login', {
email: 'admin@admin.com',
password: process.env.USER_PWD,
})
.then((res) => {
const config = {
headers: { Authorization: `Bearer ${res.data.accessToken}` },
};
axios
.post('http://localhost:3000/structures/resetSearchIndex', {}, config)
.then((res) => {
console.log(`statusCode: ${res.status}`);
})
.catch((error) => {
console.error('Error in index create');
console.error(error);
});
})
.catch((error) => {
console.error('Error in auth');
console.error(error);
});
import { Controller, Get, HttpException, HttpService, HttpStatus, Param, Query } from '@nestjs/common';
import { Controller, Get, HttpException, HttpService, HttpStatus, Logger, Param, Query } from '@nestjs/common';
import { Observable } from 'rxjs';
import { catchError, map } from 'rxjs/operators';
import { ApiQuery } from '@nestjs/swagger';
......@@ -36,7 +36,8 @@ export class PostsController {
.pipe(
map((response) => response.data),
catchError((err) => {
throw new HttpException('Invalid structure id', HttpStatus.BAD_REQUEST);
Logger.error(err);
throw new HttpException('Invalid ghost configuration', HttpStatus.BAD_REQUEST);
})
);
return new Promise((resolve) => {
......
......@@ -33,6 +33,7 @@ export class StructuresService {
) {}
async initiateStructureIndex(): Promise<StructureDocument[]> {
Logger.log('Reset structures indexes');
await this.structuresSearchService.dropIndex();
await this.structuresSearchService.createStructureIndex();
return this.populateES();
......