From faede635bda43b08a7fc40712b91c1ae0ec015b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Romain?= <francoisromain@gmail.com> Date: Tue, 28 Jan 2020 14:10:15 +0100 Subject: [PATCH] refactor: convertit en typescript (#273) --- package-lock.json | 141 ++++++++---------- package.json | 3 +- ...ite-update.js => titre-activite-update.ts} | 2 +- ...js => titre-activite-updation-validate.ts} | 6 +- ...che-update.js => titre-demarche-update.ts} | 2 +- ...js => titre-demarche-updation-validate.ts} | 8 +- .../titre-document-updation-validate.js | 7 - .../titre-document-updation-validate.ts | 11 ++ ...nts-calc.js => titre-etape-points-calc.ts} | 10 +- ...-etape-update.js => titre-etape-update.ts} | 5 +- ...te.js => titre-etape-updation-validate.ts} | 22 +-- .../{titre-update.js => titre-update.ts} | 2 +- ...validate.js => titre-updation-validate.ts} | 4 +- src/database/models/_format.ts | 8 +- src/tools/geo-convert.ts | 5 +- src/tools/{index.test.js => index.test.ts} | 0 src/tools/{index.js => index.ts} | 36 +++-- src/types.ts | 15 +- tsconfig.json | 4 +- 19 files changed, 156 insertions(+), 135 deletions(-) rename src/business/{titre-activite-update.js => titre-activite-update.ts} (90%) rename src/business/{titre-activite-updation-validate.js => titre-activite-updation-validate.ts} (71%) rename src/business/{titre-demarche-update.js => titre-demarche-update.ts} (98%) rename src/business/{titre-demarche-updation-validate.js => titre-demarche-updation-validate.ts} (57%) delete mode 100644 src/business/titre-document-updation-validate.js create mode 100644 src/business/titre-document-updation-validate.ts rename src/business/{titre-etape-points-calc.js => titre-etape-points-calc.ts} (74%) rename src/business/{titre-etape-update.js => titre-etape-update.ts} (98%) rename src/business/{titre-etape-updation-validate.js => titre-etape-updation-validate.ts} (82%) rename src/business/{titre-update.js => titre-update.ts} (98%) rename src/business/{titre-updation-validate.js => titre-updation-validate.ts} (80%) rename src/tools/{index.test.js => index.test.ts} (100%) rename src/tools/{index.js => index.ts} (59%) diff --git a/package-lock.json b/package-lock.json index f071bd777..85b617ae2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1061,14 +1061,14 @@ } }, "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", + "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" } }, "@mapbox/geojson-area": { @@ -1443,14 +1443,12 @@ "@types/istanbul-lib-coverage": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", - "dev": true + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==" }, "@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } @@ -1459,19 +1457,17 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", - "dev": true, "requires": { "@types/istanbul-lib-coverage": "*", "@types/istanbul-lib-report": "*" } }, "@types/jest": { - "version": "24.9.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.9.1.tgz", - "integrity": "sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q==", - "dev": true, + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.1.0.tgz", + "integrity": "sha512-MYX8LpNQboef1NDZQTchM5poL8WITRVG/4/1XLK/Xsamjptsvgb8ELTRoXixBARi+a81mMT4n2hooqaydEOE9A==", "requires": { - "jest-diff": "^24.3.0" + "jest-diff": "^25.1.0" } }, "@types/json-schema": { @@ -1532,6 +1528,14 @@ "@types/node": "*" } }, + "@types/nodemailer": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.0.tgz", + "integrity": "sha512-KY7bFWB0MahRZvVW4CuW83qcCDny59pJJ0MQ5ifvfcjNwPlIT0vW4uARO4u1gtkYnWdhSvURegecY/tzcukJcA==", + "requires": { + "@types/node": "*" + } + }, "@types/proj4": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@types/proj4/-/proj4-2.5.0.tgz", @@ -1572,10 +1576,9 @@ "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" }, "@types/yargs": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.6.tgz", - "integrity": "sha512-IkltIncDQWv6fcAvnHtJ6KtkmY/vtR3bViOaCzpj/A3yNhlfZAgxNe6AEQD1cQrkYD+YsKVo08DSxvNKEsD7BA==", - "dev": true, + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.2.tgz", + "integrity": "sha512-hFkuAp58M2xOc1QgJhkFrLMnqa8KWTFRTnzrI1zlEcOfg3DZ0eH3aPAo/N6QlVVu8E4KS4xD1jtEG3rdQYFmIg==", "requires": { "@types/yargs-parser": "*" } @@ -1583,8 +1586,7 @@ "@types/yargs-parser": { "version": "15.0.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", - "dev": true + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==" }, "@typescript-eslint/experimental-utils": { "version": "2.17.0", @@ -4100,10 +4102,9 @@ "dev": true }, "diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", - "dev": true + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.1.0.tgz", + "integrity": "sha512-nFIfVk5B/NStCsJ+zaPO4vYuLjlzQ6uFvPxzYyHlejNZ/UGa7G/n7peOXVrVNvRuyfstt+mZQYGpjxg9Z6N8Kw==" }, "dir-glob": { "version": "2.0.0", @@ -8342,37 +8343,14 @@ } }, "jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "dev": true, + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.1.0.tgz", + "integrity": "sha512-nepXgajT+h017APJTreSieh4zCqnSHEJ1iT8HDlewu630lSJ4Kjjr9KNzm+kzGwwcpsDE6Snx1GJGzzsefaEHw==", "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } + "chalk": "^3.0.0", + "diff-sequences": "^25.1.0", + "jest-get-type": "^25.1.0", + "pretty-format": "^25.1.0" } }, "jest-docblock": { @@ -8659,10 +8637,9 @@ } }, "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "dev": true + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.1.0.tgz", + "integrity": "sha512-yWkBnT+5tMr8ANB6V+OjmrIJufHtCAqI5ic2H40v+tRqxDmE0PGnIiTyvRWFOMtmVHYpwRqyazDbTnhpjsGvLw==" }, "jest-haste-map": { "version": "25.1.0", @@ -12733,31 +12710,42 @@ } }, "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dev": true, + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.1.0.tgz", + "integrity": "sha512-46zLRSGLd02Rp+Lhad9zzuNZ+swunitn8zIpfD2B4OPCRLXbM87RJT2aBLBWYOznNUML/2l/ReMyWNC80PJBUQ==", "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" + "@jest/types": "^25.1.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "requires": { - "color-convert": "^1.9.0" + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" } } }, @@ -12938,8 +12926,7 @@ "react-is": { "version": "16.12.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", - "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==", - "dev": true + "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==" }, "read-package-json-fast": { "version": "1.1.1", diff --git a/package.json b/package.json index ee1d61c2f..c3d6c530e 100644 --- a/package.json +++ b/package.json @@ -67,9 +67,11 @@ "@types/express-jwt": "0.0.42", "@types/geojson": "^7946.0.7", "@types/graphql-upload": "^8.0.3", + "@types/jest": "^25.1.0", "@types/jsonwebtoken": "^8.3.7", "@types/node": "^13.5.0", "@types/node-fetch": "^2.5.4", + "@types/nodemailer": "^6.4.0", "@types/proj4": "^2.5.0", "bcryptjs": "^2.4.3", "camelcase": "^5.3.1", @@ -109,7 +111,6 @@ "typescript": "^3.7.5" }, "devDependencies": { - "@types/jest": "^24.9.1", "@typescript-eslint/parser": "^2.17.0", "codecov": "^3.6.2", "commitizen": "^4.0.3", diff --git a/src/business/titre-activite-update.js b/src/business/titre-activite-update.ts similarity index 90% rename from src/business/titre-activite-update.js rename to src/business/titre-activite-update.ts index 8e54522b0..66b3c3778 100644 --- a/src/business/titre-activite-update.js +++ b/src/business/titre-activite-update.ts @@ -2,7 +2,7 @@ import { titreActiviteGet } from '../database/queries/titres-activites' import { titreGet } from '../database/queries/titres' import titresPropsActivitesUpdate from './processes/titres-props-activites-update' -const titreActiviteUpdate = async titreActiviteId => { +const titreActiviteUpdate = async (titreActiviteId: string) => { const activite = await titreActiviteGet(titreActiviteId) const titre = await titreGet(activite.titreId) diff --git a/src/business/titre-activite-updation-validate.js b/src/business/titre-activite-updation-validate.ts similarity index 71% rename from src/business/titre-activite-updation-validate.js rename to src/business/titre-activite-updation-validate.ts index b9aadbc5d..70ba05dfb 100644 --- a/src/business/titre-activite-updation-validate.js +++ b/src/business/titre-activite-updation-validate.ts @@ -1,8 +1,10 @@ +import { ITitresActivitesContenu, IActivitesTypesSection } from '../types' + import titreActiviteNumbersCheck from './utils/titre-activite-numbers-check' const titreActiviteUpdationValidate = ( - titreActviteContenu, - activiteTypeSections + titreActviteContenu: ITitresActivitesContenu, + activiteTypeSections: IActivitesTypesSection[] ) => { const errors = [] // les champs number ne peuvent avoir une durée négative diff --git a/src/business/titre-demarche-update.js b/src/business/titre-demarche-update.ts similarity index 98% rename from src/business/titre-demarche-update.js rename to src/business/titre-demarche-update.ts index 9b8f9ecb9..5f38a6cec 100644 --- a/src/business/titre-demarche-update.js +++ b/src/business/titre-demarche-update.ts @@ -13,7 +13,7 @@ import { titreIdsUpdate } from './processes/titres-ids-update' import { titreActivitesRowUpdate } from '../tools/export/titre-activites' -const titreDemarcheUpdate = async titreId => { +const titreDemarcheUpdate = async (titreId: string) => { try { let titre = await titreGet(titreId, { graph: 'demarches(orderDesc).[etapes(orderDesc)]' diff --git a/src/business/titre-demarche-updation-validate.js b/src/business/titre-demarche-updation-validate.ts similarity index 57% rename from src/business/titre-demarche-updation-validate.js rename to src/business/titre-demarche-updation-validate.ts index 90663b86b..c77375dd8 100644 --- a/src/business/titre-demarche-updation-validate.js +++ b/src/business/titre-demarche-updation-validate.ts @@ -1,5 +1,9 @@ -const titreDemarcheUpdationValidate = async titreDemarcheNew => { - const errors = [] +import { ITitresDemarches } from '../types' + +const titreDemarcheUpdationValidate = async ( + titreDemarcheNew: ITitresDemarches +) => { + const errors = [] as string[] // vérifie // - si le statut de la démarche est possible sur ce type de démarche // - si la démarche contient des étapes qui ne sont pas recevables diff --git a/src/business/titre-document-updation-validate.js b/src/business/titre-document-updation-validate.js deleted file mode 100644 index b865ae9b3..000000000 --- a/src/business/titre-document-updation-validate.js +++ /dev/null @@ -1,7 +0,0 @@ -const titreDocumentUpdationValidate = async titreDocument => { - const errors = [] - - return errors -} - -export default titreDocumentUpdationValidate diff --git a/src/business/titre-document-updation-validate.ts b/src/business/titre-document-updation-validate.ts new file mode 100644 index 000000000..3b57285be --- /dev/null +++ b/src/business/titre-document-updation-validate.ts @@ -0,0 +1,11 @@ +import { ITitresDocuments } from '../types' + +const titreDocumentUpdationValidate = async ( + titreDocument: ITitresDocuments +) => { + const errors = [] as string[] + + return errors +} + +export default titreDocumentUpdationValidate diff --git a/src/business/titre-etape-points-calc.js b/src/business/titre-etape-points-calc.ts similarity index 74% rename from src/business/titre-etape-points-calc.js rename to src/business/titre-etape-points-calc.ts index be8f76f58..63f02a8db 100644 --- a/src/business/titre-etape-points-calc.js +++ b/src/business/titre-etape-points-calc.ts @@ -1,7 +1,8 @@ +import { ITitresPoints, ITitresPointsReferences, ICoordonnees } from '../types' import geoConvert from '../tools/geo-convert' import { geoSystemeGet } from '../database/queries/metas' -const titreEtapePointsCalc = async titrePoints => { +const titreEtapePointsCalc = async (titrePoints: ITitresPoints[]) => { const uniteRatio = await uniteRatioFind(pointReferenceFind(titrePoints)) return titrePoints.map(point => { @@ -11,19 +12,18 @@ const titreEtapePointsCalc = async titrePoints => { point.coordonnees = geoConvert(reference.geoSystemeId, { x: reference.coordonnees.x * uniteRatio, y: reference.coordonnees.y * uniteRatio - }) + }) as ICoordonnees return point }) } -const pointReferenceFind = points => - points.length && +const pointReferenceFind = (points: ITitresPoints[]) => points[0].references && points[0].references.length && (points[0].references.find(r => r.opposable) || points[0].references[0]) -const uniteRatioFind = async pointReference => { +const uniteRatioFind = async (pointReference: ITitresPointsReferences | 0) => { if (!pointReference || !pointReference.geoSystemeId) { return 1 } diff --git a/src/business/titre-etape-update.js b/src/business/titre-etape-update.ts similarity index 98% rename from src/business/titre-etape-update.js rename to src/business/titre-etape-update.ts index 46c909f78..20d9dbe2f 100644 --- a/src/business/titre-etape-update.js +++ b/src/business/titre-etape-update.ts @@ -23,7 +23,10 @@ import { titreIdsUpdate } from './processes/titres-ids-update' import { titreActivitesRowUpdate } from '../tools/export/titre-activites' -const titreEtapeUpdate = async (titreEtapeId, titreDemarcheId) => { +const titreEtapeUpdate = async ( + titreEtapeId: string, + titreDemarcheId: string +) => { try { // 1. console.log('ordre des étapes…') diff --git a/src/business/titre-etape-updation-validate.js b/src/business/titre-etape-updation-validate.ts similarity index 82% rename from src/business/titre-etape-updation-validate.js rename to src/business/titre-etape-updation-validate.ts index 52c83b552..01577e937 100644 --- a/src/business/titre-etape-updation-validate.js +++ b/src/business/titre-etape-updation-validate.ts @@ -1,3 +1,5 @@ +import { ITitresEtapes } from '../types' + import { titreGet } from '../database/queries/titres' import { titreDemarcheGet } from '../database/queries/titres-demarches' import titreEtapeTypeAndStatusCheck from './utils/titre-etape-type-and-status-check' @@ -5,20 +7,16 @@ import titreEtapeDateCheck from './utils/titre-etape-date-check' import titreEtapePointsCheck from './utils/titre-etape-points-check' import titreEtapeNumbersCheck from './utils/titre-etape-numbers-check' -const titreEtapeUpdationValidate = async titreEtape => { +const titreEtapeUpdationValidate = async (titreEtape: ITitresEtapes) => { const titreDemarche = await titreDemarcheGet(titreEtape.titreDemarcheId) const titre = await titreGet(titreDemarche.titreId) - const etapeType = titreDemarche.type.etapesTypes.find( - et => et.id === titreEtape.typeId - ) - const errors = [] // 1. le type d'étape correspond à la démarche et au type de titre - const error = titreEtapeTypeAndStatusCheck(titreEtape, titreDemarche, titre) + const error = titreEtapeTypeAndStatusCheck(titreEtape, titreDemarche) if (error) { errors.push(error) @@ -43,11 +41,15 @@ const titreEtapeUpdationValidate = async titreEtape => { } // 4. les champs number ne peuvent avoir une durée négative + const etapeType = titreDemarche.type.etapesTypes.find( + et => et.id === titreEtape.typeId + ) + if (etapeType && etapeType.sections) { + const errorNumbers = titreEtapeNumbersCheck(titreEtape, etapeType.sections) - const errorNumbers = titreEtapeNumbersCheck(titreEtape, etapeType.sections) - - if (errorNumbers) { - errors.push(errorNumbers) + if (errorNumbers) { + errors.push(errorNumbers) + } } return errors diff --git a/src/business/titre-update.js b/src/business/titre-update.ts similarity index 98% rename from src/business/titre-update.js rename to src/business/titre-update.ts index ca51c2e07..49de1a9ca 100644 --- a/src/business/titre-update.js +++ b/src/business/titre-update.ts @@ -9,7 +9,7 @@ import { titreActivitesRowUpdate } from '../tools/export/titre-activites' import { titreIdsUpdate } from './processes/titres-ids-update' import { activitesTypesGet } from '../database/queries/metas' -const titreUpdate = async titreId => { +const titreUpdate = async (titreId: string) => { try { let titre = await titreGet(titreId, { graph: 'administrationsGestionnaires' diff --git a/src/business/titre-updation-validate.js b/src/business/titre-updation-validate.ts similarity index 80% rename from src/business/titre-updation-validate.js rename to src/business/titre-updation-validate.ts index 8060ebee5..dae35a18c 100644 --- a/src/business/titre-updation-validate.js +++ b/src/business/titre-updation-validate.ts @@ -1,4 +1,6 @@ -const titreUpdationValidate = async (titreNew, titreOld) => { +import { ITitres } from '../types' + +const titreUpdationValidate = async (titreNew: ITitres, titreOld: ITitres) => { // vérifie // - si un titre contient des démarches qui ne sont pas recevables const errors = [] diff --git a/src/database/models/_format.ts b/src/database/models/_format.ts index 398abbbb1..6543d68b2 100644 --- a/src/database/models/_format.ts +++ b/src/database/models/_format.ts @@ -73,19 +73,19 @@ const paysFormat = (communes: ICommunes[]) => { }, []) // trie par ordre alphabétique - pays.sort((a, b) => (a.nom > b.nom ? 1 : a.nom < b.nom ? -1 : 0)) + pays.sort((a, b) => a.nom.localeCompare(b.nom, 'fr')) pays.forEach(p => { if (!p.regions) return - p.regions.sort((a, b) => (a.nom > b.nom ? 1 : -1)) + p.regions.sort((a, b) => a.nom.localeCompare(b.nom, 'fr')) p.regions.forEach(r => { if (!r.departements) return - r.departements.sort((a, b) => (a.nom > b.nom ? 1 : -1)) + r.departements.sort((a, b) => a.nom.localeCompare(b.nom, 'fr')) r.departements.forEach(d => { if (!d.communes) return - d.communes.sort((a, b) => (a.nom > b.nom ? 1 : -1)) + d.communes.sort((a, b) => a.nom.localeCompare(b.nom, 'fr')) }) }) }) diff --git a/src/tools/geo-convert.ts b/src/tools/geo-convert.ts index c54314351..08a7f45f0 100644 --- a/src/tools/geo-convert.ts +++ b/src/tools/geo-convert.ts @@ -13,9 +13,8 @@ const geoConvertInit = async () => { ) } -const geoConvert = (epsgId: string, coords: proj4.TemplateCoordinates) => { - return proj4(`EPSG:${epsgId}`, 'EPSG:4326', coords) -} +const geoConvert = (epsgId: string, coords: proj4.TemplateCoordinates) => + proj4(`EPSG:${epsgId}`, 'EPSG:4326', coords) export default geoConvert diff --git a/src/tools/index.test.js b/src/tools/index.test.ts similarity index 100% rename from src/tools/index.test.js rename to src/tools/index.test.ts diff --git a/src/tools/index.js b/src/tools/index.ts similarity index 59% rename from src/tools/index.js rename to src/tools/index.ts index d934a5522..6892fde10 100644 --- a/src/tools/index.js +++ b/src/tools/index.ts @@ -1,7 +1,11 @@ -const dupRemove = (key, ...arrays) => +interface Index { + [id: string]: any +} + +const dupRemove = (key: string, ...arrays: Index[][]) => arrays.reduce( (result, array) => - array.reduce((res, el) => { + array.reduce((res: Index[], el) => { if (!res.find(e => !el[key] || e[key] === el[key])) { res.push(el) } @@ -11,14 +15,14 @@ const dupRemove = (key, ...arrays) => [] ) -const dupFind = (key, ...arrays) => +const dupFind = (key: string, ...arrays: Index[][]) => arrays.reduce( - (result, array) => + (result: Index[], array) => result.filter(el => array.find(e => e[key] && e[key] === el[key])), - arrays.pop() + arrays.pop() as Index[] ) -const objectsDiffer = (a, b) => { +const objectsDiffer = (a: Index | any, b: Index | any): boolean => { if (typeof a !== 'object' && typeof b !== 'object') { return a !== b } @@ -27,7 +31,7 @@ const objectsDiffer = (a, b) => { Object.keys(a).find(k => { if (a[k] && b[k]) { if (Array.isArray(a[k]) && Array.isArray(b[k])) { - return a[k].find((a, i) => objectsDiffer(a, b[k][i])) + return a[k].find((ak: any, i: number) => objectsDiffer(ak, b[k][i])) } if (typeof a[k] === 'object' && typeof b[k] === 'object' && a[k]) { @@ -40,19 +44,25 @@ const objectsDiffer = (a, b) => { ) } -const objConditionMatch = (condition, obj, keys = null) => { +// TODO: définir une interface IConditions + +const objConditionMatch = ( + condition: any, + obj: Index, + keys: string[] | null = null +) => { // si les conditions sont testées plusieurs fois, (dans une boucle par ex) // alors les clés de l'objet de condition peuvent être passées optionnellement // pour ne pas les recalculer à chaque fois const conditionKeys = keys || Object.keys(condition) + // si la condition est multiple (tableau) + // teste si l'objet contient au moins une des valeurs + // sinon, teste la valeur exacte return conditionKeys.every(k => - // si la condition est multiple (tableau) Array.isArray(condition[k]) - ? // teste si l'objet contient au moins une des valeurs - condition[k].includes(obj[k]) - : // sinon, teste la valeur exacte - condition[k] === obj[k] + ? condition[k].includes(obj[k]) + : condition[k] === obj[k] ) } diff --git a/src/types.ts b/src/types.ts index 6b073c319..6b461de89 100644 --- a/src/types.ts +++ b/src/types.ts @@ -90,7 +90,7 @@ interface IDemarchesTypes { titulaires?: boolean renouvelable?: boolean exception?: boolean - etapesTypes?: IEtapesTypes[] + etapesTypes: IEtapesTypes[] } interface IDepartements { @@ -179,6 +179,7 @@ interface IGeoSystemes { nom: string ordre: number uniteId?: string + unite: IUnites zone?: string } @@ -299,6 +300,10 @@ interface ISubstances { substanceLegale: ISubstancesLegales } +interface ITitresActivitesContenu { + [id: string]: string | number | string[] +} + interface ITitresActivites { id: string titreId: string @@ -306,8 +311,7 @@ interface ITitresActivites { utilisateurId?: string utilisateur: IUtilisateurs dateSaisie?: string - // TODO: créer une interfaceIActiviteContenu - contenu?: any + contenu?: ITitresActivitesContenu activiteTypeId: string activiteType: IActivitesTypes activiteStatutId: string @@ -339,10 +343,10 @@ interface ITitresDemarches { id: string titreId: string typeId: string + type: IDemarchesTypes statutId?: string ordre?: number annulationTitreDemarcheId?: string - type: IDemarchesTypes statut?: IDemarchesStatuts titreType: ITypes etapes?: ITitresEtapes[] @@ -544,10 +548,12 @@ interface IUtilisateurs { export { IActivitesStatuts, IActivitesTypes, + IActivitesTypesSection, IAdministrationsTypes, IAdministrations, IAnnees, ICommunes, + ICoordonnees, IDemarchesStatuts, IDemarchesTypes, IDepartements, @@ -578,6 +584,7 @@ export { ISubstancesLegales, ISubstances, ITitresActivites, + ITitresActivitesContenu, ITitresAdministrationsGestionnaires, ITitresAdministrationsLocales, ITitresCommunes, diff --git a/tsconfig.json b/tsconfig.json index b979c72e9..1c3ae6032 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,8 +16,8 @@ "strictNullChecks": true, "sourceMap": true, "target": "ES2017", - "types": ["node", "geojson", "node-fetch"] + "types": ["node", "jest"] }, - "exclude": ["node_modules"], + "exclude": ["node_modules", "**/*.spec.ts", "**/*.test.ts"], "include": ["src/**/*"] } -- GitLab