Skip to content

Commit

Permalink
feat: dispositifs programmes nationaux schema update
Browse files Browse the repository at this point in the history
  • Loading branch information
abelkhay committed Apr 5, 2024
1 parent 77cef20 commit 053914a
Show file tree
Hide file tree
Showing 26 changed files with 198 additions and 145 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { DispositifProgrammeNational, DispositifsProgrammesNationaux } from './dispositifs-programmes-nationaux';
import { DispositifsProgrammesNationauxError } from './errors';

describe('dispositif et programme national model', (): void => {
it('should create valid dispositifs et programmes nationaux', (): void => {
const dispositifsProgrammesNationaux: DispositifsProgrammesNationaux = DispositifsProgrammesNationaux([
DispositifProgrammeNational.FranceServices
]);

expect(dispositifsProgrammesNationaux).toStrictEqual([DispositifProgrammeNational.FranceServices]);
});

it('should not create invalid dispositifs et programmes nationaux', (): void => {
expect((): void => {
DispositifsProgrammesNationaux(['France Emploi' as DispositifProgrammeNational]);
}).toThrow(new DispositifsProgrammesNationauxError('France Emploi' as DispositifProgrammeNational));
});

it('should not create invalid dispositifs et programmes nationaux containing a valid and an invalid value', (): void => {
expect((): void => {
DispositifsProgrammesNationaux([
DispositifProgrammeNational.FranceServices,
'France Emploi' as DispositifProgrammeNational
]);
}).toThrow(new DispositifsProgrammesNationauxError('France Emploi' as DispositifProgrammeNational));
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { Model } from '../model';
import { DispositifsProgrammesNationauxError } from './errors';

export enum DispositifProgrammeNational {
AidantsConnect = 'Aidants Connect',
BibliothequesNumeriqueDeReference = 'Bibliothèques numérique de référence',
CertificationPix = 'Certification PIX',
ConseillersNumeriques = 'Conseillers numériques',
EmmausConnect = 'Emmaüs Connect',
FranceServices = 'France Services',
GrandesEcolesDuNumerique = 'Grandes écoles du numérique',
LaCroixRouge = 'La Croix Rouge',
PointAccesNumeriqueCAF = "Point d'accès numérique CAF",
PromeneursDuNet = 'Promeneurs du net',
RelaisNumerique = 'Relais numérique (Emmaüs Connect)'
}

export type DispositifsProgrammesNationaux = Model<'DispositifsProgrammesNationaux', DispositifProgrammeNational[]>;

export type DispositifProgrammeNationalIndefini = 'dispositif ou programme national indéfini';

const firstInvalidDispositifProgrammeNational = (dispositifProgrammeNational: DispositifProgrammeNational): boolean =>
!Object.values(DispositifProgrammeNational).includes(dispositifProgrammeNational);

const throwDispositifsProgrammesNationauxError = (
dispositifsProgrammesNationaux: DispositifProgrammeNational[]
): DispositifsProgrammesNationaux => {
throw new DispositifsProgrammesNationauxError(
dispositifsProgrammesNationaux.find(firstInvalidDispositifProgrammeNational) ?? 'dispositif ou programme national indéfini'
);
};

const isDispositifsProgrammesNationaux = (
dispositifsProgrammesNationaux: DispositifProgrammeNational[]
): dispositifsProgrammesNationaux is DispositifsProgrammesNationaux =>
dispositifsProgrammesNationaux.find(firstInvalidDispositifProgrammeNational) == null;

/* eslint-disable-next-line @typescript-eslint/naming-convention */
export const DispositifsProgrammesNationaux = (
dispositifsProgrammesNationaux: DispositifProgrammeNational[]
): DispositifsProgrammesNationaux =>
isDispositifsProgrammesNationaux(dispositifsProgrammesNationaux)
? dispositifsProgrammesNationaux
: throwDispositifsProgrammesNationauxError(dispositifsProgrammesNationaux);
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { ModelError } from '../../../errors';
import { DispositifProgrammeNational, DispositifProgrammeNationalIndefini } from '../dispositifs-programmes-nationaux';
import { LieuMediationNumerique } from '../../lieu-mediation-numerique';

export class DispositifsProgrammesNationauxError extends ModelError<LieuMediationNumerique> {
constructor(dispositifProgrammeNational: DispositifProgrammeNational | DispositifProgrammeNationalIndefini) {
super(
'dispositifs_programmes_nationaux',
`Le dispositif ou le programme national '${dispositifProgrammeNational}' n'est pas une valeur admise`
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './dispositifs-programmes-nationaux.error';
2 changes: 2 additions & 0 deletions src/models/dispositifs-programmes-nationaux/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './errors';
export * from './dispositifs-programmes-nationaux';
2 changes: 1 addition & 1 deletion src/models/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ export * from './cle-ban';
export * from './condition-acces';
export * from './contact';
export * from './id';
export * from './label-national';
export * from './dispositifs-programmes-nationaux';
export * from './localisation';
export * from './modalite-accompagnement';
export * from './nom';
Expand Down
1 change: 0 additions & 1 deletion src/models/label-national/errors/index.ts

This file was deleted.

9 changes: 0 additions & 9 deletions src/models/label-national/errors/labels-nationaux.error.ts

This file was deleted.

2 changes: 0 additions & 2 deletions src/models/label-national/index.ts

This file was deleted.

22 changes: 0 additions & 22 deletions src/models/label-national/label-national.spec.ts

This file was deleted.

34 changes: 0 additions & 34 deletions src/models/label-national/label-national.ts

This file was deleted.

4 changes: 2 additions & 2 deletions src/models/lieu-mediation-numerique.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { ModalitesAccompagnement } from './modalite-accompagnement';
import { Url } from './url';
import { Pivot } from './pivot';
import { CleBan } from './cle-ban';
import { LabelsNationaux } from './label-national';
import { DispositifsProgrammesNationaux } from './dispositifs-programmes-nationaux';
import { Id } from './id';
import { Nom } from './nom';

Expand All @@ -34,7 +34,7 @@ export type LieuMediationNumerique = {
services: Services;
publics_accueillis?: PublicsAccueillis;
conditions_acces?: ConditionsAcces;
labels_nationaux?: LabelsNationaux;
dispositifs_programmes_nationaux?: DispositifsProgrammesNationaux;
labels_autres?: string[];
modalites_accompagnement?: ModalitesAccompagnement;
accessibilite?: Url;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import {
ConditionAcces,
ConditionsAcces,
Contact,
LabelNational,
LabelsNationaux,
DispositifProgrammeNational,
DispositifsProgrammesNationaux,
Localisation,
ModaliteAccompagnement,
ModalitesAccompagnement,
Expand Down Expand Up @@ -48,17 +48,21 @@ export const FRAIS_TO_CONDITION_ACCES: Map<string, ConditionAcces> = new Map<str
['pass-numerique', ConditionAcces.AccepteLePassNumerique]
]);

const LABELS_NATIONAUX_MAP: Map<string, LabelNational> = new Map<string, LabelNational>([
['aidants-connect', LabelNational.AidantsConnect],
['aptic', LabelNational.APTIC],
['campus-connecte', LabelNational.CampusConnecte],
['conseiller-numerique', LabelNational.CNFS], // todo: missing label in data.inclusion
['fabrique-de-territoire', LabelNational.FabriquesDeTerritoire],
['france-service', LabelNational.FranceServices],
['french-tech', LabelNational.FrenchTech],
['grandes-ecoles-du-numerique', LabelNational.GrandesEcolesDuNumerique],
['caf', LabelNational.PointRelaisCAF],
['pole-emploi', LabelNational.RelaisPoleEmploi]
const DISPOSITIFS_PROGRAMMES_NATIONAUX_MAP: Map<string, DispositifProgrammeNational> = new Map<
string,
DispositifProgrammeNational
>([
['aidants-connect', DispositifProgrammeNational.AidantsConnect],
['bibliotheque-de-reference', DispositifProgrammeNational.BibliothequesNumeriqueDeReference], // todo: missing label in data.inclusion
['certification-pix', DispositifProgrammeNational.CertificationPix], // todo: missing label in data.inclusion
['conseillers-numeriques', DispositifProgrammeNational.ConseillersNumeriques], // todo: missing label in data.inclusion
['emmaus', DispositifProgrammeNational.EmmausConnect],
['france-service', DispositifProgrammeNational.FranceServices],
['grandes-ecoles-du-numerique', DispositifProgrammeNational.GrandesEcolesDuNumerique],
['croix-rouge', DispositifProgrammeNational.LaCroixRouge],
['caf', DispositifProgrammeNational.PointAccesNumeriqueCAF],
['promeneurs-du-net', DispositifProgrammeNational.PromeneursDuNet], // todo: missing label in data.inclusion
['emmaus', DispositifProgrammeNational.RelaisNumerique]
]);

const TYPES_TO_MODALITES_ACCOMPAGNEMENT_MAP: Map<string, ModaliteAccompagnement> = new Map<string, ModaliteAccompagnement>([
Expand Down Expand Up @@ -182,16 +186,22 @@ export const localisationFromDataInclusion = (latitude?: number, longitude?: num
latitude == null || longitude == null ? {} : { localisation: Localisation({ latitude, longitude }) };

export const labelsFromDataInclusion = (
labels_nationaux?: string[],
dispositifs_programmes_nationaux?: string[],
labels_autres?: string[]
): { labels_nationaux?: LabelsNationaux; labels_autres?: string[] } => ({
...(labels_nationaux == null
): { dispositifs_programmes_nationaux?: DispositifsProgrammesNationaux; labels_autres?: string[] } => ({
...(dispositifs_programmes_nationaux == null
? {}
: {
labels_nationaux: LabelsNationaux(
labels_nationaux
.map((labelNational: string): LabelNational | undefined => LABELS_NATIONAUX_MAP.get(labelNational))
.filter((labelNational?: LabelNational | undefined): labelNational is LabelNational => labelNational != null)
dispositifs_programmes_nationaux: DispositifsProgrammesNationaux(
dispositifs_programmes_nationaux
.map((dispositifProgrammeNational: string): DispositifProgrammeNational | undefined =>
DISPOSITIFS_PROGRAMMES_NATIONAUX_MAP.get(dispositifProgrammeNational)
)
.filter(
(
dispositifProgrammeNational?: DispositifProgrammeNational | undefined
): dispositifProgrammeNational is DispositifProgrammeNational => dispositifProgrammeNational != null
)
)
}),
...(labels_autres == null ? {} : { labels_autres })
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import {
ConditionAcces,
ConditionsAcces,
Contact,
DispositifProgrammeNational,
DispositifsProgrammesNationaux,
Id,
LabelNational,
LabelsNationaux,
LieuMediationNumerique,
Localisation,
ModaliteAccompagnement,
Expand Down Expand Up @@ -80,7 +80,7 @@ describe('from schema data inclusion', (): void => {
telephone: '+33180059880',
site_web: 'https://www.laquincaillerie.tl/;https://m.facebook.com/laquincaillerienumerique/',
horaires_ouverture: 'Mo-Fr 09:00-12:00,14:00-18:30; Sa 08:30-12:00',
labels_nationaux: ['france-service', 'aptic'],
dispositifs_programmes_nationaux: ['france-service', 'aidants-connect'],
labels_autres: ['SudLabs', 'Nièvre médiation numérique'],
latitude: 43.52609,
longitude: 5.41423,
Expand Down Expand Up @@ -195,7 +195,10 @@ describe('from schema data inclusion', (): void => {
PublicAccueilli.Illettrisme
]),
conditions_acces: ConditionsAcces([ConditionAcces.GratuitSousCondition]),
labels_nationaux: LabelsNationaux([LabelNational.FranceServices, LabelNational.APTIC]),
dispositifs_programmes_nationaux: DispositifsProgrammesNationaux([
DispositifProgrammeNational.FranceServices,
DispositifProgrammeNational.AidantsConnect
]),
labels_autres: ['SudLabs', 'Nièvre médiation numérique'],
modalites_accompagnement: ModalitesAccompagnement([
ModaliteAccompagnement.Seul,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ const fromSchemaDataInclusionItem = (
...accessibiliteFromDataInclusion(structure.accessibilite),
...conditionsAccesFromDataInclusion(service.frais),
...horairesFromDataInclusion(structure.horaires_ouverture),
...labelsFromDataInclusion(structure.labels_nationaux, structure.labels_autres),
...labelsFromDataInclusion(structure.dispositifs_programmes_nationaux, structure.labels_autres),
...modalitesAccompagnementFromDataInclusion(service.types),
...presentationFromDataInclusion(structure.presentation_detail, structure.presentation_resume),
...priseRdvFromDataInclusion(service.prise_rdv),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ export type SchemaStructureDataInclusionPresentationFields = {
};

export type SchemaStructureDataInclusionLabelsFields = {
labels_nationaux?: string[];
dispositifs_programmes_nationaux?: string[];
labels_autres?: string[];
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ describe('service data inclusion to structure data inclusion', (): void => {
telephone: '+33180059880',
site_web: 'https://www.laquincaillerie.tl/;https://m.facebook.com/laquincaillerienumerique/',
horaires_ouverture: 'Mo-Fr 09:00-12:00,14:00-18:30; Sa 08:30-12:00',
labels_nationaux: ['france-service', 'aptic'],
dispositifs_programmes_nationaux: ['france-service'],
labels_autres: ['SudLabs', 'Nièvre médiation numérique'],
latitude: 43.52609,
longitude: 5.41423,
Expand Down Expand Up @@ -313,7 +313,7 @@ describe('service data inclusion to structure data inclusion', (): void => {
telephone: '0102030405',
courriel: '[email protected]',
site_web: 'https://www.laquincaillerie.tl/;https://m.facebook.com/laquincaillerienumerique/',
labels_nationaux: ['france-service', 'aptic'],
dispositifs_programmes_nationaux: ['france-service'],
labels_autres: ['SudLabs', 'Nièvre médiation numérique'],
accessibilite: 'https://acceslibre.beta.gouv.fr/app/29-lampaul-plouarzel/a/bibliotheque-mediatheque/erp/mediatheque-13/',
horaires_ouverture: 'Mo-Fr 09:00-12:00,14:00-18:30; Sa 08:30-12:00',
Expand All @@ -338,7 +338,7 @@ describe('service data inclusion to structure data inclusion', (): void => {
telephone: '+33180059880',
site_web: 'https://www.laquincaillerie.tl/;https://m.facebook.com/laquincaillerienumerique/',
horaires_ouverture: 'Mo-Fr 09:00-12:00,14:00-18:30; Sa 08:30-12:00',
labels_nationaux: ['france-service', 'aptic'],
dispositifs_programmes_nationaux: ['france-service'],
labels_autres: ['SudLabs', 'Nièvre médiation numérique'],
latitude: 43.52609,
longitude: 5.41423,
Expand Down Expand Up @@ -420,7 +420,7 @@ describe('service data inclusion to structure data inclusion', (): void => {
courriel: '[email protected]',
telephone: '+33180059880',
site_web: 'https://www.laquincaillerie.tl/;https://m.facebook.com/laquincaillerienumerique/',
labels_nationaux: ['france-service', 'aptic'],
dispositifs_programmes_nationaux: ['france-service'],
labels_autres: ['SudLabs', 'Nièvre médiation numérique'],
accessibilite: 'https://acceslibre.beta.gouv.fr/app/29-lampaul-plouarzel/a/bibliotheque-mediatheque/erp/mediatheque-13/',
horaires_ouverture: 'Mo-Fr 09:00-12:00,14:00-18:30; Sa 08:30-12:00',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,9 @@ const contactFromServiceOrStructure = (
});

const labelsFromStructure = (structure: SchemaStructureDataInclusion): SchemaStructureDataInclusionLabelsFields => ({
...(structure.labels_nationaux == null ? {} : { labels_nationaux: structure.labels_nationaux }),
...(structure.dispositifs_programmes_nationaux == null
? {}
: { dispositifs_programmes_nationaux: structure.dispositifs_programmes_nationaux }),
...(structure.labels_autres == null ? {} : { labels_autres: structure.labels_autres })
});

Expand Down
Loading

0 comments on commit 053914a

Please sign in to comment.