From e533673dd3758f53383c1f7982bd6591adc30cf9 Mon Sep 17 00:00:00 2001 From: Yassine R Date: Mon, 5 Feb 2024 15:23:53 +0100 Subject: [PATCH] refactor(structures): add department and region to common --- .../1707128561611-auto-migration.ts | 15 +++- ...1707128568215-add-departments-migration.ts | 29 ++++--- .../open-data-places/load-data-inclusion.ts | 13 +-- .../src/open-data-places/load-soliguide.ts | 9 +- .../controllers/structures.controller.ts | 12 ++- .../services/departement-helper.service.ts | 82 ------------------- .../backend/src/structures/services/index.ts | 1 - .../services/structureCreator.service.ts | 20 +++-- .../tests/departement-helper.service.spec.ts | 63 -------------- .../structures.creation-full.spec.ts | 2 + .../constants/EXCEPTIONS_CODE_POSTAL.const.ts | 25 ++++++ .../common/src/territoires/constants/index.ts | 2 +- .../departement-helper.service.spec.ts | 31 +++++++ .../functions}/departement-helper.service.ts | 38 +-------- .../common/src/territoires/functions/index.ts | 2 + packages/common/src/territoires/index.ts | 1 + .../_common/model/telephone/COUNTRY_CODES.ts | 2 +- .../classes/StructureCommonWeb.class.ts | 2 +- .../structure-edit-form.component.ts | 2 +- .../structures-form.component.ts | 12 ++- .../utils/departement-helper.service.spec.ts | 63 -------------- .../src/app/modules/structures/utils/index.ts | 1 - .../structures/utils/structure-validators.ts | 12 +-- 23 files changed, 141 insertions(+), 298 deletions(-) delete mode 100644 packages/backend/src/structures/services/departement-helper.service.ts delete mode 100644 packages/backend/src/structures/services/tests/departement-helper.service.spec.ts create mode 100644 packages/common/src/territoires/constants/EXCEPTIONS_CODE_POSTAL.const.ts create mode 100644 packages/common/src/territoires/functions/departement-helper.service.spec.ts rename packages/{frontend/src/app/modules/structures/utils => common/src/territoires/functions}/departement-helper.service.ts (59%) create mode 100644 packages/common/src/territoires/functions/index.ts delete mode 100644 packages/frontend/src/app/modules/structures/utils/departement-helper.service.spec.ts diff --git a/packages/backend/src/_migrations/1707128561611-auto-migration.ts b/packages/backend/src/_migrations/1707128561611-auto-migration.ts index 35e54d58d6..24fbbcf434 100644 --- a/packages/backend/src/_migrations/1707128561611-auto-migration.ts +++ b/packages/backend/src/_migrations/1707128561611-auto-migration.ts @@ -1,4 +1,5 @@ import { MigrationInterface, QueryRunner } from "typeorm"; +import { domifaConfig } from "../config"; export class CreateFieldsInStructureMigration1707128561611 implements MigrationInterface @@ -6,10 +7,16 @@ export class CreateFieldsInStructureMigration1707128561611 name = "CreateFieldsInStructureMigration1707128561611"; public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query( - `ALTER TABLE "structure" ADD "departmentName" text` - ); - await queryRunner.query(`ALTER TABLE "structure" ADD "regionName" text`); + if ( + domifaConfig().envId === "prod" || + domifaConfig().envId === "preprod" || + domifaConfig().envId === "local" + ) { + await queryRunner.query( + `ALTER TABLE "structure" ADD "departmentName" text` + ); + await queryRunner.query(`ALTER TABLE "structure" ADD "regionName" text`); + } } public async down(queryRunner: QueryRunner): Promise { diff --git a/packages/backend/src/_migrations/1707128568215-add-departments-migration.ts b/packages/backend/src/_migrations/1707128568215-add-departments-migration.ts index ca3cf5bd43..aab019d044 100644 --- a/packages/backend/src/_migrations/1707128568215-add-departments-migration.ts +++ b/packages/backend/src/_migrations/1707128568215-add-departments-migration.ts @@ -2,20 +2,27 @@ import { MigrationInterface, QueryRunner } from "typeorm"; import { structureRepository } from "../database"; import { DEPARTEMENTS_MAP } from "@domifa/common"; +import { domifaConfig } from "../config"; export class ManualMigration1707128568215 implements MigrationInterface { public async up(_queryRunner: QueryRunner): Promise { - for (const departmentCode of Object.keys(DEPARTEMENTS_MAP)) { - console.log("Update structures for department: " + departmentCode); - await structureRepository.update( - { - departement: departmentCode, - }, - { - departmentName: DEPARTEMENTS_MAP[departmentCode].departmentName, - regionName: DEPARTEMENTS_MAP[departmentCode].regionName, - } - ); + if ( + domifaConfig().envId === "prod" || + domifaConfig().envId === "preprod" || + domifaConfig().envId === "local" + ) { + for (const departmentCode of Object.keys(DEPARTEMENTS_MAP)) { + console.log("Update structures for department: " + departmentCode); + await structureRepository.update( + { + departement: departmentCode, + }, + { + departmentName: DEPARTEMENTS_MAP[departmentCode].departmentName, + regionName: DEPARTEMENTS_MAP[departmentCode].regionName, + } + ); + } } } diff --git a/packages/backend/src/open-data-places/load-data-inclusion.ts b/packages/backend/src/open-data-places/load-data-inclusion.ts index 0582a5e144..7eba90d0f5 100644 --- a/packages/backend/src/open-data-places/load-data-inclusion.ts +++ b/packages/backend/src/open-data-places/load-data-inclusion.ts @@ -7,8 +7,12 @@ import { } from "./interfaces"; import { OpenDataPlaceTable } from "../database/entities/open-data-place"; import { openDataPlaceRepository } from "../database/services/place"; -import { departementHelper } from "../structures/services"; + import { appLogger, cleanAddress, cleanCity } from "../util"; +import { + getDepartementFromCodePostal, + getRegionCodeFromDepartement, +} from "@domifa/common"; let page = 1; let nbResults = 0; @@ -65,9 +69,7 @@ const getFromDataInclusion = async (structureType: "CCAS" | "CIAS") => { .getOne(); if (!dataInclusionPlace) { - const departement = departementHelper.getDepartementFromCodePostal( - place.code_postal - ); + const departement = getDepartementFromCodePostal(place.code_postal); dataInclusionPlace = await openDataPlaceRepository.save( new OpenDataPlaceTable({ @@ -76,8 +78,7 @@ const getFromDataInclusion = async (structureType: "CCAS" | "CIAS") => { codePostal: place.code_postal, ville: cleanCity(place?.commune), departement, - region: - departementHelper.getRegionCodeFromDepartement(departement), + region: getRegionCodeFromDepartement(departement), software: "other", latitude: place?.latitude, longitude: place?.longitude, diff --git a/packages/backend/src/open-data-places/load-soliguide.ts b/packages/backend/src/open-data-places/load-soliguide.ts index 2f0222b8b0..bfa012601c 100644 --- a/packages/backend/src/open-data-places/load-soliguide.ts +++ b/packages/backend/src/open-data-places/load-soliguide.ts @@ -2,11 +2,14 @@ import axios from "axios"; import { domifaConfig } from "../config"; import { OpenDataPlaceTable } from "../database/entities/open-data-place"; import { SoliguidePlace } from "./interfaces/SoliguidePlace.interface"; -import { departementHelper } from "../structures/services"; import { openDataPlaceRepository } from "../database/services/place/open-data-place-repository"; import { appLogger, cleanAddress, cleanCity } from "../util"; import { OpenDataPlace } from "./interfaces/OpenDataPlace.interface"; +import { + getDepartementFromCodePostal, + getRegionCodeFromDepartement, +} from "@domifa/common"; let page = 1; let nbResults = 0; @@ -58,7 +61,7 @@ const getFromSoliguide = async () => { }); if (!soliguidePlace) { - const departement = departementHelper.getDepartementFromCodePostal( + const departement = getDepartementFromCodePostal( place.position.codePostal ); @@ -69,7 +72,7 @@ const getFromSoliguide = async () => { codePostal: place.position.codePostal, ville: cleanCity(place?.position?.ville), departement, - region: departementHelper.getRegionCodeFromDepartement(departement), + region: getRegionCodeFromDepartement(departement), software: "other", latitude: place.position.location.coordinates[1], longitude: place.position.location.coordinates[0], diff --git a/packages/backend/src/structures/controllers/structures.controller.ts b/packages/backend/src/structures/controllers/structures.controller.ts index d5cda3c78f..0294f4e811 100644 --- a/packages/backend/src/structures/controllers/structures.controller.ts +++ b/packages/backend/src/structures/controllers/structures.controller.ts @@ -28,10 +28,14 @@ import { StructuresService } from "../services/structures.service"; import { AppLogsService } from "../../modules/app-logs/app-logs.service"; import { ParseHardResetTokenPipe } from "../../_common/decorators"; -import { departementHelper } from "../services"; + import { faker } from "@faker-js/faker"; import { AppUserGuard } from "../../auth/guards"; -import { DEPARTEMENTS_MAP } from "@domifa/common"; +import { + DEPARTEMENTS_MAP, + getDepartementFromCodePostal, + getRegionCodeFromDepartement, +} from "@domifa/common"; @Controller("structures") @UseGuards(AuthGuard("jwt"), AppUserGuard) @@ -93,7 +97,7 @@ export class StructuresController { delete structureDto.readCgu; delete structureDto.acceptCgu; - structureDto.departement = departementHelper.getDepartementFromCodePostal( + structureDto.departement = getDepartementFromCodePostal( structureDto.codePostal ); @@ -102,7 +106,7 @@ export class StructuresController { structureDto.regionName = DEPARTEMENTS_MAP[structureDto.departement].regionName; - structureDto.region = departementHelper.getRegionCodeFromDepartement( + structureDto.region = getRegionCodeFromDepartement( structureDto.departement ); diff --git a/packages/backend/src/structures/services/departement-helper.service.ts b/packages/backend/src/structures/services/departement-helper.service.ts deleted file mode 100644 index 9adc61fa59..0000000000 --- a/packages/backend/src/structures/services/departement-helper.service.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { DEPARTEMENTS_MAP } from "@domifa/common"; -import { appLogger } from "../../util"; - -// NOTE: service dupliqué côté frontend -const EXCEPTIONS_CODE_POSTAL: { [codePostal: string]: string } = { - "42620": "03", // https://fr.wikipedia.org/wiki/Liste_des_communes_de_France_dont_le_code_postal_ne_correspond_pas_au_d%C3%A9partement - "05110": "04", - "05130": "04", - "05160": "04", - "06260": "04", - "48250": "07", - "43450": "15", - "36260": "18", - "18120": "18", - "33220": "24", - "05700": "26", - "73670": "38", - "01410": "39", - "39310": "39", - "01590": "39", - "52100": "51", - "21340": "71", - "01200": "74", - "13780": "83", - "37160": "86", - "94390": "91", - "97150": "978", // https://fr.wikipedia.org/wiki/Saint-Martin_(Antilles_fran%C3%A7aises) - "97133": "977", // https://fr.wikipedia.org/wiki/Saint-Barth%C3%A9lemy_(Antilles_fran%C3%A7aises) -}; - -export const departementHelper = { - getRegionCodeFromDepartement, - getDepartementFromCodePostal, -}; -function getRegionCodeFromDepartement(departement: string): string { - if (!departement) { - throw new Error("Department not set"); - } - const region = DEPARTEMENTS_MAP[departement.toUpperCase()]; - - if (region) { - return region.regionCode; - } else { - const errorMessage = `Invalid departement ${departement} (no region found)`; - appLogger.warn(errorMessage, { sentry: true }); - throw new Error(errorMessage); - } -} - -function getDepartementFromCodePostal(codePostal: string): string { - if (codePostal.length !== 5) { - const errorMessage = `Invalid postal code ${codePostal} (cause: ${codePostal.length} characters)`; - appLogger.warn(errorMessage, { sentry: true }); - throw new Error(errorMessage); - } - if (EXCEPTIONS_CODE_POSTAL[codePostal]) { - // certaines communes n'ont pas un code postal correspondant à leur département - return EXCEPTIONS_CODE_POSTAL[codePostal]; - } - if (codePostal.startsWith("20")) { - // corse https://fr.wikipedia.org/wiki/Code_postal_en_France#Corse_(20) - if (codePostal.startsWith("200") || codePostal.startsWith("201")) { - // Corse du Sud - return "2A"; - } - if (codePostal.startsWith("202") || codePostal.startsWith("206")) { - // Haute Corse - return "2B"; - } - const errorMessage = `Invalid postal code ${codePostal} for "Corse"`; - appLogger.warn(errorMessage, { sentry: true }); - throw new Error(errorMessage); - } - // outre-mer: https://fr.wikipedia.org/wiki/Code_postal_en_France#France_d'outre-mer - if (codePostal.startsWith("97")) { - // note: les exceptions "Saint-Barthélemy" et "Saint-Martin" sont gérés via la constante EXCEPTIONS_CODE_POSTAL plus haut - return codePostal.substring(0, 3); - } - - // cas général - return codePostal.substring(0, 2); -} diff --git a/packages/backend/src/structures/services/index.ts b/packages/backend/src/structures/services/index.ts index 5a8907940f..2a355d75d6 100644 --- a/packages/backend/src/structures/services/index.ts +++ b/packages/backend/src/structures/services/index.ts @@ -1,5 +1,4 @@ //@index('./*.service.ts', f => `export * from '${f.path}'`) -export * from "./departement-helper.service"; export * from "./structureCreator.service"; export * from "./structure-deletor.service"; export * from "./structureHardReset.service"; diff --git a/packages/backend/src/structures/services/structureCreator.service.ts b/packages/backend/src/structures/services/structureCreator.service.ts index eee050c3d3..0d4e2c6133 100644 --- a/packages/backend/src/structures/services/structureCreator.service.ts +++ b/packages/backend/src/structures/services/structureCreator.service.ts @@ -9,12 +9,16 @@ import { newStructureEmailSender } from "../../mails/services/templates-renderer import { UserDto } from "../../users/dto/user.dto"; import { userStructureCreator } from "../../users/services/user-structure-creator.service"; import { appLogger } from "../../util/AppLogger.service"; - -import { departementHelper } from "./departement-helper.service"; import { StructureDto } from "../dto/structure.dto"; import { generateSender } from "../../sms/services/generators"; import { getLocation } from "./location.service"; -import { DEPARTEMENTS_MAP, Structure, StructureCommon } from "@domifa/common"; +import { + DEPARTEMENTS_MAP, + Structure, + StructureCommon, + getDepartementFromCodePostal, + getRegionCodeFromDepartement, +} from "@domifa/common"; export const structureCreatorService = { checkStructureCreateArgs, @@ -26,10 +30,8 @@ async function checkStructureCreateArgs( structureDto: StructureDto ): Promise { try { - const departement = departementHelper.getDepartementFromCodePostal( - structureDto.codePostal - ); - departementHelper.getRegionCodeFromDepartement(departement); + const departement = getDepartementFromCodePostal(structureDto.codePostal); + getRegionCodeFromDepartement(departement); } catch (err) { appLogger.warn( `[StructuresService] error validating postal code "${structureDto.codePostal}"` @@ -128,11 +130,11 @@ async function createStructure(structureDto: StructureDto) { createdStructure.registrationDate = new Date(); createdStructure.token = crypto.randomBytes(30).toString("hex"); - createdStructure.departement = departementHelper.getDepartementFromCodePostal( + createdStructure.departement = getDepartementFromCodePostal( createdStructure.codePostal ); - createdStructure.region = departementHelper.getRegionCodeFromDepartement( + createdStructure.region = getRegionCodeFromDepartement( createdStructure.departement ); diff --git a/packages/backend/src/structures/services/tests/departement-helper.service.spec.ts b/packages/backend/src/structures/services/tests/departement-helper.service.spec.ts deleted file mode 100644 index 9132ff919c..0000000000 --- a/packages/backend/src/structures/services/tests/departement-helper.service.spec.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { departementHelper } from "../departement-helper.service"; - -describe("Departement helper Service", () => { - it("common case", () => { - expect(departementHelper.getDepartementFromCodePostal("75000")).toEqual( - "75" - ); - expect(departementHelper.getDepartementFromCodePostal("49530")).toEqual( - "49" - ); - expect(departementHelper.getDepartementFromCodePostal("33600")).toEqual( - "33" - ); - expect(departementHelper.getDepartementFromCodePostal("01100")).toEqual( - "01" - ); - }); - - it("invalid format", () => { - expect(() => - departementHelper.getDepartementFromCodePostal("7500") - ).toThrow(); - expect(() => - departementHelper.getDepartementFromCodePostal("750000") - ).toThrow(); - }); - - it("corse", () => { - expect(departementHelper.getDepartementFromCodePostal("20146")).toEqual( - "2A" - ); - expect(departementHelper.getDepartementFromCodePostal("20000")).toEqual( - "2A" - ); - expect(departementHelper.getDepartementFromCodePostal("20090")).toEqual( - "2A" - ); - expect(departementHelper.getDepartementFromCodePostal("20200")).toEqual( - "2B" - ); - expect(departementHelper.getDepartementFromCodePostal("20600")).toEqual( - "2B" - ); - }); - - it("exceptions", () => { - expect(departementHelper.getDepartementFromCodePostal("97133")).toEqual( - "977" - ); - expect(departementHelper.getDepartementFromCodePostal("97150")).toEqual( - "978" - ); - expect(departementHelper.getDepartementFromCodePostal("05110")).toEqual( - "04" - ); - expect(departementHelper.getDepartementFromCodePostal("73670")).toEqual( - "38" - ); - expect(departementHelper.getDepartementFromCodePostal("01590")).toEqual( - "39" - ); - }); -}); diff --git a/packages/backend/src/structures/structures.creation-full.spec.ts b/packages/backend/src/structures/structures.creation-full.spec.ts index b186930469..5a0efbf8c4 100644 --- a/packages/backend/src/structures/structures.creation-full.spec.ts +++ b/packages/backend/src/structures/structures.creation-full.spec.ts @@ -52,6 +52,8 @@ const structureDto: StructureDto = { acceptCgu: true, readCgu: true, timeZone: "Europe/Paris", + departmentName: "", + regionName: "", }; const res = { diff --git a/packages/common/src/territoires/constants/EXCEPTIONS_CODE_POSTAL.const.ts b/packages/common/src/territoires/constants/EXCEPTIONS_CODE_POSTAL.const.ts new file mode 100644 index 0000000000..f6402ec1bd --- /dev/null +++ b/packages/common/src/territoires/constants/EXCEPTIONS_CODE_POSTAL.const.ts @@ -0,0 +1,25 @@ +export const EXCEPTIONS_CODE_POSTAL: Record = { + "42620": "03", // https://fr.wikipedia.org/wiki/Liste_des_communes_de_France_dont_le_code_postal_ne_correspond_pas_au_d%C3%A9partement + "05110": "04", + "05130": "04", + "05160": "04", + "06260": "04", + "48250": "07", + "43450": "15", + "36260": "18", + "18120": "18", + "33220": "24", + "05700": "26", + "73670": "38", + "01410": "39", + "39310": "39", + "01590": "39", + "52100": "51", + "21340": "71", + "01200": "74", + "13780": "83", + "37160": "86", + "94390": "91", + "97150": "978", // https://fr.wikipedia.org/wiki/Saint-Martin_(Antilles_fran%C3%A7aises) + "97133": "977", // https://fr.wikipedia.org/wiki/Saint-Barth%C3%A9lemy_(Antilles_fran%C3%A7aises) +}; diff --git a/packages/common/src/territoires/constants/index.ts b/packages/common/src/territoires/constants/index.ts index b95a0a2222..bad13f4036 100644 --- a/packages/common/src/territoires/constants/index.ts +++ b/packages/common/src/territoires/constants/index.ts @@ -1,4 +1,4 @@ // @index('./*', f => `export * from '${f.path}'`) - +export * from "./EXCEPTIONS_CODE_POSTAL.const"; export * from "./REGIONS_DEF.const"; export * from "./REGIONS_DEPARTEMENTS_MAP.const"; diff --git a/packages/common/src/territoires/functions/departement-helper.service.spec.ts b/packages/common/src/territoires/functions/departement-helper.service.spec.ts new file mode 100644 index 0000000000..a1c3af5068 --- /dev/null +++ b/packages/common/src/territoires/functions/departement-helper.service.spec.ts @@ -0,0 +1,31 @@ +import { getDepartementFromCodePostal } from "./departement-helper.service"; + +describe("Departement helper Service", () => { + it("common case", () => { + expect(getDepartementFromCodePostal("75000")).toEqual("75"); + expect(getDepartementFromCodePostal("49530")).toEqual("49"); + expect(getDepartementFromCodePostal("33600")).toEqual("33"); + expect(getDepartementFromCodePostal("01100")).toEqual("01"); + }); + + it("invalid format", () => { + expect(() => getDepartementFromCodePostal("7500")).toThrow(); + expect(() => getDepartementFromCodePostal("750000")).toThrow(); + }); + + it("corse", () => { + expect(getDepartementFromCodePostal("20146")).toEqual("2A"); + expect(getDepartementFromCodePostal("20000")).toEqual("2A"); + expect(getDepartementFromCodePostal("20090")).toEqual("2A"); + expect(getDepartementFromCodePostal("20200")).toEqual("2B"); + expect(getDepartementFromCodePostal("20600")).toEqual("2B"); + }); + + it("exceptions", () => { + expect(getDepartementFromCodePostal("97133")).toEqual("977"); + expect(getDepartementFromCodePostal("97150")).toEqual("978"); + expect(getDepartementFromCodePostal("05110")).toEqual("04"); + expect(getDepartementFromCodePostal("73670")).toEqual("38"); + expect(getDepartementFromCodePostal("01590")).toEqual("39"); + }); +}); diff --git a/packages/frontend/src/app/modules/structures/utils/departement-helper.service.ts b/packages/common/src/territoires/functions/departement-helper.service.ts similarity index 59% rename from packages/frontend/src/app/modules/structures/utils/departement-helper.service.ts rename to packages/common/src/territoires/functions/departement-helper.service.ts index 1311b5d4dc..aa1467e2e4 100644 --- a/packages/frontend/src/app/modules/structures/utils/departement-helper.service.ts +++ b/packages/common/src/territoires/functions/departement-helper.service.ts @@ -1,38 +1,6 @@ -import { DEPARTEMENTS_MAP } from "../../../shared"; +import { DEPARTEMENTS_MAP, EXCEPTIONS_CODE_POSTAL } from "../constants"; -// NOTE: service dupliqué côté backend -const EXCEPTIONS_CODE_POSTAL: { [codePostal: string]: string } = { - "42620": "03", // https://fr.wikipedia.org/wiki/Liste_des_communes_de_France_dont_le_code_postal_ne_correspond_pas_au_d%C3%A9partement - "05110": "04", - "05130": "04", - "05160": "04", - "06260": "04", - "48250": "07", - "43450": "15", - "36260": "18", - "18120": "18", - "33220": "24", - "05700": "26", - "73670": "38", - "01410": "39", - "39310": "39", - "01590": "39", - "52100": "51", - "21340": "71", - "01200": "74", - "13780": "83", - "37160": "86", - "94390": "91", - "97150": "978", // https://fr.wikipedia.org/wiki/Saint-Martin_(Antilles_fran%C3%A7aises) - "97133": "977", // https://fr.wikipedia.org/wiki/Saint-Barth%C3%A9lemy_(Antilles_fran%C3%A7aises) -}; - -export const departementHelper = { - getRegionCodeFromDepartement, - getDepartementFromCodePostal, -}; - -function getRegionCodeFromDepartement(departement: string): string { +export function getRegionCodeFromDepartement(departement: string): string { if (!departement) { throw new Error("Department not set"); } @@ -46,7 +14,7 @@ function getRegionCodeFromDepartement(departement: string): string { } } -function getDepartementFromCodePostal(codePostal: string): string { +export function getDepartementFromCodePostal(codePostal: string): string { if (codePostal.length !== 5) { const errorMessage = `Invalid postal code ${codePostal} (cause: ${codePostal.length} characters)`; throw new Error(errorMessage); diff --git a/packages/common/src/territoires/functions/index.ts b/packages/common/src/territoires/functions/index.ts new file mode 100644 index 0000000000..711b1bedce --- /dev/null +++ b/packages/common/src/territoires/functions/index.ts @@ -0,0 +1,2 @@ +// @index('./*.service.ts', f => `export * from '${f.path}'`) +export * from "./departement-helper.service"; diff --git a/packages/common/src/territoires/index.ts b/packages/common/src/territoires/index.ts index b9723b0efe..7596973283 100644 --- a/packages/common/src/territoires/index.ts +++ b/packages/common/src/territoires/index.ts @@ -1,4 +1,5 @@ // @index('./*', f => `export * from '${f.path}'`) export * from "./constants"; +export * from "./functions"; export * from "./interfaces"; export * from "./types"; diff --git a/packages/frontend/src/_common/model/telephone/COUNTRY_CODES.ts b/packages/frontend/src/_common/model/telephone/COUNTRY_CODES.ts index ef1e916626..556294a1ea 100644 --- a/packages/frontend/src/_common/model/telephone/COUNTRY_CODES.ts +++ b/packages/frontend/src/_common/model/telephone/COUNTRY_CODES.ts @@ -1,5 +1,5 @@ +import { TimeZone } from "@domifa/common"; import { CountryISO } from "@khazii/ngx-intl-tel-input"; -import { TimeZone } from "../../../app/shared"; export const COUNTRY_CODES: { [key: string]: string } = { af: "93", diff --git a/packages/frontend/src/app/modules/structures/classes/StructureCommonWeb.class.ts b/packages/frontend/src/app/modules/structures/classes/StructureCommonWeb.class.ts index efc4c9c246..7eedac836f 100644 --- a/packages/frontend/src/app/modules/structures/classes/StructureCommonWeb.class.ts +++ b/packages/frontend/src/app/modules/structures/classes/StructureCommonWeb.class.ts @@ -1,5 +1,4 @@ import { Telephone } from "../../../../_common/model"; -import { TimeZone } from "../../../shared/territoires/types/TimeZone.type"; import { CountryISO } from "@khazii/ngx-intl-tel-input"; @@ -11,6 +10,7 @@ import { StructureSmsParams, StructureCommon, StructureOrganismeType, + TimeZone, } from "@domifa/common"; export class StructureCommonWeb implements StructureCommon { diff --git a/packages/frontend/src/app/modules/structures/components/structure-edit-form/structure-edit-form.component.ts b/packages/frontend/src/app/modules/structures/components/structure-edit-form/structure-edit-form.component.ts index 457f7369f7..04f3f698ee 100644 --- a/packages/frontend/src/app/modules/structures/components/structure-edit-form/structure-edit-form.component.ts +++ b/packages/frontend/src/app/modules/structures/components/structure-edit-form/structure-edit-form.component.ts @@ -18,7 +18,6 @@ import { } from "@khazii/ngx-intl-tel-input"; import { PREFERRED_COUNTRIES, - DEPARTEMENTS_LISTE, NoWhiteSpaceValidator, EmailValidator, } from "../../../../shared"; @@ -40,6 +39,7 @@ import { StructureCommon, Structure, STRUCTURE_ORGANISME_TYPE_LABELS, + DEPARTEMENTS_LISTE, } from "@domifa/common"; @Component({ diff --git a/packages/frontend/src/app/modules/structures/components/structures-form/structures-form.component.ts b/packages/frontend/src/app/modules/structures/components/structures-form/structures-form.component.ts index 1c0dcdc88c..a8886d7a4c 100644 --- a/packages/frontend/src/app/modules/structures/components/structures-form/structures-form.component.ts +++ b/packages/frontend/src/app/modules/structures/components/structures-form/structures-form.component.ts @@ -23,17 +23,15 @@ import { StructureCommonWeb } from "../../classes/StructureCommonWeb.class"; import { anyPhoneValidator } from "../../../shared/phone/mobilePhone.validator"; import { getFormPhone } from "../../../shared/phone"; -import { - PREFERRED_COUNTRIES, - DEPARTEMENTS_LISTE, - EmailValidator, -} from "../../../../shared"; +import { PREFERRED_COUNTRIES, EmailValidator } from "../../../../shared"; import { StructureCommon, Structure, STRUCTURE_ORGANISME_TYPE_LABELS, + getDepartementFromCodePostal, + DEPARTEMENTS_LISTE, } from "@domifa/common"; -import { departementHelper } from "../../utils/departement-helper.service"; + import { getPostalCodeValidator, updateComplementAdress, @@ -174,7 +172,7 @@ export class StructuresFormComponent implements OnInit, OnDestroy { return; } - const departement = departementHelper.getDepartementFromCodePostal( + const departement = getDepartementFromCodePostal( this.structureForm.value.codePostal ); diff --git a/packages/frontend/src/app/modules/structures/utils/departement-helper.service.spec.ts b/packages/frontend/src/app/modules/structures/utils/departement-helper.service.spec.ts deleted file mode 100644 index 193e9a12ce..0000000000 --- a/packages/frontend/src/app/modules/structures/utils/departement-helper.service.spec.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { departementHelper } from "./departement-helper.service"; - -describe("Departement helper Service", () => { - it("common case", () => { - expect(departementHelper.getDepartementFromCodePostal("75000")).toEqual( - "75" - ); - expect(departementHelper.getDepartementFromCodePostal("49530")).toEqual( - "49" - ); - expect(departementHelper.getDepartementFromCodePostal("33600")).toEqual( - "33" - ); - expect(departementHelper.getDepartementFromCodePostal("01100")).toEqual( - "01" - ); - }); - - it("invalid format", () => { - expect(() => - departementHelper.getDepartementFromCodePostal("7500") - ).toThrow(); - expect(() => - departementHelper.getDepartementFromCodePostal("750000") - ).toThrow(); - }); - - it("corse", () => { - expect(departementHelper.getDepartementFromCodePostal("20146")).toEqual( - "2A" - ); - expect(departementHelper.getDepartementFromCodePostal("20000")).toEqual( - "2A" - ); - expect(departementHelper.getDepartementFromCodePostal("20090")).toEqual( - "2A" - ); - expect(departementHelper.getDepartementFromCodePostal("20200")).toEqual( - "2B" - ); - expect(departementHelper.getDepartementFromCodePostal("20600")).toEqual( - "2B" - ); - }); - - it("exceptions", () => { - expect(departementHelper.getDepartementFromCodePostal("97133")).toEqual( - "977" - ); - expect(departementHelper.getDepartementFromCodePostal("97150")).toEqual( - "978" - ); - expect(departementHelper.getDepartementFromCodePostal("05110")).toEqual( - "04" - ); - expect(departementHelper.getDepartementFromCodePostal("73670")).toEqual( - "38" - ); - expect(departementHelper.getDepartementFromCodePostal("01590")).toEqual( - "39" - ); - }); -}); diff --git a/packages/frontend/src/app/modules/structures/utils/index.ts b/packages/frontend/src/app/modules/structures/utils/index.ts index b448249585..2bb0790b10 100644 --- a/packages/frontend/src/app/modules/structures/utils/index.ts +++ b/packages/frontend/src/app/modules/structures/utils/index.ts @@ -1,4 +1,3 @@ // @index('./*', f => `export * from '${f.path}'`) -export * from "./departement-helper.service"; export * from "./generateSender.service"; export * from "./structure-validators"; diff --git a/packages/frontend/src/app/modules/structures/utils/structure-validators.ts b/packages/frontend/src/app/modules/structures/utils/structure-validators.ts index 758d772e5c..0edec0207d 100644 --- a/packages/frontend/src/app/modules/structures/utils/structure-validators.ts +++ b/packages/frontend/src/app/modules/structures/utils/structure-validators.ts @@ -5,7 +5,10 @@ import { ValidatorFn, Validators, } from "@angular/forms"; -import { departementHelper } from "./departement-helper.service"; +import { + getDepartementFromCodePostal, + getRegionCodeFromDepartement, +} from "@domifa/common"; export function isInvalidStructureName(structureName: string): boolean { if (!structureName) { @@ -39,9 +42,8 @@ export function codePostalValidator(): ValidatorFn { const testCode = RegExp(/^\d[0-9AB]\d{3}$/).test(postalCode); if (testCode) { try { - const departement = - departementHelper.getDepartementFromCodePostal(postalCode); - departementHelper.getRegionCodeFromDepartement(departement); + const departement = getDepartementFromCodePostal(postalCode); + getRegionCodeFromDepartement(departement); } catch (err) { // eslint-disable-next-line no-console console.error(`Validation error for postalCode "${postalCode}"`, err); @@ -57,7 +59,7 @@ export function codePostalValidator(): ValidatorFn { export const updateComplementAdress = ( structureForm: FormGroup, actif: boolean -) => { +): void => { const isRequired = actif === true ? [Validators.required] : null; structureForm