From 2c11c2bb8023e31398c4587912ebbc98eb248d93 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Fri, 13 Dec 2024 14:31:53 +0100 Subject: [PATCH 01/33] Move trpc to utils --- backend/src/app.module.ts | 4 ++-- .../membres/membres.router.e2e-spec.ts | 2 +- .../collectivites/membres/membres.router.ts | 2 +- .../personnes.router.e2e-spec.ts | 2 +- backend/src/collectivites/personnes.router.ts | 10 ++++---- .../bulk-edit/bulk-edit.router.e2e-spec.ts | 2 +- .../src/fiches/bulk-edit/bulk-edit.router.ts | 2 +- .../count-by-statut.router.e2e-spec.ts | 2 +- .../count-by-statut/count-by-statut.router.ts | 2 +- .../fiche-action-etape.router.e2e-spec.ts | 2 +- .../fiche-action-etape.router.ts | 2 +- .../indicateur-filtre.router.e2e-spec.ts | 2 +- .../indicateur-filtre.router.ts | 2 +- backend/src/indicateurs/indicateurs.module.ts | 20 +++++++++------- .../routers/trajectoires.router.ts | 2 +- backend/src/main.ts | 2 +- .../compute-score/compute-score.router.ts | 2 +- .../controllers/referentiels.e2e-spec.ts | 1 + .../snapshots/score-snaphots.router.ts | 2 +- .../score-snapshots.router.e2e-spec.ts | 2 +- .../update-action-statut.router.e2e-spec.ts | 2 +- .../update-action-statut.router.ts | 2 +- ...egories-by-collectivite.router.e2e-spec.ts | 2 +- .../get-categories-by-collectivite.router.ts | 10 +++++--- backend/src/utils/index.ts | 1 + backend/src/{ => utils}/trpc/trpc.module.ts | 2 +- backend/src/{ => utils}/trpc/trpc.router.ts | 24 +++++++++---------- backend/src/{ => utils}/trpc/trpc.service.ts | 2 +- backend/test/app-utils.ts | 2 +- 29 files changed, 62 insertions(+), 52 deletions(-) rename backend/src/{ => utils}/trpc/trpc.module.ts (100%) rename backend/src/{ => utils}/trpc/trpc.router.ts (67%) rename backend/src/{ => utils}/trpc/trpc.service.ts (98%) diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 1721d9bf38..a9e6124b1d 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -12,8 +12,8 @@ import { PersonnalisationsModule } from './personnalisations/personnalisations.m import { ReferentielsModule } from './referentiels/referentiels.module'; import { SheetModule } from './spreadsheets/sheet.module'; import { TaxonomieModule } from './taxonomie/taxonomie.module'; -import { TrpcModule } from './trpc/trpc.module'; -import { TrpcRouter } from './trpc/trpc.router'; +import { TrpcModule } from './utils/trpc/trpc.module'; +import { TrpcRouter } from './utils/trpc/trpc.router'; @Module({ imports: [ diff --git a/backend/src/collectivites/membres/membres.router.e2e-spec.ts b/backend/src/collectivites/membres/membres.router.e2e-spec.ts index 3e61b3ac03..c60b7be763 100644 --- a/backend/src/collectivites/membres/membres.router.e2e-spec.ts +++ b/backend/src/collectivites/membres/membres.router.e2e-spec.ts @@ -8,7 +8,7 @@ import { AuthenticatedUser } from '../../auth/models/auth.models'; import { invitationTable } from '../../auth/models/invitation.table'; import { NiveauAcces } from '@/backend/auth/authorizations/roles/niveau-acces.enum'; import DatabaseService from '../../common/services/database.service'; -import { AppRouter, TrpcRouter } from '../../trpc/trpc.router'; +import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; import { MembreFonctionEnum } from '../models/membre-fonction.enum'; type Input = inferProcedureInput; diff --git a/backend/src/collectivites/membres/membres.router.ts b/backend/src/collectivites/membres/membres.router.ts index 21e57266d3..70bae3bfb5 100644 --- a/backend/src/collectivites/membres/membres.router.ts +++ b/backend/src/collectivites/membres/membres.router.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { TrpcService } from '../../trpc/trpc.service'; +import { TrpcService } from '@/backend/utils'; import { CollectiviteMembresService } from './membres.service'; @Injectable() diff --git a/backend/src/collectivites/personnes.router.e2e-spec.ts b/backend/src/collectivites/personnes.router.e2e-spec.ts index 9830d38603..b6e6b77b60 100644 --- a/backend/src/collectivites/personnes.router.e2e-spec.ts +++ b/backend/src/collectivites/personnes.router.e2e-spec.ts @@ -10,7 +10,7 @@ import { YOLO_DODO, YULU_DUDU } from '../../test/test-users.samples'; import { AuthenticatedUser } from '../auth/models/auth.models'; import { utilisateurDroitTable } from '@/backend/auth/authorizations/roles/private-utilisateur-droit.table'; import DatabaseService from '../common/services/database.service'; -import { AppRouter, TrpcRouter } from '../trpc/trpc.router'; +import { AppRouter, TrpcRouter } from '../utils/trpc/trpc.router'; type ListRequest = inferProcedureInput< AppRouter['collectivites']['personnes']['list'] diff --git a/backend/src/collectivites/personnes.router.ts b/backend/src/collectivites/personnes.router.ts index 3718b9dc10..71fc27213f 100644 --- a/backend/src/collectivites/personnes.router.ts +++ b/backend/src/collectivites/personnes.router.ts @@ -1,14 +1,14 @@ +import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; +import { PermissionService } from '@/backend/auth/authorizations/permission.service'; +import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; +import { TrpcService } from '@/backend/utils'; import { Injectable } from '@nestjs/common'; import { TRPCError } from '@trpc/server'; -import { TrpcService } from '../trpc/trpc.service'; +import CollectivitesService from '../collectivites/services/collectivites.service'; import { listRequestSchema, PersonnesService, } from './services/personnes.service'; -import { PermissionService } from '@/backend/auth/authorizations/permission.service'; -import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; -import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; -import CollectivitesService from '../collectivites/services/collectivites.service'; const inputSchema = listRequestSchema; diff --git a/backend/src/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts b/backend/src/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts index 7503b27073..29709aaf85 100644 --- a/backend/src/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts +++ b/backend/src/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts @@ -10,7 +10,7 @@ import { getAuthUser } from '../../../test/auth-utils'; import { YOLO_DODO, YULU_DUDU } from '../../../test/test-users.samples'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import { libreTagTable } from '../../taxonomie/models/libre-tag.table'; -import { AppRouter, TrpcRouter } from '../../trpc/trpc.router'; +import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; import { ficheActionLibreTagTable } from '../models/fiche-action-libre-tag.table'; import { ficheActionPiloteTable } from '../models/fiche-action-pilote.table'; import { diff --git a/backend/src/fiches/bulk-edit/bulk-edit.router.ts b/backend/src/fiches/bulk-edit/bulk-edit.router.ts index 6088fd0f22..048140cf95 100644 --- a/backend/src/fiches/bulk-edit/bulk-edit.router.ts +++ b/backend/src/fiches/bulk-edit/bulk-edit.router.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { TrpcService } from '../../trpc/trpc.service'; +import { TrpcService } from '@/backend/utils'; import { BulkEditService } from './bulk-edit.service'; @Injectable() diff --git a/backend/src/fiches/count-by-statut/count-by-statut.router.e2e-spec.ts b/backend/src/fiches/count-by-statut/count-by-statut.router.e2e-spec.ts index e6ce519dc1..e666311c31 100644 --- a/backend/src/fiches/count-by-statut/count-by-statut.router.e2e-spec.ts +++ b/backend/src/fiches/count-by-statut/count-by-statut.router.e2e-spec.ts @@ -1,7 +1,7 @@ import { inferProcedureInput } from '@trpc/server'; import { getTestRouter } from '../../../test/app-utils'; import { getAuthUser } from '../../../test/auth-utils'; -import { AppRouter, TrpcRouter } from '../../trpc/trpc.router'; +import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; import { FicheActionStatutsEnumType } from '../models/fiche-action.table'; import { AuthenticatedUser } from './../../auth/models/auth.models'; diff --git a/backend/src/fiches/count-by-statut/count-by-statut.router.ts b/backend/src/fiches/count-by-statut/count-by-statut.router.ts index 95e9aea06c..6f12d37f98 100644 --- a/backend/src/fiches/count-by-statut/count-by-statut.router.ts +++ b/backend/src/fiches/count-by-statut/count-by-statut.router.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { z } from 'zod'; import { getFichesActionFilterRequestSchema } from '../models/get-fiches-actions-filter.request'; -import { TrpcService } from '../../trpc/trpc.service'; +import { TrpcService } from '@/backend/utils'; import { CountByStatutService } from './count-by-statut.service'; const inputSchema = z.object({ diff --git a/backend/src/fiches/fiche-action-etape/fiche-action-etape.router.e2e-spec.ts b/backend/src/fiches/fiche-action-etape/fiche-action-etape.router.e2e-spec.ts index e5409ae361..3f5147d48d 100644 --- a/backend/src/fiches/fiche-action-etape/fiche-action-etape.router.e2e-spec.ts +++ b/backend/src/fiches/fiche-action-etape/fiche-action-etape.router.e2e-spec.ts @@ -7,7 +7,7 @@ import { } from '../../../test/app-utils'; import { getAuthUser } from '../../../test/auth-utils'; import DatabaseService from '../../common/services/database.service'; -import { AppRouter, TrpcRouter } from '../../trpc/trpc.router'; +import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; import { AuthenticatedUser } from './../../auth/models/auth.models'; import { ficheActionEtapeTable } from './fiche-action-etape.table'; diff --git a/backend/src/fiches/fiche-action-etape/fiche-action-etape.router.ts b/backend/src/fiches/fiche-action-etape/fiche-action-etape.router.ts index 48956a6cad..8c4c94ce16 100644 --- a/backend/src/fiches/fiche-action-etape/fiche-action-etape.router.ts +++ b/backend/src/fiches/fiche-action-etape/fiche-action-etape.router.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { upsertFicheActionEtapeSchema } from '@/backend/fiches/fiche-action-etape/fiche-action-etape.table'; import { z } from 'zod'; -import { TrpcService } from '../../trpc/trpc.service'; +import { TrpcService } from '@/backend/utils'; import { FicheActionEtapeService } from './fiche-action-etape.service'; @Injectable() diff --git a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.router.e2e-spec.ts b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.router.e2e-spec.ts index d23c2e6335..c016aaa805 100644 --- a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.router.e2e-spec.ts +++ b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.router.e2e-spec.ts @@ -1,7 +1,7 @@ import { inferProcedureInput } from '@trpc/server'; import { getTestRouter } from '../../../test/app-utils'; import { getAuthUser } from '../../../test/auth-utils'; -import { AppRouter, TrpcRouter } from '../../trpc/trpc.router'; +import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; import { AuthenticatedUser } from './../../auth/models/auth.models'; import { GetFilteredIndicateurRequestQueryOptionType, diff --git a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.router.ts b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.router.ts index e95df16b98..ef20836062 100644 --- a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.router.ts +++ b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.router.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { TrpcService } from '../../trpc/trpc.service'; +import { TrpcService } from '@/backend/utils'; import IndicateurFiltreService from './indicateur-filtre.service'; import { getFilteredIndicateursRequestSchema } from './get-filtered-indicateurs.request'; diff --git a/backend/src/indicateurs/indicateurs.module.ts b/backend/src/indicateurs/indicateurs.module.ts index 9e54bf81f6..a0169b055c 100644 --- a/backend/src/indicateurs/indicateurs.module.ts +++ b/backend/src/indicateurs/indicateurs.module.ts @@ -2,26 +2,24 @@ import { Module } from '@nestjs/common'; import { AuthModule } from '../auth/auth.module'; import { CollectivitesModule } from '../collectivites/collectivites.module'; import { CommonModule } from '../common/common.module'; +import { ConfigurationModule } from '../config/configuration.module'; import { SheetModule } from '../spreadsheets/sheet.module'; -import { TrpcModule } from '../trpc/trpc.module'; import { IndicateursController } from './controllers/indicateurs.controller'; import { TrajectoiresController } from './controllers/trajectoires.controller'; +import { IndicateurFiltreRouter } from './indicateur-filtre/indicateur-filtre.router'; +import IndicateurFiltreService from './indicateur-filtre/indicateur-filtre.service'; import { TrajectoiresRouter } from './routers/trajectoires.router'; -import IndicateursService from './services/indicateurs.service'; -import IndicateurSourcesService from './services/indicateur-sources.service'; import ExportIndicateursService from './services/export-indicateurs.service'; +import IndicateurSourcesService from './services/indicateur-sources.service'; +import IndicateursService from './services/indicateurs.service'; import TrajectoiresDataService from './services/trajectoires-data.service'; import TrajectoiresSpreadsheetService from './services/trajectoires-spreadsheet.service'; import TrajectoiresXlsxService from './services/trajectoires-xlsx.service'; -import { ConfigurationModule } from '../config/configuration.module'; -import IndicateurFiltreService from './indicateur-filtre/indicateur-filtre.service'; -import { IndicateurFiltreRouter } from './indicateur-filtre/indicateur-filtre.router'; @Module({ imports: [ ConfigurationModule, CommonModule, - TrpcModule, AuthModule, CollectivitesModule, SheetModule, @@ -37,7 +35,13 @@ import { IndicateurFiltreRouter } from './indicateur-filtre/indicateur-filtre.ro TrajectoiresXlsxService, TrajectoiresRouter, ], - exports: [IndicateurSourcesService, IndicateursService, TrajectoiresRouter, IndicateurFiltreService, IndicateurFiltreRouter], + exports: [ + IndicateurSourcesService, + IndicateursService, + TrajectoiresRouter, + IndicateurFiltreService, + IndicateurFiltreRouter, + ], controllers: [IndicateursController, TrajectoiresController], }) export class IndicateursModule {} diff --git a/backend/src/indicateurs/routers/trajectoires.router.ts b/backend/src/indicateurs/routers/trajectoires.router.ts index 12f16c2863..90551868a5 100644 --- a/backend/src/indicateurs/routers/trajectoires.router.ts +++ b/backend/src/indicateurs/routers/trajectoires.router.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; import { z } from 'zod'; -import { TrpcService } from '../../trpc/trpc.service'; +import { TrpcService } from '@/backend/utils'; import TrajectoiresSpreadsheetService from '../services/trajectoires-spreadsheet.service'; @Injectable() diff --git a/backend/src/main.ts b/backend/src/main.ts index 430da40427..19f8a20428 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -8,7 +8,7 @@ import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; import { AppModule } from './app.module'; import { AllExceptionsFilter } from './common/filters/all-exceptions.filter'; import { initApplicationCredentials } from './common/services/gcloud.helper'; -import { TrpcRouter } from './trpc/trpc.router'; +import { TrpcRouter } from './utils/trpc/trpc.router'; const logger = new Logger('main'); const port = process.env.PORT || 8080; diff --git a/backend/src/referentiels/compute-score/compute-score.router.ts b/backend/src/referentiels/compute-score/compute-score.router.ts index 26b3ae1205..4e90b485bd 100644 --- a/backend/src/referentiels/compute-score/compute-score.router.ts +++ b/backend/src/referentiels/compute-score/compute-score.router.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; import z from 'zod'; -import { TrpcService } from '../../trpc/trpc.service'; +import { TrpcService } from '@/backend/utils'; import { getReferentielScoresRequestSchema } from '../models/get-referentiel-scores.request'; import { ReferentielType } from '../models/referentiel.enum'; import ReferentielsScoringService from '../services/referentiels-scoring.service'; diff --git a/backend/src/referentiels/controllers/referentiels.e2e-spec.ts b/backend/src/referentiels/controllers/referentiels.e2e-spec.ts index e3069f4264..84831228a7 100644 --- a/backend/src/referentiels/controllers/referentiels.e2e-spec.ts +++ b/backend/src/referentiels/controllers/referentiels.e2e-spec.ts @@ -3,6 +3,7 @@ import { INestApplication } from '@nestjs/common'; import { default as request } from 'supertest'; import { ActionType } from '../models/action-type.enum'; import { GetReferentielResponseType } from '../models/get-referentiel.response'; +import { ReferentielActionType } from '../models/referentiel-action.dto'; describe('Referentiels routes', () => { let app: INestApplication; diff --git a/backend/src/referentiels/snapshots/score-snaphots.router.ts b/backend/src/referentiels/snapshots/score-snaphots.router.ts index 67ef327643..9087271682 100644 --- a/backend/src/referentiels/snapshots/score-snaphots.router.ts +++ b/backend/src/referentiels/snapshots/score-snaphots.router.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; import z from 'zod'; -import { TrpcService } from '../../trpc/trpc.service'; +import { TrpcService } from '@/backend/utils'; import { ReferentielType } from '../models/referentiel.enum'; import { ScoreJalon } from '../models/score-jalon.enum'; import ReferentielsScoringSnapshotsService from '../services/referentiels-scoring-snapshots.service'; diff --git a/backend/src/referentiels/snapshots/score-snapshots.router.e2e-spec.ts b/backend/src/referentiels/snapshots/score-snapshots.router.e2e-spec.ts index 405b120c33..a66a6f7952 100644 --- a/backend/src/referentiels/snapshots/score-snapshots.router.e2e-spec.ts +++ b/backend/src/referentiels/snapshots/score-snapshots.router.e2e-spec.ts @@ -4,7 +4,7 @@ import { getTestRouter } from '../../../test/app-utils'; import { getAuthUser } from '../../../test/auth-utils'; import { getCollectiviteIdBySiren } from '../../../test/collectivites-utils'; import { AuthenticatedUser } from '../../auth/models/auth.models'; -import { AppRouter, TrpcRouter } from '../../trpc/trpc.router'; +import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; import { ScoreSnapshotInfoType } from '../models/get-score-snapshots.response'; import { ReferentielType } from '../models/referentiel.enum'; import { ScoreJalon } from '../models/score-jalon.enum'; diff --git a/backend/src/referentiels/update-action-statut/update-action-statut.router.e2e-spec.ts b/backend/src/referentiels/update-action-statut/update-action-statut.router.e2e-spec.ts index fcc99e352b..2b4b73dc2a 100644 --- a/backend/src/referentiels/update-action-statut/update-action-statut.router.e2e-spec.ts +++ b/backend/src/referentiels/update-action-statut/update-action-statut.router.e2e-spec.ts @@ -2,7 +2,7 @@ import { inferProcedureInput } from '@trpc/server'; import { getTestRouter } from '../../../test/app-utils'; import { getAuthUser } from '../../../test/auth-utils'; import { getCollectiviteIdBySiren } from '../../../test/collectivites-utils'; -import { AppRouter, TrpcRouter } from '../../trpc/trpc.router'; +import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; import { ActionScoreType } from '../models/action-score.dto'; import { ReferentielType } from '../models/referentiel.enum'; import { AuthenticatedUser } from './../../auth/models/auth.models'; diff --git a/backend/src/referentiels/update-action-statut/update-action-statut.router.ts b/backend/src/referentiels/update-action-statut/update-action-statut.router.ts index c5ae56e61f..f197da1181 100644 --- a/backend/src/referentiels/update-action-statut/update-action-statut.router.ts +++ b/backend/src/referentiels/update-action-statut/update-action-statut.router.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { TrpcService } from '../../trpc/trpc.service'; +import { TrpcService } from '@/backend/utils'; import { UpdateActionStatutService, upsertActionStatutRequestSchema, diff --git a/backend/src/taxonomie/routers/get-categories-by-collectivite.router.e2e-spec.ts b/backend/src/taxonomie/routers/get-categories-by-collectivite.router.e2e-spec.ts index cca62c5e05..2b9a481ae0 100644 --- a/backend/src/taxonomie/routers/get-categories-by-collectivite.router.e2e-spec.ts +++ b/backend/src/taxonomie/routers/get-categories-by-collectivite.router.e2e-spec.ts @@ -1,7 +1,7 @@ import { inferProcedureInput } from '@trpc/server'; import { getTestRouter } from '../../../test/app-utils'; import { getAuthUser } from '../../../test/auth-utils'; -import { AppRouter, TrpcRouter } from '../../trpc/trpc.router'; +import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; import { AuthenticatedUser } from './../../auth/models/auth.models'; type Input = inferProcedureInput; diff --git a/backend/src/taxonomie/routers/get-categories-by-collectivite.router.ts b/backend/src/taxonomie/routers/get-categories-by-collectivite.router.ts index c6ec369887..e0b6e98727 100644 --- a/backend/src/taxonomie/routers/get-categories-by-collectivite.router.ts +++ b/backend/src/taxonomie/routers/get-categories-by-collectivite.router.ts @@ -1,11 +1,11 @@ +import { TrpcService } from '@/backend/utils'; import { Injectable } from '@nestjs/common'; import { z } from 'zod'; import TagService from '../services/tag.service'; -import { TrpcService } from '../../trpc/trpc.service'; const inputSchema = z.object({ collectiviteId: z.number(), - withPredefinedTags : z.boolean().default(true) + withPredefinedTags: z.boolean().default(true), }); @Injectable() @@ -20,7 +20,11 @@ export class GetCategoriesByCollectiviteRouter { .input(inputSchema) .query(({ ctx, input }) => { const { collectiviteId, withPredefinedTags } = input; - return this.service.getCategoriesByCollectivite(collectiviteId, withPredefinedTags, ctx.user); + return this.service.getCategoriesByCollectivite( + collectiviteId, + withPredefinedTags, + ctx.user + ); }), }); } diff --git a/backend/src/utils/index.ts b/backend/src/utils/index.ts index dc308c60a0..7cf21f2874 100644 --- a/backend/src/utils/index.ts +++ b/backend/src/utils/index.ts @@ -1,2 +1,3 @@ export * from './column.utils'; export * from './enum.utils'; +export * from './trpc/trpc.service'; diff --git a/backend/src/trpc/trpc.module.ts b/backend/src/utils/trpc/trpc.module.ts similarity index 100% rename from backend/src/trpc/trpc.module.ts rename to backend/src/utils/trpc/trpc.module.ts index 7f81c8ffa5..5edcd67ce6 100644 --- a/backend/src/trpc/trpc.module.ts +++ b/backend/src/utils/trpc/trpc.module.ts @@ -1,5 +1,5 @@ -import { Global, Module } from '@nestjs/common'; import { TrpcService } from './trpc.service'; +import { Global, Module } from '@nestjs/common'; @Global() @Module({ diff --git a/backend/src/trpc/trpc.router.ts b/backend/src/utils/trpc/trpc.router.ts similarity index 67% rename from backend/src/trpc/trpc.router.ts rename to backend/src/utils/trpc/trpc.router.ts index 5279f7a2c2..3a279ef955 100644 --- a/backend/src/trpc/trpc.router.ts +++ b/backend/src/utils/trpc/trpc.router.ts @@ -1,17 +1,17 @@ import { INestApplication, Injectable, Logger } from '@nestjs/common'; import { createExpressMiddleware } from '@trpc/server/adapters/express'; -import { CollectiviteMembresRouter } from '../collectivites/membres/membres.router'; -import { PersonnesRouter } from '../collectivites/personnes.router'; -import SupabaseService from '../common/services/supabase.service'; -import { BulkEditRouter } from '../fiches/bulk-edit/bulk-edit.router'; -import { CountByStatutRouter } from '../fiches/count-by-statut/count-by-statut.router'; -import { FicheActionEtapeRouter } from '../fiches/fiche-action-etape/fiche-action-etape.router'; -import { IndicateurFiltreRouter } from '../indicateurs/indicateur-filtre/indicateur-filtre.router'; -import { TrajectoiresRouter } from '../indicateurs/routers/trajectoires.router'; -import { ComputeScoreRouter } from '../referentiels/compute-score/compute-score.router'; -import { ScoreSnapshotsRouter } from '../referentiels/snapshots/score-snaphots.router'; -import { UpdateActionStatutRouter } from '../referentiels/update-action-statut/update-action-statut.router'; -import { GetCategoriesByCollectiviteRouter } from '../taxonomie/routers/get-categories-by-collectivite.router'; +import { CollectiviteMembresRouter } from '../../collectivites/membres/membres.router'; +import { PersonnesRouter } from '../../collectivites/personnes.router'; +import SupabaseService from '../../common/services/supabase.service'; +import { BulkEditRouter } from '../../fiches/bulk-edit/bulk-edit.router'; +import { CountByStatutRouter } from '../../fiches/count-by-statut/count-by-statut.router'; +import { FicheActionEtapeRouter } from '../../fiches/fiche-action-etape/fiche-action-etape.router'; +import { IndicateurFiltreRouter } from '../../indicateurs/indicateur-filtre/indicateur-filtre.router'; +import { TrajectoiresRouter } from '../../indicateurs/routers/trajectoires.router'; +import { ComputeScoreRouter } from '../../referentiels/compute-score/compute-score.router'; +import { ScoreSnapshotsRouter } from '../../referentiels/snapshots/score-snaphots.router'; +import { UpdateActionStatutRouter } from '../../referentiels/update-action-statut/update-action-statut.router'; +import { GetCategoriesByCollectiviteRouter } from '../../taxonomie/routers/get-categories-by-collectivite.router'; import { createContext, TrpcService } from './trpc.service'; @Injectable() diff --git a/backend/src/trpc/trpc.service.ts b/backend/src/utils/trpc/trpc.service.ts similarity index 98% rename from backend/src/trpc/trpc.service.ts rename to backend/src/utils/trpc/trpc.service.ts index e6bf12b314..942e90867d 100644 --- a/backend/src/trpc/trpc.service.ts +++ b/backend/src/utils/trpc/trpc.service.ts @@ -6,7 +6,7 @@ import { AuthUser, isAnonymousUser, isAuthenticatedUser, -} from '../auth/models/auth.models'; +} from '../../auth/models/auth.models'; @Injectable() export class TrpcService { diff --git a/backend/test/app-utils.ts b/backend/test/app-utils.ts index d2617d68e6..4b7fae3fd9 100644 --- a/backend/test/app-utils.ts +++ b/backend/test/app-utils.ts @@ -3,7 +3,7 @@ import { INestApplication } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import { AppModule } from '../src/app.module'; import DatabaseService from '../src/common/services/database.service'; -import { TrpcRouter } from '../src/trpc/trpc.router'; +import { TrpcRouter } from '../src/utils/trpc/trpc.router'; export const getTestApp = async (): Promise => { const moduleRef = await Test.createTestingModule({ From 75930430e49b3a11f79e1313812163aa5353cfc9 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Fri, 13 Dec 2024 14:42:46 +0100 Subject: [PATCH 02/33] Move sheet service to utils --- backend/src/app.module.ts | 2 +- backend/src/indicateurs/indicateurs.module.ts | 2 +- .../indicateurs/services/trajectoires-data.service.spec.ts | 2 +- .../indicateurs/services/trajectoires-spreadsheet.service.ts | 4 ++-- backend/src/indicateurs/services/trajectoires-xlsx.service.ts | 2 +- backend/src/referentiels/referentiels.module.ts | 2 +- .../services/referentiels-scoring.service.spec.ts | 2 +- .../src/referentiels/services/referentiels.service.spec.ts | 2 +- backend/src/referentiels/services/referentiels.service.ts | 2 +- .../google-sheets/sheet-options.models.ts} | 0 .../src/{spreadsheets => utils/google-sheets}/sheet.module.ts | 2 +- .../services => utils/google-sheets}/sheet.service.ts | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) rename backend/src/{spreadsheets/models/sheetoptions.models.ts => utils/google-sheets/sheet-options.models.ts} (100%) rename backend/src/{spreadsheets => utils/google-sheets}/sheet.module.ts (74%) rename backend/src/{spreadsheets/services => utils/google-sheets}/sheet.service.ts (99%) diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index a9e6124b1d..cf5841bae0 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -10,8 +10,8 @@ import { FichesActionModule } from './fiches/fiches-action.module'; import { IndicateursModule } from './indicateurs/indicateurs.module'; import { PersonnalisationsModule } from './personnalisations/personnalisations.module'; import { ReferentielsModule } from './referentiels/referentiels.module'; -import { SheetModule } from './spreadsheets/sheet.module'; import { TaxonomieModule } from './taxonomie/taxonomie.module'; +import { SheetModule } from './utils/google-sheets/sheet.module'; import { TrpcModule } from './utils/trpc/trpc.module'; import { TrpcRouter } from './utils/trpc/trpc.router'; diff --git a/backend/src/indicateurs/indicateurs.module.ts b/backend/src/indicateurs/indicateurs.module.ts index a0169b055c..ffe839fe6a 100644 --- a/backend/src/indicateurs/indicateurs.module.ts +++ b/backend/src/indicateurs/indicateurs.module.ts @@ -3,7 +3,7 @@ import { AuthModule } from '../auth/auth.module'; import { CollectivitesModule } from '../collectivites/collectivites.module'; import { CommonModule } from '../common/common.module'; import { ConfigurationModule } from '../config/configuration.module'; -import { SheetModule } from '../spreadsheets/sheet.module'; +import { SheetModule } from '../utils/google-sheets/sheet.module'; import { IndicateursController } from './controllers/indicateurs.controller'; import { TrajectoiresController } from './controllers/trajectoires.controller'; import { IndicateurFiltreRouter } from './indicateur-filtre/indicateur-filtre.router'; diff --git a/backend/src/indicateurs/services/trajectoires-data.service.spec.ts b/backend/src/indicateurs/services/trajectoires-data.service.spec.ts index 481f49c4bb..680bd7f23f 100644 --- a/backend/src/indicateurs/services/trajectoires-data.service.spec.ts +++ b/backend/src/indicateurs/services/trajectoires-data.service.spec.ts @@ -1,7 +1,7 @@ import { Test } from '@nestjs/testing'; import { DateTime } from 'luxon'; import CollectivitesService from '../../collectivites/services/collectivites.service'; -import SheetService from '../../spreadsheets/services/sheet.service'; +import SheetService from '../../utils/google-sheets/sheet.service'; import { IndicateurValeurType } from '../models/indicateur-valeur.table'; import IndicateurSourcesService from './indicateur-sources.service'; import IndicateursService from './indicateurs.service'; diff --git a/backend/src/indicateurs/services/trajectoires-spreadsheet.service.ts b/backend/src/indicateurs/services/trajectoires-spreadsheet.service.ts index d42ee30061..a3c3eea4ff 100644 --- a/backend/src/indicateurs/services/trajectoires-spreadsheet.service.ts +++ b/backend/src/indicateurs/services/trajectoires-spreadsheet.service.ts @@ -11,7 +11,7 @@ import { AuthenticatedUser } from '../../auth/models/auth.models'; import { EpciType } from '../../collectivites/models/epci.table'; import GroupementsService from '../../collectivites/services/groupements.service'; import ConfigurationService from '../../config/configuration.service'; -import SheetService from '../../spreadsheets/services/sheet.service'; +import SheetService from '../../utils/google-sheets/sheet.service'; import { CalculTrajectoireRequestType, CalculTrajectoireReset, @@ -22,8 +22,8 @@ import { DonneesCalculTrajectoireARemplirType } from '../models/donnees-calcul-t import { IndicateurDefinitionType } from '../models/indicateur-definition.table'; import { CreateIndicateurValeurType } from '../models/indicateur-valeur.table'; import { VerificationTrajectoireStatus } from '../models/verification-trajectoire.response'; -import IndicateursService from './indicateurs.service'; import IndicateurSourcesService from './indicateur-sources.service'; +import IndicateursService from './indicateurs.service'; import TrajectoiresDataService from './trajectoires-data.service'; @Injectable() diff --git a/backend/src/indicateurs/services/trajectoires-xlsx.service.ts b/backend/src/indicateurs/services/trajectoires-xlsx.service.ts index 39fcbc1b89..e9c37f1b2d 100644 --- a/backend/src/indicateurs/services/trajectoires-xlsx.service.ts +++ b/backend/src/indicateurs/services/trajectoires-xlsx.service.ts @@ -10,7 +10,7 @@ import { AuthenticatedUser } from '../../auth/models/auth.models'; import { CollectiviteRequestType } from '../../collectivites/models/collectivite.request'; import { EpciType } from '../../collectivites/models/epci.table'; import BackendConfigurationService from '../../config/configuration.service'; -import SheetService from '../../spreadsheets/services/sheet.service'; +import SheetService from '../../utils/google-sheets/sheet.service'; import { DonneesCalculTrajectoireARemplirType } from '../models/donnees-calcul-trajectoire-a-remplir.dto'; import { ModeleTrajectoireTelechargementRequestType } from '../models/modele-trajectoire-telechargement.request'; import { VerificationTrajectoireStatus } from '../models/verification-trajectoire.response'; diff --git a/backend/src/referentiels/referentiels.module.ts b/backend/src/referentiels/referentiels.module.ts index dd2652333c..02e7b7d675 100644 --- a/backend/src/referentiels/referentiels.module.ts +++ b/backend/src/referentiels/referentiels.module.ts @@ -4,7 +4,7 @@ import { CollectivitesModule } from '../collectivites/collectivites.module'; import { CommonModule } from '../common/common.module'; import { ConfigurationModule } from '../config/configuration.module'; import { PersonnalisationsModule } from '../personnalisations/personnalisations.module'; -import { SheetModule } from '../spreadsheets/sheet.module'; +import { SheetModule } from '../utils/google-sheets/sheet.module'; import { ComputeScoreRouter } from './compute-score/compute-score.router'; import { ReferentielsScoringController } from './controllers/referentiels-scoring.controller'; import { ReferentielsController } from './controllers/referentiels.controller'; diff --git a/backend/src/referentiels/services/referentiels-scoring.service.spec.ts b/backend/src/referentiels/services/referentiels-scoring.service.spec.ts index ca47a5c2ea..9e26adc9c9 100644 --- a/backend/src/referentiels/services/referentiels-scoring.service.spec.ts +++ b/backend/src/referentiels/services/referentiels-scoring.service.spec.ts @@ -13,7 +13,7 @@ import { GetPersonnalisationReponsesResponseType } from '../../personnalisations import { caePersonnalisationRegles } from '../../personnalisations/models/samples/cae-personnalisation-regles.sample'; import ExpressionParserService from '../../personnalisations/services/expression-parser.service'; import PersonnalisationsService from '../../personnalisations/services/personnalisations-service'; -import SheetService from '../../spreadsheets/services/sheet.service'; +import SheetService from '../../utils/google-sheets/sheet.service'; import { ActionPointScoreType } from '../models/action-point-score.dto'; import { ActionType } from '../models/action-type.enum'; import { GetActionStatutsResponseType } from '../models/get-action-statuts.response'; diff --git a/backend/src/referentiels/services/referentiels.service.spec.ts b/backend/src/referentiels/services/referentiels.service.spec.ts index f7dbf31155..67b5ffa745 100644 --- a/backend/src/referentiels/services/referentiels.service.spec.ts +++ b/backend/src/referentiels/services/referentiels.service.spec.ts @@ -2,7 +2,7 @@ import { Test } from '@nestjs/testing'; import DatabaseService from '../../common/services/database.service'; import ConfigurationService from '../../config/configuration.service'; import ExpressionParserService from '../../personnalisations/services/expression-parser.service'; -import SheetService from '../../spreadsheets/services/sheet.service'; +import SheetService from '../../utils/google-sheets/sheet.service'; import { ActionDefinitionAvecParentType } from '../models/action-definition.table'; import { CreateActionOrigineType } from '../models/action-origine.table'; import { ActionType } from '../models/action-type.enum'; diff --git a/backend/src/referentiels/services/referentiels.service.ts b/backend/src/referentiels/services/referentiels.service.ts index 252491dfef..4fe42b5c58 100644 --- a/backend/src/referentiels/services/referentiels.service.ts +++ b/backend/src/referentiels/services/referentiels.service.ts @@ -22,7 +22,7 @@ import { PersonnalisationType, } from '../../personnalisations/models/personnalisation.table'; import ExpressionParserService from '../../personnalisations/services/expression-parser.service'; -import SheetService from '../../spreadsheets/services/sheet.service'; +import SheetService from '../../utils/google-sheets/sheet.service'; import { actionDefinitionTagTable, CreateActionDefinitionTagType, diff --git a/backend/src/spreadsheets/models/sheetoptions.models.ts b/backend/src/utils/google-sheets/sheet-options.models.ts similarity index 100% rename from backend/src/spreadsheets/models/sheetoptions.models.ts rename to backend/src/utils/google-sheets/sheet-options.models.ts diff --git a/backend/src/spreadsheets/sheet.module.ts b/backend/src/utils/google-sheets/sheet.module.ts similarity index 74% rename from backend/src/spreadsheets/sheet.module.ts rename to backend/src/utils/google-sheets/sheet.module.ts index 48a4c66e41..13ef788548 100644 --- a/backend/src/spreadsheets/sheet.module.ts +++ b/backend/src/utils/google-sheets/sheet.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import SheetService from './services/sheet.service'; +import SheetService from './sheet.service'; @Module({ providers: [SheetService], diff --git a/backend/src/spreadsheets/services/sheet.service.ts b/backend/src/utils/google-sheets/sheet.service.ts similarity index 99% rename from backend/src/spreadsheets/services/sheet.service.ts rename to backend/src/utils/google-sheets/sheet.service.ts index df00854aae..43d0479a3a 100644 --- a/backend/src/spreadsheets/services/sheet.service.ts +++ b/backend/src/utils/google-sheets/sheet.service.ts @@ -11,7 +11,7 @@ import { getPropertyPaths } from '../../common/services/zod.helper'; import { SheetValueInputOption, SheetValueRenderOption, -} from '../models/sheetoptions.models'; +} from './sheet-options.models'; const sheets = google.sheets({ version: 'v4' }); const drive = google.drive({ version: 'v3' }); From 76528530f71db011834c088269a221bb0749a9fa Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Fri, 13 Dec 2024 14:46:38 +0100 Subject: [PATCH 03/33] Move version to utils --- backend/src/common/common.module.ts | 2 +- .../{common/controllers => utils/version}/version.controller.ts | 2 +- backend/src/{common/models => utils/version}/version.models.ts | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename backend/src/{common/controllers => utils/version}/version.controller.ts (94%) rename backend/src/{common/models => utils/version}/version.models.ts (100%) diff --git a/backend/src/common/common.module.ts b/backend/src/common/common.module.ts index 5ab45c3f96..4a852c82da 100644 --- a/backend/src/common/common.module.ts +++ b/backend/src/common/common.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; import { ConfigurationModule } from '../config/configuration.module'; -import { VersionController } from './controllers/version.controller'; +import { VersionController } from '../utils/version/version.controller'; import DatabaseService from './services/database.service'; import MattermostNotificationService from './services/mattermost-notification.service'; import SupabaseService from './services/supabase.service'; diff --git a/backend/src/common/controllers/version.controller.ts b/backend/src/utils/version/version.controller.ts similarity index 94% rename from backend/src/common/controllers/version.controller.ts rename to backend/src/utils/version/version.controller.ts index 2cc07c830d..12fb2dc33d 100644 --- a/backend/src/common/controllers/version.controller.ts +++ b/backend/src/utils/version/version.controller.ts @@ -2,7 +2,7 @@ import { createZodDto } from '@anatine/zod-nestjs'; import { Controller, Get } from '@nestjs/common'; import { ApiOkResponse, ApiTags } from '@nestjs/swagger'; import { AllowPublicAccess } from '../../auth/decorators/allow-public-access.decorator'; -import { versionResponseSchema } from '../models/version.models'; +import { versionResponseSchema } from './version.models'; /** * Création des classes de réponse à partir du schema pour générer automatiquement la documentation OpenAPI diff --git a/backend/src/common/models/version.models.ts b/backend/src/utils/version/version.models.ts similarity index 100% rename from backend/src/common/models/version.models.ts rename to backend/src/utils/version/version.models.ts From 772145c903f56263501c120cb86fa18c09062988 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Fri, 13 Dec 2024 14:54:17 +0100 Subject: [PATCH 04/33] Move conflict helper to utils --- backend/src/fiches/services/fiches-action-update.service.ts | 2 +- .../conflict.helper.ts => utils/drizzle/conflict.utils.ts} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename backend/src/{common/services/conflict.helper.ts => utils/drizzle/conflict.utils.ts} (100%) diff --git a/backend/src/fiches/services/fiches-action-update.service.ts b/backend/src/fiches/services/fiches-action-update.service.ts index 70947135eb..0874ec3455 100644 --- a/backend/src/fiches/services/fiches-action-update.service.ts +++ b/backend/src/fiches/services/fiches-action-update.service.ts @@ -13,7 +13,7 @@ import { PgTable, PgTransaction } from 'drizzle-orm/pg-core'; import { PostgresJsQueryResultHKT } from 'drizzle-orm/postgres-js'; import { toCamel } from 'postgres'; import { AuthenticatedUser } from '../../auth/models/auth.models'; -import { buildConflictUpdateColumns } from '../../common/services/conflict.helper'; +import { buildConflictUpdateColumns } from '../../utils/drizzle/conflict.utils'; import DatabaseService from '../../common/services/database.service'; import { ficheActionActionTable } from '../models/fiche-action-action.table'; import { ficheActionAxeTable } from '../models/fiche-action-axe.table'; diff --git a/backend/src/common/services/conflict.helper.ts b/backend/src/utils/drizzle/conflict.utils.ts similarity index 100% rename from backend/src/common/services/conflict.helper.ts rename to backend/src/utils/drizzle/conflict.utils.ts From a10e2785dbc8fb2e4cef9b8b10a8adecc0b59384 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:44:40 +0100 Subject: [PATCH 05/33] Supprime `axe.schema` du package `api` --- .eslintrc.json | 12 ++- .../FicheActionHeader/CheminsFiche.tsx | 5 +- .../FicheActionHeader/FicheActionHeader.tsx | 2 +- .../PlansActions/FicheAction/data/utils.ts | 2 +- .../PlanAction/list/card/PlanActionCard.tsx | 7 +- .../FichesActionsDropdown.tsx | 5 +- .../collectivites/membres/membres.router.ts | 2 +- backend/src/collectivites/personnes.router.ts | 2 +- .../src/common/services/supabase.service.ts | 5 +- .../src/fiches/bulk-edit/bulk-edit.router.ts | 2 +- .../fiche-action-update.e2e-spec.ts | 12 +-- .../count-by-statut/count-by-statut.router.ts | 2 +- .../count-by-statut.service.ts | 4 +- .../fiche-action-etape.router.ts | 2 +- backend/src/fiches/models/axe.table.ts | 25 ------ .../models/plan-action-type-category.table.ts | 8 -- .../models/update-fiche-action.request.ts | 2 +- backend/src/fiches/services/axe.service.ts | 66 +++++++-------- .../services/fiches-action-update.service.ts | 4 +- .../get-filtered-indicateurs.request.ts | 4 +- .../indicateur-filtre.router.ts | 2 +- .../indicateur-filtre.service.ts | 80 ++++++++----------- .../routers/trajectoires.router.ts | 2 +- backend/src/panier/models/panier.table.ts | 3 - backend/src/plans/fiches/index.ts | 3 + .../plans/fiches/shared/models/axe.table.ts | 43 ++++++++++ .../shared}/models/fiche-action-axe.table.ts | 2 +- .../plan-action-type-categorie.table.ts | 0 .../shared}/models/plan-action-type.table.ts | 6 ++ .../compute-score/compute-score.router.ts | 2 +- .../snapshots/score-snaphots.router.ts | 2 +- .../update-action-statut.router.ts | 2 +- .../get-categories-by-collectivite.router.ts | 2 +- .../src/utils/google-sheets/sheet.service.ts | 2 +- backend/src/utils/index.ts | 4 +- .../src/utils/pagination.schema.ts | 8 +- .../domain/fetch-options.schema.ts | 4 +- .../api/src/plan-actions/domain/axe.schema.ts | 26 ------ .../domain/fiche-action.schema.ts | 2 +- packages/api/src/plan-actions/domain/index.ts | 1 - .../domain/fetch-options.schema.ts | 4 +- packages/api/src/plan-actions/index.ts | 3 +- .../data-access/plan-actions.fetch.ts | 7 +- .../domain/fetch-options.schema.ts | 4 +- packages/api/src/shared/domain/index.ts | 1 - packages/api/src/utils/trpc/client.tsx | 2 +- 46 files changed, 191 insertions(+), 199 deletions(-) delete mode 100644 backend/src/fiches/models/axe.table.ts delete mode 100644 backend/src/fiches/models/plan-action-type-category.table.ts create mode 100644 backend/src/plans/fiches/index.ts create mode 100644 backend/src/plans/fiches/shared/models/axe.table.ts rename backend/src/{fiches => plans/fiches/shared}/models/fiche-action-axe.table.ts (83%) rename backend/src/{fiches => plans/fiches/shared}/models/plan-action-type-categorie.table.ts (100%) rename backend/src/{fiches => plans/fiches/shared}/models/plan-action-type.table.ts (74%) rename packages/api/src/shared/domain/query_options.schema.ts => backend/src/utils/pagination.schema.ts (73%) delete mode 100644 packages/api/src/plan-actions/domain/axe.schema.ts diff --git a/.eslintrc.json b/.eslintrc.json index f2ed6902e1..49ee147585 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -12,9 +12,15 @@ "enforceBuildableLibDependency": true, "allowCircularSelfDependency": true, "banTransitiveDependencies": true, - // Exception due to issue in tailwind alias import with Nx structure - // https://github.com/tailwindlabs/tailwindcss/issues/11097 - "allow": ["../ui/src/tailwind-preset"], + "allow": [ + // Exception due to issue in tailwind alias import with Nx structure + // https://github.com/tailwindlabs/tailwindcss/issues/11097 + "../ui/src/tailwind-preset", + + // Backend is an application but is also used as a library, + // we want our front apps to be allowed to reference it + "@/backend" + ], "depConstraints": [ { "sourceTag": "*", diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionHeader/CheminsFiche.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionHeader/CheminsFiche.tsx index 65db44bde3..65fa08ad53 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionHeader/CheminsFiche.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionHeader/CheminsFiche.tsx @@ -1,5 +1,5 @@ -import { Axe } from '@/api/plan-actions'; import { makeCollectiviteFichesNonClasseesUrl } from '@/app/app/paths'; +import { Axe } from '@/backend/plans/fiches'; import { Breadcrumbs, Button } from '@/ui'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; @@ -77,9 +77,10 @@ const CheminsFiche = ({ titre, collectiviteId, axes }: CheminsFicheProps) => { {isOpen && (
{otherAxes.map( - (axe) => + (axe, index) => axe.id && ( { + ( + acc: { axe: number; sousAxe: number }, + axe: NonNullable[number] + ) => { if (axe.parent === plan.id) { acc.axe++; } else if (axe.parent) { diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/FichesActionsDropdown/FichesActionsDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/FichesActionsDropdown/FichesActionsDropdown.tsx index 1035851b44..b8aa5f2946 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/FichesActionsDropdown/FichesActionsDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/FichesActionsDropdown/FichesActionsDropdown.tsx @@ -1,7 +1,8 @@ -import { AxeInsert, FicheResume } from '@/api/plan-actions'; +import { FicheResume } from '@/api/plan-actions'; import { useFicheResumesFetch } from '@/app/app/pages/collectivite/PlansActions/FicheAction/data/useFicheResumesFetch'; import { generateTitle } from '@/app/app/pages/collectivite/PlansActions/FicheAction/data/utils'; import { naturalSort } from '@/app/utils/naturalSort'; +import { CreateAxeType } from '@/backend/plans/fiches'; import { Option, OptionValue, @@ -56,7 +57,7 @@ const FichesActionsDropdown = ({ /* Récupère tous les plans liés aux fiches */ const plans = fichesDisponiblesListe?.reduce< - Array> + Array> >((acc, fiche) => { acc.push( fiche.plans?.[0] ?? { diff --git a/backend/src/collectivites/membres/membres.router.ts b/backend/src/collectivites/membres/membres.router.ts index 70bae3bfb5..91a9095c57 100644 --- a/backend/src/collectivites/membres/membres.router.ts +++ b/backend/src/collectivites/membres/membres.router.ts @@ -1,5 +1,5 @@ +import { TrpcService } from '@/backend/utils/trpc/trpc.service'; import { Injectable } from '@nestjs/common'; -import { TrpcService } from '@/backend/utils'; import { CollectiviteMembresService } from './membres.service'; @Injectable() diff --git a/backend/src/collectivites/personnes.router.ts b/backend/src/collectivites/personnes.router.ts index 71fc27213f..995aeddc54 100644 --- a/backend/src/collectivites/personnes.router.ts +++ b/backend/src/collectivites/personnes.router.ts @@ -1,10 +1,10 @@ import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; import { PermissionService } from '@/backend/auth/authorizations/permission.service'; import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; -import { TrpcService } from '@/backend/utils'; import { Injectable } from '@nestjs/common'; import { TRPCError } from '@trpc/server'; import CollectivitesService from '../collectivites/services/collectivites.service'; +import { TrpcService } from '../utils/trpc/trpc.service'; import { listRequestSchema, PersonnesService, diff --git a/backend/src/common/services/supabase.service.ts b/backend/src/common/services/supabase.service.ts index b2a9b4352b..36fb13a7e9 100644 --- a/backend/src/common/services/supabase.service.ts +++ b/backend/src/common/services/supabase.service.ts @@ -1,4 +1,3 @@ -import { Database, DBClient } from '@/api'; import { Injectable, Logger } from '@nestjs/common'; import { createClient } from '@supabase/supabase-js'; import ConfigurationService from '../../config/configuration.service'; @@ -7,12 +6,12 @@ import ConfigurationService from '../../config/configuration.service'; export default class SupabaseService { private readonly logger = new Logger(SupabaseService.name); - public readonly client: DBClient; + public readonly client: ReturnType; constructor(configService: ConfigurationService) { const supabaseUrl = configService.get('SUPABASE_URL'); this.logger.log(`Initializing supabase service with url: ${supabaseUrl}`); - this.client = createClient( + this.client = createClient( supabaseUrl, configService.get('SUPABASE_SERVICE_ROLE_KEY') ); diff --git a/backend/src/fiches/bulk-edit/bulk-edit.router.ts b/backend/src/fiches/bulk-edit/bulk-edit.router.ts index 048140cf95..6c078679b0 100644 --- a/backend/src/fiches/bulk-edit/bulk-edit.router.ts +++ b/backend/src/fiches/bulk-edit/bulk-edit.router.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { TrpcService } from '@/backend/utils'; +import { TrpcService } from '@/backend/utils/trpc/trpc.service'; import { BulkEditService } from './bulk-edit.service'; @Injectable() diff --git a/backend/src/fiches/controllers/fiche-action-update.e2e-spec.ts b/backend/src/fiches/controllers/fiche-action-update.e2e-spec.ts index c6bd150acb..a12d675a72 100644 --- a/backend/src/fiches/controllers/fiche-action-update.e2e-spec.ts +++ b/backend/src/fiches/controllers/fiche-action-update.e2e-spec.ts @@ -2,10 +2,12 @@ import { INestApplication } from '@nestjs/common'; import { eq } from 'drizzle-orm'; import { default as request } from 'supertest'; import { describe, expect, it } from 'vitest'; +import { getTestApp } from '../../../test/app-utils'; +import { getAuthToken } from '../../../test/auth-utils'; import DatabaseService from '../../common/services/database.service'; -import { UpdateFicheActionRequestClass } from './fiches-action.controller'; +import { ficheActionAxeTable } from '../../plans/fiches/shared/models/fiche-action-axe.table'; +import { libreTagTable } from '../../taxonomie/models/libre-tag.table'; import { ficheActionActionTable } from '../models/fiche-action-action.table'; -import { ficheActionAxeTable } from '../models/fiche-action-axe.table'; import { ficheActionEffetAttenduTable } from '../models/fiche-action-effet-attendu.table'; import { ficheActionFinanceurTagTable } from '../models/fiche-action-financeur-tag.table'; import { ficheActionIndicateurTable } from '../models/fiche-action-indicateur.table'; @@ -24,6 +26,7 @@ import { ficheActionTable, piliersEciEnumType, } from '../models/fiche-action.table'; +import { UpdateFicheActionRequestType } from '../models/update-fiche-action.request'; import { actionsFixture, axesFixture, @@ -41,10 +44,7 @@ import { thematiquesFixture, } from '../shared/fixtures/fiche-action-relations.fixture'; import { ficheActionFixture } from '../shared/fixtures/fiche-action.fixture'; -import { libreTagTable } from '../../taxonomie/models/libre-tag.table'; -import { getTestApp } from '../../../test/app-utils'; -import { getAuthToken } from '../../../test/auth-utils'; -import { UpdateFicheActionRequestType } from '../models/update-fiche-action.request'; +import { UpdateFicheActionRequestClass } from './fiches-action.controller'; const collectiviteId = 1; const ficheActionId = 9999; diff --git a/backend/src/fiches/count-by-statut/count-by-statut.router.ts b/backend/src/fiches/count-by-statut/count-by-statut.router.ts index 6f12d37f98..04222cb25d 100644 --- a/backend/src/fiches/count-by-statut/count-by-statut.router.ts +++ b/backend/src/fiches/count-by-statut/count-by-statut.router.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { z } from 'zod'; import { getFichesActionFilterRequestSchema } from '../models/get-fiches-actions-filter.request'; -import { TrpcService } from '@/backend/utils'; +import { TrpcService } from '@/backend/utils/trpc/trpc.service'; import { CountByStatutService } from './count-by-statut.service'; const inputSchema = z.object({ diff --git a/backend/src/fiches/count-by-statut/count-by-statut.service.ts b/backend/src/fiches/count-by-statut/count-by-statut.service.ts index f4d8615172..36e9f0da01 100644 --- a/backend/src/fiches/count-by-statut/count-by-statut.service.ts +++ b/backend/src/fiches/count-by-statut/count-by-statut.service.ts @@ -15,8 +15,8 @@ import { PgColumn } from 'drizzle-orm/pg-core'; import { CountByRecordType } from '../../common/models/count-synthese.dto'; import { getModifiedSinceDate } from '../../common/models/modified-since.enum'; import DatabaseService from '../../common/services/database.service'; -import { axeTable } from '../models/axe.table'; -import { ficheActionAxeTable } from '../models/fiche-action-axe.table'; +import { axeTable } from '../../plans/fiches/shared/models/axe.table'; +import { ficheActionAxeTable } from '../../plans/fiches/shared/models/fiche-action-axe.table'; import { ficheActionPartenaireTagTable } from '../models/fiche-action-partenaire-tag.table'; import { ficheActionPiloteTable } from '../models/fiche-action-pilote.table'; import { ficheActionServiceTagTable } from '../models/fiche-action-service.table'; diff --git a/backend/src/fiches/fiche-action-etape/fiche-action-etape.router.ts b/backend/src/fiches/fiche-action-etape/fiche-action-etape.router.ts index 8c4c94ce16..5fd4d7c2a0 100644 --- a/backend/src/fiches/fiche-action-etape/fiche-action-etape.router.ts +++ b/backend/src/fiches/fiche-action-etape/fiche-action-etape.router.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { upsertFicheActionEtapeSchema } from '@/backend/fiches/fiche-action-etape/fiche-action-etape.table'; import { z } from 'zod'; -import { TrpcService } from '@/backend/utils'; +import { TrpcService } from '@/backend/utils/trpc/trpc.service'; import { FicheActionEtapeService } from './fiche-action-etape.service'; @Injectable() diff --git a/backend/src/fiches/models/axe.table.ts b/backend/src/fiches/models/axe.table.ts deleted file mode 100644 index 428347ace9..0000000000 --- a/backend/src/fiches/models/axe.table.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { InferInsertModel } from 'drizzle-orm'; -import { integer, pgTable, serial, text } from 'drizzle-orm/pg-core'; -import { createSelectSchema } from 'drizzle-zod'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; -import { panierTable } from '../../panier/models/panier.table'; -import { createdAt, modifiedAt, modifiedBy } from '../../utils/column.utils'; -import { planActionTypeTable } from './plan-action-type.table'; - -export const axeTable: ReturnType = pgTable('axe', { - id: serial('id').primaryKey(), - nom: text('nom'), - collectiviteId: integer('collectivite_id') - .notNull() - .references(() => collectiviteTable.id), - parent: integer('parent').references(() => axeTable.id), - plan: integer('plan').references(() => axeTable.id), - type: integer('type').references(() => planActionTypeTable.id), - createdAt, - modifiedAt, - modifiedBy, - panierId: integer('panier_id').references(() => panierTable.id), -}); -export type CreateAxeType = InferInsertModel; - -export const axeSchema = createSelectSchema(axeTable); diff --git a/backend/src/fiches/models/plan-action-type-category.table.ts b/backend/src/fiches/models/plan-action-type-category.table.ts deleted file mode 100644 index 0f584324b8..0000000000 --- a/backend/src/fiches/models/plan-action-type-category.table.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { pgTable, text } from 'drizzle-orm/pg-core'; - -export const planActionTypeCategorieTable = pgTable( - 'plan_action_type_categorie', - { - categorie: text('categorie').primaryKey(), - } -); diff --git a/backend/src/fiches/models/update-fiche-action.request.ts b/backend/src/fiches/models/update-fiche-action.request.ts index 17b1d30776..eaacd3f19a 100644 --- a/backend/src/fiches/models/update-fiche-action.request.ts +++ b/backend/src/fiches/models/update-fiche-action.request.ts @@ -1,5 +1,6 @@ import z from 'zod'; import { indicateurDefinitionSchema } from '../../indicateurs/models/indicateur-definition.table'; +import { axeSchema } from '../../plans/fiches/shared/models/axe.table'; import { actionRelationSchema } from '../../referentiels/models/action-relation.table'; import { effetAttenduSchema } from '../../taxonomie/models/effet-attendu.table'; import { financeurTagSchema } from '../../taxonomie/models/financeur-tag.table'; @@ -9,7 +10,6 @@ import { serviceTagSchema } from '../../taxonomie/models/service-tag.table'; import { sousThematiqueSchema } from '../../taxonomie/models/sous-thematique.table'; import { structureTagSchema } from '../../taxonomie/models/structure-tag.table'; import { thematiqueSchema } from '../../taxonomie/models/thematique.table'; -import { axeSchema } from './axe.table'; import { FicheActionCiblesEnumType, ficheActionSchema, diff --git a/backend/src/fiches/services/axe.service.ts b/backend/src/fiches/services/axe.service.ts index 3d2ee4c551..31567933bf 100644 --- a/backend/src/fiches/services/axe.service.ts +++ b/backend/src/fiches/services/axe.service.ts @@ -1,8 +1,10 @@ import { Injectable, Logger } from '@nestjs/common'; import DatabaseService from '../../common/services/database.service'; -import { and, eq, isNull, or } from 'drizzle-orm'; -import { axeTable, CreateAxeType } from '../models/axe.table'; -import { ficheActionAxeTable } from '../models/fiche-action-axe.table'; +import { + axeTable, + CreateAxeType, +} from '../../plans/fiches/shared/models/axe.table'; +import { ficheActionAxeTable } from '../../plans/fiches/shared/models/fiche-action-axe.table'; @Injectable() export default class AxeService { @@ -26,35 +28,35 @@ export default class AxeService { return axeCree[0]?.id; } - /** - * Retourne l'identifiant d'un axe s'il existe déjà ou le crée - * Un axe existe déjà si : même nom, même collectivité, et même axe parent - * @param axe - * @return identifiant de l'axe récupéré ou créé - */ - async createOrReturnAxeId(axe: CreateAxeType): Promise { - const axeExistants = await this.databaseService.db - .select() - .from(axeTable) - .where( - and( - eq(axeTable.nom, axe.nom.trim()), - eq(axeTable.collectiviteId, axe.collectiviteId), - or( - and( - isNull(axeTable.parent), - isNull(axe.parent ? axe.parent : null) - ), - eq(axeTable.parent, axe.parent) - ) - ) - ); - const axeExistant = axeExistants?.length > 0 ? axeExistants[0] : null; - if (!axeExistant) { - return await this.createAxe(axe); - } - return axeExistant.id; - } + // /** + // * Retourne l'identifiant d'un axe s'il existe déjà ou le crée + // * Un axe existe déjà si : même nom, même collectivité, et même axe parent + // * @param axe + // * @return identifiant de l'axe récupéré ou créé + // */ + // async createOrReturnAxeId(axe: CreateAxeType): Promise { + // const axeExistants = await this.databaseService.db + // .select() + // .from(axeTable) + // .where( + // and( + // eq(axeTable.nom, axe.nom.trim()), + // eq(axeTable.collectiviteId, axe.collectiviteId), + // or( + // and( + // isNull(axeTable.parent), + // isNull(axe.parent ? axe.parent : null) + // ), + // eq(axeTable.parent, axe.parent) + // ) + // ) + // ); + // const axeExistant = axeExistants?.length > 0 ? axeExistants[0] : null; + // if (!axeExistant) { + // return await this.createAxe(axe); + // } + // return axeExistant.id; + // } /** * Ajoute une fiche dans un axe diff --git a/backend/src/fiches/services/fiches-action-update.service.ts b/backend/src/fiches/services/fiches-action-update.service.ts index 0874ec3455..7a644a60e9 100644 --- a/backend/src/fiches/services/fiches-action-update.service.ts +++ b/backend/src/fiches/services/fiches-action-update.service.ts @@ -13,10 +13,10 @@ import { PgTable, PgTransaction } from 'drizzle-orm/pg-core'; import { PostgresJsQueryResultHKT } from 'drizzle-orm/postgres-js'; import { toCamel } from 'postgres'; import { AuthenticatedUser } from '../../auth/models/auth.models'; -import { buildConflictUpdateColumns } from '../../utils/drizzle/conflict.utils'; import DatabaseService from '../../common/services/database.service'; +import { ficheActionAxeTable } from '../../plans/fiches/shared/models/fiche-action-axe.table'; +import { buildConflictUpdateColumns } from '../../utils/drizzle/conflict.utils'; import { ficheActionActionTable } from '../models/fiche-action-action.table'; -import { ficheActionAxeTable } from '../models/fiche-action-axe.table'; import { ficheActionEffetAttenduTable } from '../models/fiche-action-effet-attendu.table'; import { ficheActionFinanceurTagTable } from '../models/fiche-action-financeur-tag.table'; import { ficheActionIndicateurTable } from '../models/fiche-action-indicateur.table'; diff --git a/backend/src/indicateurs/indicateur-filtre/get-filtered-indicateurs.request.ts b/backend/src/indicateurs/indicateur-filtre/get-filtered-indicateurs.request.ts index e93894d1e1..7f25fd25b4 100644 --- a/backend/src/indicateurs/indicateur-filtre/get-filtered-indicateurs.request.ts +++ b/backend/src/indicateurs/indicateur-filtre/get-filtered-indicateurs.request.ts @@ -1,4 +1,4 @@ -import { getQueryOptionsSchema } from '@/api/shared/domain'; +import { getPaginationSchema } from '@/backend/utils'; import { z } from 'zod'; export const getFilteredIndicateursRequestOptionsSchema = z.object({ @@ -134,7 +134,7 @@ export type GetFilteredIndicateursRequestOptionType = z.infer< >; export const getFilteredIndicateurRequestQueryOptionSchema = - getQueryOptionsSchema(['text', 'estComplet']); + getPaginationSchema(['text', 'estComplet']); export type GetFilteredIndicateurRequestQueryOptionType = z.infer< typeof getFilteredIndicateurRequestQueryOptionSchema diff --git a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.router.ts b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.router.ts index ef20836062..502e37da14 100644 --- a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.router.ts +++ b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.router.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { TrpcService } from '@/backend/utils'; +import { TrpcService } from '@/backend/utils/trpc/trpc.service'; import IndicateurFiltreService from './indicateur-filtre.service'; import { getFilteredIndicateursRequestSchema } from './get-filtered-indicateurs.request'; diff --git a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts index e3d4d17287..cbc6ff7ac6 100644 --- a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts +++ b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts @@ -1,33 +1,33 @@ +import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; +import { PermissionService } from '@/backend/auth/authorizations/permission.service'; +import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; +import { axeTable } from '@/backend/plans/fiches'; +import { ficheActionAxeTable } from '@/backend/plans/fiches/shared/models/fiche-action-axe.table'; import { Injectable } from '@nestjs/common'; -import DatabaseService from '../../common/services/database.service'; -import { - GetFilteredIndicateurRequestQueryOptionType, - GetFilteredIndicateursRequestOptionType, -} from './get-filtered-indicateurs.request'; import { getTableName, sql } from 'drizzle-orm'; import { intersection, isNil } from 'es-toolkit'; -import { GetFilteredIndicateurResponseType } from './get-filtered-indicateurs.response'; import { AuthenticatedUser } from '../../auth/models/auth.models'; -import { indicateurValeurTable } from '../models/indicateur-valeur.table'; import { groupementCollectiviteTable } from '../../collectivites/models/groupement-collectivite.table'; -import { indicateurDefinitionTable } from '../models/indicateur-definition.table'; -import { indicateurGroupeTable } from '../models/indicateur-groupe.table'; -import { categorieTagTable } from '../../taxonomie/models/categorie-tag.table'; -import { indicateurCategorieTagTable } from '../models/indicateur-categorie-tag.table'; +import CollectivitesService from '../../collectivites/services/collectivites.service'; +import DatabaseService from '../../common/services/database.service'; +import { ficheActionIndicateurTable } from '../../fiches/models/fiche-action-indicateur.table'; import { ficheActionTable } from '../../fiches/models/fiche-action.table'; -import { axeTable } from '../../fiches/models/axe.table'; -import { ficheActionAxeTable } from '../../fiches/models/fiche-action-axe.table'; +import { categorieTagTable } from '../../taxonomie/models/categorie-tag.table'; import { serviceTagTable } from '../../taxonomie/models/service-tag.table'; -import { indicateurThematiqueTable } from '../models/indicateur-thematique.table'; -import { indicateurPiloteTable } from '../models/indicateur-pilote.table'; -import { indicateurCollectiviteTable } from '../models/indicateur-collectivite.table'; import { indicateurActionTable } from '../models/indicateur-action.table'; -import { ficheActionIndicateurTable } from '../../fiches/models/fiche-action-indicateur.table'; +import { indicateurCategorieTagTable } from '../models/indicateur-categorie-tag.table'; +import { indicateurCollectiviteTable } from '../models/indicateur-collectivite.table'; +import { indicateurDefinitionTable } from '../models/indicateur-definition.table'; +import { indicateurGroupeTable } from '../models/indicateur-groupe.table'; +import { indicateurPiloteTable } from '../models/indicateur-pilote.table'; import { indicateurServiceTagTable } from '../models/indicateur-service-tag.table'; -import { PermissionService } from '@/backend/auth/authorizations/permission.service'; -import CollectivitesService from '../../collectivites/services/collectivites.service'; -import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; -import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; +import { indicateurThematiqueTable } from '../models/indicateur-thematique.table'; +import { indicateurValeurTable } from '../models/indicateur-valeur.table'; +import { + GetFilteredIndicateurRequestQueryOptionType, + GetFilteredIndicateursRequestOptionType, +} from './get-filtered-indicateurs.request'; +import { GetFilteredIndicateurResponseType } from './get-filtered-indicateurs.response'; export type RequestResultIndicateursRaw = { id: number; @@ -171,7 +171,7 @@ export default class IndicateurFiltreService { return indicateursSorted.map((indicateur) => ({ id: indicateur.id, - titre: indicateur.titre?indicateur.titre:'', + titre: indicateur.titre ? indicateur.titre : '', estPerso: !isNil(indicateur.collectiviteId), identifiant: indicateur.identifiantReferentiel, hasOpenData: indicateur.hasOpenData, @@ -714,49 +714,39 @@ export default class IndicateurFiltreService { const hasOpenData = options.hasOpenData ? indicateur.hasOpenData : true; const categoriesNoms = options.categorieNoms && options.categorieNoms.length > 0 - ? intersection( - options.categorieNoms, - indicateur.categorieNoms - ).length>0 + ? intersection(options.categorieNoms, indicateur.categorieNoms) + .length > 0 : true; const planActionIds = options.planActionIds && options.planActionIds.length > 0 - ? intersection(options.planActionIds, indicateur.planIds).length>0 + ? intersection(options.planActionIds, indicateur.planIds).length > 0 : true; const ficheActionIds = options.ficheActionIds && options.ficheActionIds.length > 0 - ? intersection(options.ficheActionIds, indicateur.ficheIds).length>0 + ? intersection(options.ficheActionIds, indicateur.ficheIds).length > 0 : true; const fichesNonClassees = options.fichesNonClassees ? indicateur.hasFichesNonClassees : true; const servicePiloteIds = options.servicePiloteIds && options.servicePiloteIds.length > 0 - ? intersection( - options.servicePiloteIds, - indicateur.serviceIds - ).length>0 + ? intersection(options.servicePiloteIds, indicateur.serviceIds) + .length > 0 : true; const thematiqueIds = options.thematiqueIds && options.thematiqueIds.length > 0 - ? intersection( - options.thematiqueIds, - indicateur.thematiqueIds - ).length>0 + ? intersection(options.thematiqueIds, indicateur.thematiqueIds) + .length > 0 : true; const personnePiloteIds = options.personnePiloteIds && options.personnePiloteIds.length > 0 - ? intersection( - options.personnePiloteIds, - indicateur.piloteTagIds - ).length>0 + ? intersection(options.personnePiloteIds, indicateur.piloteTagIds) + .length > 0 : true; const utilisateurPiloteIds = options.utilisateurPiloteIds && options.utilisateurPiloteIds.length > 0 - ? intersection( - options.utilisateurPiloteIds, - indicateur.piloteUserIds - ).length>0 + ? intersection(options.utilisateurPiloteIds, indicateur.piloteUserIds) + .length > 0 : true; const estComplet = options.estComplet === true @@ -784,7 +774,7 @@ export default class IndicateurFiltreService { } } const actionId = options.actionId - ? intersection([options.actionId], indicateur.actionIds).length>0 + ? intersection([options.actionId], indicateur.actionIds).length > 0 : true; // Applique les conditions diff --git a/backend/src/indicateurs/routers/trajectoires.router.ts b/backend/src/indicateurs/routers/trajectoires.router.ts index 90551868a5..816c829f99 100644 --- a/backend/src/indicateurs/routers/trajectoires.router.ts +++ b/backend/src/indicateurs/routers/trajectoires.router.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; import { z } from 'zod'; -import { TrpcService } from '@/backend/utils'; +import { TrpcService } from '@/backend/utils/trpc/trpc.service'; import TrajectoiresSpreadsheetService from '../services/trajectoires-spreadsheet.service'; @Injectable() diff --git a/backend/src/panier/models/panier.table.ts b/backend/src/panier/models/panier.table.ts index 73b78dfe9c..a5168c1541 100644 --- a/backend/src/panier/models/panier.table.ts +++ b/backend/src/panier/models/panier.table.ts @@ -1,4 +1,3 @@ -import { createZodDto } from '@anatine/zod-nestjs'; import { InferSelectModel, SQL, sql } from 'drizzle-orm'; import { boolean, @@ -37,5 +36,3 @@ export const panierTable = pgTable('panier', { export type PanierType = InferSelectModel; export const panierSchema = createSelectSchema(panierTable); - -export class PanierClass extends createZodDto(panierSchema) {} diff --git a/backend/src/plans/fiches/index.ts b/backend/src/plans/fiches/index.ts new file mode 100644 index 0000000000..a6fa60282c --- /dev/null +++ b/backend/src/plans/fiches/index.ts @@ -0,0 +1,3 @@ +export * from './shared/models/axe.table'; +export * from './shared/models/plan-action-type-categorie.table'; +export * from './shared/models/plan-action-type.table'; diff --git a/backend/src/plans/fiches/shared/models/axe.table.ts b/backend/src/plans/fiches/shared/models/axe.table.ts new file mode 100644 index 0000000000..fe60ea9bb1 --- /dev/null +++ b/backend/src/plans/fiches/shared/models/axe.table.ts @@ -0,0 +1,43 @@ +import { createdAt, modifiedAt, modifiedBy } from '@/backend/utils'; +import { InferInsertModel } from 'drizzle-orm'; +import { + AnyPgColumn, + integer, + pgTable, + serial, + text, +} from 'drizzle-orm/pg-core'; +import { createSelectSchema } from 'drizzle-zod'; +import z from 'zod'; +import { collectiviteTable } from '../../../../collectivites/models/collectivite.table'; +import { panierTable } from '../../../../panier/models/panier.table'; +import { + planActionTypeSchema, + planActionTypeTable, +} from './plan-action-type.table'; + +export const axeTable = pgTable('axe', { + id: serial('id').primaryKey(), + nom: text('nom'), + collectiviteId: integer('collectivite_id') + .notNull() + .references(() => collectiviteTable.id), + parent: integer('parent').references((): AnyPgColumn => axeTable.id), + plan: integer('plan').references((): AnyPgColumn => axeTable.id), + typeId: integer('type').references(() => planActionTypeTable.id), + createdAt, + modifiedAt, + modifiedBy, + panierId: integer('panier_id').references(() => panierTable.id), +}); + +export type CreateAxeType = InferInsertModel; + +export const axeTableSchema = createSelectSchema(axeTable); + +export const axeSchema = axeTableSchema.extend({ + axes: axeTableSchema.array().nullish(), + type: planActionTypeSchema.nullable(), +}); + +export type Axe = z.input; diff --git a/backend/src/fiches/models/fiche-action-axe.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-axe.table.ts similarity index 83% rename from backend/src/fiches/models/fiche-action-axe.table.ts rename to backend/src/plans/fiches/shared/models/fiche-action-axe.table.ts index bbb9dd425a..417cee9aeb 100644 --- a/backend/src/fiches/models/fiche-action-axe.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-axe.table.ts @@ -1,5 +1,5 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { ficheActionTable } from './fiche-action.table'; +import { ficheActionTable } from '../../../../fiches/models/fiche-action.table'; import { axeTable } from './axe.table'; export const ficheActionAxeTable = pgTable( diff --git a/backend/src/fiches/models/plan-action-type-categorie.table.ts b/backend/src/plans/fiches/shared/models/plan-action-type-categorie.table.ts similarity index 100% rename from backend/src/fiches/models/plan-action-type-categorie.table.ts rename to backend/src/plans/fiches/shared/models/plan-action-type-categorie.table.ts diff --git a/backend/src/fiches/models/plan-action-type.table.ts b/backend/src/plans/fiches/shared/models/plan-action-type.table.ts similarity index 74% rename from backend/src/fiches/models/plan-action-type.table.ts rename to backend/src/plans/fiches/shared/models/plan-action-type.table.ts index 36089114b6..03c4957b45 100644 --- a/backend/src/fiches/models/plan-action-type.table.ts +++ b/backend/src/plans/fiches/shared/models/plan-action-type.table.ts @@ -1,4 +1,6 @@ import { pgTable, serial, text, uniqueIndex } from 'drizzle-orm/pg-core'; +import { createSelectSchema } from 'drizzle-zod'; +import z from 'zod'; import { planActionTypeCategorieTable } from './plan-action-type-categorie.table'; export const planActionTypeTable = pgTable( @@ -19,3 +21,7 @@ export const planActionTypeTable = pgTable( }; } ); + +export const planActionTypeSchema = createSelectSchema(planActionTypeTable); + +export type PlanActionType = z.infer; diff --git a/backend/src/referentiels/compute-score/compute-score.router.ts b/backend/src/referentiels/compute-score/compute-score.router.ts index 4e90b485bd..8f50b4ed8f 100644 --- a/backend/src/referentiels/compute-score/compute-score.router.ts +++ b/backend/src/referentiels/compute-score/compute-score.router.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; import z from 'zod'; -import { TrpcService } from '@/backend/utils'; +import { TrpcService } from '@/backend/utils/trpc/trpc.service'; import { getReferentielScoresRequestSchema } from '../models/get-referentiel-scores.request'; import { ReferentielType } from '../models/referentiel.enum'; import ReferentielsScoringService from '../services/referentiels-scoring.service'; diff --git a/backend/src/referentiels/snapshots/score-snaphots.router.ts b/backend/src/referentiels/snapshots/score-snaphots.router.ts index 9087271682..69340bfbe4 100644 --- a/backend/src/referentiels/snapshots/score-snaphots.router.ts +++ b/backend/src/referentiels/snapshots/score-snaphots.router.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; import z from 'zod'; -import { TrpcService } from '@/backend/utils'; +import { TrpcService } from '@/backend/utils/trpc/trpc.service'; import { ReferentielType } from '../models/referentiel.enum'; import { ScoreJalon } from '../models/score-jalon.enum'; import ReferentielsScoringSnapshotsService from '../services/referentiels-scoring-snapshots.service'; diff --git a/backend/src/referentiels/update-action-statut/update-action-statut.router.ts b/backend/src/referentiels/update-action-statut/update-action-statut.router.ts index f197da1181..2650aa8560 100644 --- a/backend/src/referentiels/update-action-statut/update-action-statut.router.ts +++ b/backend/src/referentiels/update-action-statut/update-action-statut.router.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import { TrpcService } from '@/backend/utils'; +import { TrpcService } from '@/backend/utils/trpc/trpc.service'; import { UpdateActionStatutService, upsertActionStatutRequestSchema, diff --git a/backend/src/taxonomie/routers/get-categories-by-collectivite.router.ts b/backend/src/taxonomie/routers/get-categories-by-collectivite.router.ts index e0b6e98727..78f2a126f2 100644 --- a/backend/src/taxonomie/routers/get-categories-by-collectivite.router.ts +++ b/backend/src/taxonomie/routers/get-categories-by-collectivite.router.ts @@ -1,4 +1,4 @@ -import { TrpcService } from '@/backend/utils'; +import { TrpcService } from '@/backend/utils/trpc/trpc.service'; import { Injectable } from '@nestjs/common'; import { z } from 'zod'; import TagService from '../services/tag.service'; diff --git a/backend/src/utils/google-sheets/sheet.service.ts b/backend/src/utils/google-sheets/sheet.service.ts index 43d0479a3a..24275920c8 100644 --- a/backend/src/utils/google-sheets/sheet.service.ts +++ b/backend/src/utils/google-sheets/sheet.service.ts @@ -4,7 +4,7 @@ import { Response } from 'express'; import * as gaxios from 'gaxios'; import * as auth from 'google-auth-library'; import { drive_v3, google, sheets_v4 } from 'googleapis'; -import { default as _ } from 'lodash'; +import * as _ from 'lodash'; import { z } from 'zod'; import { initApplicationCredentials } from '../../common/services/gcloud.helper'; import { getPropertyPaths } from '../../common/services/zod.helper'; diff --git a/backend/src/utils/index.ts b/backend/src/utils/index.ts index 7cf21f2874..60ddf66f13 100644 --- a/backend/src/utils/index.ts +++ b/backend/src/utils/index.ts @@ -1,3 +1,5 @@ export * from './column.utils'; export * from './enum.utils'; -export * from './trpc/trpc.service'; +export * from './pagination.schema'; + +export type { AppRouter } from './trpc/trpc.router'; diff --git a/packages/api/src/shared/domain/query_options.schema.ts b/backend/src/utils/pagination.schema.ts similarity index 73% rename from packages/api/src/shared/domain/query_options.schema.ts rename to backend/src/utils/pagination.schema.ts index 9adbe7aba3..5c27a766cb 100644 --- a/packages/api/src/shared/domain/query_options.schema.ts +++ b/backend/src/utils/pagination.schema.ts @@ -1,21 +1,21 @@ import { z } from 'zod'; -export const sortSchema = z.object({ +const sortSchema = z.object({ field: z.string(), direction: z.enum(['asc', 'desc']).default('desc'), }); -export const queryOptionsSchema = z.object({ +const paginationSchema = z.object({ sort: sortSchema.array().optional(), page: z.number().optional().default(1), limit: z.number().min(1).max(1000).default(1000), }); -export function getQueryOptionsSchema< +export function getPaginationSchema< U extends string, T extends Readonly<[U, ...U[]]> >(sortFields: T) { - return queryOptionsSchema.extend({ + return paginationSchema.extend({ sort: sortSchema .extend({ field: z.enum(sortFields), diff --git a/packages/api/src/indicateurs/domain/fetch-options.schema.ts b/packages/api/src/indicateurs/domain/fetch-options.schema.ts index e32ef3c000..7240ff6151 100644 --- a/packages/api/src/indicateurs/domain/fetch-options.schema.ts +++ b/packages/api/src/indicateurs/domain/fetch-options.schema.ts @@ -1,6 +1,6 @@ +import { getPaginationSchema } from '@/backend/utils'; import { z } from 'zod'; import { filtreRessourceLieesSchema } from '../../collectivites/shared/domain/filtre-ressource-liees.schema'; -import { getQueryOptionsSchema } from '../../shared/domain/query_options.schema'; export const filtreSpecifiqueSchema = z.object({ actionId: z.string().optional(), @@ -35,7 +35,7 @@ export const filtreSchema = filtreRessourceLieesSchema export type FetchFiltre = z.infer; -export const fetchOptionsSchema = getQueryOptionsSchema([ +export const fetchOptionsSchema = getPaginationSchema([ 'text', 'estComplet', ]).extend({ diff --git a/packages/api/src/plan-actions/domain/axe.schema.ts b/packages/api/src/plan-actions/domain/axe.schema.ts deleted file mode 100644 index ff53d89c6e..0000000000 --- a/packages/api/src/plan-actions/domain/axe.schema.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { z } from 'zod'; -import { planActionTypeSchema } from './plan-action-type.schema'; - -export const baseAxeSchema = z.object({ - id: z.number(), - collectiviteId: z.number(), - nom: z.string().nullable().optional(), - parent: z.number().nullable(), - plan: z.number().nullable(), - type: planActionTypeSchema.nullable(), - createdAt: z.string().date().optional(), - modifiedAt: z.string().date().optional(), - modifiedBy: z.string().nullable(), -}); - -export const axeSchema = baseAxeSchema.extend({ - axes: z.array(baseAxeSchema).optional(), -}); - -export type Axe = z.input; - -export const axeInsertSchema = baseAxeSchema.extend({ - id: z.number().optional(), -}); - -export type AxeInsert = z.input; diff --git a/packages/api/src/plan-actions/domain/fiche-action.schema.ts b/packages/api/src/plan-actions/domain/fiche-action.schema.ts index 53edd432e5..774f4b1c8f 100644 --- a/packages/api/src/plan-actions/domain/fiche-action.schema.ts +++ b/packages/api/src/plan-actions/domain/fiche-action.schema.ts @@ -6,8 +6,8 @@ import { tagSchema, thematiqueSchema, } from '@/api/shared/domain'; +import { axeSchema } from '@/backend/plans/fiches'; import { z } from 'zod'; -import { axeSchema } from './axe.schema'; // Enums diff --git a/packages/api/src/plan-actions/domain/index.ts b/packages/api/src/plan-actions/domain/index.ts index 1129dc91fd..8b8065b931 100644 --- a/packages/api/src/plan-actions/domain/index.ts +++ b/packages/api/src/plan-actions/domain/index.ts @@ -1,2 +1 @@ -export * from './axe.schema'; export * from './fiche-action.schema'; diff --git a/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts b/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts index 95eaac80ca..eacfb6c140 100644 --- a/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts +++ b/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts @@ -1,6 +1,6 @@ +import { getPaginationSchema } from '@/backend/utils'; import { z } from 'zod'; import { filtreRessourceLieesSchema } from '../../../collectivites/shared/domain/filtre-ressource-liees.schema'; -import { getQueryOptionsSchema } from '../../../shared/domain/query_options.schema'; import { cibleSchema, niveauPrioriteSchema, statutSchema } from '../../domain'; export const modifiedSinceSchema = z.enum([ @@ -68,7 +68,7 @@ const sortFicheSchema = z.object({ export type SortFichesAction = z.infer; -export const fetchOptionsSchema = getQueryOptionsSchema(sortValues).extend({ +export const fetchOptionsSchema = getPaginationSchema(sortValues).extend({ filtre: filtreSchema, }); diff --git a/packages/api/src/plan-actions/index.ts b/packages/api/src/plan-actions/index.ts index 05424383d4..8307c7d45c 100644 --- a/packages/api/src/plan-actions/index.ts +++ b/packages/api/src/plan-actions/index.ts @@ -1,9 +1,8 @@ -export * from './domain/axe.schema'; export * from './domain/fiche-action.schema'; export * from './fiche-resumes.list/data-access/fiche-action.fetch'; export * from './fiche-resumes.list/data-access/fiche-action.save'; export * from './fiche-resumes.list/data-access/fiche-resumes.fetch'; +export * from './plan-actions.list/data-access/plan-actions-pilotable.fetch'; export * from './plan-actions.list/data-access/plan-actions.count'; export * from './plan-actions.list/data-access/plan-actions.fetch'; -export * from './plan-actions.list/data-access/plan-actions-pilotable.fetch'; export * from './plan-actions.list/domain/fetch-options.schema'; diff --git a/packages/api/src/plan-actions/plan-actions.list/data-access/plan-actions.fetch.ts b/packages/api/src/plan-actions/plan-actions.list/data-access/plan-actions.fetch.ts index ae4c270c87..5eb39ea6ed 100644 --- a/packages/api/src/plan-actions/plan-actions.list/data-access/plan-actions.fetch.ts +++ b/packages/api/src/plan-actions/plan-actions.list/data-access/plan-actions.fetch.ts @@ -1,15 +1,16 @@ import { DBClient } from '@/api/typeUtils'; +import { Axe, PlanActionType } from '@/backend/plans/fiches'; import { objectToCamel } from 'ts-case-convert'; -import { Axe } from '../../domain'; import { FetchOptions, fetchOptionsSchema, FetchSort, } from '../domain/fetch-options.schema'; -type FetchedPlanAction = Axe & { +interface FetchedPlanAction extends Omit { axes?: Axe[]; -}; + type: PlanActionType | null; +} type TFetchedData = { plans: FetchedPlanAction[]; diff --git a/packages/api/src/plan-actions/plan-actions.list/domain/fetch-options.schema.ts b/packages/api/src/plan-actions/plan-actions.list/domain/fetch-options.schema.ts index 9742c614f9..00d6108d12 100644 --- a/packages/api/src/plan-actions/plan-actions.list/domain/fetch-options.schema.ts +++ b/packages/api/src/plan-actions/plan-actions.list/domain/fetch-options.schema.ts @@ -1,5 +1,5 @@ +import { getPaginationSchema } from '@/backend/utils'; import { z } from 'zod'; -import { getQueryOptionsSchema } from '../../../shared/domain/query_options.schema'; import { filtreRessourceLieesSchema } from '../../../collectivites/shared/domain/filtre-ressource-liees.schema'; /** @@ -24,7 +24,7 @@ const fetchSortSchema = z.object({ export type FetchSort = z.infer; -export const fetchOptionsSchema = getQueryOptionsSchema(sortValues).extend({ +export const fetchOptionsSchema = getPaginationSchema(sortValues).extend({ filtre: fetchFilterSchema.optional(), }); diff --git a/packages/api/src/shared/domain/index.ts b/packages/api/src/shared/domain/index.ts index 89690034f2..3e48046d61 100644 --- a/packages/api/src/shared/domain/index.ts +++ b/packages/api/src/shared/domain/index.ts @@ -1,3 +1,2 @@ -export * from './query_options.schema'; export * from './tag.schema'; export * from './thematique.schema'; diff --git a/packages/api/src/utils/trpc/client.tsx b/packages/api/src/utils/trpc/client.tsx index e72ce4e71f..28998038e8 100644 --- a/packages/api/src/utils/trpc/client.tsx +++ b/packages/api/src/utils/trpc/client.tsx @@ -14,7 +14,7 @@ import { makeQueryClient } from './query-client'; // By using `import type` you ensure that the reference will be stripped at compile-time, meaning you don't inadvertently import server-side code into your client. // For more information, see the Typescript docs: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html#type-only-imports-and-export // eslint-disable-next-line @nx/enforce-module-boundaries -import type { AppRouter } from '@/backend/trpc/trpc.router'; +import type { AppRouter } from '@/backend/utils/trpc/trpc.router'; import { getAuthHeaders } from '../authTokens'; export type RouterInput = inferRouterInputs; From 1e10f081d580e91958d0da1a32baaf689ac95183 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Mon, 16 Dec 2024 11:15:27 +0100 Subject: [PATCH 06/33] Supprime `thematique.schema` du package `api` --- .../Indicateurs/IndicateurPersoNouveau.tsx | 2 +- .../IndicateurCardEditModal.tsx | 3 +- .../useUpdateIndicateurCard.ts | 3 +- .../ExportPdf/FicheActionPdf/Description.tsx | 4 +- .../FicheActionDescription.tsx | 4 +- .../ModaleDescription.tsx | 2 +- .../SousThematiquesDropdown.tsx | 10 ++--- .../useSousThematiqueListe.ts | 12 +++--- .../fiche-action-sous-thematique.table.ts | 2 +- .../models/fiche-action-thematique.table.ts | 2 +- .../models/update-fiche-action.request.ts | 4 +- .../models/indicateur-thematique.table.ts | 2 +- .../action-impact-sous-thematique.table.ts | 4 +- .../models/action-impact-thematique.table.ts | 5 +-- .../src/panier/models/action-impact.table.ts | 10 ++--- backend/src/shared/index.ts | 2 + .../models/sous-thematique.table.ts | 14 ++++--- .../models/thematique.table.ts | 3 ++ .../taxonomie/services/thematique.service.ts | 10 ++--- .../indicateurs/actions/indicateur.fetch.ts | 2 +- .../indicateurs/actions/indicateur.save.ts | 4 +- .../indicateurs/domain/definition.schema.ts | 4 +- .../domain/fiche-action.schema.ts | 9 ++-- .../shared/actions/thematique.fetch.test.ts | 32 ++++++-------- .../src/shared/actions/thematique.fetch.ts | 41 +----------------- packages/api/src/shared/domain/index.ts | 1 - .../src/shared/domain/thematique.schema.ts | 42 ------------------- 27 files changed, 77 insertions(+), 156 deletions(-) create mode 100644 backend/src/shared/index.ts rename backend/src/{taxonomie => shared}/models/sous-thematique.table.ts (66%) rename backend/src/{taxonomie => shared}/models/thematique.table.ts (89%) delete mode 100644 packages/api/src/shared/domain/thematique.schema.ts diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/IndicateurPersoNouveau.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/IndicateurPersoNouveau.tsx index c71cd37b91..53cbc9d761 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/IndicateurPersoNouveau.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/IndicateurPersoNouveau.tsx @@ -1,5 +1,4 @@ import { FicheAction } from '@/api/plan-actions'; -import { Thematique } from '@/api/shared/domain'; import { TIndicateurPersoDefinitionWrite, useInsertIndicateurPersoDefinition, @@ -8,6 +7,7 @@ import { makeCollectiviteIndicateursUrl } from '@/app/app/paths'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; import ThematiquesDropdown from '@/app/ui/dropdownLists/ThematiquesDropdown/ThematiquesDropdown'; import FormikInput from '@/app/ui/shared/form/formik/FormikInput'; +import { Thematique } from '@/backend/shared'; import { Alert, Button, Checkbox, Field, FormSectionGrid } from '@/ui'; import { Form, Formik } from 'formik'; import { useRouter } from 'next/navigation'; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/IndicateurCardEditModal.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/IndicateurCardEditModal.tsx index d452ec4d15..41987b90cb 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/IndicateurCardEditModal.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/IndicateurCardEditModal.tsx @@ -4,6 +4,7 @@ import { useUpdateIndicateurCard } from '@/app/app/pages/collectivite/Indicateur import PersonnesDropdown from '@/app/ui/dropdownLists/PersonnesDropdown/PersonnesDropdown'; import ServicesPilotesDropdown from '@/app/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown'; import ThematiquesDropdown from '@/app/ui/dropdownLists/ThematiquesDropdown/ThematiquesDropdown'; +import { Thematique } from '@/backend/shared'; import { Field, Modal, ModalFooterOKCancel } from '@/ui'; import { OpenState } from '@/ui/utils/types'; import { useEffect, useState } from 'react'; @@ -38,7 +39,7 @@ const IndicateurCardEditModal = ({ const [state, setState] = useState<{ pilotes: Personne[]; services: SharedDomain.Tag[]; - thematiques: SharedDomain.Thematique[]; + thematiques: Thematique[]; }>(initialState); useEffect(() => { diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/useUpdateIndicateurCard.ts b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/useUpdateIndicateurCard.ts index d6eb733ca7..3cd394a4f8 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/useUpdateIndicateurCard.ts +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/useUpdateIndicateurCard.ts @@ -2,9 +2,10 @@ import { useMutation } from 'react-query'; import { Indicateurs } from '@/api'; import { Personne } from '@/api/collectivites'; -import { Tag, Thematique } from '@/api/shared/domain'; +import { Tag } from '@/api/shared/domain'; import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; +import { Thematique } from '@/backend/shared'; /** Met à jour les pilotes, les services pilotes, les thématique d'un indicateur */ export const useUpdateIndicateurCard = ( diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ExportPdf/FicheActionPdf/Description.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ExportPdf/FicheActionPdf/Description.tsx index e16bedb981..78696e193b 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ExportPdf/FicheActionPdf/Description.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ExportPdf/FicheActionPdf/Description.tsx @@ -30,7 +30,7 @@ const Description = ({ fiche }: FicheActionPdfProps) => { {sousThematiques?.map((ssThematique) => ( ))} @@ -44,7 +44,7 @@ const Description = ({ fiche }: FicheActionPdfProps) => { {/* Description */} - Description de l'action : + {"Description de l'action :"} {description || 'Non renseigné'} diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionDescription/FicheActionDescription.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionDescription/FicheActionDescription.tsx index b8c66fde5e..0b56241d9d 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionDescription/FicheActionDescription.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionDescription/FicheActionDescription.tsx @@ -76,7 +76,7 @@ const FicheActionDescription = ({ {sousThematiques?.map((ssThematique) => ( @@ -104,7 +104,7 @@ const FicheActionDescription = ({ {/* Description de l'action */}
- Description de l'action : + {"Description de l'action :"}
{description ? ( diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionDescription/ModaleDescription.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionDescription/ModaleDescription.tsx index e5a3a2d290..29632ceaf2 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionDescription/ModaleDescription.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionDescription/ModaleDescription.tsx @@ -1,10 +1,10 @@ import { FicheAction } from '@/api/plan-actions'; -import { Thematique } from '@/api/shared/domain'; import { useCurrentCollectivite } from '@/app/core-logic/hooks/useCurrentCollectivite'; import SousThematiquesDropdown from '@/app/ui/dropdownLists/SousThematiquesDropdown/SousThematiquesDropdown'; import TagsSuiviPersoDropdown from '@/app/ui/dropdownLists/TagsSuiviPersoDropdown/TagsSuiviPersoDropdown'; import ThematiquesDropdown from '@/app/ui/dropdownLists/ThematiquesDropdown/ThematiquesDropdown'; import { getMaxLengthMessage } from '@/app/utils/formatUtils'; +import { Thematique } from '@/backend/shared'; import { Button, Field, diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/SousThematiquesDropdown/SousThematiquesDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/SousThematiquesDropdown/SousThematiquesDropdown.tsx index 1970dbe910..64192c0a61 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/SousThematiquesDropdown/SousThematiquesDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/SousThematiquesDropdown/SousThematiquesDropdown.tsx @@ -1,17 +1,17 @@ -import { SousThematiqueId } from '@/api/shared/domain'; +import { SousThematique } from '@/backend/shared'; import { Option, OptionValue, SelectFilter, SelectMultipleProps } from '@/ui'; import { useEffect } from 'react'; import { useSousThematiqueListe } from './useSousThematiqueListe'; type Props = Omit & { thematiques: number[]; - sousThematiques: SousThematiqueId[] | null | undefined; + sousThematiques: SousThematique[] | null | undefined; onChange: ({ sousThematiques, selectedSousThematique, }: { - sousThematiques: SousThematiqueId[]; - selectedSousThematique: SousThematiqueId; + sousThematiques: SousThematique[]; + selectedSousThematique: SousThematique; }) => void; }; @@ -27,7 +27,7 @@ const SousThematiquesDropdown = ({ .filter((st) => thematiques.some((t) => st.thematiqueId === t)) .map((st) => ({ value: st.id, - label: st.sousThematique, + label: st.nom, })); const getSelectedSousThematiques = (values?: OptionValue[]) => diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/SousThematiquesDropdown/useSousThematiqueListe.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/SousThematiquesDropdown/useSousThematiqueListe.ts index 6de1ecaad2..4ccc531dac 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/SousThematiquesDropdown/useSousThematiqueListe.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/SousThematiquesDropdown/useSousThematiqueListe.ts @@ -1,10 +1,9 @@ -import { useQuery } from 'react-query'; - -import { SousThematiqueId } from '@/api/shared/domain'; import { supabaseClient } from '@/app/core-logic/api/supabase'; +import { SousThematique } from '@/backend/shared'; +import { useQuery } from 'react-query'; import { objectToCamel } from 'ts-case-convert'; -type TFetchedData = SousThematiqueId[]; +type TFetchedData = SousThematique[]; const fetchSousThematiqueListe = async (): Promise => { const query = supabaseClient.from('sous_thematique').select(); @@ -15,7 +14,10 @@ const fetchSousThematiqueListe = async (): Promise => { throw new Error(error.message); } - return objectToCamel(data); + return objectToCamel(data).map((t) => ({ + ...t, + nom: t.sousThematique, + })); }; export const useSousThematiqueListe = () => { diff --git a/backend/src/fiches/models/fiche-action-sous-thematique.table.ts b/backend/src/fiches/models/fiche-action-sous-thematique.table.ts index 5cbbde2198..2219643332 100644 --- a/backend/src/fiches/models/fiche-action-sous-thematique.table.ts +++ b/backend/src/fiches/models/fiche-action-sous-thematique.table.ts @@ -1,6 +1,6 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; +import { sousThematiqueTable } from '../../shared/models/sous-thematique.table'; import { ficheActionTable } from './fiche-action.table'; -import { sousThematiqueTable } from '../../taxonomie/models/sous-thematique.table'; export const ficheActionSousThematiqueTable = pgTable( 'fiche_action_sous_thematique', diff --git a/backend/src/fiches/models/fiche-action-thematique.table.ts b/backend/src/fiches/models/fiche-action-thematique.table.ts index f6b1ab2453..4bf2d8ddac 100644 --- a/backend/src/fiches/models/fiche-action-thematique.table.ts +++ b/backend/src/fiches/models/fiche-action-thematique.table.ts @@ -1,5 +1,5 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { thematiqueTable } from '../../taxonomie/models/thematique.table'; +import { thematiqueTable } from '../../shared/models/thematique.table'; import { ficheActionTable } from './fiche-action.table'; export const ficheActionThematiqueTable = pgTable( diff --git a/backend/src/fiches/models/update-fiche-action.request.ts b/backend/src/fiches/models/update-fiche-action.request.ts index eaacd3f19a..f6db13c770 100644 --- a/backend/src/fiches/models/update-fiche-action.request.ts +++ b/backend/src/fiches/models/update-fiche-action.request.ts @@ -2,14 +2,14 @@ import z from 'zod'; import { indicateurDefinitionSchema } from '../../indicateurs/models/indicateur-definition.table'; import { axeSchema } from '../../plans/fiches/shared/models/axe.table'; import { actionRelationSchema } from '../../referentiels/models/action-relation.table'; +import { sousThematiqueSchema } from '../../shared/models/sous-thematique.table'; +import { thematiqueSchema } from '../../shared/models/thematique.table'; import { effetAttenduSchema } from '../../taxonomie/models/effet-attendu.table'; import { financeurTagSchema } from '../../taxonomie/models/financeur-tag.table'; import { libreTagSchema } from '../../taxonomie/models/libre-tag.table'; import { partenaireTagSchema } from '../../taxonomie/models/partenaire-tag.table'; import { serviceTagSchema } from '../../taxonomie/models/service-tag.table'; -import { sousThematiqueSchema } from '../../taxonomie/models/sous-thematique.table'; import { structureTagSchema } from '../../taxonomie/models/structure-tag.table'; -import { thematiqueSchema } from '../../taxonomie/models/thematique.table'; import { FicheActionCiblesEnumType, ficheActionSchema, diff --git a/backend/src/indicateurs/models/indicateur-thematique.table.ts b/backend/src/indicateurs/models/indicateur-thematique.table.ts index d3961cd263..73d1ba89d8 100644 --- a/backend/src/indicateurs/models/indicateur-thematique.table.ts +++ b/backend/src/indicateurs/models/indicateur-thematique.table.ts @@ -1,5 +1,5 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { thematiqueTable } from '../../taxonomie/models/thematique.table'; +import { thematiqueTable } from '../../shared/models/thematique.table'; import { indicateurDefinitionTable } from './indicateur-definition.table'; export const indicateurThematiqueTable = pgTable( diff --git a/backend/src/panier/models/action-impact-sous-thematique.table.ts b/backend/src/panier/models/action-impact-sous-thematique.table.ts index 239e2315d4..71d3ceddbc 100644 --- a/backend/src/panier/models/action-impact-sous-thematique.table.ts +++ b/backend/src/panier/models/action-impact-sous-thematique.table.ts @@ -1,7 +1,7 @@ +import { InferSelectModel } from 'drizzle-orm'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { sousThematiqueTable } from '../../taxonomie/models/sous-thematique.table'; +import { sousThematiqueTable } from '../../shared/models/sous-thematique.table'; import { actionImpactTable } from './action-impact.table'; -import { InferSelectModel } from 'drizzle-orm'; export const actionImpactSousThematiqueTable = pgTable( 'action_impact_sous_thematique', diff --git a/backend/src/panier/models/action-impact-thematique.table.ts b/backend/src/panier/models/action-impact-thematique.table.ts index a8f4e44a2c..d2a0c061e8 100644 --- a/backend/src/panier/models/action-impact-thematique.table.ts +++ b/backend/src/panier/models/action-impact-thematique.table.ts @@ -1,8 +1,7 @@ +import { InferSelectModel } from 'drizzle-orm'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { thematiqueTable } from '../../taxonomie/models/thematique.table'; +import { thematiqueTable } from '../../shared/models/thematique.table'; import { actionImpactTable } from './action-impact.table'; -import { InferSelectModel } from 'drizzle-orm'; -import { actionImpactIndicateurTable } from './action-impact-indicateur.table'; export const actionImpactThematiqueTable = pgTable( 'action_impact_thematique', diff --git a/backend/src/panier/models/action-impact.table.ts b/backend/src/panier/models/action-impact.table.ts index 05391e2bd5..d860e7c866 100644 --- a/backend/src/panier/models/action-impact.table.ts +++ b/backend/src/panier/models/action-impact.table.ts @@ -1,3 +1,4 @@ +import { createZodDto } from '@anatine/zod-nestjs'; import { InferSelectModel } from 'drizzle-orm'; import { boolean, @@ -7,10 +8,13 @@ import { serial, text, } from 'drizzle-orm/pg-core'; +import { createSelectSchema } from 'drizzle-zod'; +import { z } from 'zod'; +import { lienSchema, lienType } from '../../documents/models/document-lien.dto'; import { thematiqueSchema, ThematiqueType, -} from '../../taxonomie/models/thematique.table'; +} from '../../shared/models/thematique.table'; import { categorieFNVSchema, CategorieFNVType, @@ -18,10 +22,6 @@ import { import { tempsDeMiseEnOeuvreTable } from '../../taxonomie/models/temps-de-mise-en-oeuvre.table'; import { actionImpactFourchetteBudgetaireTable } from './action-impact-fourchette-budgetaire.table'; import { actionImpactTierTable } from './action-impact-tier.table'; -import { createSelectSchema } from 'drizzle-zod'; -import { lienSchema, lienType } from '../../documents/models/document-lien.dto'; -import { z } from 'zod'; -import { createZodDto } from '@anatine/zod-nestjs'; export const actionImpactTable = pgTable('action_impact', { id: serial('id').primaryKey(), diff --git a/backend/src/shared/index.ts b/backend/src/shared/index.ts new file mode 100644 index 0000000000..81eaae0756 --- /dev/null +++ b/backend/src/shared/index.ts @@ -0,0 +1,2 @@ +export * from './models/sous-thematique.table'; +export * from './models/thematique.table'; diff --git a/backend/src/taxonomie/models/sous-thematique.table.ts b/backend/src/shared/models/sous-thematique.table.ts similarity index 66% rename from backend/src/taxonomie/models/sous-thematique.table.ts rename to backend/src/shared/models/sous-thematique.table.ts index 69cd34bc00..bcd7ac253a 100644 --- a/backend/src/taxonomie/models/sous-thematique.table.ts +++ b/backend/src/shared/models/sous-thematique.table.ts @@ -5,26 +5,28 @@ import { text, uniqueIndex, } from 'drizzle-orm/pg-core'; -import { InferSelectModel } from 'drizzle-orm'; -import { thematiqueTable } from './thematique.table'; import { createSelectSchema } from 'drizzle-zod'; +import z from 'zod'; +import { thematiqueTable } from './thematique.table'; export const sousThematiqueTable = pgTable( 'sous_thematique', { id: serial('id').primaryKey(), + nom: text('sous_thematique').notNull(), thematiqueId: integer('thematique_id') .notNull() .references(() => thematiqueTable.id), - sousThematique: text('sous_thematique').notNull(), }, (table) => { return { - sousThematiqueSousThematiqueThematiqueIdKey: uniqueIndex( + sousThematiqueNonThematiqueIdKey: uniqueIndex( 'sous_thematique_sous_thematique_thematique_id_key ' - ).on(table.sousThematique, table.thematiqueId), + ).on(table.nom, table.thematiqueId), }; } ); -export type SousThematiqueType = InferSelectModel; + export const sousThematiqueSchema = createSelectSchema(sousThematiqueTable); + +export type SousThematique = z.infer; diff --git a/backend/src/taxonomie/models/thematique.table.ts b/backend/src/shared/models/thematique.table.ts similarity index 89% rename from backend/src/taxonomie/models/thematique.table.ts rename to backend/src/shared/models/thematique.table.ts index 7cb290c822..d73cf31f3e 100644 --- a/backend/src/taxonomie/models/thematique.table.ts +++ b/backend/src/shared/models/thematique.table.ts @@ -1,6 +1,7 @@ import { InferSelectModel } from 'drizzle-orm'; import { pgTable, serial, text, varchar } from 'drizzle-orm/pg-core'; import { createSelectSchema } from 'drizzle-zod'; +import z from 'zod'; export const thematiqueTable = pgTable('thematique', { id: serial('id').primaryKey(), @@ -20,3 +21,5 @@ export const thematiqueSchema = thematiqueAvecAncienIdentifiantSchema.pick({ id: true, nom: true, }); + +export type Thematique = z.infer; diff --git a/backend/src/taxonomie/services/thematique.service.ts b/backend/src/taxonomie/services/thematique.service.ts index ff4ada0f83..c980477d3e 100644 --- a/backend/src/taxonomie/services/thematique.service.ts +++ b/backend/src/taxonomie/services/thematique.service.ts @@ -1,9 +1,9 @@ import { Injectable, Logger } from '@nestjs/common'; import DatabaseService from '../../common/services/database.service'; import { + SousThematique, sousThematiqueTable, - SousThematiqueType, -} from '../models/sous-thematique.table'; +} from '../../shared/models/sous-thematique.table'; @Injectable() export default class ThematiqueService { @@ -15,14 +15,14 @@ export default class ThematiqueService { * Récupère les sous thématiques provenant de la BDD * @return une map de sous thématiques avec en clé le nom de la sous thématique */ - async getSousThematiquesMap(): Promise> { + async getSousThematiquesMap(): Promise> { const result = await this.databaseService.db .select() .from(sousThematiqueTable); - const toReturn = new Map(); + const toReturn = new Map(); for (let i = 0; i < result.length; i++) { const thematique = result[i]; - toReturn.set(thematique.sousThematique, thematique); + toReturn.set(thematique.nom, thematique); } return toReturn; } diff --git a/packages/api/src/indicateurs/actions/indicateur.fetch.ts b/packages/api/src/indicateurs/actions/indicateur.fetch.ts index 37cbc642bb..d8af51bee9 100644 --- a/packages/api/src/indicateurs/actions/indicateur.fetch.ts +++ b/packages/api/src/indicateurs/actions/indicateur.fetch.ts @@ -7,7 +7,6 @@ import { Groupement } from '../../collectivites/shared/domain/groupement.schema' import { Tables } from '../../database.types'; import { FicheResume } from '../../plan-actions/domain/fiche-action.schema'; import { Action } from '../../referentiel/domain/action.schema'; -import { Thematique } from '../../shared/domain'; import { Personne } from '../../collectivites/shared/domain/personne.schema'; import { DBClient } from '../../typeUtils'; import { Source, SourceMetadonnee } from '../domain'; @@ -20,6 +19,7 @@ import { ValeurComparaison, ValeurComparaisonLigne, } from '../domain/valeur.schema'; +import { Thematique } from '@/backend/shared'; // cas spécial pour cet indicateur TODO: utiliser un champ distinct dans les markdowns plutôt que cet ID "en dur" const ID_COMPACITE_FORMES_URBAINES = 'cae_9'; diff --git a/packages/api/src/indicateurs/actions/indicateur.save.ts b/packages/api/src/indicateurs/actions/indicateur.save.ts index a5be817933..a655b3854e 100644 --- a/packages/api/src/indicateurs/actions/indicateur.save.ts +++ b/packages/api/src/indicateurs/actions/indicateur.save.ts @@ -1,11 +1,11 @@ +import { Thematique } from '@/backend/shared'; import { isNil } from 'es-toolkit/predicate'; import { objectToSnake } from 'ts-case-convert'; +import { Personne } from '../../collectivites/shared/domain/personne.schema'; import { Action } from '../../referentiel/domain/action.schema'; import { selectTags } from '../../shared/actions/tag.fetch'; import { insertTags } from '../../shared/actions/tag.save'; -import { Personne } from '../../collectivites/shared/domain/personne.schema'; import { Tag, TagInsert } from '../../shared/domain/tag.schema'; -import { Thematique } from '../../shared/domain/thematique.schema'; import { DBClient, TablesInsert } from '../../typeUtils'; import { IndicateurDefinition, diff --git a/packages/api/src/indicateurs/domain/definition.schema.ts b/packages/api/src/indicateurs/domain/definition.schema.ts index e310441019..f2cdd4c153 100644 --- a/packages/api/src/indicateurs/domain/definition.schema.ts +++ b/packages/api/src/indicateurs/domain/definition.schema.ts @@ -1,6 +1,6 @@ +import { thematiqueSchema } from '@/backend/shared'; import { z } from 'zod'; import { actionSchema } from '../../referentiel/domain/action.schema'; -import { thematiqueSchema } from '../../shared/domain/thematique.schema'; import { categorieSchema } from './categorie.schema'; /** @@ -138,4 +138,4 @@ export const definitionPredefiniSchema = definitionSchema.omit({ */ export type IndicateurDefinitionPredefini = z.input< typeof definitionPredefiniSchema ->; \ No newline at end of file +>; diff --git a/packages/api/src/plan-actions/domain/fiche-action.schema.ts b/packages/api/src/plan-actions/domain/fiche-action.schema.ts index 774f4b1c8f..e40325e3ec 100644 --- a/packages/api/src/plan-actions/domain/fiche-action.schema.ts +++ b/packages/api/src/plan-actions/domain/fiche-action.schema.ts @@ -1,12 +1,9 @@ import { personneSchema } from '@/api/collectivites'; import { indicateurListItemSchema } from '@/api/indicateurs/domain'; import { actionSchema } from '@/api/referentiel'; -import { - sousThematiqueSchemaId, - tagSchema, - thematiqueSchema, -} from '@/api/shared/domain'; +import { tagSchema } from '@/api/shared/domain'; import { axeSchema } from '@/backend/plans/fiches'; +import { sousThematiqueSchema, thematiqueSchema } from '@/backend/shared'; import { z } from 'zod'; // Enums @@ -137,7 +134,7 @@ export const ficheActionSchema = z.object({ // Tables liées thematiques: thematiqueSchema.array().nullish(), - sousThematiques: sousThematiqueSchemaId.array().nullish(), + sousThematiques: sousThematiqueSchema.array().nullish(), pilotes: personneSchema.array().nullish(), referents: personneSchema.array().nullish(), services: tagSchema.array().nullish(), diff --git a/packages/api/src/shared/actions/thematique.fetch.test.ts b/packages/api/src/shared/actions/thematique.fetch.test.ts index a682d25656..77c85dad52 100644 --- a/packages/api/src/shared/actions/thematique.fetch.test.ts +++ b/packages/api/src/shared/actions/thematique.fetch.test.ts @@ -1,26 +1,20 @@ -import {beforeAll, expect, test} from "vitest"; -import {signIn, signOut} from "../../tests/auth"; -import {testReset} from "../../tests/testReset"; -import {supabase} from "../../tests/supabase"; -import {selectSousThematiques, selectThematiques} from "./thematique.fetch"; +import { beforeAll, expect, test } from 'vitest'; +import { signIn, signOut } from '../../tests/auth'; +import { supabase } from '../../tests/supabase'; +import { testReset } from '../../tests/testReset'; +import { selectThematiques } from './thematique.fetch'; beforeAll(async () => { - await signIn('yolododo'); - await testReset(); + await signIn('yolododo'); + await testReset(); - return async () => { - await signOut(); - }; + return async () => { + await signOut(); + }; }); test('Test selectThematiques', async () => { - const data = await selectThematiques(supabase); - expect(data!).not.toBeNull(); - expect(data!).not.toHaveLength(0); + const data = await selectThematiques(supabase); + expect(data).not.toBeNull(); + expect(data).not.toHaveLength(0); }); - -test('Test selectSousThematiques', async () => { - const data = await selectSousThematiques(supabase, null, true); - expect(data!).not.toBeNull(); - expect(data!).not.toHaveLength(0); -}); \ No newline at end of file diff --git a/packages/api/src/shared/actions/thematique.fetch.ts b/packages/api/src/shared/actions/thematique.fetch.ts index e75d18b1c9..d1802304dc 100644 --- a/packages/api/src/shared/actions/thematique.fetch.ts +++ b/packages/api/src/shared/actions/thematique.fetch.ts @@ -1,9 +1,5 @@ +import { Thematique } from '@/backend/shared'; import { DBClient } from '../../typeUtils'; -import { - SousThematique, - SousThematiqueId, - Thematique, -} from '../domain/thematique.schema'; /** * Recupère les thématiques @@ -13,40 +9,7 @@ import { export async function selectThematiques( dbClient: DBClient ): Promise { - const { data, error } = await dbClient.from('thematique').select('id, nom'); + const { data } = await dbClient.from('thematique').select('id, nom'); return data ? (data as Thematique[]) : []; } - -/** - * Recupère les sous thématiques - * @param dbClient client supabase - * @param thematiqueId identifiant de la thématique parent, null pour récupérer toutes les sous thématiques - * @param lienThematiqueId vrai pour avoir le lien vers la thématique parente sous forme d'identifiant, - * faux pour avoir l'objet complet - * @return liste de sous thématiques - */ -export async function selectSousThematiques( - dbClient: DBClient, - thematiqueId: number | null, - lienThematiqueId: boolean -): Promise { - const colonnes = - 'id, nom:sous_thematique, thematique:' + - (thematiqueId ? 'thematique_id' : 'thematique(*)'); - - const query = dbClient.from('sous_thematique').select(colonnes); - - if (thematiqueId) { - query.eq('thematique_id', thematiqueId!); - } - const { data } = await query.returns(); - - if (!data) { - return []; - } - - return lienThematiqueId - ? (data as SousThematiqueId[]) - : (data as SousThematique[]); -} diff --git a/packages/api/src/shared/domain/index.ts b/packages/api/src/shared/domain/index.ts index 3e48046d61..6822c7569f 100644 --- a/packages/api/src/shared/domain/index.ts +++ b/packages/api/src/shared/domain/index.ts @@ -1,2 +1 @@ export * from './tag.schema'; -export * from './thematique.schema'; diff --git a/packages/api/src/shared/domain/thematique.schema.ts b/packages/api/src/shared/domain/thematique.schema.ts deleted file mode 100644 index dc27e333a1..0000000000 --- a/packages/api/src/shared/domain/thematique.schema.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { z } from 'zod'; - -/** - * Schéma zod d'une thématique - */ -export const thematiqueSchema = z.object({ - id: z.number(), - nom: z.string(), -}); - -/** - * Type TS d'une thématique - */ -export type Thematique = z.input; - -/** - * Schéma zod d'une sous thématique avec l'objet de la thématique - */ -export const sousThematiqueSchema = z.object({ - id: z.number(), - sousThematique: z.string(), - thematique: thematiqueSchema, -}); - -/** - * Type TS d'une sous thématique avec l'objet de la thématique - */ -export type SousThematique = z.input; - -/** - * Schéma zod d'une sous thématique avec l'id de la thématique - */ -export const sousThematiqueSchemaId = z.object({ - id: z.number(), - sousThematique: z.string(), - thematiqueId: z.number(), -}); - -/** - * Type TS d'une sous thématique avec l'id de la thématique - */ -export type SousThematiqueId = z.input; From 84cde3d276c083e40c75eb92dd03e8e72721190b Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Mon, 16 Dec 2024 13:38:12 +0100 Subject: [PATCH 07/33] Delete unused files --- .../indicateur-definition-extended.schema.ts | 36 ------------------- .../domain/plan-action-type.schema.ts | 10 ------ 2 files changed, 46 deletions(-) delete mode 100644 packages/api/src/indicateurs/domain/indicateur-definition-extended.schema.ts delete mode 100644 packages/api/src/plan-actions/domain/plan-action-type.schema.ts diff --git a/packages/api/src/indicateurs/domain/indicateur-definition-extended.schema.ts b/packages/api/src/indicateurs/domain/indicateur-definition-extended.schema.ts deleted file mode 100644 index f36b75444a..0000000000 --- a/packages/api/src/indicateurs/domain/indicateur-definition-extended.schema.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { ficheResumeSchema } from '@/api/plan-actions'; -import { personneSchema, tagSchema } from '@/api/shared/domain'; -import { z } from 'zod'; -import { definitionSchema } from './definition.schema'; -import { valeurSchema } from './valeur.schema'; - -/** - * Schéma zod à fusionner à une définition pour avoir les valeurs - */ -const plusValeur = z.object({ - valeurs: valeurSchema.array(), -}); - -/** - * Schéma zod à fusionner à une définition pour avoir les données annexes aux indicateurs - */ -const plusDetailsCollectivite = z.object({ - services: z.number().array(), // Lise d'id - pilotes: personneSchema.array(), - fiches: ficheResumeSchema.array(), - fichesNonClassees: ficheResumeSchema.array(), - categoriesUtilisateur: tagSchema.array(), -}); - -/** - * Schéma zod d'un indicateur avec toutes les informations annexes liées - */ -export const definitionCompleteSchema = definitionSchema - .merge(plusValeur) - .merge(plusDetailsCollectivite); -/** - * Type TS d'un indicateur avec toutes les informations annexes liées - */ -export type IndicateurDefinitionComplet = z.input< - typeof definitionCompleteSchema ->; diff --git a/packages/api/src/plan-actions/domain/plan-action-type.schema.ts b/packages/api/src/plan-actions/domain/plan-action-type.schema.ts deleted file mode 100644 index cea8732829..0000000000 --- a/packages/api/src/plan-actions/domain/plan-action-type.schema.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { z } from 'zod'; - -export const planActionTypeSchema = z.object({ - id: z.number(), - categorie: z.string(), - type: z.string(), - detail: z.string().nullable(), -}); - -export type PlanActionType = z.input; From 242927827cdb2a21af4d1db18e2b264296080b47 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Mon, 16 Dec 2024 14:10:34 +0100 Subject: [PATCH 08/33] Supprime le schema de `fiche.cibles` du package `api` --- .../ModalAvancementFichesAction.tsx | 4 +- .../src/types/alias.ts | 3 - .../CiblesDropdown/CiblesDropdown.tsx | 12 ++-- .../src/ui/dropdownLists/listesStatiques.ts | 4 +- backend/src/documents/models/annexe.table.ts | 2 +- .../bulk-edit/bulk-edit.router.e2e-spec.ts | 10 ++-- .../src/fiches/bulk-edit/bulk-edit.service.ts | 12 ++-- .../fiche-action-update.e2e-spec.ts | 16 ++--- .../count-by-statut.router.e2e-spec.ts | 2 +- .../count-by-statut.service.ts | 8 +-- .../fiche-action-etape.table.ts | 2 +- .../action-impact-fiche-action.table.ts | 2 +- .../models/fiche-action-action.table.ts | 2 +- .../fiche-action-effet-attendu.table.ts | 2 +- .../fiche-action-financeur-tag.table.ts | 2 +- .../models/fiche-action-indicateur.table.ts | 2 +- .../models/fiche-action-libre-tag.table.ts | 2 +- .../fiches/models/fiche-action-lien.table.ts | 2 +- .../fiches/models/fiche-action-note.table.ts | 2 +- .../models/fiche-action-pilote.table.ts | 2 +- .../models/fiche-action-referent.table.ts | 2 +- .../models/fiche-action-service-tag.table.ts | 2 +- .../models/fiche-action-service.table.ts | 2 +- .../fiche-action-sous-thematique.table.ts | 2 +- .../fiche-action-structure-tag.table.ts | 2 +- .../models/fiche-action-thematique.table.ts | 2 +- .../get-fiches-actions-filter.request.ts | 4 +- .../models/update-fiche-action.request.ts | 14 ++--- backend/src/fiches/services/fiche.service.ts | 16 ++--- .../services/fiches-action-update.service.ts | 8 +-- .../shared/fixtures/fiche-action.fixture.ts | 17 +++--- .../indicateur-filtre.service.ts | 2 +- .../src/panier/models/action-impact.table.ts | 2 +- backend/src/plans/fiches/index.ts | 1 + .../shared/models/fiche-action-axe.table.ts | 2 +- .../shared}/models/fiche-action.table.ts | 60 ++++++++----------- backend/src/shared/index.ts | 2 + .../models/libre-tag.table.ts | 0 .../models/temps-de-mise-en-oeuvre.table.ts | 0 .../domain/fiche-action.schema.ts | 38 ++++++------ .../domain/fetch-options.schema.ts | 5 +- 41 files changed, 133 insertions(+), 143 deletions(-) rename backend/src/{fiches => plans/fiches/shared}/models/fiche-action.table.ts (77%) rename backend/src/{taxonomie => shared}/models/libre-tag.table.ts (100%) rename backend/src/{taxonomie => shared}/models/temps-de-mise-en-oeuvre.table.ts (100%) diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/ModalAvancementFichesAction.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/ModalAvancementFichesAction.tsx index 98ad9e93dd..4e7c35e37c 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/ModalAvancementFichesAction.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/ModalAvancementFichesAction.tsx @@ -14,7 +14,6 @@ import { Filtre } from '@/api/plan-actions/dashboards/collectivite-dashboard/dom import { ModuleFicheActionCountByStatusSelect } from '@/api/plan-actions/dashboards/collectivite-dashboard/domain/module.schema'; import { ModuleDisplaySettings } from '@/app/app/pages/collectivite/TableauDeBord/components/Module'; import { supabaseClient } from '@/app/core-logic/api/supabase'; -import { TFicheActionCibles } from '@/app/types/alias'; import CiblesDropdown from '@/app/ui/dropdownLists/ficheAction/CiblesDropdown/CiblesDropdown'; import PartenairesDropdown from '@/app/ui/dropdownLists/PartenairesDropdown/PartenairesDropdown'; import PersonnesDropdown from '@/app/ui/dropdownLists/PersonnesDropdown/PersonnesDropdown'; @@ -24,6 +23,7 @@ import { } from '@/app/ui/dropdownLists/PersonnesDropdown/utils'; import PlansActionDropdown from '@/app/ui/dropdownLists/PlansActionDropdown'; import ServicesPilotesDropdown from '@/app/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown'; +import { Cible } from '@/backend/plans/fiches'; type Props = ModalProps & { module: ModuleFicheActionCountByStatusSelect; @@ -101,7 +101,7 @@ const ModalAvancementFichesAction = ({ setFiltreState({ ...filtreState, cibles }) } diff --git a/app.territoiresentransitions.react/src/types/alias.ts b/app.territoiresentransitions.react/src/types/alias.ts index 2c949f8868..ecac91c0c6 100644 --- a/app.territoiresentransitions.react/src/types/alias.ts +++ b/app.territoiresentransitions.react/src/types/alias.ts @@ -7,7 +7,6 @@ import { TablesUpdate, Views, } from '@/api'; -import { Cible } from '@/api/plan-actions'; export type TFlatAxe = NonNullableFields>; @@ -63,8 +62,6 @@ export type TPersonne = CompositeTypes<'personne'>; export type TFinanceurMontant = CompositeTypes<'financeur_montant'>; -export type TFicheActionCibles = Cible; - export type TFicheActionNiveauxPriorite = Enums<'fiche_action_niveaux_priorite'>; export type TFicheActionPiliersECI = Enums<'fiche_action_piliers_eci'>; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/CiblesDropdown/CiblesDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/CiblesDropdown/CiblesDropdown.tsx index 546186fa86..266e328606 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/CiblesDropdown/CiblesDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/CiblesDropdown/CiblesDropdown.tsx @@ -1,4 +1,4 @@ -import { TFicheActionCibles } from '@/app/types/alias'; +import { Cible } from '@/backend/plans/fiches'; import { SelectFilter, SelectMultipleProps } from '@/ui'; import { ficheActionCiblesOptions } from '../../listesStatiques'; @@ -6,13 +6,13 @@ type CiblesDropdownProps = Omit< SelectMultipleProps, 'values' | 'onChange' | 'options' > & { - values?: TFicheActionCibles[]; + values?: Cible[]; onChange: ({ cibles, selectedCible, }: { - cibles: TFicheActionCibles[]; - selectedCible: TFicheActionCibles; + cibles: Cible[]; + selectedCible: Cible; }) => void; }; @@ -25,8 +25,8 @@ const CiblesDropdown = (props: CiblesDropdownProps) => { placeholder={props.placeholder ?? 'Sélectionnez une ou plusieurs cibles'} onChange={({ values, selectedValue }) => props.onChange({ - cibles: values as TFicheActionCibles[], - selectedCible: selectedValue as TFicheActionCibles, + cibles: values as Cible[], + selectedCible: selectedValue as Cible, }) } /> diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/listesStatiques.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/listesStatiques.ts index fb90d95bef..08a11ba3d1 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/listesStatiques.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/listesStatiques.ts @@ -1,10 +1,10 @@ import { ParticipationCitoyenne, Statut } from '@/api/plan-actions'; import { ModifiedSince } from '@/api/plan-actions/fiche-resumes.list/domain/fetch-options.schema'; import { - TFicheActionCibles, TFicheActionEcheances, TFicheActionNiveauxPriorite, } from '@/app/types/alias'; +import { Cible } from '@/backend/plans/fiches'; type Options = { value: T; @@ -12,7 +12,7 @@ type Options = { disabled?: boolean; }[]; -export const ficheActionCiblesOptions: Options = [ +export const ficheActionCiblesOptions: Options = [ { value: 'Grand public', label: 'Grand public', diff --git a/backend/src/documents/models/annexe.table.ts b/backend/src/documents/models/annexe.table.ts index abf9fa5a6c..3c2334322a 100644 --- a/backend/src/documents/models/annexe.table.ts +++ b/backend/src/documents/models/annexe.table.ts @@ -1,5 +1,5 @@ import { integer, pgTable } from 'drizzle-orm/pg-core'; -import { ficheActionTable } from '../../fiches/models/fiche-action.table'; +import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; import { DocumentBase } from './document.basetable'; export const annexeTable = pgTable('annexe', { diff --git a/backend/src/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts b/backend/src/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts index 29709aaf85..09c03d8a4d 100644 --- a/backend/src/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts +++ b/backend/src/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts @@ -9,15 +9,15 @@ import { import { getAuthUser } from '../../../test/auth-utils'; import { YOLO_DODO, YULU_DUDU } from '../../../test/test-users.samples'; import { AuthenticatedUser } from '../../auth/models/auth.models'; -import { libreTagTable } from '../../taxonomie/models/libre-tag.table'; -import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; -import { ficheActionLibreTagTable } from '../models/fiche-action-libre-tag.table'; -import { ficheActionPiloteTable } from '../models/fiche-action-pilote.table'; import { FicheActionStatutsEnumType, ficheActionTable, prioriteEnumSchema, -} from '../models/fiche-action.table'; +} from '../../plans/fiches/shared/models/fiche-action.table'; +import { libreTagTable } from '../../taxonomie/models/libre-tag.table'; +import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; +import { ficheActionLibreTagTable } from '../models/fiche-action-libre-tag.table'; +import { ficheActionPiloteTable } from '../models/fiche-action-pilote.table'; type Input = inferProcedureInput; diff --git a/backend/src/fiches/bulk-edit/bulk-edit.service.ts b/backend/src/fiches/bulk-edit/bulk-edit.service.ts index df0e739361..f374fa500b 100644 --- a/backend/src/fiches/bulk-edit/bulk-edit.service.ts +++ b/backend/src/fiches/bulk-edit/bulk-edit.service.ts @@ -1,18 +1,18 @@ +import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; +import { PermissionService } from '@/backend/auth/authorizations/permission.service'; +import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; import { AuthUser } from '@/backend/auth/models/auth.models'; import { DatabaseService } from '@/backend/common'; import { Injectable } from '@nestjs/common'; import { and, inArray, or } from 'drizzle-orm'; import z from 'zod'; -import { ficheActionLibreTagTable } from '../models/fiche-action-libre-tag.table'; -import { ficheActionPiloteTable } from '../models/fiche-action-pilote.table'; import { ficheActionSchema, ficheActionTable, -} from '../models/fiche-action.table'; +} from '../../plans/fiches/shared/models/fiche-action.table'; +import { ficheActionLibreTagTable } from '../models/fiche-action-libre-tag.table'; +import { ficheActionPiloteTable } from '../models/fiche-action-pilote.table'; import { updateFicheActionRequestSchema } from '../models/update-fiche-action.request'; -import { PermissionService } from '@/backend/auth/authorizations/permission.service'; -import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; -import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; @Injectable() export class BulkEditService { diff --git a/backend/src/fiches/controllers/fiche-action-update.e2e-spec.ts b/backend/src/fiches/controllers/fiche-action-update.e2e-spec.ts index a12d675a72..a4ce76b159 100644 --- a/backend/src/fiches/controllers/fiche-action-update.e2e-spec.ts +++ b/backend/src/fiches/controllers/fiche-action-update.e2e-spec.ts @@ -6,6 +6,12 @@ import { getTestApp } from '../../../test/app-utils'; import { getAuthToken } from '../../../test/auth-utils'; import DatabaseService from '../../common/services/database.service'; import { ficheActionAxeTable } from '../../plans/fiches/shared/models/fiche-action-axe.table'; +import { + ciblesEnumSchema, + FicheActionStatutsEnumType, + ficheActionTable, + piliersEciEnumType, +} from '../../plans/fiches/shared/models/fiche-action.table'; import { libreTagTable } from '../../taxonomie/models/libre-tag.table'; import { ficheActionActionTable } from '../models/fiche-action-action.table'; import { ficheActionEffetAttenduTable } from '../models/fiche-action-effet-attendu.table'; @@ -20,12 +26,6 @@ import { ficheActionServiceTagTable } from '../models/fiche-action-service.table import { ficheActionSousThematiqueTable } from '../models/fiche-action-sous-thematique.table'; import { ficheActionStructureTagTable } from '../models/fiche-action-structure-tag.table'; import { ficheActionThematiqueTable } from '../models/fiche-action-thematique.table'; -import { - FicheActionCiblesEnumType, - FicheActionStatutsEnumType, - ficheActionTable, - piliersEciEnumType, -} from '../models/fiche-action.table'; import { UpdateFicheActionRequestType } from '../models/update-fiche-action.request'; import { actionsFixture, @@ -206,8 +206,8 @@ describe('FichesActionUpdateService', () => { objectifs: 'Diminution de 15% de la consommation de feuilles de papier / Indicateurs : Nombre de papiers', cibles: [ - FicheActionCiblesEnumType.GRAND_PUBLIC, - FicheActionCiblesEnumType.ASSOCIATIONS, + ciblesEnumSchema.enum['Grand public'], + ciblesEnumSchema.enum['Associations'], ], ressources: 'Service numérique', financements: 'De 40 000€ à 100 000€', diff --git a/backend/src/fiches/count-by-statut/count-by-statut.router.e2e-spec.ts b/backend/src/fiches/count-by-statut/count-by-statut.router.e2e-spec.ts index e666311c31..c04d300954 100644 --- a/backend/src/fiches/count-by-statut/count-by-statut.router.e2e-spec.ts +++ b/backend/src/fiches/count-by-statut/count-by-statut.router.e2e-spec.ts @@ -1,8 +1,8 @@ import { inferProcedureInput } from '@trpc/server'; import { getTestRouter } from '../../../test/app-utils'; import { getAuthUser } from '../../../test/auth-utils'; +import { FicheActionStatutsEnumType } from '../../plans/fiches/shared/models/fiche-action.table'; import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; -import { FicheActionStatutsEnumType } from '../models/fiche-action.table'; import { AuthenticatedUser } from './../../auth/models/auth.models'; type Input = inferProcedureInput; diff --git a/backend/src/fiches/count-by-statut/count-by-statut.service.ts b/backend/src/fiches/count-by-statut/count-by-statut.service.ts index 36e9f0da01..91fe6e0bcf 100644 --- a/backend/src/fiches/count-by-statut/count-by-statut.service.ts +++ b/backend/src/fiches/count-by-statut/count-by-statut.service.ts @@ -17,14 +17,14 @@ import { getModifiedSinceDate } from '../../common/models/modified-since.enum'; import DatabaseService from '../../common/services/database.service'; import { axeTable } from '../../plans/fiches/shared/models/axe.table'; import { ficheActionAxeTable } from '../../plans/fiches/shared/models/fiche-action-axe.table'; -import { ficheActionPartenaireTagTable } from '../models/fiche-action-partenaire-tag.table'; -import { ficheActionPiloteTable } from '../models/fiche-action-pilote.table'; -import { ficheActionServiceTagTable } from '../models/fiche-action-service.table'; import { FicheActionStatutsEnumType, ficheActionTable, SANS_STATUT_FICHE_ACTION_SYNTHESE_KEY, -} from '../models/fiche-action.table'; +} from '../../plans/fiches/shared/models/fiche-action.table'; +import { ficheActionPartenaireTagTable } from '../models/fiche-action-partenaire-tag.table'; +import { ficheActionPiloteTable } from '../models/fiche-action-pilote.table'; +import { ficheActionServiceTagTable } from '../models/fiche-action-service.table'; import { GetFichesActionFilterRequestType } from '../models/get-fiches-actions-filter.request'; @Injectable() diff --git a/backend/src/fiches/fiche-action-etape/fiche-action-etape.table.ts b/backend/src/fiches/fiche-action-etape/fiche-action-etape.table.ts index bc29238b6d..6bcc0f50c3 100644 --- a/backend/src/fiches/fiche-action-etape/fiche-action-etape.table.ts +++ b/backend/src/fiches/fiche-action-etape/fiche-action-etape.table.ts @@ -3,7 +3,7 @@ import { InferSelectModel } from 'drizzle-orm'; import { boolean, integer, pgTable, serial, text } from 'drizzle-orm/pg-core'; import { createInsertSchema } from 'drizzle-zod'; import { z } from 'zod'; -import { ficheActionTable } from '../models/fiche-action.table'; +import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; export const ficheActionEtapeTable = pgTable('fiche_action_etape', { id: serial('id').primaryKey(), diff --git a/backend/src/fiches/models/action-impact-fiche-action.table.ts b/backend/src/fiches/models/action-impact-fiche-action.table.ts index 667d297653..19b785b35e 100644 --- a/backend/src/fiches/models/action-impact-fiche-action.table.ts +++ b/backend/src/fiches/models/action-impact-fiche-action.table.ts @@ -1,6 +1,6 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { actionImpactTable } from '../../panier/models/action-impact.table'; -import { ficheActionTable } from './fiche-action.table'; +import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; export const actionImpactFicheActionTable = pgTable( 'action_impact_fiche_action', diff --git a/backend/src/fiches/models/fiche-action-action.table.ts b/backend/src/fiches/models/fiche-action-action.table.ts index a2b16c57f3..bc95f0747f 100644 --- a/backend/src/fiches/models/fiche-action-action.table.ts +++ b/backend/src/fiches/models/fiche-action-action.table.ts @@ -1,6 +1,6 @@ import { integer, pgTable, primaryKey, varchar } from 'drizzle-orm/pg-core'; +import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; import { actionRelationTable } from '../../referentiels/models/action-relation.table'; -import { ficheActionTable } from './fiche-action.table'; export const ficheActionActionTable = pgTable( 'fiche_action_action', diff --git a/backend/src/fiches/models/fiche-action-effet-attendu.table.ts b/backend/src/fiches/models/fiche-action-effet-attendu.table.ts index f39a33cd01..cb979e9fbb 100644 --- a/backend/src/fiches/models/fiche-action-effet-attendu.table.ts +++ b/backend/src/fiches/models/fiche-action-effet-attendu.table.ts @@ -1,6 +1,6 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; +import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; import { effetAttenduTable } from '../../taxonomie/models/effet-attendu.table'; -import { ficheActionTable } from './fiche-action.table'; export const ficheActionEffetAttenduTable = pgTable( 'fiche_action_effet_attendu', diff --git a/backend/src/fiches/models/fiche-action-financeur-tag.table.ts b/backend/src/fiches/models/fiche-action-financeur-tag.table.ts index 97280715ae..d2fcef7693 100644 --- a/backend/src/fiches/models/fiche-action-financeur-tag.table.ts +++ b/backend/src/fiches/models/fiche-action-financeur-tag.table.ts @@ -1,5 +1,5 @@ import { integer, pgTable, serial } from 'drizzle-orm/pg-core'; -import { ficheActionTable } from './fiche-action.table'; +import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; import { financeurTagTable } from '../../taxonomie/models/financeur-tag.table'; export const ficheActionFinanceurTagTable = pgTable( diff --git a/backend/src/fiches/models/fiche-action-indicateur.table.ts b/backend/src/fiches/models/fiche-action-indicateur.table.ts index 78534ae02b..e61d10335d 100644 --- a/backend/src/fiches/models/fiche-action-indicateur.table.ts +++ b/backend/src/fiches/models/fiche-action-indicateur.table.ts @@ -1,6 +1,6 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { indicateurDefinitionTable } from '../../indicateurs/models/indicateur-definition.table'; -import { ficheActionTable } from './fiche-action.table'; +import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; export const ficheActionIndicateurTable = pgTable( 'fiche_action_indicateur', diff --git a/backend/src/fiches/models/fiche-action-libre-tag.table.ts b/backend/src/fiches/models/fiche-action-libre-tag.table.ts index f62188990f..6b01fe2fd5 100644 --- a/backend/src/fiches/models/fiche-action-libre-tag.table.ts +++ b/backend/src/fiches/models/fiche-action-libre-tag.table.ts @@ -1,7 +1,7 @@ import { createdAt, createdBy } from '@/backend/utils'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; +import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; import { libreTagTable } from '../../taxonomie/models/libre-tag.table'; -import { ficheActionTable } from './fiche-action.table'; export const ficheActionLibreTagTable = pgTable( 'fiche_action_libre_tag', diff --git a/backend/src/fiches/models/fiche-action-lien.table.ts b/backend/src/fiches/models/fiche-action-lien.table.ts index 56c07b7de0..4e53e4fdf3 100644 --- a/backend/src/fiches/models/fiche-action-lien.table.ts +++ b/backend/src/fiches/models/fiche-action-lien.table.ts @@ -1,5 +1,5 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { ficheActionTable } from './fiche-action.table'; +import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; export const ficheActionLienTable = pgTable( 'fiche_action_lien', diff --git a/backend/src/fiches/models/fiche-action-note.table.ts b/backend/src/fiches/models/fiche-action-note.table.ts index 9238be94f1..39c4b5877e 100644 --- a/backend/src/fiches/models/fiche-action-note.table.ts +++ b/backend/src/fiches/models/fiche-action-note.table.ts @@ -2,13 +2,13 @@ import { InferSelectModel } from 'drizzle-orm'; import { date, integer, pgTable, serial, text } from 'drizzle-orm/pg-core'; import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; import { z } from 'zod'; +import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; import { createdAt, createdBy, modifiedAt, modifiedBy, } from '../../utils/column.utils'; -import { ficheActionTable } from './fiche-action.table'; export const ficheActionNoteTable = pgTable('fiche_action_note', { id: serial('id').primaryKey(), diff --git a/backend/src/fiches/models/fiche-action-pilote.table.ts b/backend/src/fiches/models/fiche-action-pilote.table.ts index 873afc9bfb..9c5748153b 100644 --- a/backend/src/fiches/models/fiche-action-pilote.table.ts +++ b/backend/src/fiches/models/fiche-action-pilote.table.ts @@ -6,8 +6,8 @@ import { uniqueIndex, uuid, } from 'drizzle-orm/pg-core'; +import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; import { personneTagTable } from '../../taxonomie/models/personne-tag.table'; -import { ficheActionTable } from './fiche-action.table'; export const ficheActionPiloteTable = pgTable( 'fiche_action_pilote', diff --git a/backend/src/fiches/models/fiche-action-referent.table.ts b/backend/src/fiches/models/fiche-action-referent.table.ts index 96ef37f5ba..0d1c461799 100644 --- a/backend/src/fiches/models/fiche-action-referent.table.ts +++ b/backend/src/fiches/models/fiche-action-referent.table.ts @@ -1,5 +1,5 @@ import { integer, pgTable, uniqueIndex, uuid } from 'drizzle-orm/pg-core'; -import { ficheActionTable } from './fiche-action.table'; +import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; import { personneTagTable } from '../../taxonomie/models/personne-tag.table'; export const ficheActionReferentTable = pgTable( diff --git a/backend/src/fiches/models/fiche-action-service-tag.table.ts b/backend/src/fiches/models/fiche-action-service-tag.table.ts index c673d87326..30fc5e774d 100644 --- a/backend/src/fiches/models/fiche-action-service-tag.table.ts +++ b/backend/src/fiches/models/fiche-action-service-tag.table.ts @@ -1,6 +1,6 @@ +import { ficheActionTable } from '@/backend/plans/fiches'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { serviceTagTable } from '../../taxonomie/models/service-tag.table'; -import { ficheActionTable } from './fiche-action.table'; export const ficheActionServiceTagTable = pgTable( 'fiche_action_service_tag', diff --git a/backend/src/fiches/models/fiche-action-service.table.ts b/backend/src/fiches/models/fiche-action-service.table.ts index 51f6f36c64..305f2a158b 100644 --- a/backend/src/fiches/models/fiche-action-service.table.ts +++ b/backend/src/fiches/models/fiche-action-service.table.ts @@ -1,6 +1,6 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; +import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; import { serviceTagTable } from '../../taxonomie/models/service-tag.table'; -import { ficheActionTable } from './fiche-action.table'; export const ficheActionServiceTagTable = pgTable( 'fiche_action_service_tag', diff --git a/backend/src/fiches/models/fiche-action-sous-thematique.table.ts b/backend/src/fiches/models/fiche-action-sous-thematique.table.ts index 2219643332..762f25932c 100644 --- a/backend/src/fiches/models/fiche-action-sous-thematique.table.ts +++ b/backend/src/fiches/models/fiche-action-sous-thematique.table.ts @@ -1,6 +1,6 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; +import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; import { sousThematiqueTable } from '../../shared/models/sous-thematique.table'; -import { ficheActionTable } from './fiche-action.table'; export const ficheActionSousThematiqueTable = pgTable( 'fiche_action_sous_thematique', diff --git a/backend/src/fiches/models/fiche-action-structure-tag.table.ts b/backend/src/fiches/models/fiche-action-structure-tag.table.ts index b1ec5236dd..8216ab3258 100644 --- a/backend/src/fiches/models/fiche-action-structure-tag.table.ts +++ b/backend/src/fiches/models/fiche-action-structure-tag.table.ts @@ -1,6 +1,6 @@ +import { ficheActionTable } from '@/backend/plans/fiches'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { structureTagTable } from '../../taxonomie/models/structure-tag.table'; -import { ficheActionTable } from './fiche-action.table'; export const ficheActionStructureTagTable = pgTable( 'fiche_action_structure_tag', diff --git a/backend/src/fiches/models/fiche-action-thematique.table.ts b/backend/src/fiches/models/fiche-action-thematique.table.ts index 4bf2d8ddac..f5ef1e3013 100644 --- a/backend/src/fiches/models/fiche-action-thematique.table.ts +++ b/backend/src/fiches/models/fiche-action-thematique.table.ts @@ -1,6 +1,6 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; +import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; import { thematiqueTable } from '../../shared/models/thematique.table'; -import { ficheActionTable } from './fiche-action.table'; export const ficheActionThematiqueTable = pgTable( 'fiche_action_thematique', diff --git a/backend/src/fiches/models/get-fiches-actions-filter.request.ts b/backend/src/fiches/models/get-fiches-actions-filter.request.ts index c71d1dc1c2..0373575b5b 100644 --- a/backend/src/fiches/models/get-fiches-actions-filter.request.ts +++ b/backend/src/fiches/models/get-fiches-actions-filter.request.ts @@ -1,13 +1,13 @@ import { z } from 'zod'; import { modifiedSinceSchema } from '../../common/models/modified-since.enum'; -import { ficheActionCiblesEnumSchema } from './fiche-action.table'; +import { ciblesEnumSchema } from '../../plans/fiches/shared/models/fiche-action.table'; export const getFichesActionFilterRequestSchema = z .object({ cibles: z .string() .transform((value) => value.split(',')) - .pipe(ficheActionCiblesEnumSchema.array()) + .pipe(ciblesEnumSchema.array()) .optional() .describe('Liste des cibles séparées par des virgules'), partenaire_tag_ids: z diff --git a/backend/src/fiches/models/update-fiche-action.request.ts b/backend/src/fiches/models/update-fiche-action.request.ts index f6db13c770..feeebcf919 100644 --- a/backend/src/fiches/models/update-fiche-action.request.ts +++ b/backend/src/fiches/models/update-fiche-action.request.ts @@ -1,6 +1,12 @@ import z from 'zod'; import { indicateurDefinitionSchema } from '../../indicateurs/models/indicateur-definition.table'; import { axeSchema } from '../../plans/fiches/shared/models/axe.table'; +import { + ciblesEnumSchema, + ficheActionSchema, + piliersEciEnumType, + updateFicheActionSchema, +} from '../../plans/fiches/shared/models/fiche-action.table'; import { actionRelationSchema } from '../../referentiels/models/action-relation.table'; import { sousThematiqueSchema } from '../../shared/models/sous-thematique.table'; import { thematiqueSchema } from '../../shared/models/thematique.table'; @@ -10,12 +16,6 @@ import { libreTagSchema } from '../../taxonomie/models/libre-tag.table'; import { partenaireTagSchema } from '../../taxonomie/models/partenaire-tag.table'; import { serviceTagSchema } from '../../taxonomie/models/service-tag.table'; import { structureTagSchema } from '../../taxonomie/models/structure-tag.table'; -import { - FicheActionCiblesEnumType, - ficheActionSchema, - piliersEciEnumType, - updateFicheActionSchema, -} from './fiche-action.table'; // There is no proper Pilote or Referent tables, so we use a custom schema here export const personneSchema = z.object({ @@ -42,7 +42,7 @@ export const updateFicheActionRequestSchema = updateFicheActionSchema.extend({ ) .array() .nullish(), - cibles: z.nativeEnum(FicheActionCiblesEnumType).array().nullish(), + cibles: ciblesEnumSchema.array().nullish(), // Overriding because numeric and timestamp types are not properly converted otherwise (a bug with zod/drizzle ?) budgetPrevisionnel: z .union([z.string(), z.number()]) diff --git a/backend/src/fiches/services/fiche.service.ts b/backend/src/fiches/services/fiche.service.ts index 6711f8ef40..af2cecbdc4 100644 --- a/backend/src/fiches/services/fiche.service.ts +++ b/backend/src/fiches/services/fiche.service.ts @@ -1,7 +1,15 @@ +import { dcpTable } from '@/backend/auth'; +import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; +import { PermissionService } from '@/backend/auth/authorizations/permission.service'; +import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; import { Injectable, Logger } from '@nestjs/common'; import { aliasedTable, desc, eq } from 'drizzle-orm'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import DatabaseService from '../../common/services/database.service'; +import { + CreateFicheActionType, + ficheActionTable, +} from '../../plans/fiches/shared/models/fiche-action.table'; import TagService from '../../taxonomie/services/tag.service'; import { actionImpactFicheActionTable } from '../models/action-impact-fiche-action.table'; import { ficheActionActionTable } from '../models/fiche-action-action.table'; @@ -11,14 +19,6 @@ import { ficheActionNoteTable } from '../models/fiche-action-note.table'; import { ficheActionPartenaireTagTable } from '../models/fiche-action-partenaire-tag.table'; import { ficheActionSousThematiqueTable } from '../models/fiche-action-sous-thematique.table'; import { ficheActionThematiqueTable } from '../models/fiche-action-thematique.table'; -import { - CreateFicheActionType, - ficheActionTable, -} from '../models/fiche-action.table'; -import { dcpTable } from '@/backend/auth'; -import { PermissionService } from '@/backend/auth/authorizations/permission.service'; -import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; -import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; @Injectable() export default class FicheService { diff --git a/backend/src/fiches/services/fiches-action-update.service.ts b/backend/src/fiches/services/fiches-action-update.service.ts index 7a644a60e9..dd1cdc3c84 100644 --- a/backend/src/fiches/services/fiches-action-update.service.ts +++ b/backend/src/fiches/services/fiches-action-update.service.ts @@ -15,6 +15,10 @@ import { toCamel } from 'postgres'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import DatabaseService from '../../common/services/database.service'; import { ficheActionAxeTable } from '../../plans/fiches/shared/models/fiche-action-axe.table'; +import { + ficheActionTable, + updateFicheActionSchema, +} from '../../plans/fiches/shared/models/fiche-action.table'; import { buildConflictUpdateColumns } from '../../utils/drizzle/conflict.utils'; import { ficheActionActionTable } from '../models/fiche-action-action.table'; import { ficheActionEffetAttenduTable } from '../models/fiche-action-effet-attendu.table'; @@ -33,10 +37,6 @@ import { ficheActionServiceTagTable } from '../models/fiche-action-service-tag.t import { ficheActionSousThematiqueTable } from '../models/fiche-action-sous-thematique.table'; import { ficheActionStructureTagTable } from '../models/fiche-action-structure-tag.table'; import { ficheActionThematiqueTable } from '../models/fiche-action-thematique.table'; -import { - ficheActionTable, - updateFicheActionSchema, -} from '../models/fiche-action.table'; import { UpdateFicheActionRequestType } from '../models/update-fiche-action.request'; import FicheService from './fiche.service'; diff --git a/backend/src/fiches/shared/fixtures/fiche-action.fixture.ts b/backend/src/fiches/shared/fixtures/fiche-action.fixture.ts index 8793c2a715..18c94388b6 100644 --- a/backend/src/fiches/shared/fixtures/fiche-action.fixture.ts +++ b/backend/src/fiches/shared/fixtures/fiche-action.fixture.ts @@ -1,24 +1,21 @@ import { + ciblesEnumSchema, CreateFicheActionType, - FicheActionCiblesEnumType, - FicheActionStatutsEnumType, - piliersEciEnumType, -} from '../../models/fiche-action.table'; + piliersEciEnumSchema, + statutsEnumSchema, +} from '../../../plans/fiches/shared/models/fiche-action.table'; export const ficheActionFixture: CreateFicheActionType = { id: 9999, titre: 'Test Fiche Action', description: 'patati', - piliersEci: [piliersEciEnumType.APPROVISIONNEMENT_DURABLE], + piliersEci: [piliersEciEnumSchema.enum['Approvisionnement durable']], objectifs: 'Diminution des émissions de carbone', - cibles: [ - FicheActionCiblesEnumType.GRAND_PUBLIC_ET_ASSOCIATIONS, - FicheActionCiblesEnumType.AGENTS, - ], + cibles: [ciblesEnumSchema.enum.Agents, ciblesEnumSchema.enum['Grand public']], ressources: 'Service digitaux', financements: '100 000€', budgetPrevisionnel: '35000', - statut: FicheActionStatutsEnumType.EN_PAUSE, + statut: statutsEnumSchema.enum['En pause'], priorite: 'Moyen', dateDebut: null, dateFin: null, diff --git a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts index cbc6ff7ac6..afb3041fb4 100644 --- a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts +++ b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts @@ -11,7 +11,7 @@ import { groupementCollectiviteTable } from '../../collectivites/models/groupeme import CollectivitesService from '../../collectivites/services/collectivites.service'; import DatabaseService from '../../common/services/database.service'; import { ficheActionIndicateurTable } from '../../fiches/models/fiche-action-indicateur.table'; -import { ficheActionTable } from '../../fiches/models/fiche-action.table'; +import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; import { categorieTagTable } from '../../taxonomie/models/categorie-tag.table'; import { serviceTagTable } from '../../taxonomie/models/service-tag.table'; import { indicateurActionTable } from '../models/indicateur-action.table'; diff --git a/backend/src/panier/models/action-impact.table.ts b/backend/src/panier/models/action-impact.table.ts index d860e7c866..bb4d069e27 100644 --- a/backend/src/panier/models/action-impact.table.ts +++ b/backend/src/panier/models/action-impact.table.ts @@ -11,6 +11,7 @@ import { import { createSelectSchema } from 'drizzle-zod'; import { z } from 'zod'; import { lienSchema, lienType } from '../../documents/models/document-lien.dto'; +import { tempsDeMiseEnOeuvreTable } from '../../shared/models/temps-de-mise-en-oeuvre.table'; import { thematiqueSchema, ThematiqueType, @@ -19,7 +20,6 @@ import { categorieFNVSchema, CategorieFNVType, } from '../../taxonomie/models/categorie-fnv.table'; -import { tempsDeMiseEnOeuvreTable } from '../../taxonomie/models/temps-de-mise-en-oeuvre.table'; import { actionImpactFourchetteBudgetaireTable } from './action-impact-fourchette-budgetaire.table'; import { actionImpactTierTable } from './action-impact-tier.table'; diff --git a/backend/src/plans/fiches/index.ts b/backend/src/plans/fiches/index.ts index a6fa60282c..f3346f7ea1 100644 --- a/backend/src/plans/fiches/index.ts +++ b/backend/src/plans/fiches/index.ts @@ -1,3 +1,4 @@ export * from './shared/models/axe.table'; +export * from './shared/models/fiche-action.table'; export * from './shared/models/plan-action-type-categorie.table'; export * from './shared/models/plan-action-type.table'; diff --git a/backend/src/plans/fiches/shared/models/fiche-action-axe.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-axe.table.ts index 417cee9aeb..88d316e46f 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action-axe.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-axe.table.ts @@ -1,6 +1,6 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { ficheActionTable } from '../../../../fiches/models/fiche-action.table'; import { axeTable } from './axe.table'; +import { ficheActionTable } from './fiche-action.table'; export const ficheActionAxeTable = pgTable( 'fiche_action_axe', diff --git a/backend/src/fiches/models/fiche-action.table.ts b/backend/src/plans/fiches/shared/models/fiche-action.table.ts similarity index 77% rename from backend/src/fiches/models/fiche-action.table.ts rename to backend/src/plans/fiches/shared/models/fiche-action.table.ts index 8934561a22..008844f47a 100644 --- a/backend/src/fiches/models/fiche-action.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action.table.ts @@ -13,14 +13,14 @@ import { } from 'drizzle-orm/pg-core'; import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; import { z } from 'zod'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; -import { tempsDeMiseEnOeuvreTable } from '../../taxonomie/models/temps-de-mise-en-oeuvre.table'; +import { collectiviteTable } from '../../../../collectivites/models/collectivite.table'; +import { tempsDeMiseEnOeuvreTable } from '../../../../shared/models/temps-de-mise-en-oeuvre.table'; import { createdAt, modifiedAt, modifiedBy, TIMESTAMP_OPTIONS, -} from '../../utils/column.utils'; +} from '../../../../utils/column.utils'; export enum piliersEciEnumType { APPROVISIONNEMENT_DURABLE = 'Approvisionnement durable', @@ -83,32 +83,24 @@ export const statutsEnumValues = getEnumValues(FicheActionStatutsEnumType); export const statutsEnumSchema = z.enum(statutsEnumValues); export const statutsPgEnum = pgEnum('fiche_action_statuts', statutsEnumValues); -export enum FicheActionCiblesEnumType { - GRAND_PUBLIC = 'Grand public', - ASSOCIATIONS = 'Associations', - GRAND_PUBLIC_ET_ASSOCIATIONS = 'Grand public et associations', - PUBLIC_SCOLAIRE = 'Public Scolaire', - AUTRES_COLLECTIVITES_DU_TERRITOIRE = 'Autres collectivités du territoire', - ACTEURS_ECONOMIQUES = 'Acteurs économiques', - ACTEURS_ECONOMIQUES_DU_SECTEUR_PRIMAIRE = 'Acteurs économiques du secteur primaire', - ACTEURS_ECONOMIQUES_DU_SECTEUR_SECONDAIRE = 'Acteurs économiques du secteur secondaire', - ACTEURS_ECONOMIQUES_DU_SECTEUR_TERTIAIRE = 'Acteurs économiques du secteur tertiaire', - PARTENAIRES = 'Partenaires', - COLLECTIVITE_ELLE_MEME = 'Collectivité elle-même', - ELUS_LOCAUX = 'Elus locaux', - AGENTS = 'Agents', -} - -export const ficheActionCiblesEnumValues = Object.values( - FicheActionCiblesEnumType -) as [FicheActionCiblesEnumType, ...FicheActionCiblesEnumType[]]; - -export const ficheActionCiblesEnumSchema = z.enum(ficheActionCiblesEnumValues); - -export const ficheActionCiblesEnum = pgEnum( - 'fiche_action_cibles', - ficheActionCiblesEnumValues -); +export const ciblesEnumValues = [ + 'Grand public', + 'Associations', + 'Grand public et associations', + 'Public Scolaire', + 'Autres collectivités du territoire', + 'Acteurs économiques', + 'Acteurs économiques du secteur primaire', + 'Acteurs économiques du secteur secondaire', + 'Acteurs économiques du secteur tertiaire', + 'Partenaires', + 'Collectivité elle-même', + 'Elus locaux', + 'Agents', +] as const; +export const ciblesEnumSchema = z.enum(ciblesEnumValues); +export const ciblesPgEnum = pgEnum('fiche_action_cibles', ciblesEnumValues); +export type Cible = z.infer; export const prioriteEnumValues = ['Élevé', 'Moyen', 'Bas'] as const; export const prioriteEnumSchema = z.enum(prioriteEnumValues); @@ -117,7 +109,7 @@ export const prioritePgEnum = pgEnum( prioriteEnumValues ); -export const ficheActionParticipationCitoyenneTypeEnumValues = [ +export const participationCitoyenneTypeEnumValues = [ 'pas-de-participation', 'information', 'consultation', @@ -132,7 +124,7 @@ export const ficheActionTable = pgTable('fiche_action', { piliersEci: piliersEciPgEnum('piliers_eci').array(), objectifs: varchar('objectifs', { length: 10000 }), cibles: text('cibles', { - enum: ficheActionCiblesEnumValues, + enum: ciblesEnumValues, }).array(), ressources: varchar('ressources', { length: 10000 }), financements: text('financements'), @@ -151,7 +143,7 @@ export const ficheActionTable = pgTable('fiche_action', { participationCitoyenne: text('participation_citoyenne'), participationCitoyenneType: varchar('participation_citoyenne_type', { length: 30, - enum: ficheActionParticipationCitoyenneTypeEnumValues, + enum: participationCitoyenneTypeEnumValues, }), tempsDeMiseEnOeuvre: integer('temps_de_mise_en_oeuvre_id').references( () => tempsDeMiseEnOeuvreTable.niveau @@ -172,14 +164,14 @@ export const ficheActionSchema = createSelectSchema(ficheActionTable, { // Overriding array types as a workaround for drizzle-zod parsing issue // See https://github.com/drizzle-team/drizzle-orm/issues/1609 piliersEci: z.array(piliersEciEnumSchema), - cibles: z.array(ficheActionCiblesEnumSchema), + cibles: z.array(ciblesEnumSchema), }); export const createFicheActionSchema = createInsertSchema(ficheActionTable, { // Overriding array types as a workaround for drizzle-zod parsing issue // See https://github.com/drizzle-team/drizzle-orm/issues/1609 piliersEci: z.array(piliersEciEnumSchema), - cibles: z.array(ficheActionCiblesEnumSchema), + cibles: z.array(ciblesEnumSchema), }); export const updateFicheActionSchema = createFicheActionSchema diff --git a/backend/src/shared/index.ts b/backend/src/shared/index.ts index 81eaae0756..5f99f7bccc 100644 --- a/backend/src/shared/index.ts +++ b/backend/src/shared/index.ts @@ -1,2 +1,4 @@ +export * from './models/libre-tag.table'; export * from './models/sous-thematique.table'; +export * from './models/temps-de-mise-en-oeuvre.table'; export * from './models/thematique.table'; diff --git a/backend/src/taxonomie/models/libre-tag.table.ts b/backend/src/shared/models/libre-tag.table.ts similarity index 100% rename from backend/src/taxonomie/models/libre-tag.table.ts rename to backend/src/shared/models/libre-tag.table.ts diff --git a/backend/src/taxonomie/models/temps-de-mise-en-oeuvre.table.ts b/backend/src/shared/models/temps-de-mise-en-oeuvre.table.ts similarity index 100% rename from backend/src/taxonomie/models/temps-de-mise-en-oeuvre.table.ts rename to backend/src/shared/models/temps-de-mise-en-oeuvre.table.ts diff --git a/packages/api/src/plan-actions/domain/fiche-action.schema.ts b/packages/api/src/plan-actions/domain/fiche-action.schema.ts index e40325e3ec..50f1bf3dbe 100644 --- a/packages/api/src/plan-actions/domain/fiche-action.schema.ts +++ b/packages/api/src/plan-actions/domain/fiche-action.schema.ts @@ -2,7 +2,7 @@ import { personneSchema } from '@/api/collectivites'; import { indicateurListItemSchema } from '@/api/indicateurs/domain'; import { actionSchema } from '@/api/referentiel'; import { tagSchema } from '@/api/shared/domain'; -import { axeSchema } from '@/backend/plans/fiches'; +import { axeSchema, ciblesEnumSchema } from '@/backend/plans/fiches'; import { sousThematiqueSchema, thematiqueSchema } from '@/backend/shared'; import { z } from 'zod'; @@ -25,23 +25,23 @@ export const niveauPrioriteSchema = z.enum(['Élevé', 'Moyen', 'Bas']); export type NiveauPriorite = z.infer; -export const cibleSchema = z.enum([ - 'Grand public', - 'Associations', - 'Grand public et associations', - 'Public Scolaire', - 'Autres collectivités du territoire', - 'Acteurs économiques', - 'Acteurs économiques du secteur primaire', - 'Acteurs économiques du secteur secondaire', - 'Acteurs économiques du secteur tertiaire', - 'Partenaires', - 'Collectivité elle-même', - 'Elus locaux', - 'Agents', -]); - -export type Cible = z.infer; +// export const cibleSchema = z.enum([ +// 'Grand public', +// 'Associations', +// 'Grand public et associations', +// 'Public Scolaire', +// 'Autres collectivités du territoire', +// 'Acteurs économiques', +// 'Acteurs économiques du secteur primaire', +// 'Acteurs économiques du secteur secondaire', +// 'Acteurs économiques du secteur tertiaire', +// 'Partenaires', +// 'Collectivité elle-même', +// 'Elus locaux', +// 'Agents', +// ]); + +// export type Cible = z.infer; export const participationCitoyenneTypeSchema = z.enum([ 'pas-de-participation', @@ -108,7 +108,7 @@ export const ficheActionSchema = z.object({ .or(z.string().datetime({ offset: true })) .nullish(), niveauPriorite: niveauPrioriteSchema.nullish(), - cibles: cibleSchema.array().nullish(), + cibles: ciblesEnumSchema.array().nullish(), restreint: z.boolean().nullish(), resultatsAttendus: effetsAttendus.array().nullish(), objectifs: z.string().nullish(), diff --git a/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts b/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts index eacfb6c140..6792004c19 100644 --- a/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts +++ b/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts @@ -1,7 +1,8 @@ +import { ciblesEnumSchema } from '@/backend/plans/fiches'; import { getPaginationSchema } from '@/backend/utils'; import { z } from 'zod'; import { filtreRessourceLieesSchema } from '../../../collectivites/shared/domain/filtre-ressource-liees.schema'; -import { cibleSchema, niveauPrioriteSchema, statutSchema } from '../../domain'; +import { niveauPrioriteSchema, statutSchema } from '../../domain'; export const modifiedSinceSchema = z.enum([ 'last-90-days', @@ -15,7 +16,7 @@ export type ModifiedSince = z.infer; export const filtreSpecifiqueSchema = z.object({ statuts: statutSchema.array().optional(), priorites: niveauPrioriteSchema.array().optional(), - cibles: cibleSchema.array().optional(), + cibles: ciblesEnumSchema.array().optional(), modifiedSince: modifiedSinceSchema.optional(), texteNomOuDescription: z.string().optional(), budgetPrevisionnel: z.coerce.boolean().default(false).optional(), From f30f8cb267d20467db4d329c12263d08c000fc40 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Mon, 16 Dec 2024 14:49:42 +0100 Subject: [PATCH 09/33] Supprime le schema de `fiche.priorite` du package `api` --- .../ActionsGroupees/EditionPriorite.tsx | 4 +-- .../PlanActionFiltres/FiltrePriorites.tsx | 8 ++--- .../priorites/PrioritesFilterDropdown.tsx | 16 ++++------ .../priorites/PrioritesSelectDropdown.tsx | 12 +++---- .../src/ui/dropdownLists/listesStatiques.ts | 18 ++++------- .../bulk-edit/bulk-edit.router.e2e-spec.ts | 2 +- .../fiche-action-update.e2e-spec.ts | 2 +- .../models/fiche-action-libre-tag.table.ts | 2 +- .../models/update-fiche-action.request.ts | 2 +- .../shared/models/fiche-action.table.ts | 2 ++ .../models/tag.table-base.ts | 0 .../taxonomie/models/categorie-tag.table.ts | 2 +- .../taxonomie/models/financeur-tag.table.ts | 2 +- .../taxonomie/models/partenaire-tag.table.ts | 2 +- .../taxonomie/models/personne-tag.table.ts | 2 +- .../src/taxonomie/models/service-tag.table.ts | 2 +- .../taxonomie/models/structure-tag.table.ts | 2 +- backend/src/taxonomie/services/tag.service.ts | 32 +++++++++---------- .../domain/fiche-action.schema.ts | 12 ++++--- .../domain/fetch-options.schema.ts | 6 ++-- 20 files changed, 64 insertions(+), 66 deletions(-) rename backend/src/{taxonomie => shared}/models/tag.table-base.ts (100%) diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionPriorite.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionPriorite.tsx index d9599be7d0..aaa0304aa0 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionPriorite.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionPriorite.tsx @@ -1,6 +1,6 @@ -import { NiveauPriorite } from '@/api/plan-actions'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; import PrioritesSelectDropdown from '@/app/ui/dropdownLists/ficheAction/priorites/PrioritesSelectDropdown'; +import { Priorite } from '@/backend/plans/fiches'; import { Button, Field, useEventTracker } from '@/ui'; import { OpenState } from '@/ui/utils/types'; import { useState } from 'react'; @@ -16,7 +16,7 @@ const ModaleEditionPriorite = ({ openState, selectedIds, }: ModaleEditionPrioriteProps) => { - const [priorite, setPriorite] = useState(); + const [priorite, setPriorite] = useState(); const collectiviteId = useCollectiviteId()!; const tracker = useEventTracker('app/actions-groupees-fiches-action'); diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/PlanActionFiltres/FiltrePriorites.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/PlanActionFiltres/FiltrePriorites.tsx index 8275115c66..bbb1a73105 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/PlanActionFiltres/FiltrePriorites.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/PlanActionFiltres/FiltrePriorites.tsx @@ -1,5 +1,5 @@ -import { NiveauPriorite } from '@/api/plan-actions'; import { TOption } from '@/app/ui/shared/select/commons'; +import { Priorite } from '@/backend/plans/fiches'; import { Field, OptionValue, SelectFilter } from '@/ui'; import { ficheActionNiveauPrioriteOptions } from '../../../../../../ui/dropdownLists/listesStatiques'; import BadgePriorite from '../../components/BadgePriorite'; @@ -25,7 +25,7 @@ const FiltrePriorites = ({ filters, setFilters }: TFiltreProps) => { delete newFilters.sans_niveau; return { ...newFilters, - priorites: priorites as NiveauPriorite[], + priorites: priorites as Priorite[], }; } else { delete newFilters.priorites; @@ -34,7 +34,7 @@ const FiltrePriorites = ({ filters, setFilters }: TFiltreProps) => { } else { return { ...newFilters, - priorites: priorites as NiveauPriorite[], + priorites: priorites as Priorite[], }; } }; @@ -54,7 +54,7 @@ const FiltrePriorites = ({ filters, setFilters }: TFiltreProps) => { item.value === SANS_PRIORITE ? ( Non priorisé ) : ( - + ) } disabled={options.length === 0} diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/priorites/PrioritesFilterDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/priorites/PrioritesFilterDropdown.tsx index 8ae93dc0b2..111851acad 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/priorites/PrioritesFilterDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/priorites/PrioritesFilterDropdown.tsx @@ -1,16 +1,16 @@ -import { NiveauPriorite } from '@/api/plan-actions'; import BadgePriorite from '@/app/app/pages/collectivite/PlansActions/components/BadgePriorite'; import { ficheActionNiveauPrioriteOptions } from '@/app/ui/dropdownLists/listesStatiques'; +import { Priorite } from '@/backend/plans/fiches'; import { SelectFilter, SelectMultipleProps } from '@/ui'; type Props = Omit & { - values?: NiveauPriorite[]; + values?: Priorite[]; onChange: ({ priorites, selectedPriorites, }: { - priorites: NiveauPriorite[]; - selectedPriorites: NiveauPriorite; + priorites: Priorite[]; + selectedPriorites: Priorite; }) => void; }; @@ -22,13 +22,11 @@ const PrioritesFilterDropdown = (props: Props) => { options={ficheActionNiveauPrioriteOptions} onChange={({ values, selectedValue }) => props.onChange({ - priorites: values as NiveauPriorite[], - selectedPriorites: selectedValue as NiveauPriorite, + priorites: values as Priorite[], + selectedPriorites: selectedValue as Priorite, }) } - customItem={(item) => ( - - )} + customItem={(item) => } /> ); }; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/priorites/PrioritesSelectDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/priorites/PrioritesSelectDropdown.tsx index 802bafc00e..5dd06b23d0 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/priorites/PrioritesSelectDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/priorites/PrioritesSelectDropdown.tsx @@ -1,11 +1,11 @@ -import { NiveauPriorite } from '@/api/plan-actions'; import BadgePriorite from '@/app/app/pages/collectivite/PlansActions/components/BadgePriorite'; import { ficheActionNiveauPrioriteOptions } from '@/app/ui/dropdownLists/listesStatiques'; +import { Priorite } from '@/backend/plans/fiches'; import { Select, SelectProps } from '@/ui'; type Props = Omit & { - values?: NiveauPriorite | null; - onChange: (priorite: NiveauPriorite) => void; + values?: Priorite | null; + onChange: (priorite: Priorite) => void; }; const PrioritesSelectDropdown = (props: Props) => { @@ -15,10 +15,8 @@ const PrioritesSelectDropdown = (props: Props) => { values={props.values ?? undefined} dataTest={props.dataTest ?? 'priorites'} options={ficheActionNiveauPrioriteOptions} - onChange={(priorite) => props.onChange(priorite as NiveauPriorite)} - customItem={(item) => ( - - )} + onChange={(priorite) => props.onChange(priorite as Priorite)} + customItem={(item) => } /> ); }; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/listesStatiques.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/listesStatiques.ts index 08a11ba3d1..e29b0e5124 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/listesStatiques.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/listesStatiques.ts @@ -1,10 +1,7 @@ import { ParticipationCitoyenne, Statut } from '@/api/plan-actions'; import { ModifiedSince } from '@/api/plan-actions/fiche-resumes.list/domain/fetch-options.schema'; -import { - TFicheActionEcheances, - TFicheActionNiveauxPriorite, -} from '@/app/types/alias'; -import { Cible } from '@/backend/plans/fiches'; +import { TFicheActionEcheances } from '@/app/types/alias'; +import { Cible, Priorite } from '@/backend/plans/fiches'; type Options = { value: T; @@ -74,12 +71,11 @@ export const ficheActionStatutOptions: Options = [ { value: 'Bloqué', label: 'Bloqué' }, ]; -export const ficheActionNiveauPrioriteOptions: Options = - [ - { value: 'Élevé', label: 'Élevé' }, - { value: 'Moyen', label: 'Moyen' }, - { value: 'Bas', label: 'Bas' }, - ]; +export const ficheActionNiveauPrioriteOptions: Options = [ + { value: 'Élevé', label: 'Élevé' }, + { value: 'Moyen', label: 'Moyen' }, + { value: 'Bas', label: 'Bas' }, +]; export const ficheActionModifiedSinceOptions: Options = [ { value: 'last-15-days', label: 'les 15 derniers jours' }, diff --git a/backend/src/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts b/backend/src/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts index 09c03d8a4d..19960be4b1 100644 --- a/backend/src/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts +++ b/backend/src/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts @@ -14,7 +14,7 @@ import { ficheActionTable, prioriteEnumSchema, } from '../../plans/fiches/shared/models/fiche-action.table'; -import { libreTagTable } from '../../taxonomie/models/libre-tag.table'; +import { libreTagTable } from '../../shared/models/libre-tag.table'; import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; import { ficheActionLibreTagTable } from '../models/fiche-action-libre-tag.table'; import { ficheActionPiloteTable } from '../models/fiche-action-pilote.table'; diff --git a/backend/src/fiches/controllers/fiche-action-update.e2e-spec.ts b/backend/src/fiches/controllers/fiche-action-update.e2e-spec.ts index a4ce76b159..87af88bcb4 100644 --- a/backend/src/fiches/controllers/fiche-action-update.e2e-spec.ts +++ b/backend/src/fiches/controllers/fiche-action-update.e2e-spec.ts @@ -1,3 +1,4 @@ +import { libreTagTable } from '@/backend/shared'; import { INestApplication } from '@nestjs/common'; import { eq } from 'drizzle-orm'; import { default as request } from 'supertest'; @@ -12,7 +13,6 @@ import { ficheActionTable, piliersEciEnumType, } from '../../plans/fiches/shared/models/fiche-action.table'; -import { libreTagTable } from '../../taxonomie/models/libre-tag.table'; import { ficheActionActionTable } from '../models/fiche-action-action.table'; import { ficheActionEffetAttenduTable } from '../models/fiche-action-effet-attendu.table'; import { ficheActionFinanceurTagTable } from '../models/fiche-action-financeur-tag.table'; diff --git a/backend/src/fiches/models/fiche-action-libre-tag.table.ts b/backend/src/fiches/models/fiche-action-libre-tag.table.ts index 6b01fe2fd5..34d6ac476c 100644 --- a/backend/src/fiches/models/fiche-action-libre-tag.table.ts +++ b/backend/src/fiches/models/fiche-action-libre-tag.table.ts @@ -1,7 +1,7 @@ +import { libreTagTable } from '@/backend/shared'; import { createdAt, createdBy } from '@/backend/utils'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; -import { libreTagTable } from '../../taxonomie/models/libre-tag.table'; export const ficheActionLibreTagTable = pgTable( 'fiche_action_libre_tag', diff --git a/backend/src/fiches/models/update-fiche-action.request.ts b/backend/src/fiches/models/update-fiche-action.request.ts index feeebcf919..32315369f3 100644 --- a/backend/src/fiches/models/update-fiche-action.request.ts +++ b/backend/src/fiches/models/update-fiche-action.request.ts @@ -1,3 +1,4 @@ +import { libreTagSchema } from '@/backend/shared'; import z from 'zod'; import { indicateurDefinitionSchema } from '../../indicateurs/models/indicateur-definition.table'; import { axeSchema } from '../../plans/fiches/shared/models/axe.table'; @@ -12,7 +13,6 @@ import { sousThematiqueSchema } from '../../shared/models/sous-thematique.table' import { thematiqueSchema } from '../../shared/models/thematique.table'; import { effetAttenduSchema } from '../../taxonomie/models/effet-attendu.table'; import { financeurTagSchema } from '../../taxonomie/models/financeur-tag.table'; -import { libreTagSchema } from '../../taxonomie/models/libre-tag.table'; import { partenaireTagSchema } from '../../taxonomie/models/partenaire-tag.table'; import { serviceTagSchema } from '../../taxonomie/models/service-tag.table'; import { structureTagSchema } from '../../taxonomie/models/structure-tag.table'; diff --git a/backend/src/plans/fiches/shared/models/fiche-action.table.ts b/backend/src/plans/fiches/shared/models/fiche-action.table.ts index 008844f47a..8168361b36 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action.table.ts @@ -82,6 +82,7 @@ export const SANS_STATUT_FICHE_ACTION_SYNTHESE_KEY = 'Sans statut'; export const statutsEnumValues = getEnumValues(FicheActionStatutsEnumType); export const statutsEnumSchema = z.enum(statutsEnumValues); export const statutsPgEnum = pgEnum('fiche_action_statuts', statutsEnumValues); +export type Statut = z.infer; export const ciblesEnumValues = [ 'Grand public', @@ -108,6 +109,7 @@ export const prioritePgEnum = pgEnum( 'fiche_action_niveaux_priorite', prioriteEnumValues ); +export type Priorite = z.infer; export const participationCitoyenneTypeEnumValues = [ 'pas-de-participation', diff --git a/backend/src/taxonomie/models/tag.table-base.ts b/backend/src/shared/models/tag.table-base.ts similarity index 100% rename from backend/src/taxonomie/models/tag.table-base.ts rename to backend/src/shared/models/tag.table-base.ts diff --git a/backend/src/taxonomie/models/categorie-tag.table.ts b/backend/src/taxonomie/models/categorie-tag.table.ts index 7e44f7d9a6..c6e016504a 100644 --- a/backend/src/taxonomie/models/categorie-tag.table.ts +++ b/backend/src/taxonomie/models/categorie-tag.table.ts @@ -1,6 +1,6 @@ import { boolean, integer, pgTable } from 'drizzle-orm/pg-core'; +import { tagTableBase } from '../../shared/models/tag.table-base'; import { createdAt, createdBy } from '../../utils/column.utils'; -import { tagTableBase } from './tag.table-base'; export const categorieTagTable = pgTable('categorie_tag', { ...tagTableBase, diff --git a/backend/src/taxonomie/models/financeur-tag.table.ts b/backend/src/taxonomie/models/financeur-tag.table.ts index 0bf4544e0d..446aaa2385 100644 --- a/backend/src/taxonomie/models/financeur-tag.table.ts +++ b/backend/src/taxonomie/models/financeur-tag.table.ts @@ -1,6 +1,6 @@ import { pgTable, uniqueIndex } from 'drizzle-orm/pg-core'; -import { tagTableBase } from './tag.table-base'; import { createSelectSchema } from 'drizzle-zod'; +import { tagTableBase } from '../../shared/models/tag.table-base'; export const financeurTagTable = pgTable( 'financeur_tag', diff --git a/backend/src/taxonomie/models/partenaire-tag.table.ts b/backend/src/taxonomie/models/partenaire-tag.table.ts index 43e999a041..8ef1bb2f00 100644 --- a/backend/src/taxonomie/models/partenaire-tag.table.ts +++ b/backend/src/taxonomie/models/partenaire-tag.table.ts @@ -1,6 +1,6 @@ import { pgTable, uniqueIndex } from 'drizzle-orm/pg-core'; -import { tagTableBase } from './tag.table-base'; import { createSelectSchema } from 'drizzle-zod'; +import { tagTableBase } from '../../shared/models/tag.table-base'; export const partenaireTagTable = pgTable( 'partenaire_tag', diff --git a/backend/src/taxonomie/models/personne-tag.table.ts b/backend/src/taxonomie/models/personne-tag.table.ts index 009ed584cc..59accd5d62 100644 --- a/backend/src/taxonomie/models/personne-tag.table.ts +++ b/backend/src/taxonomie/models/personne-tag.table.ts @@ -1,5 +1,5 @@ import { pgTable, uniqueIndex } from 'drizzle-orm/pg-core'; -import { tagTableBase } from './tag.table-base'; +import { tagTableBase } from '../../shared/models/tag.table-base'; export const personneTagTable = pgTable( 'personne_tag', diff --git a/backend/src/taxonomie/models/service-tag.table.ts b/backend/src/taxonomie/models/service-tag.table.ts index 8546e119fb..409cd8f48b 100644 --- a/backend/src/taxonomie/models/service-tag.table.ts +++ b/backend/src/taxonomie/models/service-tag.table.ts @@ -1,6 +1,6 @@ import { pgTable, uniqueIndex } from 'drizzle-orm/pg-core'; import { createSelectSchema } from 'drizzle-zod'; -import { tagTableBase } from './tag.table-base'; +import { tagTableBase } from '../../shared/models/tag.table-base'; export const serviceTagTable = pgTable('service_tag', tagTableBase, (table) => { return { diff --git a/backend/src/taxonomie/models/structure-tag.table.ts b/backend/src/taxonomie/models/structure-tag.table.ts index 0a5fd9415a..bd63181ae7 100644 --- a/backend/src/taxonomie/models/structure-tag.table.ts +++ b/backend/src/taxonomie/models/structure-tag.table.ts @@ -1,6 +1,6 @@ import { pgTable, uniqueIndex } from 'drizzle-orm/pg-core'; -import { tagTableBase } from './tag.table-base'; import { createSelectSchema } from 'drizzle-zod'; +import { tagTableBase } from '../../shared/models/tag.table-base'; export const structureTagTable = pgTable( 'structure_tag', diff --git a/backend/src/taxonomie/services/tag.service.ts b/backend/src/taxonomie/services/tag.service.ts index 7aa3577538..692bf0362e 100644 --- a/backend/src/taxonomie/services/tag.service.ts +++ b/backend/src/taxonomie/services/tag.service.ts @@ -1,15 +1,15 @@ +import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; +import { PermissionService } from '@/backend/auth/authorizations/permission.service'; +import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; +import CollectivitesService from '@/backend/collectivites/services/collectivites.service'; import { Injectable, Logger } from '@nestjs/common'; -import { and, eq, or, isNull, inArray } from 'drizzle-orm'; +import { and, eq, inArray, isNull, or } from 'drizzle-orm'; +import { AuthenticatedUser } from '../../auth/models/auth.models'; +import { groupementCollectiviteTable } from '../../collectivites/models/groupement-collectivite.table'; import DatabaseService from '../../common/services/database.service'; -import { partenaireTagTable } from '../models/partenaire-tag.table'; +import { TagType } from '../../shared/models/tag.table-base'; import { categorieTagTable } from '../models/categorie-tag.table'; -import { groupementCollectiviteTable } from '../../collectivites/models/groupement-collectivite.table'; -import { TagType } from '../models/tag.table-base'; -import { AuthenticatedUser } from '../../auth/models/auth.models'; -import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; -import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; -import CollectivitesService from '../../collectivites/services/collectivites.service'; -import { PermissionService } from '@/backend/auth/authorizations/permission.service'; +import { partenaireTagTable } from '../models/partenaire-tag.table'; @Injectable() export default class TagService { @@ -97,11 +97,11 @@ export default class TagService { .from(categorieTagTable) .where( withPredefinedTags - // Récupère les catégories - // - propres à la collectivité - // - propres aux groupements de la collectivité - // - prédéfinies visibles par TeT - ? and( + ? // Récupère les catégories + // - propres à la collectivité + // - propres aux groupements de la collectivité + // - prédéfinies visibles par TeT + and( or( and( isNull(categorieTagTable.collectiviteId), @@ -112,8 +112,8 @@ export default class TagService { ), eq(categorieTagTable.visible, true) ) - // Récupère seulement les catégories propres à la collectivité - : eq(categorieTagTable.collectiviteId, collectiviteId) + : // Récupère seulement les catégories propres à la collectivité + eq(categorieTagTable.collectiviteId, collectiviteId) ); } } diff --git a/packages/api/src/plan-actions/domain/fiche-action.schema.ts b/packages/api/src/plan-actions/domain/fiche-action.schema.ts index 50f1bf3dbe..ae55b7e6a1 100644 --- a/packages/api/src/plan-actions/domain/fiche-action.schema.ts +++ b/packages/api/src/plan-actions/domain/fiche-action.schema.ts @@ -2,7 +2,11 @@ import { personneSchema } from '@/api/collectivites'; import { indicateurListItemSchema } from '@/api/indicateurs/domain'; import { actionSchema } from '@/api/referentiel'; import { tagSchema } from '@/api/shared/domain'; -import { axeSchema, ciblesEnumSchema } from '@/backend/plans/fiches'; +import { + axeSchema, + ciblesEnumSchema, + prioriteEnumSchema, +} from '@/backend/plans/fiches'; import { sousThematiqueSchema, thematiqueSchema } from '@/backend/shared'; import { z } from 'zod'; @@ -21,9 +25,9 @@ export const statutSchema = z.enum([ export type Statut = z.infer; -export const niveauPrioriteSchema = z.enum(['Élevé', 'Moyen', 'Bas']); +// export const niveauPrioriteSchema = z.enum(['Élevé', 'Moyen', 'Bas']); -export type NiveauPriorite = z.infer; +// export type NiveauPriorite = z.infer; // export const cibleSchema = z.enum([ // 'Grand public', @@ -107,7 +111,7 @@ export const ficheActionSchema = z.object({ .date() .or(z.string().datetime({ offset: true })) .nullish(), - niveauPriorite: niveauPrioriteSchema.nullish(), + niveauPriorite: prioriteEnumSchema.nullish(), cibles: ciblesEnumSchema.array().nullish(), restreint: z.boolean().nullish(), resultatsAttendus: effetsAttendus.array().nullish(), diff --git a/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts b/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts index 6792004c19..23549bb7ae 100644 --- a/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts +++ b/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts @@ -1,8 +1,8 @@ -import { ciblesEnumSchema } from '@/backend/plans/fiches'; +import { ciblesEnumSchema, prioriteEnumSchema } from '@/backend/plans/fiches'; import { getPaginationSchema } from '@/backend/utils'; import { z } from 'zod'; import { filtreRessourceLieesSchema } from '../../../collectivites/shared/domain/filtre-ressource-liees.schema'; -import { niveauPrioriteSchema, statutSchema } from '../../domain'; +import { statutSchema } from '../../domain'; export const modifiedSinceSchema = z.enum([ 'last-90-days', @@ -15,7 +15,7 @@ export type ModifiedSince = z.infer; export const filtreSpecifiqueSchema = z.object({ statuts: statutSchema.array().optional(), - priorites: niveauPrioriteSchema.array().optional(), + priorites: prioriteEnumSchema.array().optional(), cibles: ciblesEnumSchema.array().optional(), modifiedSince: modifiedSinceSchema.optional(), texteNomOuDescription: z.string().optional(), From 99c645e8b88f3df528e1746736b9d152f2ee92d5 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Mon, 16 Dec 2024 18:59:28 +0100 Subject: [PATCH 10/33] Supprime le schema de `fiche.statut` et `fiche.participationCitoyenne` du package `api` --- .../PlansActions/FicheAction/utils.ts | 2 +- .../PlanActionFiltres/FiltreStatuts.tsx | 2 +- .../PlanAction/list/card/Statuts.tsx | 2 +- .../PlansActions/Synthese/utils.ts | 2 +- .../PlansActions/components/BadgeStatut.tsx | 9 ++-- .../ModuleAvancementFichesAction.tsx | 2 +- .../ModuleAvancementFichesAction/utils.ts | 2 +- .../ParticipationCitoyenneDropdown.tsx | 2 +- .../statuts/StatutsFilterDropdown.tsx | 2 +- .../statuts/StatutsSelectDropdown.tsx | 2 +- .../src/ui/dropdownLists/listesStatiques.ts | 8 +++- .../components/Badge/BadgeStatut.tsx | 4 +- .../shared/models/fiche-action.table.ts | 22 +++++++-- .../domain/fiche-action.schema.ts | 48 ++++++++++--------- .../domain/fetch-options.schema.ts | 9 ++-- 15 files changed, 69 insertions(+), 49 deletions(-) diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/utils.ts b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/utils.ts index 822e8ecf20..0ca1363d1c 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/utils.ts +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/utils.ts @@ -1,4 +1,4 @@ -import { Statut } from '@/api/plan-actions'; +import { Statut } from '@/backend/plans/fiches'; import { preset } from '@/ui'; /** Correspondance entre les statuts et couleurs associées */ diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/PlanActionFiltres/FiltreStatuts.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/PlanActionFiltres/FiltreStatuts.tsx index a34aa2d1f1..5e691ec087 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/PlanActionFiltres/FiltreStatuts.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/PlanActionFiltres/FiltreStatuts.tsx @@ -1,6 +1,6 @@ -import { Statut } from '@/api/plan-actions'; import { TFicheActionStatuts } from '@/app/types/alias'; import { TOption } from '@/app/ui/shared/select/commons'; +import { Statut } from '@/backend/plans/fiches'; import { Field, OptionValue, SelectFilter } from '@/ui'; import { ficheActionStatutOptions } from '../../../../../../ui/dropdownLists/listesStatiques'; import BadgeStatut from '../../components/BadgeStatut'; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/list/card/Statuts.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/list/card/Statuts.tsx index 3f68afad5f..3c42932ab7 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/list/card/Statuts.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/list/card/Statuts.tsx @@ -1,8 +1,8 @@ -import { Statut } from '@/api/plan-actions'; import BadgeStatut from '@/app/app/pages/collectivite/PlansActions/components/BadgeStatut'; import { statutToColor } from '@/app/app/pages/collectivite/PlansActions/FicheAction/utils'; import { ModuleDisplay } from '@/app/app/pages/collectivite/TableauDeBord/components/Module'; import Chart from '@/app/ui/charts/Chart'; +import { Statut } from '@/backend/plans/fiches'; import { Tooltip } from '@/ui'; type Props = { diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/Synthese/utils.ts b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/Synthese/utils.ts index b308b6222a..aea8f22319 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/Synthese/utils.ts +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/Synthese/utils.ts @@ -1,6 +1,6 @@ -import { Statut } from '@/api/plan-actions'; import { statutToColor } from '@/app/app/pages/collectivite/PlansActions/FicheAction/utils'; import { DonutData } from '@/app/ui/charts/Donut/DonutChart'; +import { Statut } from '@/backend/plans/fiches'; import { FiltersKeys } from '../FicheAction/data/filters'; import { TPlanActionTableauDeBord } from './data/usePlanActionTableauDeBord'; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/components/BadgeStatut.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/components/BadgeStatut.tsx index 27f80a38bc..c47dc1d107 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/components/BadgeStatut.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/components/BadgeStatut.tsx @@ -1,11 +1,8 @@ -import { Statut as PlanActionStatut } from '@/api/plan-actions/domain'; +import { Statut } from '@/backend/plans/fiches'; import { Badge, BadgeState } from '@/ui'; import classNames from 'classnames'; -export const statusToState: Record< - PlanActionStatut | 'Sans statut', - BadgeState -> = { +export const statusToState: Record = { 'À venir': 'standard', 'En cours': 'info', Réalisé: 'success', @@ -20,7 +17,7 @@ export const statusToState: Record< type Props = { className?: string; count?: number; - statut: PlanActionStatut | 'Sans statut'; + statut: Statut | 'Sans statut'; // Rend une version plus petite du composant size?: 'sm' | 'md'; }; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/ModuleAvancementFichesAction.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/ModuleAvancementFichesAction.tsx index f66e6b24cc..887569f444 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/ModuleAvancementFichesAction.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/ModuleAvancementFichesAction.tsx @@ -1,4 +1,3 @@ -import { Statut } from '@/api/plan-actions'; import { ModuleFicheActionCountByStatusSelect } from '@/api/plan-actions/dashboards/collectivite-dashboard/domain/module.schema'; import BadgeStatut from '@/app/app/pages/collectivite/PlansActions/components/BadgeStatut'; import { statutToColor } from '@/app/app/pages/collectivite/PlansActions/FicheAction/utils'; @@ -13,6 +12,7 @@ import { TDBViewParam } from '@/app/app/paths'; import { useCurrentCollectivite } from '@/app/core-logic/hooks/useCurrentCollectivite'; import Chart from '@/app/ui/charts/Chart'; import PictoDocument from '@/app/ui/pictogrammes/PictoDocument'; +import { Statut } from '@/backend/plans/fiches'; import { useEventTracker } from '@/ui'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/utils.ts b/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/utils.ts index 1d7b64ab26..ee793833cf 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/utils.ts +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/utils.ts @@ -1,7 +1,7 @@ -import { Statut } from '@/api/plan-actions'; import { Filtre } from '@/api/plan-actions/dashboards/collectivite-dashboard/domain/fiches-synthese.schema'; import { FicheActionParam } from '@/app/app/pages/collectivite/PlansActions/ToutesLesFichesAction/ToutesLesFichesAction'; import { makeCollectiviteToutesLesFichesUrl } from '@/app/app/paths'; +import { Statut } from '@/backend/plans/fiches'; /** Permet de transformer les filtres de modules fiches action en paramètres d'URL */ export const makeFichesActionUrlWithParams = ( diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/ParticipationCitoyenneDropdown/ParticipationCitoyenneDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/ParticipationCitoyenneDropdown/ParticipationCitoyenneDropdown.tsx index 0cd15f63c2..b661738c7f 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/ParticipationCitoyenneDropdown/ParticipationCitoyenneDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/ParticipationCitoyenneDropdown/ParticipationCitoyenneDropdown.tsx @@ -1,4 +1,4 @@ -import { ParticipationCitoyenne } from '@/api/plan-actions'; +import { ParticipationCitoyenne } from '@/backend/plans/fiches'; import { Select, SelectMultipleProps } from '@/ui'; import { ficheActionParticipationOptions } from '../../listesStatiques'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/statuts/StatutsFilterDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/statuts/StatutsFilterDropdown.tsx index 0769320b73..f85afee49e 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/statuts/StatutsFilterDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/statuts/StatutsFilterDropdown.tsx @@ -1,6 +1,6 @@ -import { Statut } from '@/api/plan-actions'; import BadgeStatut from '@/app/app/pages/collectivite/PlansActions/components/BadgeStatut'; import { ficheActionStatutOptions } from '@/app/ui/dropdownLists/listesStatiques'; +import { Statut } from '@/backend/plans/fiches'; import { SelectFilter, SelectMultipleProps } from '@/ui'; type Props = Omit & { diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/statuts/StatutsSelectDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/statuts/StatutsSelectDropdown.tsx index 3ae2ad9c99..28f59fcd2e 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/statuts/StatutsSelectDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/statuts/StatutsSelectDropdown.tsx @@ -1,6 +1,6 @@ -import { Statut } from '@/api/plan-actions'; import BadgeStatut from '@/app/app/pages/collectivite/PlansActions/components/BadgeStatut'; import { ficheActionStatutOptions } from '@/app/ui/dropdownLists/listesStatiques'; +import { Statut } from '@/backend/plans/fiches'; import { Select, SelectProps } from '@/ui'; type Props = Omit & { diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/listesStatiques.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/listesStatiques.ts index e29b0e5124..e8b49d8e1c 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/listesStatiques.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/listesStatiques.ts @@ -1,7 +1,11 @@ -import { ParticipationCitoyenne, Statut } from '@/api/plan-actions'; import { ModifiedSince } from '@/api/plan-actions/fiche-resumes.list/domain/fetch-options.schema'; import { TFicheActionEcheances } from '@/app/types/alias'; -import { Cible, Priorite } from '@/backend/plans/fiches'; +import { + Cible, + ParticipationCitoyenne, + Priorite, + Statut, +} from '@/backend/plans/fiches'; type Options = { value: T; diff --git a/app.territoiresentransitions.react/src/ui/export-pdf/components/Badge/BadgeStatut.tsx b/app.territoiresentransitions.react/src/ui/export-pdf/components/Badge/BadgeStatut.tsx index 7c89438f5b..27b01f2372 100644 --- a/app.territoiresentransitions.react/src/ui/export-pdf/components/Badge/BadgeStatut.tsx +++ b/app.territoiresentransitions.react/src/ui/export-pdf/components/Badge/BadgeStatut.tsx @@ -1,11 +1,11 @@ -import { Statut as PlanActionStatut } from '@/api/plan-actions/domain'; import { statusToState } from '@/app/app/pages/collectivite/PlansActions/components/BadgeStatut'; +import { Statut } from '@/backend/plans/fiches'; import classNames from 'classnames'; import { Badge } from './Badge'; type BadgeStatutProps = { count?: number; - statut: PlanActionStatut | 'Sans statut'; + statut: Statut | 'Sans statut'; size?: 'sm' | 'md'; uppercase?: boolean; className?: string; diff --git a/backend/src/plans/fiches/shared/models/fiche-action.table.ts b/backend/src/plans/fiches/shared/models/fiche-action.table.ts index 8168361b36..420f1a92d6 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action.table.ts @@ -1,4 +1,3 @@ -import { getEnumValues } from '@/backend/utils/enum.utils'; import { InferInsertModel } from 'drizzle-orm'; import { boolean, @@ -79,7 +78,16 @@ export enum FicheActionStatutsEnumType { export const SANS_STATUT_FICHE_ACTION_SYNTHESE_KEY = 'Sans statut'; -export const statutsEnumValues = getEnumValues(FicheActionStatutsEnumType); +export const statutsEnumValues = [ + 'À venir', + 'En cours', + 'Réalisé', + 'En pause', + 'Abandonné', + 'Bloqué', + 'En retard', + 'A discuter', +] as const; export const statutsEnumSchema = z.enum(statutsEnumValues); export const statutsPgEnum = pgEnum('fiche_action_statuts', statutsEnumValues); export type Statut = z.infer; @@ -111,13 +119,19 @@ export const prioritePgEnum = pgEnum( ); export type Priorite = z.infer; -export const participationCitoyenneTypeEnumValues = [ +export const participationCitoyenneEnumValues = [ 'pas-de-participation', 'information', 'consultation', 'concertation', 'co-construction', ] as const; +export const participationCitoyenneEnumSchema = z.enum( + participationCitoyenneEnumValues +); +export type ParticipationCitoyenne = z.infer< + typeof participationCitoyenneEnumSchema +>; export const ficheActionTable = pgTable('fiche_action', { id: serial('id').primaryKey().notNull(), @@ -145,7 +159,7 @@ export const ficheActionTable = pgTable('fiche_action', { participationCitoyenne: text('participation_citoyenne'), participationCitoyenneType: varchar('participation_citoyenne_type', { length: 30, - enum: participationCitoyenneTypeEnumValues, + enum: participationCitoyenneEnumValues, }), tempsDeMiseEnOeuvre: integer('temps_de_mise_en_oeuvre_id').references( () => tempsDeMiseEnOeuvreTable.niveau diff --git a/packages/api/src/plan-actions/domain/fiche-action.schema.ts b/packages/api/src/plan-actions/domain/fiche-action.schema.ts index ae55b7e6a1..42986641c3 100644 --- a/packages/api/src/plan-actions/domain/fiche-action.schema.ts +++ b/packages/api/src/plan-actions/domain/fiche-action.schema.ts @@ -5,25 +5,27 @@ import { tagSchema } from '@/api/shared/domain'; import { axeSchema, ciblesEnumSchema, + participationCitoyenneEnumSchema, prioriteEnumSchema, + statutsEnumSchema, } from '@/backend/plans/fiches'; import { sousThematiqueSchema, thematiqueSchema } from '@/backend/shared'; import { z } from 'zod'; // Enums -export const statutSchema = z.enum([ - 'À venir', - 'En cours', - 'Réalisé', - 'En pause', - 'Abandonné', - 'Bloqué', - 'En retard', - 'A discuter', -]); +// export const statutSchema = z.enum([ +// 'À venir', +// 'En cours', +// 'Réalisé', +// 'En pause', +// 'Abandonné', +// 'Bloqué', +// 'En retard', +// 'A discuter', +// ]); -export type Statut = z.infer; +// export type Statut = z.infer; // export const niveauPrioriteSchema = z.enum(['Élevé', 'Moyen', 'Bas']); @@ -47,17 +49,17 @@ export type Statut = z.infer; // export type Cible = z.infer; -export const participationCitoyenneTypeSchema = z.enum([ - 'pas-de-participation', - 'information', - 'consultation', - 'concertation', - 'co-construction', -]); +// export const participationCitoyenneTypeSchema = z.enum([ +// 'pas-de-participation', +// 'information', +// 'consultation', +// 'concertation', +// 'co-construction', +// ]); -export type ParticipationCitoyenne = z.infer< - typeof participationCitoyenneTypeSchema ->; +// export type ParticipationCitoyenne = z.infer< +// typeof participationCitoyenne +// >; export const effetsAttendus = z.object({ id: z.number(), @@ -104,7 +106,7 @@ export const ficheActionSchema = z.object({ createdBy: auteur.nullable(), titre: z.string().nullable(), description: z.string().nullish(), - statut: statutSchema.nullish(), + statut: statutsEnumSchema.nullish(), ameliorationContinue: z.boolean().nullish(), dateFinProvisoire: z .string() @@ -128,7 +130,7 @@ export const ficheActionSchema = z.object({ financements: z.string().nullish(), instanceGouvernance: z.string().nullish(), participationCitoyenne: z.string().nullish(), - participationCitoyenneType: participationCitoyenneTypeSchema.nullish(), + participationCitoyenneType: participationCitoyenneEnumSchema.nullish(), tempsDeMiseEnOeuvre: tempsDeMiseEnOeuvreSchema.nullish(), actionImpactId: z.number().nullish(), diff --git a/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts b/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts index 23549bb7ae..42892fee0a 100644 --- a/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts +++ b/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts @@ -1,8 +1,11 @@ -import { ciblesEnumSchema, prioriteEnumSchema } from '@/backend/plans/fiches'; +import { + ciblesEnumSchema, + prioriteEnumSchema, + statutsEnumSchema, +} from '@/backend/plans/fiches'; import { getPaginationSchema } from '@/backend/utils'; import { z } from 'zod'; import { filtreRessourceLieesSchema } from '../../../collectivites/shared/domain/filtre-ressource-liees.schema'; -import { statutSchema } from '../../domain'; export const modifiedSinceSchema = z.enum([ 'last-90-days', @@ -14,7 +17,7 @@ export const modifiedSinceSchema = z.enum([ export type ModifiedSince = z.infer; export const filtreSpecifiqueSchema = z.object({ - statuts: statutSchema.array().optional(), + statuts: statutsEnumSchema.array().optional(), priorites: prioriteEnumSchema.array().optional(), cibles: ciblesEnumSchema.array().optional(), modifiedSince: modifiedSinceSchema.optional(), From 4df51ffb4e99e98d9b9eb730267c48ea3aff356c Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Mon, 16 Dec 2024 19:33:21 +0100 Subject: [PATCH 11/33] Supprime le schema de `fiche.libreTags` du package `api` --- .../ActionsGroupees/EditionTagsLibres.tsx | 8 ++--- .../ModaleDescription.tsx | 2 +- .../TagsSuiviPersoDropdown.tsx | 6 ++-- .../MiseEnOeuvreDropdown.tsx | 2 +- .../src/ui/dropdownLists/tags/SelectTags.tsx | 2 +- .../count-by-statut.service.ts | 6 ++-- .../src/panier/models/action-impact.table.ts | 2 +- .../shared/models/fiche-action.table.ts | 15 ++------- backend/src/shared/index.ts | 1 + backend/src/shared/models/libre-tag.table.ts | 2 ++ backend/src/shared/models/tag.table-base.ts | 13 +++++--- .../models/temps-de-mise-en-oeuvre.table.ts | 10 +++++- backend/src/taxonomie/services/tag.service.ts | 4 +-- .../domain/fiche-action.schema.ts | 31 +++++++++---------- 14 files changed, 52 insertions(+), 52 deletions(-) diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionTagsLibres.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionTagsLibres.tsx index ea6c13cc18..d25f52adf9 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionTagsLibres.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionTagsLibres.tsx @@ -1,6 +1,6 @@ -import { LibreTag } from '@/api/typeUtils'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; import TagsSuiviPersoDropdown from '@/app/ui/dropdownLists/TagsSuiviPersoDropdown/TagsSuiviPersoDropdown'; +import { Tag } from '@/backend/shared'; import { Button, Field, useEventTracker } from '@/ui'; import { OpenState } from '@/ui/utils/types'; import { useState } from 'react'; @@ -16,7 +16,7 @@ const ModaleEditionTagsLibres = ({ openState, selectedIds, }: ModaleEditionTagsLibresProps) => { - const [tags, setTags] = useState(); + const [tags, setTags] = useState(); const collectiviteId = useCollectiviteId()!; const tracker = useEventTracker('app/actions-groupees-fiches-action'); @@ -35,14 +35,14 @@ const ModaleEditionTagsLibres = ({ mutation.mutate({ ficheIds: selectedIds, libreTags: { - add: tags?.map((t) => ({ id: t.id! })) ?? undefined, + add: tags?.map((t) => ({ id: t.id })) ?? undefined, }, }); }} > t.id!)} + values={tags?.map((t) => t.id)} onChange={({ libresTag }) => setTags(libresTag)} /> diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionDescription/ModaleDescription.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionDescription/ModaleDescription.tsx index 29632ceaf2..2c908d0127 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionDescription/ModaleDescription.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionDescription/ModaleDescription.tsx @@ -99,7 +99,7 @@ const ModaleDescription = ({ fiche, updateFiche }: ModaleDescriptionProps) => { {/* Dropdown tags personnalisés */} t.id!)} + values={editedFiche.libresTag?.map((t) => t.id)} onChange={({ libresTag }) => setEditedFiche((prevState) => ({ ...prevState, libresTag })) } diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/TagsSuiviPersoDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/TagsSuiviPersoDropdown.tsx index 5aae47e374..0b79c38584 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/TagsSuiviPersoDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/TagsSuiviPersoDropdown.tsx @@ -1,4 +1,4 @@ -import { LibreTag } from '@/api/typeUtils'; +import { Tag } from '@/backend/shared'; import { SelectMultipleProps } from '@/ui'; import SelectTags from '../tags/SelectTags'; import { useTagsSuiviPersoListe } from './useTagsSuiviPersoListe'; @@ -12,8 +12,8 @@ type TagsSuiviPersoDropdownProps = Omit< libresTag, selectedLibreTag, }: { - libresTag: LibreTag[]; - selectedLibreTag: LibreTag; + libresTag: Tag[]; + selectedLibreTag: Tag; }) => void; }; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/MiseEnOeuvreDropdown/MiseEnOeuvreDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/MiseEnOeuvreDropdown/MiseEnOeuvreDropdown.tsx index 796d03731a..25b5c9b9ea 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/MiseEnOeuvreDropdown/MiseEnOeuvreDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/MiseEnOeuvreDropdown/MiseEnOeuvreDropdown.tsx @@ -1,4 +1,4 @@ -import { TempsDeMiseEnOeuvre } from '@/api/plan-actions'; +import { TempsDeMiseEnOeuvre } from '@/backend/shared'; import { Select, SelectProps } from '@/ui'; import { useMiseEnOeuvre } from './useMiseEnOeuvre'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/SelectTags.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/SelectTags.tsx index 896e257f75..e0b241aaf3 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/SelectTags.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/SelectTags.tsx @@ -1,6 +1,6 @@ import { TableTag } from '@/api'; -import { Tag } from '@/api/shared/domain'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; +import { Tag } from '@/backend/shared'; import { Option, OptionValue, SelectFilter, SelectMultipleProps } from '@/ui'; import { useEffect } from 'react'; import { QueryKey } from 'react-query'; diff --git a/backend/src/fiches/count-by-statut/count-by-statut.service.ts b/backend/src/fiches/count-by-statut/count-by-statut.service.ts index 91fe6e0bcf..24a6f32519 100644 --- a/backend/src/fiches/count-by-statut/count-by-statut.service.ts +++ b/backend/src/fiches/count-by-statut/count-by-statut.service.ts @@ -18,9 +18,9 @@ import DatabaseService from '../../common/services/database.service'; import { axeTable } from '../../plans/fiches/shared/models/axe.table'; import { ficheActionAxeTable } from '../../plans/fiches/shared/models/fiche-action-axe.table'; import { - FicheActionStatutsEnumType, ficheActionTable, SANS_STATUT_FICHE_ACTION_SYNTHESE_KEY, + statutsEnumValues, } from '../../plans/fiches/shared/models/fiche-action.table'; import { ficheActionPartenaireTagTable } from '../models/fiche-action-partenaire-tag.table'; import { ficheActionPiloteTable } from '../models/fiche-action-pilote.table'; @@ -50,7 +50,7 @@ export class CountByStatutService { )}` ); - const listeValeurs = Object.values(FicheActionStatutsEnumType); + const listeValeurs = statutsEnumValues; const conditions = this.getConditions(collectiviteId, filter); const result = await this.countBy( @@ -235,7 +235,7 @@ export class CountByStatutService { private async countBy( propriete: PgColumn, conditions: (SQLWrapper | SQL)[], - values: Value[], + values: readonly Value[], nullValue?: NullValue ) { const ficheActionPartenaireTags = this.getFicheActionPartenaireTagsQuery(); diff --git a/backend/src/panier/models/action-impact.table.ts b/backend/src/panier/models/action-impact.table.ts index bb4d069e27..9a4372c55c 100644 --- a/backend/src/panier/models/action-impact.table.ts +++ b/backend/src/panier/models/action-impact.table.ts @@ -40,7 +40,7 @@ export const actionImpactTable = pgTable('action_impact', { tempsDeMiseEnOeuvre: integer('temps_de_mise_en_oeuvre') .notNull() .default(1) - .references(() => tempsDeMiseEnOeuvreTable.niveau), + .references(() => tempsDeMiseEnOeuvreTable.id), fourchetteBudgetaire: integer('fourchette_budgetaire') .notNull() .default(1) diff --git a/backend/src/plans/fiches/shared/models/fiche-action.table.ts b/backend/src/plans/fiches/shared/models/fiche-action.table.ts index 420f1a92d6..58c7eb4050 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action.table.ts @@ -65,17 +65,6 @@ export const ficheActionResultatsAttendusEnum = pgEnum( ] ); -export enum FicheActionStatutsEnumType { - A_VENIR = 'À venir', - EN_COURS = 'En cours', - REALISE = 'Réalisé', - EN_PAUSE = 'En pause', - ABANDONNE = 'Abandonné', - BLOQUE = 'Bloqué', - EN_RETARD = 'En retard', - A_DISCUTER = 'A discuter', -} - export const SANS_STATUT_FICHE_ACTION_SYNTHESE_KEY = 'Sans statut'; export const statutsEnumValues = [ @@ -148,7 +137,7 @@ export const ficheActionTable = pgTable('fiche_action', { precision: 12, scale: 0, }), - statut: statutsPgEnum('statut').default(FicheActionStatutsEnumType.A_VENIR), + statut: statutsPgEnum('statut').default(statutsEnumSchema.enum['À venir']), priorite: prioritePgEnum('niveau_priorite'), dateDebut: timestamp('date_debut', TIMESTAMP_OPTIONS), dateFin: timestamp('date_fin_provisoire', TIMESTAMP_OPTIONS), @@ -162,7 +151,7 @@ export const ficheActionTable = pgTable('fiche_action', { enum: participationCitoyenneEnumValues, }), tempsDeMiseEnOeuvre: integer('temps_de_mise_en_oeuvre_id').references( - () => tempsDeMiseEnOeuvreTable.niveau + () => tempsDeMiseEnOeuvreTable.id ), majTermine: boolean('maj_termine'), collectiviteId: integer('collectivite_id') diff --git a/backend/src/shared/index.ts b/backend/src/shared/index.ts index 5f99f7bccc..4c05cea67b 100644 --- a/backend/src/shared/index.ts +++ b/backend/src/shared/index.ts @@ -1,4 +1,5 @@ export * from './models/libre-tag.table'; export * from './models/sous-thematique.table'; +export * from './models/tag.table-base'; export * from './models/temps-de-mise-en-oeuvre.table'; export * from './models/thematique.table'; diff --git a/backend/src/shared/models/libre-tag.table.ts b/backend/src/shared/models/libre-tag.table.ts index a27fa6fb62..2f100a3ad0 100644 --- a/backend/src/shared/models/libre-tag.table.ts +++ b/backend/src/shared/models/libre-tag.table.ts @@ -1,5 +1,6 @@ import { pgTable, uniqueIndex } from 'drizzle-orm/pg-core'; import { createSelectSchema } from 'drizzle-zod'; +import z from 'zod'; import { createdAt, createdBy } from '../../utils/column.utils'; import { tagTableBase } from './tag.table-base'; @@ -20,3 +21,4 @@ export const libreTagTable = pgTable( ); export const libreTagSchema = createSelectSchema(libreTagTable); +export type LibreTag = z.infer; diff --git a/backend/src/shared/models/tag.table-base.ts b/backend/src/shared/models/tag.table-base.ts index 8a28b1024c..4b39cae4af 100644 --- a/backend/src/shared/models/tag.table-base.ts +++ b/backend/src/shared/models/tag.table-base.ts @@ -1,4 +1,5 @@ import { integer, serial, text } from 'drizzle-orm/pg-core'; +import z from 'zod'; import { collectiviteTable } from '../../collectivites/models/collectivite.table'; export const tagTableBase = { @@ -9,8 +10,10 @@ export const tagTableBase = { .references(() => collectiviteTable.id), }; -export type TagType = { - id : number, - nom : string, - collectiviteId : number -} +export const tagSchema = z.object({ + id: z.number(), + nom: z.string(), + collectiviteId: z.number(), +}); + +export type Tag = z.infer; diff --git a/backend/src/shared/models/temps-de-mise-en-oeuvre.table.ts b/backend/src/shared/models/temps-de-mise-en-oeuvre.table.ts index 9092f85e55..539e967136 100644 --- a/backend/src/shared/models/temps-de-mise-en-oeuvre.table.ts +++ b/backend/src/shared/models/temps-de-mise-en-oeuvre.table.ts @@ -1,9 +1,17 @@ import { pgTable, serial, text } from 'drizzle-orm/pg-core'; +import { createSelectSchema } from 'drizzle-zod'; +import z from 'zod'; export const tempsDeMiseEnOeuvreTable = pgTable( 'action_impact_temps_de_mise_en_oeuvre', { - niveau: serial('niveau').primaryKey(), + id: serial('niveau').primaryKey(), nom: text('nom').notNull(), } ); + +export const tempsDeMiseEnOeuvreSchema = createSelectSchema( + tempsDeMiseEnOeuvreTable +); + +export type TempsDeMiseEnOeuvre = z.infer; diff --git a/backend/src/taxonomie/services/tag.service.ts b/backend/src/taxonomie/services/tag.service.ts index 692bf0362e..b43394ce4a 100644 --- a/backend/src/taxonomie/services/tag.service.ts +++ b/backend/src/taxonomie/services/tag.service.ts @@ -7,7 +7,7 @@ import { and, eq, inArray, isNull, or } from 'drizzle-orm'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import { groupementCollectiviteTable } from '../../collectivites/models/groupement-collectivite.table'; import DatabaseService from '../../common/services/database.service'; -import { TagType } from '../../shared/models/tag.table-base'; +import { Tag } from '../../shared/models/tag.table-base'; import { categorieTagTable } from '../models/categorie-tag.table'; import { partenaireTagTable } from '../models/partenaire-tag.table'; @@ -65,7 +65,7 @@ export default class TagService { collectiviteId: number, withPredefinedTags: boolean, tokenInfo: AuthenticatedUser - ): Promise { + ): Promise { // Vérifie les droits const collectivitePrivate = await this.collectiviteService.isPrivate( collectiviteId diff --git a/packages/api/src/plan-actions/domain/fiche-action.schema.ts b/packages/api/src/plan-actions/domain/fiche-action.schema.ts index 42986641c3..fea82dca09 100644 --- a/packages/api/src/plan-actions/domain/fiche-action.schema.ts +++ b/packages/api/src/plan-actions/domain/fiche-action.schema.ts @@ -1,7 +1,6 @@ import { personneSchema } from '@/api/collectivites'; import { indicateurListItemSchema } from '@/api/indicateurs/domain'; import { actionSchema } from '@/api/referentiel'; -import { tagSchema } from '@/api/shared/domain'; import { axeSchema, ciblesEnumSchema, @@ -9,7 +8,12 @@ import { prioriteEnumSchema, statutsEnumSchema, } from '@/backend/plans/fiches'; -import { sousThematiqueSchema, thematiqueSchema } from '@/backend/shared'; +import { + sousThematiqueSchema, + tagSchema, + tempsDeMiseEnOeuvreSchema, + thematiqueSchema, +} from '@/backend/shared'; import { z } from 'zod'; // Enums @@ -76,13 +80,6 @@ export const financeurSchema = z.object({ export type Financeur = z.infer; -export const tempsDeMiseEnOeuvreSchema = z.object({ - id: z.number(), - nom: z.string(), -}); - -export type TempsDeMiseEnOeuvre = z.infer; - const auteur = z.object({ userId: z.string(), prenom: z.string(), @@ -90,13 +87,13 @@ const auteur = z.object({ email: z.string(), }); -const libreTagSchema = z.object({ - id: z.number().nullish(), - nom: z.string(), - collectivitedId: z.number().nullish(), - createdAt: z.string().date().nullish(), - createdBy: z.string().nullish(), -}); +// const libreTagSchema = z.object({ +// id: z.number().nullish(), +// nom: z.string(), +// collectivitedId: z.number().nullish(), +// createdAt: z.string().date().nullish(), +// createdBy: z.string().nullish(), +// }); export const ficheActionSchema = z.object({ id: z.number(), @@ -151,7 +148,7 @@ export const ficheActionSchema = z.object({ actions: actionSchema.array().nullish(), financeurs: financeurSchema.array().nullish(), indicateurs: indicateurListItemSchema.array().nullish(), - libresTag: libreTagSchema.array().nullish(), + libresTag: tagSchema.array().nullish(), }); export type FicheAction = z.infer; From 2030984cb62b039f16e1b687da8a4bef6dd9ba2f Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Thu, 19 Dec 2024 12:15:17 +0100 Subject: [PATCH 12/33] Supprime du package `api` les schemas `tag` de la fiche --- .../detail/useIndicateurServices.ts | 5 ++- .../IndicateurCardEditModal.tsx | 5 +-- .../useUpdateIndicateurCard.ts | 6 +-- .../FicheAction/Budget/FinanceursInput.tsx | 10 +++-- .../FicheAction/Budget/FinanceursListe.tsx | 2 +- .../FinanceursDropdown/FinanceursDropdown.tsx | 2 +- .../FinanceursDropdown/useFinanceursListe.ts | 2 +- .../PartenairesDropdown.tsx | 2 +- .../usePartenairesListe.ts | 2 +- .../ServicesPilotesDropdown.tsx | 2 +- .../useServicesPilotesListe.ts | 2 +- .../StructuresDropdown/StructuresDropdown.tsx | 2 +- .../StructuresDropdown/useStructuresListe.ts | 2 +- .../useTagsSuiviPersoListe.ts | 2 +- .../src/ui/dropdownLists/tags/useTagCreate.ts | 2 +- .../src/ui/dropdownLists/tags/useTagUpdate.ts | 2 +- .../fiche-action-financeur-tag.table.ts | 17 ------- .../fiche-action-partenaire-tag.table.ts | 4 +- .../models/fiche-action-service-tag.table.ts | 2 +- .../models/fiche-action-service.table.ts | 2 +- .../fiche-action-structure-tag.table.ts | 2 +- .../models/update-fiche-action.request.ts | 12 ++--- .../services/fiches-action-update.service.ts | 2 +- .../indicateur-filtre.service.ts | 2 +- .../models/indicateur-service-tag.table.ts | 2 +- backend/src/plans/fiches/index.ts | 1 + .../fiche-action-financeur-tag.table.ts | 30 +++++++++++++ backend/src/shared/index.ts | 4 ++ .../models/financeur-tag.table.ts | 4 +- .../models/partenaire-tag.table.ts | 0 .../models/service-tag.table.ts | 0 .../models/structure-tag.table.ts | 0 backend/src/shared/models/tag.table-base.ts | 18 +++++++- backend/src/taxonomie/services/tag.service.ts | 2 +- packages/api/src/index.ts | 16 +++---- .../actions/indicateur.save.test.ts | 3 +- .../indicateurs/actions/indicateur.save.ts | 3 +- .../domain/fiche-action.schema.ts | 11 ++--- .../api/src/shared/actions/tag.fetch.test.ts | 27 ++++++----- packages/api/src/shared/actions/tag.fetch.ts | 28 ++++++------ .../api/src/shared/actions/tag.save.test.ts | 45 ++++++++++--------- packages/api/src/shared/actions/tag.save.ts | 10 ++--- packages/api/src/shared/domain/index.ts | 1 - packages/api/src/shared/domain/tag.schema.ts | 28 ------------ 44 files changed, 166 insertions(+), 160 deletions(-) delete mode 100644 backend/src/fiches/models/fiche-action-financeur-tag.table.ts create mode 100644 backend/src/plans/fiches/shared/models/fiche-action-financeur-tag.table.ts rename backend/src/{taxonomie => shared}/models/financeur-tag.table.ts (77%) rename backend/src/{taxonomie => shared}/models/partenaire-tag.table.ts (100%) rename backend/src/{taxonomie => shared}/models/service-tag.table.ts (100%) rename backend/src/{taxonomie => shared}/models/structure-tag.table.ts (100%) delete mode 100644 packages/api/src/shared/domain/index.ts delete mode 100644 packages/api/src/shared/domain/tag.schema.ts diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/Indicateur/detail/useIndicateurServices.ts b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/Indicateur/detail/useIndicateurServices.ts index dbef59a5f8..a1313cd4d4 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/Indicateur/detail/useIndicateurServices.ts +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/Indicateur/detail/useIndicateurServices.ts @@ -1,6 +1,7 @@ -import { Indicateurs, SharedDomain } from '@/api'; +import { Indicateurs } from '@/api'; import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; +import { Tag } from '@/backend/shared'; import { useMutation, useQuery, useQueryClient } from 'react-query'; /** Met à jour les services pilotes d'un indicateur */ @@ -10,7 +11,7 @@ export const useUpsertIndicateurServices = (indicateurId: number) => { return useMutation({ mutationKey: 'upsert_indicateur_services', - mutationFn: async (services: SharedDomain.Tag[]) => { + mutationFn: async (services: Tag[]) => { if (!collectiviteId) return; return Indicateurs.save.upsertServices( supabaseClient, diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/IndicateurCardEditModal.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/IndicateurCardEditModal.tsx index 41987b90cb..966e2d025f 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/IndicateurCardEditModal.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/IndicateurCardEditModal.tsx @@ -1,10 +1,9 @@ -import { SharedDomain } from '@/api'; import { Personne } from '@/api/collectivites'; import { useUpdateIndicateurCard } from '@/app/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/useUpdateIndicateurCard'; import PersonnesDropdown from '@/app/ui/dropdownLists/PersonnesDropdown/PersonnesDropdown'; import ServicesPilotesDropdown from '@/app/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown'; import ThematiquesDropdown from '@/app/ui/dropdownLists/ThematiquesDropdown/ThematiquesDropdown'; -import { Thematique } from '@/backend/shared'; +import { Tag, Thematique } from '@/backend/shared'; import { Field, Modal, ModalFooterOKCancel } from '@/ui'; import { OpenState } from '@/ui/utils/types'; import { useEffect, useState } from 'react'; @@ -38,7 +37,7 @@ const IndicateurCardEditModal = ({ const [state, setState] = useState<{ pilotes: Personne[]; - services: SharedDomain.Tag[]; + services: Tag[]; thematiques: Thematique[]; }>(initialState); diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/useUpdateIndicateurCard.ts b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/useUpdateIndicateurCard.ts index 3cd394a4f8..3964a82f06 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/useUpdateIndicateurCard.ts +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/useUpdateIndicateurCard.ts @@ -1,11 +1,9 @@ -import { useMutation } from 'react-query'; - import { Indicateurs } from '@/api'; import { Personne } from '@/api/collectivites'; -import { Tag } from '@/api/shared/domain'; import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; -import { Thematique } from '@/backend/shared'; +import { Tag, Thematique } from '@/backend/shared'; +import { useMutation } from 'react-query'; /** Met à jour les pilotes, les services pilotes, les thématique d'un indicateur */ export const useUpdateIndicateurCard = ( diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursInput.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursInput.tsx index 81dac55098..624ce84778 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursInput.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursInput.tsx @@ -1,10 +1,12 @@ -import { Financeur } from '@/api/plan-actions'; import FinanceursDropdown from '@/app/ui/dropdownLists/FinanceursDropdown/FinanceursDropdown'; +import { Financeur } from '@/backend/plans/fiches'; import { Button, Field, Input } from '@/ui'; +type FinanceurPartial = Omit; + type FinanceursInputProps = { - financeurs: Financeur[] | null | undefined; - onUpdate: (financeurs: Financeur[]) => void; + financeurs: FinanceurPartial[] | null | undefined; + onUpdate: (financeurs: FinanceurPartial[]) => void; }; const FinanceursInput = ({ financeurs, onUpdate }: FinanceursInputProps) => { @@ -24,7 +26,7 @@ const FinanceursInput = ({ financeurs, onUpdate }: FinanceursInputProps) => { : undefined } disabled={true} - onChange={() => {}} + onChange={() => ({})} /> diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursListe.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursListe.tsx index 8afbfc307b..600de753af 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursListe.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursListe.tsx @@ -1,5 +1,5 @@ -import { Financeur } from '@/api/plan-actions'; import { getFormattedNumber } from '@/app/utils/formatUtils'; +import { Financeur } from '@/backend/plans/fiches'; import { Badge } from '@/ui'; type FinanceursListeProps = { diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/FinanceursDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/FinanceursDropdown.tsx index 52d3a71d24..7ef751d37c 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/FinanceursDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/FinanceursDropdown.tsx @@ -1,4 +1,4 @@ -import { Tag } from '@/api/shared/domain'; +import { Tag } from '@/backend/shared'; import { SelectMultipleProps } from '@/ui'; import SelectTags from '../tags/SelectTags'; import { useFinanceursListe } from './useFinanceursListe'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/useFinanceursListe.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/useFinanceursListe.ts index 3b906d5a62..475e461b94 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/useFinanceursListe.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/useFinanceursListe.ts @@ -1,6 +1,6 @@ -import { Tag } from '@/api/shared/domain'; import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; +import { Tag } from '@/backend/shared'; import { useQuery } from 'react-query'; import { objectToCamel } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/PartenairesDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/PartenairesDropdown.tsx index 51600ee7c6..5580c7f4d0 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/PartenairesDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/PartenairesDropdown.tsx @@ -1,4 +1,4 @@ -import { Tag } from '@/api/shared/domain'; +import { Tag } from '@/backend/shared'; import { SelectMultipleProps } from '@/ui'; import SelectTags from '../tags/SelectTags'; import { usePartenairesListe } from './usePartenairesListe'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/usePartenairesListe.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/usePartenairesListe.ts index 2ca2672bba..18bd7f2de9 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/usePartenairesListe.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/usePartenairesListe.ts @@ -1,6 +1,6 @@ -import { Tag } from '@/api/shared/domain'; import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; +import { Tag } from '@/backend/shared'; import { useQuery } from 'react-query'; import { objectToCamel } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown.tsx index 251959dd90..b0b936004a 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown.tsx @@ -1,4 +1,4 @@ -import { Tag } from '@/api/shared/domain'; +import { Tag } from '@/backend/shared'; import { SelectMultipleProps } from '@/ui'; import SelectTags from '../tags/SelectTags'; import { useServicesPilotesListe } from './useServicesPilotesListe'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/useServicesPilotesListe.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/useServicesPilotesListe.ts index 9dc7b28ff2..4402a0e4d1 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/useServicesPilotesListe.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/useServicesPilotesListe.ts @@ -1,6 +1,6 @@ -import { Tag } from '@/api/shared/domain'; import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; +import { Tag } from '@/backend/shared'; import { useQuery } from 'react-query'; import { objectToCamel } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/StructuresDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/StructuresDropdown.tsx index c4fcdb85bf..cc9ba1746e 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/StructuresDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/StructuresDropdown.tsx @@ -1,4 +1,4 @@ -import { Tag } from '@/api/shared/domain'; +import { Tag } from '@/backend/shared'; import { SelectMultipleProps } from '@/ui'; import SelectTags from '../tags/SelectTags'; import { useStructuresListe } from './useStructuresListe'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/useStructuresListe.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/useStructuresListe.ts index 1f5e1ee58c..a6cd8d6e09 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/useStructuresListe.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/useStructuresListe.ts @@ -1,6 +1,6 @@ -import { Tag } from '@/api/shared/domain'; import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; +import { Tag } from '@/backend/shared'; import { useQuery } from 'react-query'; import { objectToCamel } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/useTagsSuiviPersoListe.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/useTagsSuiviPersoListe.ts index dbf0436149..55d0c017b2 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/useTagsSuiviPersoListe.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/useTagsSuiviPersoListe.ts @@ -1,6 +1,6 @@ -import { Tag } from '@/api/shared/domain'; import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; +import { Tag } from '@/backend/shared'; import { useQuery } from 'react-query'; import { objectToCamel } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagCreate.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagCreate.ts index b38f1237e0..2e75dc20a4 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagCreate.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagCreate.ts @@ -1,6 +1,6 @@ import { CollectiviteTag, TableTag } from '@/api'; -import { TagInsert } from '@/api/shared/domain'; import { supabaseClient } from '@/app/core-logic/api/supabase'; +import { TagInsert } from '@/backend/shared'; import { QueryKey, useMutation, useQueryClient } from 'react-query'; import { objectToSnake } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagUpdate.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagUpdate.ts index cdb9fd7379..38714f8589 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagUpdate.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagUpdate.ts @@ -1,6 +1,6 @@ import { TableTag } from '@/api'; -import { TagUpdate } from '@/api/shared/domain'; import { supabaseClient } from '@/app/core-logic/api/supabase'; +import { TagUpdate } from '@/backend/shared'; import { QueryKey, useMutation, useQueryClient } from 'react-query'; import { objectToSnake } from 'ts-case-convert'; diff --git a/backend/src/fiches/models/fiche-action-financeur-tag.table.ts b/backend/src/fiches/models/fiche-action-financeur-tag.table.ts deleted file mode 100644 index d2fcef7693..0000000000 --- a/backend/src/fiches/models/fiche-action-financeur-tag.table.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { integer, pgTable, serial } from 'drizzle-orm/pg-core'; -import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; -import { financeurTagTable } from '../../taxonomie/models/financeur-tag.table'; - -export const ficheActionFinanceurTagTable = pgTable( - 'fiche_action_financeur_tag', - { - id: serial('id').primaryKey(), - ficheId: integer('fiche_id') - .notNull() - .references(() => ficheActionTable.id), - financeurTagId: integer('financeur_tag_id').references( - () => financeurTagTable.id - ), - montantTtc: integer('montant_ttc'), - } -); diff --git a/backend/src/fiches/models/fiche-action-partenaire-tag.table.ts b/backend/src/fiches/models/fiche-action-partenaire-tag.table.ts index d254d1f89a..f3822d1943 100644 --- a/backend/src/fiches/models/fiche-action-partenaire-tag.table.ts +++ b/backend/src/fiches/models/fiche-action-partenaire-tag.table.ts @@ -1,6 +1,6 @@ +import { ficheActionTable } from '@/backend/plans/fiches'; +import { partenaireTagTable } from '@/backend/shared'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { partenaireTagTable } from '../../taxonomie/models/partenaire-tag.table'; -import { ficheActionTable } from './fiche-action.table'; export const ficheActionPartenaireTagTable = pgTable( 'fiche_action_partenaire_tag', diff --git a/backend/src/fiches/models/fiche-action-service-tag.table.ts b/backend/src/fiches/models/fiche-action-service-tag.table.ts index 30fc5e774d..eed1287d3f 100644 --- a/backend/src/fiches/models/fiche-action-service-tag.table.ts +++ b/backend/src/fiches/models/fiche-action-service-tag.table.ts @@ -1,6 +1,6 @@ import { ficheActionTable } from '@/backend/plans/fiches'; +import { serviceTagTable } from '@/backend/shared'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { serviceTagTable } from '../../taxonomie/models/service-tag.table'; export const ficheActionServiceTagTable = pgTable( 'fiche_action_service_tag', diff --git a/backend/src/fiches/models/fiche-action-service.table.ts b/backend/src/fiches/models/fiche-action-service.table.ts index 305f2a158b..121a374f0b 100644 --- a/backend/src/fiches/models/fiche-action-service.table.ts +++ b/backend/src/fiches/models/fiche-action-service.table.ts @@ -1,6 +1,6 @@ +import { serviceTagTable } from '@/backend/shared'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; -import { serviceTagTable } from '../../taxonomie/models/service-tag.table'; export const ficheActionServiceTagTable = pgTable( 'fiche_action_service_tag', diff --git a/backend/src/fiches/models/fiche-action-structure-tag.table.ts b/backend/src/fiches/models/fiche-action-structure-tag.table.ts index 8216ab3258..670497b067 100644 --- a/backend/src/fiches/models/fiche-action-structure-tag.table.ts +++ b/backend/src/fiches/models/fiche-action-structure-tag.table.ts @@ -1,6 +1,6 @@ import { ficheActionTable } from '@/backend/plans/fiches'; +import { structureTagTable } from '@/backend/shared'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { structureTagTable } from '../../taxonomie/models/structure-tag.table'; export const ficheActionStructureTagTable = pgTable( 'fiche_action_structure_tag', diff --git a/backend/src/fiches/models/update-fiche-action.request.ts b/backend/src/fiches/models/update-fiche-action.request.ts index 32315369f3..367a914821 100644 --- a/backend/src/fiches/models/update-fiche-action.request.ts +++ b/backend/src/fiches/models/update-fiche-action.request.ts @@ -1,4 +1,9 @@ -import { libreTagSchema } from '@/backend/shared'; +import { + libreTagSchema, + partenaireTagSchema, + serviceTagSchema, + structureTagSchema, +} from '@/backend/shared'; import z from 'zod'; import { indicateurDefinitionSchema } from '../../indicateurs/models/indicateur-definition.table'; import { axeSchema } from '../../plans/fiches/shared/models/axe.table'; @@ -9,13 +14,10 @@ import { updateFicheActionSchema, } from '../../plans/fiches/shared/models/fiche-action.table'; import { actionRelationSchema } from '../../referentiels/models/action-relation.table'; +import { financeurTagSchema } from '../../shared/models/financeur-tag.table'; import { sousThematiqueSchema } from '../../shared/models/sous-thematique.table'; import { thematiqueSchema } from '../../shared/models/thematique.table'; import { effetAttenduSchema } from '../../taxonomie/models/effet-attendu.table'; -import { financeurTagSchema } from '../../taxonomie/models/financeur-tag.table'; -import { partenaireTagSchema } from '../../taxonomie/models/partenaire-tag.table'; -import { serviceTagSchema } from '../../taxonomie/models/service-tag.table'; -import { structureTagSchema } from '../../taxonomie/models/structure-tag.table'; // There is no proper Pilote or Referent tables, so we use a custom schema here export const personneSchema = z.object({ diff --git a/backend/src/fiches/services/fiches-action-update.service.ts b/backend/src/fiches/services/fiches-action-update.service.ts index dd1cdc3c84..bd41accbf4 100644 --- a/backend/src/fiches/services/fiches-action-update.service.ts +++ b/backend/src/fiches/services/fiches-action-update.service.ts @@ -15,6 +15,7 @@ import { toCamel } from 'postgres'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import DatabaseService from '../../common/services/database.service'; import { ficheActionAxeTable } from '../../plans/fiches/shared/models/fiche-action-axe.table'; +import { ficheActionFinanceurTagTable } from '../../plans/fiches/shared/models/fiche-action-financeur-tag.table'; import { ficheActionTable, updateFicheActionSchema, @@ -22,7 +23,6 @@ import { import { buildConflictUpdateColumns } from '../../utils/drizzle/conflict.utils'; import { ficheActionActionTable } from '../models/fiche-action-action.table'; import { ficheActionEffetAttenduTable } from '../models/fiche-action-effet-attendu.table'; -import { ficheActionFinanceurTagTable } from '../models/fiche-action-financeur-tag.table'; import { ficheActionIndicateurTable } from '../models/fiche-action-indicateur.table'; import { ficheActionLibreTagTable } from '../models/fiche-action-libre-tag.table'; import { ficheActionLienTable } from '../models/fiche-action-lien.table'; diff --git a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts index afb3041fb4..cc37ffe86a 100644 --- a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts +++ b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts @@ -13,7 +13,6 @@ import DatabaseService from '../../common/services/database.service'; import { ficheActionIndicateurTable } from '../../fiches/models/fiche-action-indicateur.table'; import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; import { categorieTagTable } from '../../taxonomie/models/categorie-tag.table'; -import { serviceTagTable } from '../../taxonomie/models/service-tag.table'; import { indicateurActionTable } from '../models/indicateur-action.table'; import { indicateurCategorieTagTable } from '../models/indicateur-categorie-tag.table'; import { indicateurCollectiviteTable } from '../models/indicateur-collectivite.table'; @@ -28,6 +27,7 @@ import { GetFilteredIndicateursRequestOptionType, } from './get-filtered-indicateurs.request'; import { GetFilteredIndicateurResponseType } from './get-filtered-indicateurs.response'; +import { serviceTagTable } from '@/backend/shared'; export type RequestResultIndicateursRaw = { id: number; diff --git a/backend/src/indicateurs/models/indicateur-service-tag.table.ts b/backend/src/indicateurs/models/indicateur-service-tag.table.ts index 57838ead9f..66c80c9fdf 100644 --- a/backend/src/indicateurs/models/indicateur-service-tag.table.ts +++ b/backend/src/indicateurs/models/indicateur-service-tag.table.ts @@ -1,5 +1,5 @@ +import { serviceTagTable } from '@/backend/shared'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { serviceTagTable } from '../../taxonomie/models/service-tag.table'; import { collectiviteTable } from '../../collectivites/models/collectivite.table'; import { indicateurDefinitionTable } from './indicateur-definition.table'; diff --git a/backend/src/plans/fiches/index.ts b/backend/src/plans/fiches/index.ts index f3346f7ea1..3483907081 100644 --- a/backend/src/plans/fiches/index.ts +++ b/backend/src/plans/fiches/index.ts @@ -1,4 +1,5 @@ export * from './shared/models/axe.table'; +export * from './shared/models/fiche-action-financeur-tag.table'; export * from './shared/models/fiche-action.table'; export * from './shared/models/plan-action-type-categorie.table'; export * from './shared/models/plan-action-type.table'; diff --git a/backend/src/plans/fiches/shared/models/fiche-action-financeur-tag.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-financeur-tag.table.ts new file mode 100644 index 0000000000..c13ece30bf --- /dev/null +++ b/backend/src/plans/fiches/shared/models/fiche-action-financeur-tag.table.ts @@ -0,0 +1,30 @@ +import { integer, pgTable, serial } from 'drizzle-orm/pg-core'; +import { createSelectSchema } from 'drizzle-zod'; +import z from 'zod'; +import { + financeurTagSchema, + financeurTagTable, +} from '../../../../shared/models/financeur-tag.table'; +import { ficheActionTable } from './fiche-action.table'; + +export const ficheActionFinanceurTagTable = pgTable( + 'fiche_action_financeur_tag', + { + id: serial('id').primaryKey(), + ficheId: integer('fiche_id') + .notNull() + .references(() => ficheActionTable.id), + financeurTagId: integer('financeur_tag_id') + .notNull() + .references(() => financeurTagTable.id), + montantTtc: integer('montant_ttc'), + } +); + +export const financeurSchema = createSelectSchema( + ficheActionFinanceurTagTable +).extend({ + financeurTag: financeurTagSchema, +}); + +export type Financeur = z.infer; diff --git a/backend/src/shared/index.ts b/backend/src/shared/index.ts index 4c05cea67b..c5fc43d74b 100644 --- a/backend/src/shared/index.ts +++ b/backend/src/shared/index.ts @@ -1,5 +1,9 @@ +export * from './models/financeur-tag.table'; export * from './models/libre-tag.table'; +export * from './models/partenaire-tag.table'; +export * from './models/service-tag.table'; export * from './models/sous-thematique.table'; +export * from './models/structure-tag.table'; export * from './models/tag.table-base'; export * from './models/temps-de-mise-en-oeuvre.table'; export * from './models/thematique.table'; diff --git a/backend/src/taxonomie/models/financeur-tag.table.ts b/backend/src/shared/models/financeur-tag.table.ts similarity index 77% rename from backend/src/taxonomie/models/financeur-tag.table.ts rename to backend/src/shared/models/financeur-tag.table.ts index 446aaa2385..e10635e513 100644 --- a/backend/src/taxonomie/models/financeur-tag.table.ts +++ b/backend/src/shared/models/financeur-tag.table.ts @@ -1,6 +1,7 @@ import { pgTable, uniqueIndex } from 'drizzle-orm/pg-core'; import { createSelectSchema } from 'drizzle-zod'; -import { tagTableBase } from '../../shared/models/tag.table-base'; +import z from 'zod'; +import { tagTableBase } from './tag.table-base'; export const financeurTagTable = pgTable( 'financeur_tag', @@ -15,3 +16,4 @@ export const financeurTagTable = pgTable( ); export const financeurTagSchema = createSelectSchema(financeurTagTable); +export type FinanceurTag = z.infer; diff --git a/backend/src/taxonomie/models/partenaire-tag.table.ts b/backend/src/shared/models/partenaire-tag.table.ts similarity index 100% rename from backend/src/taxonomie/models/partenaire-tag.table.ts rename to backend/src/shared/models/partenaire-tag.table.ts diff --git a/backend/src/taxonomie/models/service-tag.table.ts b/backend/src/shared/models/service-tag.table.ts similarity index 100% rename from backend/src/taxonomie/models/service-tag.table.ts rename to backend/src/shared/models/service-tag.table.ts diff --git a/backend/src/taxonomie/models/structure-tag.table.ts b/backend/src/shared/models/structure-tag.table.ts similarity index 100% rename from backend/src/taxonomie/models/structure-tag.table.ts rename to backend/src/shared/models/structure-tag.table.ts diff --git a/backend/src/shared/models/tag.table-base.ts b/backend/src/shared/models/tag.table-base.ts index 4b39cae4af..3b13abe8fd 100644 --- a/backend/src/shared/models/tag.table-base.ts +++ b/backend/src/shared/models/tag.table-base.ts @@ -2,6 +2,15 @@ import { integer, serial, text } from 'drizzle-orm/pg-core'; import z from 'zod'; import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +export type TagType = + | 'personne' + | 'service' + | 'partenaire' + | 'categorie' + | 'financeur' + | 'structure' + | 'libre'; + export const tagTableBase = { id: serial('id').primaryKey(), nom: text('nom').notNull(), @@ -15,5 +24,12 @@ export const tagSchema = z.object({ nom: z.string(), collectiviteId: z.number(), }); - export type Tag = z.infer; + +export const tagUpdateSchema = tagSchema.partial(); +export type TagUpdate = z.input; + +export const tagInsertSchema = tagSchema.extend({ + id: z.number().optional(), +}); +export type TagInsert = z.input; diff --git a/backend/src/taxonomie/services/tag.service.ts b/backend/src/taxonomie/services/tag.service.ts index b43394ce4a..f34e948626 100644 --- a/backend/src/taxonomie/services/tag.service.ts +++ b/backend/src/taxonomie/services/tag.service.ts @@ -2,6 +2,7 @@ import { PermissionOperation } from '@/backend/auth/authorizations/permission-op import { PermissionService } from '@/backend/auth/authorizations/permission.service'; import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; import CollectivitesService from '@/backend/collectivites/services/collectivites.service'; +import { partenaireTagTable } from '@/backend/shared'; import { Injectable, Logger } from '@nestjs/common'; import { and, eq, inArray, isNull, or } from 'drizzle-orm'; import { AuthenticatedUser } from '../../auth/models/auth.models'; @@ -9,7 +10,6 @@ import { groupementCollectiviteTable } from '../../collectivites/models/groupeme import DatabaseService from '../../common/services/database.service'; import { Tag } from '../../shared/models/tag.table-base'; import { categorieTagTable } from '../models/categorie-tag.table'; -import { partenaireTagTable } from '../models/partenaire-tag.table'; @Injectable() export default class TagService { diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts index e03d35bbc8..6b110f54f4 100644 --- a/packages/api/src/index.ts +++ b/packages/api/src/index.ts @@ -1,12 +1,10 @@ -export * from './typeUtils'; +export * as CollectiviteEngagee from './collectiviteEngagees'; export type { Database, Json } from './database.types'; -export { unaccent } from './utils/unaccent'; -export * from './utils/authTokens'; -export * from './utils/pathUtils'; -export * from './utils/makeSearchString'; -export * from './utils/isAllowedOrigin'; export * as Indicateurs from './indicateurs'; -export * as CollectiviteEngagee from './collectiviteEngagees'; export * from './panier_action_impact'; - -export * as SharedDomain from './shared/domain'; +export * from './typeUtils'; +export * from './utils/authTokens'; +export * from './utils/isAllowedOrigin'; +export * from './utils/makeSearchString'; +export * from './utils/pathUtils'; +export { unaccent } from './utils/unaccent'; diff --git a/packages/api/src/indicateurs/actions/indicateur.save.test.ts b/packages/api/src/indicateurs/actions/indicateur.save.test.ts index 2c563d9f9e..a01442c5ae 100644 --- a/packages/api/src/indicateurs/actions/indicateur.save.test.ts +++ b/packages/api/src/indicateurs/actions/indicateur.save.test.ts @@ -1,9 +1,8 @@ +import { TagInsert, Thematique } from '@/backend/shared'; import { beforeAll, describe, expect, test } from 'vitest'; import { Personne } from '../../collectivites/shared/domain/personne.schema'; import { FicheResume } from '../../plan-actions/domain/fiche-action.schema'; import { Action } from '../../referentiel/domain/action.schema'; -import { TagInsert } from '../../shared/domain/tag.schema'; -import { Thematique } from '../../shared/domain/thematique.schema'; import { signIn, signOut } from '../../tests/auth'; import { dbAdmin, supabase } from '../../tests/supabase'; import { testReset } from '../../tests/testReset'; diff --git a/packages/api/src/indicateurs/actions/indicateur.save.ts b/packages/api/src/indicateurs/actions/indicateur.save.ts index a655b3854e..d591522911 100644 --- a/packages/api/src/indicateurs/actions/indicateur.save.ts +++ b/packages/api/src/indicateurs/actions/indicateur.save.ts @@ -1,11 +1,10 @@ -import { Thematique } from '@/backend/shared'; +import { Tag, TagInsert, Thematique } from '@/backend/shared'; import { isNil } from 'es-toolkit/predicate'; import { objectToSnake } from 'ts-case-convert'; import { Personne } from '../../collectivites/shared/domain/personne.schema'; import { Action } from '../../referentiel/domain/action.schema'; import { selectTags } from '../../shared/actions/tag.fetch'; import { insertTags } from '../../shared/actions/tag.save'; -import { Tag, TagInsert } from '../../shared/domain/tag.schema'; import { DBClient, TablesInsert } from '../../typeUtils'; import { IndicateurDefinition, diff --git a/packages/api/src/plan-actions/domain/fiche-action.schema.ts b/packages/api/src/plan-actions/domain/fiche-action.schema.ts index fea82dca09..d534aac9f5 100644 --- a/packages/api/src/plan-actions/domain/fiche-action.schema.ts +++ b/packages/api/src/plan-actions/domain/fiche-action.schema.ts @@ -4,6 +4,7 @@ import { actionSchema } from '@/api/referentiel'; import { axeSchema, ciblesEnumSchema, + financeurSchema, participationCitoyenneEnumSchema, prioriteEnumSchema, statutsEnumSchema, @@ -73,12 +74,12 @@ export const effetsAttendus = z.object({ export type EffetsAttendus = z.infer; -export const financeurSchema = z.object({ - financeurTag: tagSchema, - montantTtc: z.number().nullish(), -}); +// export const financeurSchema = z.object({ +// financeurTag: tagSchema, +// montantTtc: z.number().nullish(), +// }); -export type Financeur = z.infer; +// export type Financeur = z.infer; const auteur = z.object({ userId: z.string(), diff --git a/packages/api/src/shared/actions/tag.fetch.test.ts b/packages/api/src/shared/actions/tag.fetch.test.ts index 421fa81fa9..902b75de36 100644 --- a/packages/api/src/shared/actions/tag.fetch.test.ts +++ b/packages/api/src/shared/actions/tag.fetch.test.ts @@ -1,20 +1,19 @@ -import {beforeAll, expect, test} from "vitest"; -import {signIn, signOut} from "../../tests/auth"; -import {testReset} from "../../tests/testReset"; -import {selectCategories} from "../../indicateurs/actions/categorie.fetch"; -import {supabase} from "../../tests/supabase"; -import {selectTags} from "./tag.fetch"; +import { beforeAll, expect, test } from 'vitest'; +import { signIn, signOut } from '../../tests/auth'; +import { supabase } from '../../tests/supabase'; +import { testReset } from '../../tests/testReset'; +import { selectTags } from './tag.fetch'; beforeAll(async () => { - await signIn('yolododo'); - await testReset(); + await signIn('yolododo'); + await testReset(); - return async () => { - await signOut(); - }; + return async () => { + await signOut(); + }; }); test('Test selectTags', async () => { - const def = await selectTags(supabase, 1, 'service'); - expect(def!).not.toHaveLength(0); -}); \ No newline at end of file + const def = await selectTags(supabase, 1, 'service'); + expect(def).not.toHaveLength(0); +}); diff --git a/packages/api/src/shared/actions/tag.fetch.ts b/packages/api/src/shared/actions/tag.fetch.ts index c8ae7e35e5..e96d15d503 100644 --- a/packages/api/src/shared/actions/tag.fetch.ts +++ b/packages/api/src/shared/actions/tag.fetch.ts @@ -1,23 +1,23 @@ -import {DBClient} from "../../typeUtils"; -import {Tag, TypeTag} from "../domain/tag.schema"; -import {objectToCamel} from "ts-case-convert"; +import { Tag, TagType } from '@/backend/shared'; +import { objectToCamel } from 'ts-case-convert'; +import { DBClient } from '../../typeUtils'; /** * Récupère les tags d'une collectivité * @param dbClient client supabase * @param collectiviteId identifiant de la collectivité - * @param typeTag type de tag + * @param tagType type de tag * @return liste de tags */ export async function selectTags( - dbClient : DBClient, - collectiviteId : number, - typeTag : TypeTag -): Promise{ - const {data, error} = await dbClient - .from(`${typeTag}_tag` as const) - .select('id, nom, collectivite_id') - .eq('collectivite_id', collectiviteId); + dbClient: DBClient, + collectiviteId: number, + tagType: TagType +): Promise { + const { data } = await dbClient + .from(`${tagType}_tag` as const) + .select('id, nom, collectivite_id') + .eq('collectivite_id', collectiviteId); - return data ? objectToCamel(data) as Tag[] : []; -} \ No newline at end of file + return data ? (objectToCamel(data) as Tag[]) : []; +} diff --git a/packages/api/src/shared/actions/tag.save.test.ts b/packages/api/src/shared/actions/tag.save.test.ts index c304bae215..ac78a2fcec 100644 --- a/packages/api/src/shared/actions/tag.save.test.ts +++ b/packages/api/src/shared/actions/tag.save.test.ts @@ -1,29 +1,30 @@ -import {beforeAll, expect, test} from "vitest"; -import {signIn, signOut} from "../../tests/auth"; -import {testReset} from "../../tests/testReset"; -import {selectCategories} from "../../indicateurs/actions/categorie.fetch"; -import {supabase} from "../../tests/supabase"; -import {insertTags} from "./tag.save"; -import {Tag} from "../domain/tag.schema"; +import { TagInsert } from '@/backend/shared'; +import { beforeAll, expect, test } from 'vitest'; +import { signIn, signOut } from '../../tests/auth'; +import { supabase } from '../../tests/supabase'; +import { testReset } from '../../tests/testReset'; +import { insertTags } from './tag.save'; beforeAll(async () => { - await signIn('yolododo'); - await testReset(); + await signIn('yolododo'); + await testReset(); - return async () => { - await signOut(); - }; + return async () => { + await signOut(); + }; }); test('Test insertTags', async () => { - const toInsert : Tag[] = [{ - nom : 'test', - collectiviteId: 1 + const toInsert: TagInsert[] = [ + { + nom: 'test', + collectiviteId: 1, }, - { - nom : 'test2', - collectiviteId: 1 - }]; - const def = await insertTags(supabase, 'categorie', toInsert); - expect(def!).toHaveLength(2); -}); \ No newline at end of file + { + nom: 'test2', + collectiviteId: 1, + }, + ]; + const def = await insertTags(supabase, 'categorie', toInsert); + expect(def).toHaveLength(2); +}); diff --git a/packages/api/src/shared/actions/tag.save.ts b/packages/api/src/shared/actions/tag.save.ts index 214c2e2ff9..3fde781088 100644 --- a/packages/api/src/shared/actions/tag.save.ts +++ b/packages/api/src/shared/actions/tag.save.ts @@ -1,21 +1,21 @@ -import { DBClient } from '../../typeUtils'; -import { Tag, TagInsert, TypeTag } from '../domain/tag.schema'; +import { Tag, TagInsert, TagType } from '@/backend/shared'; import { objectToCamel, objectToSnake } from 'ts-case-convert'; +import { DBClient } from '../../typeUtils'; /** * Ajoute des tags * @param dbClient client supabase - * @param typeTag type de tag + * @param tagType type de tag * @param tags listes des tags à ajouter * @return liste de tags ajoutés avec leur identifiant */ export async function insertTags( dbClient: DBClient, - typeTag: TypeTag, + tagType: TagType, tags: TagInsert[] ): Promise { const { data } = await dbClient - .from(`${typeTag}_tag` as const) + .from(`${tagType}_tag` as const) .insert(objectToSnake(tags)) .select(); diff --git a/packages/api/src/shared/domain/index.ts b/packages/api/src/shared/domain/index.ts deleted file mode 100644 index 6822c7569f..0000000000 --- a/packages/api/src/shared/domain/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './tag.schema'; diff --git a/packages/api/src/shared/domain/tag.schema.ts b/packages/api/src/shared/domain/tag.schema.ts deleted file mode 100644 index 6ab9774df4..0000000000 --- a/packages/api/src/shared/domain/tag.schema.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { z } from 'zod'; - -export type TypeTag = - | 'personne' - | 'service' - | 'partenaire' - | 'categorie' - | 'financeur' - | 'structure' - | 'libre'; - -export const tagSchema = z.object({ - id: z.number(), - collectiviteId: z.number(), - nom: z.string(), -}); - -export type Tag = z.input; - -export const tagUpdateSchema = tagSchema.partial(); - -export type TagUpdate = z.input; - -export const tagInsertSchema = tagSchema.extend({ - id: z.number().optional(), -}); - -export type TagInsert = z.input; From 96ad8d2806e37d865437ab3fcb5a1e6b3bc1a757 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Thu, 19 Dec 2024 12:15:59 +0100 Subject: [PATCH 13/33] Redondant double negation --- .../collectivite/PlansActions/FicheAction/Budget/BudgetTab.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/BudgetTab.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/BudgetTab.tsx index cb0856b2c4..72715b880a 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/BudgetTab.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/BudgetTab.tsx @@ -60,7 +60,7 @@ const BudgetTab = ({ isReadonly, fiche, updateFiche }: BudgetTabProps) => { Budget prévisionnel total : - {!!budgetPrevisionnel ? ( + {budgetPrevisionnel ? ( ) : ( From 409842256d16ac732df56ae71ea19b3630ca6158 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Thu, 19 Dec 2024 12:20:13 +0100 Subject: [PATCH 14/33] Supprime du package `api` le schema `effetAttendu` de la fiche --- .../EffetsAttendusDropdown.tsx | 8 +- .../fiche-action-effet-attendu.table.ts | 2 +- .../models/update-fiche-action.request.ts | 2 +- .../action-impact-effet-attendu.table.ts | 4 +- backend/src/shared/index.ts | 1 + .../models/effet-attendu.table.ts | 2 + .../domain/fiche-action.schema.ts | 75 +------------------ 7 files changed, 13 insertions(+), 81 deletions(-) rename backend/src/{taxonomie => shared}/models/effet-attendu.table.ts (80%) diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/EffetsAttendusDropdown/EffetsAttendusDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/EffetsAttendusDropdown/EffetsAttendusDropdown.tsx index df1f8f50cd..18918bdc4c 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/EffetsAttendusDropdown/EffetsAttendusDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/EffetsAttendusDropdown/EffetsAttendusDropdown.tsx @@ -1,4 +1,4 @@ -import { EffetsAttendus } from '@/api/plan-actions'; +import { EffetAttendu } from '@/backend/shared'; import { SelectFilter, SelectMultipleProps } from '@/ui'; import { useEffetsAttendus } from './useEffetsAttendus'; @@ -6,8 +6,8 @@ type EffetsAttendusDropdownProps = Omit< SelectMultipleProps, 'values' | 'onChange' | 'options' > & { - values?: EffetsAttendus[]; - onChange: ({ effets }: { effets: EffetsAttendus[] }) => void; + values?: EffetAttendu[]; + onChange: ({ effets }: { effets: EffetAttendu[] }) => void; }; const EffetsAttendusDropdown = ({ @@ -26,7 +26,7 @@ const EffetsAttendusDropdown = ({ onChange({ effets: options.filter((v) => values?.includes(v.id) - ) as EffetsAttendus[], + ) as EffetAttendu[], }) } /> diff --git a/backend/src/fiches/models/fiche-action-effet-attendu.table.ts b/backend/src/fiches/models/fiche-action-effet-attendu.table.ts index cb979e9fbb..437595185d 100644 --- a/backend/src/fiches/models/fiche-action-effet-attendu.table.ts +++ b/backend/src/fiches/models/fiche-action-effet-attendu.table.ts @@ -1,6 +1,6 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; -import { effetAttenduTable } from '../../taxonomie/models/effet-attendu.table'; +import { effetAttenduTable } from '../../shared/models/effet-attendu.table'; export const ficheActionEffetAttenduTable = pgTable( 'fiche_action_effet_attendu', diff --git a/backend/src/fiches/models/update-fiche-action.request.ts b/backend/src/fiches/models/update-fiche-action.request.ts index 367a914821..cccdbb28f7 100644 --- a/backend/src/fiches/models/update-fiche-action.request.ts +++ b/backend/src/fiches/models/update-fiche-action.request.ts @@ -14,10 +14,10 @@ import { updateFicheActionSchema, } from '../../plans/fiches/shared/models/fiche-action.table'; import { actionRelationSchema } from '../../referentiels/models/action-relation.table'; +import { effetAttenduSchema } from '../../shared/models/effet-attendu.table'; import { financeurTagSchema } from '../../shared/models/financeur-tag.table'; import { sousThematiqueSchema } from '../../shared/models/sous-thematique.table'; import { thematiqueSchema } from '../../shared/models/thematique.table'; -import { effetAttenduSchema } from '../../taxonomie/models/effet-attendu.table'; // There is no proper Pilote or Referent tables, so we use a custom schema here export const personneSchema = z.object({ diff --git a/backend/src/panier/models/action-impact-effet-attendu.table.ts b/backend/src/panier/models/action-impact-effet-attendu.table.ts index 5f65e001e0..6fa9b9d30f 100644 --- a/backend/src/panier/models/action-impact-effet-attendu.table.ts +++ b/backend/src/panier/models/action-impact-effet-attendu.table.ts @@ -1,7 +1,7 @@ +import { InferSelectModel } from 'drizzle-orm'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { effetAttenduTable } from '../../taxonomie/models/effet-attendu.table'; +import { effetAttenduTable } from '../../shared/models/effet-attendu.table'; import { actionImpactTable } from './action-impact.table'; -import { InferSelectModel } from 'drizzle-orm'; export const actionImpactEffetAttenduTable = pgTable( 'action_impact_effet_attendu', diff --git a/backend/src/shared/index.ts b/backend/src/shared/index.ts index c5fc43d74b..a283da28a0 100644 --- a/backend/src/shared/index.ts +++ b/backend/src/shared/index.ts @@ -1,3 +1,4 @@ +export * from './models/effet-attendu.table'; export * from './models/financeur-tag.table'; export * from './models/libre-tag.table'; export * from './models/partenaire-tag.table'; diff --git a/backend/src/taxonomie/models/effet-attendu.table.ts b/backend/src/shared/models/effet-attendu.table.ts similarity index 80% rename from backend/src/taxonomie/models/effet-attendu.table.ts rename to backend/src/shared/models/effet-attendu.table.ts index 5d32944f64..042a5139ee 100644 --- a/backend/src/taxonomie/models/effet-attendu.table.ts +++ b/backend/src/shared/models/effet-attendu.table.ts @@ -1,5 +1,6 @@ import { pgTable, serial, text } from 'drizzle-orm/pg-core'; import { createSelectSchema } from 'drizzle-zod'; +import z from 'zod'; export const effetAttenduTable = pgTable('effet_attendu', { id: serial('id').primaryKey(), @@ -8,3 +9,4 @@ export const effetAttenduTable = pgTable('effet_attendu', { }); export const effetAttenduSchema = createSelectSchema(effetAttenduTable); +export type EffetAttendu = z.infer; diff --git a/packages/api/src/plan-actions/domain/fiche-action.schema.ts b/packages/api/src/plan-actions/domain/fiche-action.schema.ts index d534aac9f5..0adac4bcda 100644 --- a/packages/api/src/plan-actions/domain/fiche-action.schema.ts +++ b/packages/api/src/plan-actions/domain/fiche-action.schema.ts @@ -10,6 +10,7 @@ import { statutsEnumSchema, } from '@/backend/plans/fiches'; import { + effetAttenduSchema, sousThematiqueSchema, tagSchema, tempsDeMiseEnOeuvreSchema, @@ -17,70 +18,6 @@ import { } from '@/backend/shared'; import { z } from 'zod'; -// Enums - -// export const statutSchema = z.enum([ -// 'À venir', -// 'En cours', -// 'Réalisé', -// 'En pause', -// 'Abandonné', -// 'Bloqué', -// 'En retard', -// 'A discuter', -// ]); - -// export type Statut = z.infer; - -// export const niveauPrioriteSchema = z.enum(['Élevé', 'Moyen', 'Bas']); - -// export type NiveauPriorite = z.infer; - -// export const cibleSchema = z.enum([ -// 'Grand public', -// 'Associations', -// 'Grand public et associations', -// 'Public Scolaire', -// 'Autres collectivités du territoire', -// 'Acteurs économiques', -// 'Acteurs économiques du secteur primaire', -// 'Acteurs économiques du secteur secondaire', -// 'Acteurs économiques du secteur tertiaire', -// 'Partenaires', -// 'Collectivité elle-même', -// 'Elus locaux', -// 'Agents', -// ]); - -// export type Cible = z.infer; - -// export const participationCitoyenneTypeSchema = z.enum([ -// 'pas-de-participation', -// 'information', -// 'consultation', -// 'concertation', -// 'co-construction', -// ]); - -// export type ParticipationCitoyenne = z.infer< -// typeof participationCitoyenne -// >; - -export const effetsAttendus = z.object({ - id: z.number(), - nom: z.string(), - notice: z.string().nullish(), -}); - -export type EffetsAttendus = z.infer; - -// export const financeurSchema = z.object({ -// financeurTag: tagSchema, -// montantTtc: z.number().nullish(), -// }); - -// export type Financeur = z.infer; - const auteur = z.object({ userId: z.string(), prenom: z.string(), @@ -88,14 +25,6 @@ const auteur = z.object({ email: z.string(), }); -// const libreTagSchema = z.object({ -// id: z.number().nullish(), -// nom: z.string(), -// collectivitedId: z.number().nullish(), -// createdAt: z.string().date().nullish(), -// createdBy: z.string().nullish(), -// }); - export const ficheActionSchema = z.object({ id: z.number(), collectiviteId: z.number(), @@ -114,7 +43,7 @@ export const ficheActionSchema = z.object({ niveauPriorite: prioriteEnumSchema.nullish(), cibles: ciblesEnumSchema.array().nullish(), restreint: z.boolean().nullish(), - resultatsAttendus: effetsAttendus.array().nullish(), + resultatsAttendus: effetAttenduSchema.array().nullish(), objectifs: z.string().nullish(), budgetPrevisionnel: z.number().nullish(), calendrier: z.string().nullish(), From dca538cd2786cbe999497099a731de6e7bba94f1 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Thu, 19 Dec 2024 14:40:19 +0100 Subject: [PATCH 15/33] Move models from `fiches` to `plans/fiches` --- .../detail/useIndicateurServices.ts | 4 +- .../IndicateurCardEditModal.tsx | 3 +- .../useUpdateIndicateurCard.ts | 3 +- .../ActionsGroupees/EditionTagsLibres.tsx | 2 +- .../FicheAction/Budget/FinanceursInput.tsx | 13 ++++-- .../FicheAction/Budget/FinanceursListe.tsx | 4 +- .../FinanceursDropdown/FinanceursDropdown.tsx | 2 +- .../FinanceursDropdown/useFinanceursListe.ts | 2 +- .../PartenairesDropdown.tsx | 2 +- .../usePartenairesListe.ts | 2 +- .../ServicesPilotesDropdown.tsx | 2 +- .../useServicesPilotesListe.ts | 2 +- .../StructuresDropdown/StructuresDropdown.tsx | 2 +- .../StructuresDropdown/useStructuresListe.ts | 2 +- .../TagsSuiviPersoDropdown.tsx | 2 +- .../useTagsSuiviPersoListe.ts | 2 +- .../src/ui/dropdownLists/tags/SelectTags.tsx | 2 +- .../src/ui/dropdownLists/tags/useTagCreate.ts | 2 +- .../src/ui/dropdownLists/tags/useTagUpdate.ts | 2 +- backend/src/auth/models/dcp.table.ts | 10 +++++ backend/src/collectivites/index.ts | 7 ++++ .../services/personnes.service.ts | 2 +- .../shared/models/financeur-tag.table.ts | 0 .../shared/models/libre-tag.table.ts | 2 +- .../shared/models/partenaire-tag.table.ts | 2 +- .../shared}/models/personne-tag.table.ts | 7 +++- .../shared/models/service-tag.table.ts | 2 +- .../shared/models/structure-tag.table.ts | 2 +- .../shared/models/tag.table-base.ts | 2 +- .../src/fiches/bulk-edit/bulk-edit.service.ts | 4 +- .../controllers/fiches-action.controller.ts | 6 +-- .../count-by-statut.service.ts | 8 ++-- .../fiche-action-etape.service.ts | 2 +- backend/src/fiches/fiches-action.module.ts | 4 +- .../models/fiche-action-service.table.ts | 18 -------- .../models/update-fiche-action.request.ts | 4 +- .../upsert-fiche-action-note.request.ts | 6 +-- backend/src/indicateurs/index.ts | 1 + .../indicateur-filtre.service.ts | 5 +-- .../models/indicateur-pilote.table.ts | 5 +-- .../models/indicateur-service-tag.table.ts | 2 +- .../services => plans/fiches}/axe.service.ts | 7 +--- .../fiches}/fiche.service.ts | 20 ++++----- .../fiches}/fiches-action-update.service.ts | 42 +++++++++---------- backend/src/plans/fiches/index.ts | 10 +++++ .../models/fiche-action-action.table.ts | 4 +- .../fiche-action-effet-attendu.table.ts | 4 +- .../fiche-action-financeur-tag.table.ts | 12 ++++-- .../models/fiche-action-indicateur.table.ts | 4 +- .../models/fiche-action-libre-tag.table.ts | 4 +- .../shared}/models/fiche-action-lien.table.ts | 2 +- .../shared}/models/fiche-action-note.table.ts | 9 +--- .../fiche-action-partenaire-tag.table.ts | 4 +- .../models/fiche-action-pilote.table.ts | 4 +- .../models/fiche-action-referent.table.ts | 4 +- .../models/fiche-action-service-tag.table.ts | 4 +- .../fiche-action-sous-thematique.table.ts | 4 +- .../fiche-action-structure-tag.table.ts | 4 +- .../models/fiche-action-thematique.table.ts | 4 +- backend/src/referentiels/index.ts | 1 + backend/src/shared/index.ts | 6 --- .../taxonomie/models/categorie-tag.table.ts | 2 +- backend/src/taxonomie/services/tag.service.ts | 4 +- .../actions/indicateur.save.test.ts | 3 +- .../indicateurs/actions/indicateur.save.ts | 3 +- .../domain/fiche-action.schema.ts | 19 ++++----- packages/api/src/shared/actions/tag.fetch.ts | 2 +- .../api/src/shared/actions/tag.save.test.ts | 2 +- packages/api/src/shared/actions/tag.save.ts | 2 +- 69 files changed, 180 insertions(+), 166 deletions(-) create mode 100644 backend/src/collectivites/index.ts rename backend/src/{ => collectivites}/shared/models/financeur-tag.table.ts (100%) rename backend/src/{ => collectivites}/shared/models/libre-tag.table.ts (89%) rename backend/src/{ => collectivites}/shared/models/partenaire-tag.table.ts (87%) rename backend/src/{taxonomie => collectivites/shared}/models/personne-tag.table.ts (56%) rename backend/src/{ => collectivites}/shared/models/service-tag.table.ts (86%) rename backend/src/{ => collectivites}/shared/models/structure-tag.table.ts (87%) rename backend/src/{ => collectivites}/shared/models/tag.table-base.ts (90%) delete mode 100644 backend/src/fiches/models/fiche-action-service.table.ts create mode 100644 backend/src/indicateurs/index.ts rename backend/src/{fiches/services => plans/fiches}/axe.service.ts (91%) rename backend/src/{fiches/services => plans/fiches}/fiche.service.ts (90%) rename backend/src/{fiches/services => plans/fiches}/fiches-action-update.service.ts (90%) rename backend/src/{fiches => plans/fiches/shared}/models/fiche-action-action.table.ts (70%) rename backend/src/{fiches => plans/fiches/shared}/models/fiche-action-effet-attendu.table.ts (73%) rename backend/src/{fiches => plans/fiches/shared}/models/fiche-action-indicateur.table.ts (70%) rename backend/src/{fiches => plans/fiches/shared}/models/fiche-action-libre-tag.table.ts (80%) rename backend/src/{fiches => plans/fiches/shared}/models/fiche-action-lien.table.ts (82%) rename backend/src/{fiches => plans/fiches/shared}/models/fiche-action-note.table.ts (85%) rename backend/src/{fiches => plans/fiches/shared}/models/fiche-action-partenaire-tag.table.ts (81%) rename backend/src/{fiches => plans/fiches/shared}/models/fiche-action-pilote.table.ts (83%) rename backend/src/{fiches => plans/fiches/shared}/models/fiche-action-referent.table.ts (77%) rename backend/src/{fiches => plans/fiches/shared}/models/fiche-action-service-tag.table.ts (81%) rename backend/src/{fiches => plans/fiches/shared}/models/fiche-action-sous-thematique.table.ts (72%) rename backend/src/{fiches => plans/fiches/shared}/models/fiche-action-structure-tag.table.ts (81%) rename backend/src/{fiches => plans/fiches/shared}/models/fiche-action-thematique.table.ts (72%) create mode 100644 backend/src/referentiels/index.ts diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/Indicateur/detail/useIndicateurServices.ts b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/Indicateur/detail/useIndicateurServices.ts index a1313cd4d4..59e3dd6d29 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/Indicateur/detail/useIndicateurServices.ts +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/Indicateur/detail/useIndicateurServices.ts @@ -1,7 +1,7 @@ import { Indicateurs } from '@/api'; import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; -import { Tag } from '@/backend/shared'; +import { Tag } from '@/backend/collectivites'; import { useMutation, useQuery, useQueryClient } from 'react-query'; /** Met à jour les services pilotes d'un indicateur */ @@ -20,7 +20,7 @@ export const useUpsertIndicateurServices = (indicateurId: number) => { services ); }, - onSuccess: (data, variables) => { + onSuccess: () => { // recharge les infos complémentaires associées à l'indicateur queryClient.invalidateQueries([ 'indicateur_services', diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/IndicateurCardEditModal.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/IndicateurCardEditModal.tsx index 966e2d025f..d177c3b7e0 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/IndicateurCardEditModal.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/IndicateurCardEditModal.tsx @@ -3,7 +3,8 @@ import { useUpdateIndicateurCard } from '@/app/app/pages/collectivite/Indicateur import PersonnesDropdown from '@/app/ui/dropdownLists/PersonnesDropdown/PersonnesDropdown'; import ServicesPilotesDropdown from '@/app/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown'; import ThematiquesDropdown from '@/app/ui/dropdownLists/ThematiquesDropdown/ThematiquesDropdown'; -import { Tag, Thematique } from '@/backend/shared'; +import { Tag } from '@/backend/collectivites'; +import { Thematique } from '@/backend/shared'; import { Field, Modal, ModalFooterOKCancel } from '@/ui'; import { OpenState } from '@/ui/utils/types'; import { useEffect, useState } from 'react'; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/useUpdateIndicateurCard.ts b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/useUpdateIndicateurCard.ts index 3964a82f06..e566071a0f 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/useUpdateIndicateurCard.ts +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/useUpdateIndicateurCard.ts @@ -2,7 +2,8 @@ import { Indicateurs } from '@/api'; import { Personne } from '@/api/collectivites'; import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; -import { Tag, Thematique } from '@/backend/shared'; +import { Tag } from '@/backend/collectivites'; +import { Thematique } from '@/backend/shared'; import { useMutation } from 'react-query'; /** Met à jour les pilotes, les services pilotes, les thématique d'un indicateur */ diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionTagsLibres.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionTagsLibres.tsx index d25f52adf9..0eeb8384dc 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionTagsLibres.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionTagsLibres.tsx @@ -1,6 +1,6 @@ import { useCollectiviteId } from '@/app/core-logic/hooks/params'; import TagsSuiviPersoDropdown from '@/app/ui/dropdownLists/TagsSuiviPersoDropdown/TagsSuiviPersoDropdown'; -import { Tag } from '@/backend/shared'; +import { Tag } from '@/backend/collectivites'; import { Button, Field, useEventTracker } from '@/ui'; import { OpenState } from '@/ui/utils/types'; import { useState } from 'react'; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursInput.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursInput.tsx index 624ce84778..6db4202032 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursInput.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursInput.tsx @@ -1,12 +1,12 @@ import FinanceursDropdown from '@/app/ui/dropdownLists/FinanceursDropdown/FinanceursDropdown'; -import { Financeur } from '@/backend/plans/fiches'; +import { Financeur, FinanceurUpdate } from '@/backend/plans/fiches'; import { Button, Field, Input } from '@/ui'; type FinanceurPartial = Omit; type FinanceursInputProps = { - financeurs: FinanceurPartial[] | null | undefined; - onUpdate: (financeurs: FinanceurPartial[]) => void; + financeurs: FinanceurUpdate[] | null | undefined; + onUpdate: (financeurs: FinanceurUpdate[]) => void; }; const FinanceursInput = ({ financeurs, onUpdate }: FinanceursInputProps) => { @@ -82,7 +82,12 @@ const FinanceursInput = ({ financeurs, onUpdate }: FinanceursInputProps) => { selectedFinanceur && onUpdate([ ...(financeurs ?? []), - { financeurTag: selectedFinanceur, montantTtc: null }, + { + financeurTag: selectedFinanceur, + financeurTagId: selectedFinanceur.id, + ficheId: financeurs?.[0].ficheId ?? 0, + montantTtc: null, + }, ]) } /> diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursListe.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursListe.tsx index 600de753af..e0e52dc470 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursListe.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursListe.tsx @@ -1,9 +1,9 @@ import { getFormattedNumber } from '@/app/utils/formatUtils'; -import { Financeur } from '@/backend/plans/fiches'; +import { FinanceurUpdate } from '@/backend/plans/fiches'; import { Badge } from '@/ui'; type FinanceursListeProps = { - financeurs?: Financeur[]; + financeurs?: FinanceurUpdate[]; }; const FinanceursListe = ({ financeurs }: FinanceursListeProps) => { diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/FinanceursDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/FinanceursDropdown.tsx index 7ef751d37c..2894c6dc96 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/FinanceursDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/FinanceursDropdown.tsx @@ -1,4 +1,4 @@ -import { Tag } from '@/backend/shared'; +import { Tag } from '@/backend/collectivites'; import { SelectMultipleProps } from '@/ui'; import SelectTags from '../tags/SelectTags'; import { useFinanceursListe } from './useFinanceursListe'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/useFinanceursListe.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/useFinanceursListe.ts index 475e461b94..dc397c4dcd 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/useFinanceursListe.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/useFinanceursListe.ts @@ -1,6 +1,6 @@ import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; -import { Tag } from '@/backend/shared'; +import { Tag } from '@/backend/collectivites'; import { useQuery } from 'react-query'; import { objectToCamel } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/PartenairesDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/PartenairesDropdown.tsx index 5580c7f4d0..c7c14fc913 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/PartenairesDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/PartenairesDropdown.tsx @@ -1,4 +1,4 @@ -import { Tag } from '@/backend/shared'; +import { Tag } from '@/backend/collectivites'; import { SelectMultipleProps } from '@/ui'; import SelectTags from '../tags/SelectTags'; import { usePartenairesListe } from './usePartenairesListe'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/usePartenairesListe.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/usePartenairesListe.ts index 18bd7f2de9..1722c5dc74 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/usePartenairesListe.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/usePartenairesListe.ts @@ -1,6 +1,6 @@ import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; -import { Tag } from '@/backend/shared'; +import { Tag } from '@/backend/collectivites'; import { useQuery } from 'react-query'; import { objectToCamel } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown.tsx index b0b936004a..75567c3140 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown.tsx @@ -1,4 +1,4 @@ -import { Tag } from '@/backend/shared'; +import { Tag } from '@/backend/collectivites'; import { SelectMultipleProps } from '@/ui'; import SelectTags from '../tags/SelectTags'; import { useServicesPilotesListe } from './useServicesPilotesListe'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/useServicesPilotesListe.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/useServicesPilotesListe.ts index 4402a0e4d1..7d98653aa6 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/useServicesPilotesListe.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/useServicesPilotesListe.ts @@ -1,6 +1,6 @@ import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; -import { Tag } from '@/backend/shared'; +import { Tag } from '@/backend/collectivites'; import { useQuery } from 'react-query'; import { objectToCamel } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/StructuresDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/StructuresDropdown.tsx index cc9ba1746e..b162391307 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/StructuresDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/StructuresDropdown.tsx @@ -1,4 +1,4 @@ -import { Tag } from '@/backend/shared'; +import { Tag } from '@/backend/collectivites'; import { SelectMultipleProps } from '@/ui'; import SelectTags from '../tags/SelectTags'; import { useStructuresListe } from './useStructuresListe'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/useStructuresListe.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/useStructuresListe.ts index a6cd8d6e09..1167fdfac3 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/useStructuresListe.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/useStructuresListe.ts @@ -1,6 +1,6 @@ import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; -import { Tag } from '@/backend/shared'; +import { Tag } from '@/backend/collectivites'; import { useQuery } from 'react-query'; import { objectToCamel } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/TagsSuiviPersoDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/TagsSuiviPersoDropdown.tsx index 0b79c38584..01f7a9c395 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/TagsSuiviPersoDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/TagsSuiviPersoDropdown.tsx @@ -1,4 +1,4 @@ -import { Tag } from '@/backend/shared'; +import { Tag } from '@/backend/collectivites'; import { SelectMultipleProps } from '@/ui'; import SelectTags from '../tags/SelectTags'; import { useTagsSuiviPersoListe } from './useTagsSuiviPersoListe'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/useTagsSuiviPersoListe.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/useTagsSuiviPersoListe.ts index 55d0c017b2..e18faba78c 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/useTagsSuiviPersoListe.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/useTagsSuiviPersoListe.ts @@ -1,6 +1,6 @@ import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; -import { Tag } from '@/backend/shared'; +import { Tag } from '@/backend/collectivites'; import { useQuery } from 'react-query'; import { objectToCamel } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/SelectTags.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/SelectTags.tsx index e0b241aaf3..8be3d875f6 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/SelectTags.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/SelectTags.tsx @@ -1,6 +1,6 @@ import { TableTag } from '@/api'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; -import { Tag } from '@/backend/shared'; +import { Tag } from '@/backend/collectivites'; import { Option, OptionValue, SelectFilter, SelectMultipleProps } from '@/ui'; import { useEffect } from 'react'; import { QueryKey } from 'react-query'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagCreate.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagCreate.ts index 2e75dc20a4..f0978b73d5 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagCreate.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagCreate.ts @@ -1,6 +1,6 @@ import { CollectiviteTag, TableTag } from '@/api'; import { supabaseClient } from '@/app/core-logic/api/supabase'; -import { TagInsert } from '@/backend/shared'; +import { TagInsert } from '@/backend/collectivites'; import { QueryKey, useMutation, useQueryClient } from 'react-query'; import { objectToSnake } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagUpdate.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagUpdate.ts index 38714f8589..3d021f8cef 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagUpdate.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagUpdate.ts @@ -1,6 +1,6 @@ import { TableTag } from '@/api'; import { supabaseClient } from '@/app/core-logic/api/supabase'; -import { TagUpdate } from '@/backend/shared'; +import { TagUpdate } from '@/backend/collectivites'; import { QueryKey, useMutation, useQueryClient } from 'react-query'; import { objectToSnake } from 'ts-case-convert'; diff --git a/backend/src/auth/models/dcp.table.ts b/backend/src/auth/models/dcp.table.ts index 5e91520e41..14df13b45b 100644 --- a/backend/src/auth/models/dcp.table.ts +++ b/backend/src/auth/models/dcp.table.ts @@ -6,6 +6,7 @@ import { uuid, varchar, } from 'drizzle-orm/pg-core'; +import { createSelectSchema } from 'drizzle-zod'; import { createdAt, modifiedAt } from '../../utils/column.utils'; export const dcpTable = pgTable('dcp', { @@ -23,3 +24,12 @@ export const dcpTable = pgTable('dcp', { mode: 'string', }), }); + +export const dcpSchema = createSelectSchema(dcpTable); + +export const authorSchema = dcpSchema.pick({ + userId: true, + nom: true, + prenom: true, + email: true, +}); diff --git a/backend/src/collectivites/index.ts b/backend/src/collectivites/index.ts new file mode 100644 index 0000000000..9a14e5b08e --- /dev/null +++ b/backend/src/collectivites/index.ts @@ -0,0 +1,7 @@ +export * from './shared/models/financeur-tag.table'; +export * from './shared/models/libre-tag.table'; +export * from './shared/models/partenaire-tag.table'; +export * from './shared/models/personne-tag.table'; +export * from './shared/models/service-tag.table'; +export * from './shared/models/structure-tag.table'; +export * from './shared/models/tag.table-base'; diff --git a/backend/src/collectivites/services/personnes.service.ts b/backend/src/collectivites/services/personnes.service.ts index f1dce87719..f82cead51f 100644 --- a/backend/src/collectivites/services/personnes.service.ts +++ b/backend/src/collectivites/services/personnes.service.ts @@ -1,6 +1,6 @@ import { dcpTable, utilisateurDroitTable } from '@/backend/auth'; +import { personneTagTable } from '@/backend/collectivites/shared/models/personne-tag.table'; import { DatabaseService } from '@/backend/common'; -import { personneTagTable } from '@/backend/taxonomie/models/personne-tag.table'; import { Injectable } from '@nestjs/common'; import { and, eq, sql } from 'drizzle-orm'; import { union } from 'drizzle-orm/pg-core'; diff --git a/backend/src/shared/models/financeur-tag.table.ts b/backend/src/collectivites/shared/models/financeur-tag.table.ts similarity index 100% rename from backend/src/shared/models/financeur-tag.table.ts rename to backend/src/collectivites/shared/models/financeur-tag.table.ts diff --git a/backend/src/shared/models/libre-tag.table.ts b/backend/src/collectivites/shared/models/libre-tag.table.ts similarity index 89% rename from backend/src/shared/models/libre-tag.table.ts rename to backend/src/collectivites/shared/models/libre-tag.table.ts index 2f100a3ad0..156ba45734 100644 --- a/backend/src/shared/models/libre-tag.table.ts +++ b/backend/src/collectivites/shared/models/libre-tag.table.ts @@ -1,7 +1,7 @@ import { pgTable, uniqueIndex } from 'drizzle-orm/pg-core'; import { createSelectSchema } from 'drizzle-zod'; import z from 'zod'; -import { createdAt, createdBy } from '../../utils/column.utils'; +import { createdAt, createdBy } from '../../../utils/column.utils'; import { tagTableBase } from './tag.table-base'; export const libreTagTable = pgTable( diff --git a/backend/src/shared/models/partenaire-tag.table.ts b/backend/src/collectivites/shared/models/partenaire-tag.table.ts similarity index 87% rename from backend/src/shared/models/partenaire-tag.table.ts rename to backend/src/collectivites/shared/models/partenaire-tag.table.ts index 8ef1bb2f00..653e667ec5 100644 --- a/backend/src/shared/models/partenaire-tag.table.ts +++ b/backend/src/collectivites/shared/models/partenaire-tag.table.ts @@ -1,6 +1,6 @@ import { pgTable, uniqueIndex } from 'drizzle-orm/pg-core'; import { createSelectSchema } from 'drizzle-zod'; -import { tagTableBase } from '../../shared/models/tag.table-base'; +import { tagTableBase } from './tag.table-base'; export const partenaireTagTable = pgTable( 'partenaire_tag', diff --git a/backend/src/taxonomie/models/personne-tag.table.ts b/backend/src/collectivites/shared/models/personne-tag.table.ts similarity index 56% rename from backend/src/taxonomie/models/personne-tag.table.ts rename to backend/src/collectivites/shared/models/personne-tag.table.ts index 59accd5d62..443cea86a7 100644 --- a/backend/src/taxonomie/models/personne-tag.table.ts +++ b/backend/src/collectivites/shared/models/personne-tag.table.ts @@ -1,5 +1,7 @@ import { pgTable, uniqueIndex } from 'drizzle-orm/pg-core'; -import { tagTableBase } from '../../shared/models/tag.table-base'; +import { createSelectSchema } from 'drizzle-zod'; +import z from 'zod'; +import { tagTableBase } from './tag.table-base'; export const personneTagTable = pgTable( 'personne_tag', @@ -12,3 +14,6 @@ export const personneTagTable = pgTable( }; } ); + +export const personneTagSchema = createSelectSchema(personneTagTable); +export type PersonneTag = z.infer; diff --git a/backend/src/shared/models/service-tag.table.ts b/backend/src/collectivites/shared/models/service-tag.table.ts similarity index 86% rename from backend/src/shared/models/service-tag.table.ts rename to backend/src/collectivites/shared/models/service-tag.table.ts index 409cd8f48b..8546e119fb 100644 --- a/backend/src/shared/models/service-tag.table.ts +++ b/backend/src/collectivites/shared/models/service-tag.table.ts @@ -1,6 +1,6 @@ import { pgTable, uniqueIndex } from 'drizzle-orm/pg-core'; import { createSelectSchema } from 'drizzle-zod'; -import { tagTableBase } from '../../shared/models/tag.table-base'; +import { tagTableBase } from './tag.table-base'; export const serviceTagTable = pgTable('service_tag', tagTableBase, (table) => { return { diff --git a/backend/src/shared/models/structure-tag.table.ts b/backend/src/collectivites/shared/models/structure-tag.table.ts similarity index 87% rename from backend/src/shared/models/structure-tag.table.ts rename to backend/src/collectivites/shared/models/structure-tag.table.ts index bd63181ae7..68fc7b2ef8 100644 --- a/backend/src/shared/models/structure-tag.table.ts +++ b/backend/src/collectivites/shared/models/structure-tag.table.ts @@ -1,6 +1,6 @@ import { pgTable, uniqueIndex } from 'drizzle-orm/pg-core'; import { createSelectSchema } from 'drizzle-zod'; -import { tagTableBase } from '../../shared/models/tag.table-base'; +import { tagTableBase } from './tag.table-base'; export const structureTagTable = pgTable( 'structure_tag', diff --git a/backend/src/shared/models/tag.table-base.ts b/backend/src/collectivites/shared/models/tag.table-base.ts similarity index 90% rename from backend/src/shared/models/tag.table-base.ts rename to backend/src/collectivites/shared/models/tag.table-base.ts index 3b13abe8fd..8217a66a3f 100644 --- a/backend/src/shared/models/tag.table-base.ts +++ b/backend/src/collectivites/shared/models/tag.table-base.ts @@ -1,6 +1,6 @@ import { integer, serial, text } from 'drizzle-orm/pg-core'; import z from 'zod'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../models/collectivite.table'; export type TagType = | 'personne' diff --git a/backend/src/fiches/bulk-edit/bulk-edit.service.ts b/backend/src/fiches/bulk-edit/bulk-edit.service.ts index f374fa500b..4b0330cb92 100644 --- a/backend/src/fiches/bulk-edit/bulk-edit.service.ts +++ b/backend/src/fiches/bulk-edit/bulk-edit.service.ts @@ -3,15 +3,15 @@ import { PermissionService } from '@/backend/auth/authorizations/permission.serv import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; import { AuthUser } from '@/backend/auth/models/auth.models'; import { DatabaseService } from '@/backend/common'; +import { ficheActionLibreTagTable } from '@/backend/plans/fiches'; import { Injectable } from '@nestjs/common'; import { and, inArray, or } from 'drizzle-orm'; import z from 'zod'; +import { ficheActionPiloteTable } from '../../plans/fiches/shared/models/fiche-action-pilote.table'; import { ficheActionSchema, ficheActionTable, } from '../../plans/fiches/shared/models/fiche-action.table'; -import { ficheActionLibreTagTable } from '../models/fiche-action-libre-tag.table'; -import { ficheActionPiloteTable } from '../models/fiche-action-pilote.table'; import { updateFicheActionRequestSchema } from '../models/update-fiche-action.request'; @Injectable() diff --git a/backend/src/fiches/controllers/fiches-action.controller.ts b/backend/src/fiches/controllers/fiches-action.controller.ts index 01bcf0ff09..87787b32c7 100644 --- a/backend/src/fiches/controllers/fiches-action.controller.ts +++ b/backend/src/fiches/controllers/fiches-action.controller.ts @@ -1,3 +1,4 @@ +import { ficheActionNoteSchema } from '@/backend/plans/fiches'; import { createZodDto } from '@anatine/zod-nestjs'; import { Body, @@ -12,8 +13,9 @@ import { ApiOkResponse, ApiTags } from '@nestjs/swagger'; import { z } from 'zod'; import { TokenInfo } from '../../auth/decorators/token-info.decorators'; import type { AuthenticatedUser } from '../../auth/models/auth.models'; +import FicheService from '../../plans/fiches/fiche.service'; +import FichesActionUpdateService from '../../plans/fiches/fiches-action-update.service'; import { CountByStatutService } from '../count-by-statut/count-by-statut.service'; -import { ficheActionNoteSchema } from '../models/fiche-action-note.table'; import { getFichesActionSyntheseSchema } from '../models/get-fiches-action-synthese.response'; import { getFichesActionFilterRequestSchema } from '../models/get-fiches-actions-filter.request'; import { updateFicheActionRequestSchema } from '../models/update-fiche-action.request'; @@ -21,8 +23,6 @@ import { deleteFicheActionNotesRequestSchema, upsertFicheActionNotesRequestSchema, } from '../models/upsert-fiche-action-note.request'; -import FicheService from '../services/fiche.service'; -import FichesActionUpdateService from '../services/fiches-action-update.service'; /** * Création des classes de réponse à partir du schema pour générer automatiquement la documentation OpenAPI diff --git a/backend/src/fiches/count-by-statut/count-by-statut.service.ts b/backend/src/fiches/count-by-statut/count-by-statut.service.ts index 24a6f32519..b92b4c6ee0 100644 --- a/backend/src/fiches/count-by-statut/count-by-statut.service.ts +++ b/backend/src/fiches/count-by-statut/count-by-statut.service.ts @@ -1,3 +1,7 @@ +import { + ficheActionPartenaireTagTable, + ficheActionServiceTagTable, +} from '@/backend/plans/fiches'; import { Injectable, Logger } from '@nestjs/common'; import { and, @@ -17,14 +21,12 @@ import { getModifiedSinceDate } from '../../common/models/modified-since.enum'; import DatabaseService from '../../common/services/database.service'; import { axeTable } from '../../plans/fiches/shared/models/axe.table'; import { ficheActionAxeTable } from '../../plans/fiches/shared/models/fiche-action-axe.table'; +import { ficheActionPiloteTable } from '../../plans/fiches/shared/models/fiche-action-pilote.table'; import { ficheActionTable, SANS_STATUT_FICHE_ACTION_SYNTHESE_KEY, statutsEnumValues, } from '../../plans/fiches/shared/models/fiche-action.table'; -import { ficheActionPartenaireTagTable } from '../models/fiche-action-partenaire-tag.table'; -import { ficheActionPiloteTable } from '../models/fiche-action-pilote.table'; -import { ficheActionServiceTagTable } from '../models/fiche-action-service.table'; import { GetFichesActionFilterRequestType } from '../models/get-fiches-actions-filter.request'; @Injectable() diff --git a/backend/src/fiches/fiche-action-etape/fiche-action-etape.service.ts b/backend/src/fiches/fiche-action-etape/fiche-action-etape.service.ts index faa1b913e1..830925c9db 100644 --- a/backend/src/fiches/fiche-action-etape/fiche-action-etape.service.ts +++ b/backend/src/fiches/fiche-action-etape/fiche-action-etape.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { and, eq, gt, gte, lt, lte, sql } from 'drizzle-orm'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import DatabaseService from '../../common/services/database.service'; -import FicheService from '../services/fiche.service'; +import FicheService from '../../plans/fiches/fiche.service'; import { ficheActionEtapeTable, FicheActionEtapeType, diff --git a/backend/src/fiches/fiches-action.module.ts b/backend/src/fiches/fiches-action.module.ts index acc6223739..7da7f9d17c 100644 --- a/backend/src/fiches/fiches-action.module.ts +++ b/backend/src/fiches/fiches-action.module.ts @@ -2,6 +2,8 @@ import { Module } from '@nestjs/common'; import { AuthModule } from '../auth/auth.module'; import { CollectivitesModule } from '../collectivites/collectivites.module'; import { CommonModule } from '../common/common.module'; +import FicheService from '../plans/fiches/fiche.service'; +import FichesActionUpdateService from '../plans/fiches/fiches-action-update.service'; import TagService from '../taxonomie/services/tag.service'; import { BulkEditRouter } from './bulk-edit/bulk-edit.router'; import { BulkEditService } from './bulk-edit/bulk-edit.service'; @@ -10,8 +12,6 @@ import { CountByStatutRouter } from './count-by-statut/count-by-statut.router'; import { CountByStatutService } from './count-by-statut/count-by-statut.service'; import { FicheActionEtapeRouter } from './fiche-action-etape/fiche-action-etape.router'; import { FicheActionEtapeService } from './fiche-action-etape/fiche-action-etape.service'; -import FicheService from './services/fiche.service'; -import FichesActionUpdateService from './services/fiches-action-update.service'; @Module({ imports: [CommonModule, AuthModule, CollectivitesModule], diff --git a/backend/src/fiches/models/fiche-action-service.table.ts b/backend/src/fiches/models/fiche-action-service.table.ts deleted file mode 100644 index 121a374f0b..0000000000 --- a/backend/src/fiches/models/fiche-action-service.table.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { serviceTagTable } from '@/backend/shared'; -import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; - -export const ficheActionServiceTagTable = pgTable( - 'fiche_action_service_tag', - { - ficheId: integer('fiche_id').references(() => ficheActionTable.id), - serviceTagId: integer('service_tag_id').references( - () => serviceTagTable.id - ), - }, - (table) => { - return { - pk: primaryKey({ columns: [table.ficheId, table.serviceTagId] }), - }; - } -); diff --git a/backend/src/fiches/models/update-fiche-action.request.ts b/backend/src/fiches/models/update-fiche-action.request.ts index cccdbb28f7..b08f759b34 100644 --- a/backend/src/fiches/models/update-fiche-action.request.ts +++ b/backend/src/fiches/models/update-fiche-action.request.ts @@ -3,8 +3,9 @@ import { partenaireTagSchema, serviceTagSchema, structureTagSchema, -} from '@/backend/shared'; +} from '@/backend/collectivites'; import z from 'zod'; +import { financeurTagSchema } from '../../collectivites/shared/models/financeur-tag.table'; import { indicateurDefinitionSchema } from '../../indicateurs/models/indicateur-definition.table'; import { axeSchema } from '../../plans/fiches/shared/models/axe.table'; import { @@ -15,7 +16,6 @@ import { } from '../../plans/fiches/shared/models/fiche-action.table'; import { actionRelationSchema } from '../../referentiels/models/action-relation.table'; import { effetAttenduSchema } from '../../shared/models/effet-attendu.table'; -import { financeurTagSchema } from '../../shared/models/financeur-tag.table'; import { sousThematiqueSchema } from '../../shared/models/sous-thematique.table'; import { thematiqueSchema } from '../../shared/models/thematique.table'; diff --git a/backend/src/fiches/models/upsert-fiche-action-note.request.ts b/backend/src/fiches/models/upsert-fiche-action-note.request.ts index bebd14a5f2..f85eef522d 100644 --- a/backend/src/fiches/models/upsert-fiche-action-note.request.ts +++ b/backend/src/fiches/models/upsert-fiche-action-note.request.ts @@ -1,9 +1,9 @@ -import { extendApi } from '@anatine/zod-openapi'; -import { z } from 'zod'; import { deleteFicheActionNoteSchema, upsertFicheActionNoteSchema, -} from './fiche-action-note.table'; +} from '@/backend/plans/fiches'; +import { extendApi } from '@anatine/zod-openapi'; +import { z } from 'zod'; export const upsertFicheActionNotesRequestSchema = extendApi( z diff --git a/backend/src/indicateurs/index.ts b/backend/src/indicateurs/index.ts new file mode 100644 index 0000000000..a45ee415da --- /dev/null +++ b/backend/src/indicateurs/index.ts @@ -0,0 +1 @@ +export * from './models/indicateur-definition.table'; diff --git a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts index cc37ffe86a..2c182e971e 100644 --- a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts +++ b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts @@ -1,7 +1,8 @@ import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; import { PermissionService } from '@/backend/auth/authorizations/permission.service'; import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; -import { axeTable } from '@/backend/plans/fiches'; +import { serviceTagTable } from '@/backend/collectivites'; +import { axeTable, ficheActionIndicateurTable } from '@/backend/plans/fiches'; import { ficheActionAxeTable } from '@/backend/plans/fiches/shared/models/fiche-action-axe.table'; import { Injectable } from '@nestjs/common'; import { getTableName, sql } from 'drizzle-orm'; @@ -10,7 +11,6 @@ import { AuthenticatedUser } from '../../auth/models/auth.models'; import { groupementCollectiviteTable } from '../../collectivites/models/groupement-collectivite.table'; import CollectivitesService from '../../collectivites/services/collectivites.service'; import DatabaseService from '../../common/services/database.service'; -import { ficheActionIndicateurTable } from '../../fiches/models/fiche-action-indicateur.table'; import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; import { categorieTagTable } from '../../taxonomie/models/categorie-tag.table'; import { indicateurActionTable } from '../models/indicateur-action.table'; @@ -27,7 +27,6 @@ import { GetFilteredIndicateursRequestOptionType, } from './get-filtered-indicateurs.request'; import { GetFilteredIndicateurResponseType } from './get-filtered-indicateurs.response'; -import { serviceTagTable } from '@/backend/shared'; export type RequestResultIndicateursRaw = { id: number; diff --git a/backend/src/indicateurs/models/indicateur-pilote.table.ts b/backend/src/indicateurs/models/indicateur-pilote.table.ts index a7f7f47f67..35f2dfc0d7 100644 --- a/backend/src/indicateurs/models/indicateur-pilote.table.ts +++ b/backend/src/indicateurs/models/indicateur-pilote.table.ts @@ -1,7 +1,6 @@ -import { integer, pgTable, uuid } from 'drizzle-orm/pg-core'; -import { personneTagTable } from '../../taxonomie/models/personne-tag.table'; -import { serial } from 'drizzle-orm/pg-core'; +import { integer, pgTable, serial, uuid } from 'drizzle-orm/pg-core'; import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { personneTagTable } from '../../collectivites/shared/models/personne-tag.table'; import { indicateurDefinitionTable } from './indicateur-definition.table'; export const indicateurPiloteTable = pgTable('indicateur_pilote', { diff --git a/backend/src/indicateurs/models/indicateur-service-tag.table.ts b/backend/src/indicateurs/models/indicateur-service-tag.table.ts index 66c80c9fdf..165b762098 100644 --- a/backend/src/indicateurs/models/indicateur-service-tag.table.ts +++ b/backend/src/indicateurs/models/indicateur-service-tag.table.ts @@ -1,4 +1,4 @@ -import { serviceTagTable } from '@/backend/shared'; +import { serviceTagTable } from '@/backend/collectivites'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { collectiviteTable } from '../../collectivites/models/collectivite.table'; import { indicateurDefinitionTable } from './indicateur-definition.table'; diff --git a/backend/src/fiches/services/axe.service.ts b/backend/src/plans/fiches/axe.service.ts similarity index 91% rename from backend/src/fiches/services/axe.service.ts rename to backend/src/plans/fiches/axe.service.ts index 31567933bf..db5d2fe629 100644 --- a/backend/src/fiches/services/axe.service.ts +++ b/backend/src/plans/fiches/axe.service.ts @@ -1,10 +1,7 @@ import { Injectable, Logger } from '@nestjs/common'; import DatabaseService from '../../common/services/database.service'; -import { - axeTable, - CreateAxeType, -} from '../../plans/fiches/shared/models/axe.table'; -import { ficheActionAxeTable } from '../../plans/fiches/shared/models/fiche-action-axe.table'; +import { axeTable, CreateAxeType } from './shared/models/axe.table'; +import { ficheActionAxeTable } from './shared/models/fiche-action-axe.table'; @Injectable() export default class AxeService { diff --git a/backend/src/fiches/services/fiche.service.ts b/backend/src/plans/fiches/fiche.service.ts similarity index 90% rename from backend/src/fiches/services/fiche.service.ts rename to backend/src/plans/fiches/fiche.service.ts index af2cecbdc4..257bfba1d3 100644 --- a/backend/src/fiches/services/fiche.service.ts +++ b/backend/src/plans/fiches/fiche.service.ts @@ -6,19 +6,19 @@ import { Injectable, Logger } from '@nestjs/common'; import { aliasedTable, desc, eq } from 'drizzle-orm'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import DatabaseService from '../../common/services/database.service'; +import { actionImpactFicheActionTable } from '../../fiches/models/action-impact-fiche-action.table'; +import TagService from '../../taxonomie/services/tag.service'; +import { ficheActionActionTable } from './shared/models/fiche-action-action.table'; +import { ficheActionEffetAttenduTable } from './shared/models/fiche-action-effet-attendu.table'; +import { ficheActionIndicateurTable } from './shared/models/fiche-action-indicateur.table'; +import { ficheActionNoteTable } from './shared/models/fiche-action-note.table'; +import { ficheActionPartenaireTagTable } from './shared/models/fiche-action-partenaire-tag.table'; +import { ficheActionSousThematiqueTable } from './shared/models/fiche-action-sous-thematique.table'; +import { ficheActionThematiqueTable } from './shared/models/fiche-action-thematique.table'; import { CreateFicheActionType, ficheActionTable, -} from '../../plans/fiches/shared/models/fiche-action.table'; -import TagService from '../../taxonomie/services/tag.service'; -import { actionImpactFicheActionTable } from '../models/action-impact-fiche-action.table'; -import { ficheActionActionTable } from '../models/fiche-action-action.table'; -import { ficheActionEffetAttenduTable } from '../models/fiche-action-effet-attendu.table'; -import { ficheActionIndicateurTable } from '../models/fiche-action-indicateur.table'; -import { ficheActionNoteTable } from '../models/fiche-action-note.table'; -import { ficheActionPartenaireTagTable } from '../models/fiche-action-partenaire-tag.table'; -import { ficheActionSousThematiqueTable } from '../models/fiche-action-sous-thematique.table'; -import { ficheActionThematiqueTable } from '../models/fiche-action-thematique.table'; +} from './shared/models/fiche-action.table'; @Injectable() export default class FicheService { diff --git a/backend/src/fiches/services/fiches-action-update.service.ts b/backend/src/plans/fiches/fiches-action-update.service.ts similarity index 90% rename from backend/src/fiches/services/fiches-action-update.service.ts rename to backend/src/plans/fiches/fiches-action-update.service.ts index bd41accbf4..090992154c 100644 --- a/backend/src/fiches/services/fiches-action-update.service.ts +++ b/backend/src/plans/fiches/fiches-action-update.service.ts @@ -14,31 +14,31 @@ import { PostgresJsQueryResultHKT } from 'drizzle-orm/postgres-js'; import { toCamel } from 'postgres'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import DatabaseService from '../../common/services/database.service'; -import { ficheActionAxeTable } from '../../plans/fiches/shared/models/fiche-action-axe.table'; -import { ficheActionFinanceurTagTable } from '../../plans/fiches/shared/models/fiche-action-financeur-tag.table'; -import { - ficheActionTable, - updateFicheActionSchema, -} from '../../plans/fiches/shared/models/fiche-action.table'; +import { UpdateFicheActionRequestType } from '../../fiches/models/update-fiche-action.request'; import { buildConflictUpdateColumns } from '../../utils/drizzle/conflict.utils'; -import { ficheActionActionTable } from '../models/fiche-action-action.table'; -import { ficheActionEffetAttenduTable } from '../models/fiche-action-effet-attendu.table'; -import { ficheActionIndicateurTable } from '../models/fiche-action-indicateur.table'; -import { ficheActionLibreTagTable } from '../models/fiche-action-libre-tag.table'; -import { ficheActionLienTable } from '../models/fiche-action-lien.table'; +import FicheService from './fiche.service'; +import { ficheActionActionTable } from './shared/models/fiche-action-action.table'; +import { ficheActionAxeTable } from './shared/models/fiche-action-axe.table'; +import { ficheActionEffetAttenduTable } from './shared/models/fiche-action-effet-attendu.table'; +import { ficheActionFinanceurTagTable } from './shared/models/fiche-action-financeur-tag.table'; +import { ficheActionIndicateurTable } from './shared/models/fiche-action-indicateur.table'; +import { ficheActionLibreTagTable } from './shared/models/fiche-action-libre-tag.table'; +import { ficheActionLienTable } from './shared/models/fiche-action-lien.table'; import { ficheActionNoteTable, UpsertFicheActionNoteType, -} from '../models/fiche-action-note.table'; -import { ficheActionPartenaireTagTable } from '../models/fiche-action-partenaire-tag.table'; -import { ficheActionPiloteTable } from '../models/fiche-action-pilote.table'; -import { ficheActionReferentTable } from '../models/fiche-action-referent.table'; -import { ficheActionServiceTagTable } from '../models/fiche-action-service-tag.table'; -import { ficheActionSousThematiqueTable } from '../models/fiche-action-sous-thematique.table'; -import { ficheActionStructureTagTable } from '../models/fiche-action-structure-tag.table'; -import { ficheActionThematiqueTable } from '../models/fiche-action-thematique.table'; -import { UpdateFicheActionRequestType } from '../models/update-fiche-action.request'; -import FicheService from './fiche.service'; +} from './shared/models/fiche-action-note.table'; +import { ficheActionPartenaireTagTable } from './shared/models/fiche-action-partenaire-tag.table'; +import { ficheActionPiloteTable } from './shared/models/fiche-action-pilote.table'; +import { ficheActionReferentTable } from './shared/models/fiche-action-referent.table'; +import { ficheActionServiceTagTable } from './shared/models/fiche-action-service-tag.table'; +import { ficheActionSousThematiqueTable } from './shared/models/fiche-action-sous-thematique.table'; +import { ficheActionStructureTagTable } from './shared/models/fiche-action-structure-tag.table'; +import { ficheActionThematiqueTable } from './shared/models/fiche-action-thematique.table'; +import { + ficheActionTable, + updateFicheActionSchema, +} from './shared/models/fiche-action.table'; type TxType = PgTransaction< PostgresJsQueryResultHKT, diff --git a/backend/src/plans/fiches/index.ts b/backend/src/plans/fiches/index.ts index 3483907081..3c07fa18a5 100644 --- a/backend/src/plans/fiches/index.ts +++ b/backend/src/plans/fiches/index.ts @@ -1,5 +1,15 @@ export * from './shared/models/axe.table'; +export * from './shared/models/fiche-action-effet-attendu.table'; export * from './shared/models/fiche-action-financeur-tag.table'; +export * from './shared/models/fiche-action-indicateur.table'; +export * from './shared/models/fiche-action-libre-tag.table'; +export * from './shared/models/fiche-action-lien.table'; +export * from './shared/models/fiche-action-note.table'; +export * from './shared/models/fiche-action-partenaire-tag.table'; +export * from './shared/models/fiche-action-service-tag.table'; +export * from './shared/models/fiche-action-sous-thematique.table'; +export * from './shared/models/fiche-action-structure-tag.table'; +export * from './shared/models/fiche-action-thematique.table'; export * from './shared/models/fiche-action.table'; export * from './shared/models/plan-action-type-categorie.table'; export * from './shared/models/plan-action-type.table'; diff --git a/backend/src/fiches/models/fiche-action-action.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-action.table.ts similarity index 70% rename from backend/src/fiches/models/fiche-action-action.table.ts rename to backend/src/plans/fiches/shared/models/fiche-action-action.table.ts index bc95f0747f..27b64d507c 100644 --- a/backend/src/fiches/models/fiche-action-action.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-action.table.ts @@ -1,6 +1,6 @@ +import { actionRelationTable } from '@/backend/referentiels'; import { integer, pgTable, primaryKey, varchar } from 'drizzle-orm/pg-core'; -import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; -import { actionRelationTable } from '../../referentiels/models/action-relation.table'; +import { ficheActionTable } from './fiche-action.table'; export const ficheActionActionTable = pgTable( 'fiche_action_action', diff --git a/backend/src/fiches/models/fiche-action-effet-attendu.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-effet-attendu.table.ts similarity index 73% rename from backend/src/fiches/models/fiche-action-effet-attendu.table.ts rename to backend/src/plans/fiches/shared/models/fiche-action-effet-attendu.table.ts index 437595185d..b8bcc477d8 100644 --- a/backend/src/fiches/models/fiche-action-effet-attendu.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-effet-attendu.table.ts @@ -1,6 +1,6 @@ +import { effetAttenduTable } from '@/backend/shared'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; -import { effetAttenduTable } from '../../shared/models/effet-attendu.table'; +import { ficheActionTable } from './fiche-action.table'; export const ficheActionEffetAttenduTable = pgTable( 'fiche_action_effet_attendu', diff --git a/backend/src/plans/fiches/shared/models/fiche-action-financeur-tag.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-financeur-tag.table.ts index c13ece30bf..e8d6841df8 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action-financeur-tag.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-financeur-tag.table.ts @@ -1,10 +1,10 @@ import { integer, pgTable, serial } from 'drizzle-orm/pg-core'; -import { createSelectSchema } from 'drizzle-zod'; +import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; import z from 'zod'; import { financeurTagSchema, financeurTagTable, -} from '../../../../shared/models/financeur-tag.table'; +} from '../../../../collectivites/shared/models/financeur-tag.table'; import { ficheActionTable } from './fiche-action.table'; export const ficheActionFinanceurTagTable = pgTable( @@ -26,5 +26,11 @@ export const financeurSchema = createSelectSchema( ).extend({ financeurTag: financeurTagSchema, }); - export type Financeur = z.infer; + +export const financeurSchemaUpdate = createInsertSchema( + ficheActionFinanceurTagTable +).extend({ + financeurTag: financeurTagSchema, +}); +export type FinanceurUpdate = z.infer; diff --git a/backend/src/fiches/models/fiche-action-indicateur.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-indicateur.table.ts similarity index 70% rename from backend/src/fiches/models/fiche-action-indicateur.table.ts rename to backend/src/plans/fiches/shared/models/fiche-action-indicateur.table.ts index e61d10335d..3712df1742 100644 --- a/backend/src/fiches/models/fiche-action-indicateur.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-indicateur.table.ts @@ -1,6 +1,6 @@ +import { indicateurDefinitionTable } from '@/backend/indicateurs'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { indicateurDefinitionTable } from '../../indicateurs/models/indicateur-definition.table'; -import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; +import { ficheActionTable } from './fiche-action.table'; export const ficheActionIndicateurTable = pgTable( 'fiche_action_indicateur', diff --git a/backend/src/fiches/models/fiche-action-libre-tag.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-libre-tag.table.ts similarity index 80% rename from backend/src/fiches/models/fiche-action-libre-tag.table.ts rename to backend/src/plans/fiches/shared/models/fiche-action-libre-tag.table.ts index 34d6ac476c..6f2c4d3d3b 100644 --- a/backend/src/fiches/models/fiche-action-libre-tag.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-libre-tag.table.ts @@ -1,7 +1,7 @@ -import { libreTagTable } from '@/backend/shared'; +import { libreTagTable } from '@/backend/collectivites'; import { createdAt, createdBy } from '@/backend/utils'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; +import { ficheActionTable } from './fiche-action.table'; export const ficheActionLibreTagTable = pgTable( 'fiche_action_libre_tag', diff --git a/backend/src/fiches/models/fiche-action-lien.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-lien.table.ts similarity index 82% rename from backend/src/fiches/models/fiche-action-lien.table.ts rename to backend/src/plans/fiches/shared/models/fiche-action-lien.table.ts index 4e53e4fdf3..56c07b7de0 100644 --- a/backend/src/fiches/models/fiche-action-lien.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-lien.table.ts @@ -1,5 +1,5 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; +import { ficheActionTable } from './fiche-action.table'; export const ficheActionLienTable = pgTable( 'fiche_action_lien', diff --git a/backend/src/fiches/models/fiche-action-note.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-note.table.ts similarity index 85% rename from backend/src/fiches/models/fiche-action-note.table.ts rename to backend/src/plans/fiches/shared/models/fiche-action-note.table.ts index 39c4b5877e..ffb278bd7e 100644 --- a/backend/src/fiches/models/fiche-action-note.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-note.table.ts @@ -1,14 +1,9 @@ +import { createdAt, createdBy, modifiedAt, modifiedBy } from '@/backend/utils'; import { InferSelectModel } from 'drizzle-orm'; import { date, integer, pgTable, serial, text } from 'drizzle-orm/pg-core'; import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; import { z } from 'zod'; -import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; -import { - createdAt, - createdBy, - modifiedAt, - modifiedBy, -} from '../../utils/column.utils'; +import { ficheActionTable } from './fiche-action.table'; export const ficheActionNoteTable = pgTable('fiche_action_note', { id: serial('id').primaryKey(), diff --git a/backend/src/fiches/models/fiche-action-partenaire-tag.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-partenaire-tag.table.ts similarity index 81% rename from backend/src/fiches/models/fiche-action-partenaire-tag.table.ts rename to backend/src/plans/fiches/shared/models/fiche-action-partenaire-tag.table.ts index f3822d1943..3900c9a802 100644 --- a/backend/src/fiches/models/fiche-action-partenaire-tag.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-partenaire-tag.table.ts @@ -1,6 +1,6 @@ -import { ficheActionTable } from '@/backend/plans/fiches'; -import { partenaireTagTable } from '@/backend/shared'; +import { partenaireTagTable } from '@/backend/collectivites'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; +import { ficheActionTable } from './fiche-action.table'; export const ficheActionPartenaireTagTable = pgTable( 'fiche_action_partenaire_tag', diff --git a/backend/src/fiches/models/fiche-action-pilote.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-pilote.table.ts similarity index 83% rename from backend/src/fiches/models/fiche-action-pilote.table.ts rename to backend/src/plans/fiches/shared/models/fiche-action-pilote.table.ts index 9c5748153b..4fb46f4744 100644 --- a/backend/src/fiches/models/fiche-action-pilote.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-pilote.table.ts @@ -6,8 +6,8 @@ import { uniqueIndex, uuid, } from 'drizzle-orm/pg-core'; -import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; -import { personneTagTable } from '../../taxonomie/models/personne-tag.table'; +import { personneTagTable } from '../../../../collectivites/shared/models/personne-tag.table'; +import { ficheActionTable } from './fiche-action.table'; export const ficheActionPiloteTable = pgTable( 'fiche_action_pilote', diff --git a/backend/src/fiches/models/fiche-action-referent.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-referent.table.ts similarity index 77% rename from backend/src/fiches/models/fiche-action-referent.table.ts rename to backend/src/plans/fiches/shared/models/fiche-action-referent.table.ts index 0d1c461799..efd1e7e5a7 100644 --- a/backend/src/fiches/models/fiche-action-referent.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-referent.table.ts @@ -1,6 +1,6 @@ +import { personneTagTable } from '@/backend/collectivites'; import { integer, pgTable, uniqueIndex, uuid } from 'drizzle-orm/pg-core'; -import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; -import { personneTagTable } from '../../taxonomie/models/personne-tag.table'; +import { ficheActionTable } from './fiche-action.table'; export const ficheActionReferentTable = pgTable( 'fiche_action_referent', diff --git a/backend/src/fiches/models/fiche-action-service-tag.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-service-tag.table.ts similarity index 81% rename from backend/src/fiches/models/fiche-action-service-tag.table.ts rename to backend/src/plans/fiches/shared/models/fiche-action-service-tag.table.ts index eed1287d3f..01940fe9ac 100644 --- a/backend/src/fiches/models/fiche-action-service-tag.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-service-tag.table.ts @@ -1,6 +1,6 @@ -import { ficheActionTable } from '@/backend/plans/fiches'; -import { serviceTagTable } from '@/backend/shared'; +import { serviceTagTable } from '@/backend/collectivites'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; +import { ficheActionTable } from './fiche-action.table'; export const ficheActionServiceTagTable = pgTable( 'fiche_action_service_tag', diff --git a/backend/src/fiches/models/fiche-action-sous-thematique.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-sous-thematique.table.ts similarity index 72% rename from backend/src/fiches/models/fiche-action-sous-thematique.table.ts rename to backend/src/plans/fiches/shared/models/fiche-action-sous-thematique.table.ts index 762f25932c..11d7d442b3 100644 --- a/backend/src/fiches/models/fiche-action-sous-thematique.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-sous-thematique.table.ts @@ -1,6 +1,6 @@ +import { sousThematiqueTable } from '@/backend/shared'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; -import { sousThematiqueTable } from '../../shared/models/sous-thematique.table'; +import { ficheActionTable } from './fiche-action.table'; export const ficheActionSousThematiqueTable = pgTable( 'fiche_action_sous_thematique', diff --git a/backend/src/fiches/models/fiche-action-structure-tag.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-structure-tag.table.ts similarity index 81% rename from backend/src/fiches/models/fiche-action-structure-tag.table.ts rename to backend/src/plans/fiches/shared/models/fiche-action-structure-tag.table.ts index 670497b067..3f0c824532 100644 --- a/backend/src/fiches/models/fiche-action-structure-tag.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-structure-tag.table.ts @@ -1,6 +1,6 @@ -import { ficheActionTable } from '@/backend/plans/fiches'; -import { structureTagTable } from '@/backend/shared'; +import { structureTagTable } from '@/backend/collectivites'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; +import { ficheActionTable } from './fiche-action.table'; export const ficheActionStructureTagTable = pgTable( 'fiche_action_structure_tag', diff --git a/backend/src/fiches/models/fiche-action-thematique.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-thematique.table.ts similarity index 72% rename from backend/src/fiches/models/fiche-action-thematique.table.ts rename to backend/src/plans/fiches/shared/models/fiche-action-thematique.table.ts index f5ef1e3013..1da3b05952 100644 --- a/backend/src/fiches/models/fiche-action-thematique.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-thematique.table.ts @@ -1,6 +1,6 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; -import { thematiqueTable } from '../../shared/models/thematique.table'; +import { thematiqueTable } from '../../../../shared/models/thematique.table'; +import { ficheActionTable } from './fiche-action.table'; export const ficheActionThematiqueTable = pgTable( 'fiche_action_thematique', diff --git a/backend/src/referentiels/index.ts b/backend/src/referentiels/index.ts new file mode 100644 index 0000000000..9fcfb558d3 --- /dev/null +++ b/backend/src/referentiels/index.ts @@ -0,0 +1 @@ +export * from './models/action-relation.table'; diff --git a/backend/src/shared/index.ts b/backend/src/shared/index.ts index a283da28a0..3363d19e75 100644 --- a/backend/src/shared/index.ts +++ b/backend/src/shared/index.ts @@ -1,10 +1,4 @@ export * from './models/effet-attendu.table'; -export * from './models/financeur-tag.table'; -export * from './models/libre-tag.table'; -export * from './models/partenaire-tag.table'; -export * from './models/service-tag.table'; export * from './models/sous-thematique.table'; -export * from './models/structure-tag.table'; -export * from './models/tag.table-base'; export * from './models/temps-de-mise-en-oeuvre.table'; export * from './models/thematique.table'; diff --git a/backend/src/taxonomie/models/categorie-tag.table.ts b/backend/src/taxonomie/models/categorie-tag.table.ts index c6e016504a..3d40a47b5a 100644 --- a/backend/src/taxonomie/models/categorie-tag.table.ts +++ b/backend/src/taxonomie/models/categorie-tag.table.ts @@ -1,5 +1,5 @@ import { boolean, integer, pgTable } from 'drizzle-orm/pg-core'; -import { tagTableBase } from '../../shared/models/tag.table-base'; +import { tagTableBase } from '../../collectivites/shared/models/tag.table-base'; import { createdAt, createdBy } from '../../utils/column.utils'; export const categorieTagTable = pgTable('categorie_tag', { diff --git a/backend/src/taxonomie/services/tag.service.ts b/backend/src/taxonomie/services/tag.service.ts index f34e948626..a9bd674ad6 100644 --- a/backend/src/taxonomie/services/tag.service.ts +++ b/backend/src/taxonomie/services/tag.service.ts @@ -1,14 +1,14 @@ import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; import { PermissionService } from '@/backend/auth/authorizations/permission.service'; import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; +import { partenaireTagTable } from '@/backend/collectivites'; import CollectivitesService from '@/backend/collectivites/services/collectivites.service'; -import { partenaireTagTable } from '@/backend/shared'; import { Injectable, Logger } from '@nestjs/common'; import { and, eq, inArray, isNull, or } from 'drizzle-orm'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import { groupementCollectiviteTable } from '../../collectivites/models/groupement-collectivite.table'; +import { Tag } from '../../collectivites/shared/models/tag.table-base'; import DatabaseService from '../../common/services/database.service'; -import { Tag } from '../../shared/models/tag.table-base'; import { categorieTagTable } from '../models/categorie-tag.table'; @Injectable() diff --git a/packages/api/src/indicateurs/actions/indicateur.save.test.ts b/packages/api/src/indicateurs/actions/indicateur.save.test.ts index a01442c5ae..e40a28db5d 100644 --- a/packages/api/src/indicateurs/actions/indicateur.save.test.ts +++ b/packages/api/src/indicateurs/actions/indicateur.save.test.ts @@ -1,4 +1,5 @@ -import { TagInsert, Thematique } from '@/backend/shared'; +import { TagInsert } from '@/backend/collectivites'; +import { Thematique } from '@/backend/shared'; import { beforeAll, describe, expect, test } from 'vitest'; import { Personne } from '../../collectivites/shared/domain/personne.schema'; import { FicheResume } from '../../plan-actions/domain/fiche-action.schema'; diff --git a/packages/api/src/indicateurs/actions/indicateur.save.ts b/packages/api/src/indicateurs/actions/indicateur.save.ts index d591522911..178b5e891f 100644 --- a/packages/api/src/indicateurs/actions/indicateur.save.ts +++ b/packages/api/src/indicateurs/actions/indicateur.save.ts @@ -1,4 +1,5 @@ -import { Tag, TagInsert, Thematique } from '@/backend/shared'; +import { Tag, TagInsert } from '@/backend/collectivites'; +import { Thematique } from '@/backend/shared'; import { isNil } from 'es-toolkit/predicate'; import { objectToSnake } from 'ts-case-convert'; import { Personne } from '../../collectivites/shared/domain/personne.schema'; diff --git a/packages/api/src/plan-actions/domain/fiche-action.schema.ts b/packages/api/src/plan-actions/domain/fiche-action.schema.ts index 0adac4bcda..293fc4a34d 100644 --- a/packages/api/src/plan-actions/domain/fiche-action.schema.ts +++ b/packages/api/src/plan-actions/domain/fiche-action.schema.ts @@ -1,10 +1,12 @@ import { personneSchema } from '@/api/collectivites'; import { indicateurListItemSchema } from '@/api/indicateurs/domain'; import { actionSchema } from '@/api/referentiel'; +import { authorSchema } from '@/backend/auth'; +import { tagSchema } from '@/backend/collectivites'; import { axeSchema, ciblesEnumSchema, - financeurSchema, + financeurSchemaUpdate, participationCitoyenneEnumSchema, prioriteEnumSchema, statutsEnumSchema, @@ -12,25 +14,17 @@ import { import { effetAttenduSchema, sousThematiqueSchema, - tagSchema, tempsDeMiseEnOeuvreSchema, thematiqueSchema, } from '@/backend/shared'; import { z } from 'zod'; -const auteur = z.object({ - userId: z.string(), - prenom: z.string(), - nom: z.string(), - email: z.string(), -}); - export const ficheActionSchema = z.object({ id: z.number(), collectiviteId: z.number(), modifiedAt: z.string().datetime().nullish(), createdAt: z.string().datetime().nullish(), - createdBy: auteur.nullable(), + createdBy: authorSchema.nullable(), titre: z.string().nullable(), description: z.string().nullish(), statut: statutsEnumSchema.nullish(), @@ -76,7 +70,10 @@ export const ficheActionSchema = z.object({ plans: axeSchema.array().nullish(), axes: axeSchema.array().nullish(), actions: actionSchema.array().nullish(), - financeurs: financeurSchema.array().nullish(), + financeurs: financeurSchemaUpdate + // .extend({ id: financeurSchema.shape.id.optional() }) + .array() + .nullish(), indicateurs: indicateurListItemSchema.array().nullish(), libresTag: tagSchema.array().nullish(), }); diff --git a/packages/api/src/shared/actions/tag.fetch.ts b/packages/api/src/shared/actions/tag.fetch.ts index e96d15d503..d6af0f2abe 100644 --- a/packages/api/src/shared/actions/tag.fetch.ts +++ b/packages/api/src/shared/actions/tag.fetch.ts @@ -1,4 +1,4 @@ -import { Tag, TagType } from '@/backend/shared'; +import { Tag, TagType } from '@/backend/collectivites'; import { objectToCamel } from 'ts-case-convert'; import { DBClient } from '../../typeUtils'; diff --git a/packages/api/src/shared/actions/tag.save.test.ts b/packages/api/src/shared/actions/tag.save.test.ts index ac78a2fcec..f9c2df5894 100644 --- a/packages/api/src/shared/actions/tag.save.test.ts +++ b/packages/api/src/shared/actions/tag.save.test.ts @@ -1,4 +1,4 @@ -import { TagInsert } from '@/backend/shared'; +import { TagInsert } from '@/backend/collectivites'; import { beforeAll, expect, test } from 'vitest'; import { signIn, signOut } from '../../tests/auth'; import { supabase } from '../../tests/supabase'; diff --git a/packages/api/src/shared/actions/tag.save.ts b/packages/api/src/shared/actions/tag.save.ts index 3fde781088..8b4e60acb6 100644 --- a/packages/api/src/shared/actions/tag.save.ts +++ b/packages/api/src/shared/actions/tag.save.ts @@ -1,4 +1,4 @@ -import { Tag, TagInsert, TagType } from '@/backend/shared'; +import { Tag, TagInsert, TagType } from '@/backend/collectivites'; import { objectToCamel, objectToSnake } from 'ts-case-convert'; import { DBClient } from '../../typeUtils'; From bd6571d2996953c41daee67d518db809818101d7 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Thu, 19 Dec 2024 14:59:46 +0100 Subject: [PATCH 16/33] Fixe le fetch des sousThematiques --- .../fiche-resumes.list/data-access/fiche-action.fetch.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/api/src/plan-actions/fiche-resumes.list/data-access/fiche-action.fetch.ts b/packages/api/src/plan-actions/fiche-resumes.list/data-access/fiche-action.fetch.ts index 514f115ae0..d1343c6b60 100644 --- a/packages/api/src/plan-actions/fiche-resumes.list/data-access/fiche-action.fetch.ts +++ b/packages/api/src/plan-actions/fiche-resumes.list/data-access/fiche-action.fetch.ts @@ -95,6 +95,15 @@ export async function ficheActionFetch({ dbClient, ficheActionId }: Props) { ...rawFicheAction, planId: rawFicheAction.plans?.[0]?.plan, indicateurs: indicateurs.data, + + // Transforme les sous-thématiques pour matcher avec le schema officiel + sousThematiques: rawFicheAction.sousThematiques + ? rawFicheAction.sousThematiques.map((t) => ({ + ...t, + // @ts-expect-error forcing temporaire pour matcher le schema le temps de passer le fetch côté backend + nom: t.sousThematique, + })) + : null, }; return ficheAction as FicheAction; From 86df0fe507c8e6467639622f08dbdd0a1337cab0 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Thu, 19 Dec 2024 15:26:59 +0100 Subject: [PATCH 17/33] Move from fiches to plans/fiches --- backend/src/app.module.ts | 2 +- .../models/membre-fonction.enum.ts | 2 +- backend/src/common/models/enum.helpers.ts | 25 ---------- .../get-fiches-action-synthese.response.ts | 13 ----- .../bulk-edit/bulk-edit.router.e2e-spec.ts | 0 .../fiches/bulk-edit/bulk-edit.router.ts | 0 .../fiches/bulk-edit/bulk-edit.service.ts | 14 +++--- .../count-by-statut.router.e2e-spec.ts | 0 .../count-by-statut/count-by-statut.router.ts | 6 +-- .../count-by-statut.service.ts | 26 +++++----- .../fiche-action-etape.router.e2e-spec.ts | 0 .../fiche-action-etape.router.ts | 4 +- .../fiche-action-etape.service.ts | 6 +-- .../fiche-action-etape.table.ts | 2 +- .../fiches}/fiche-action-update.e2e-spec.ts | 48 +++++++++---------- .../fiches}/fiches-action.controller.ts | 23 +++++---- .../fiches/fiches.module.ts} | 14 +++--- .../shared/fetch-fiches-filter.request.ts} | 8 ++-- .../count-by.dto.ts} | 0 backend/src/utils/enum.utils.ts | 26 ++++++++++ backend/src/utils/trpc/trpc.router.ts | 6 +-- 21 files changed, 107 insertions(+), 118 deletions(-) delete mode 100644 backend/src/common/models/enum.helpers.ts delete mode 100644 backend/src/fiches/models/get-fiches-action-synthese.response.ts rename backend/src/{ => plans}/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts (100%) rename backend/src/{ => plans}/fiches/bulk-edit/bulk-edit.router.ts (100%) rename backend/src/{ => plans}/fiches/bulk-edit/bulk-edit.service.ts (93%) rename backend/src/{ => plans}/fiches/count-by-statut/count-by-statut.router.e2e-spec.ts (100%) rename backend/src/{ => plans}/fiches/count-by-statut/count-by-statut.router.ts (82%) rename backend/src/{ => plans}/fiches/count-by-statut/count-by-statut.service.ts (92%) rename backend/src/{ => plans}/fiches/fiche-action-etape/fiche-action-etape.router.e2e-spec.ts (100%) rename backend/src/{ => plans}/fiches/fiche-action-etape/fiche-action-etape.router.ts (90%) rename backend/src/{ => plans}/fiches/fiche-action-etape/fiche-action-etape.service.ts (96%) rename backend/src/{ => plans}/fiches/fiche-action-etape/fiche-action-etape.table.ts (91%) rename backend/src/{fiches/controllers => plans/fiches}/fiche-action-update.e2e-spec.ts (97%) rename backend/src/{fiches/controllers => plans/fiches}/fiches-action.controller.ts (85%) rename backend/src/{fiches/fiches-action.module.ts => plans/fiches/fiches.module.ts} (68%) rename backend/src/{fiches/models/get-fiches-actions-filter.request.ts => plans/fiches/shared/fetch-fiches-filter.request.ts} (87%) rename backend/src/{common/models/count-synthese.dto.ts => utils/count-by.dto.ts} (100%) diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index cf5841bae0..69d7cee971 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -6,9 +6,9 @@ import { CollectivitesModule } from './collectivites/collectivites.module'; import { CommonModule } from './common/common.module'; import configuration from './config/configuration'; import { ConfigurationModule } from './config/configuration.module'; -import { FichesActionModule } from './fiches/fiches-action.module'; import { IndicateursModule } from './indicateurs/indicateurs.module'; import { PersonnalisationsModule } from './personnalisations/personnalisations.module'; +import { FichesActionModule } from './plans/fiches/fiches.module'; import { ReferentielsModule } from './referentiels/referentiels.module'; import { TaxonomieModule } from './taxonomie/taxonomie.module'; import { SheetModule } from './utils/google-sheets/sheet.module'; diff --git a/backend/src/collectivites/models/membre-fonction.enum.ts b/backend/src/collectivites/models/membre-fonction.enum.ts index 648137a317..9db2ec8f04 100644 --- a/backend/src/collectivites/models/membre-fonction.enum.ts +++ b/backend/src/collectivites/models/membre-fonction.enum.ts @@ -1,5 +1,5 @@ +import { createEnumObject } from '@/backend/utils'; import { pgEnum } from 'drizzle-orm/pg-core'; -import { createEnumObject } from '../../common/models/enum.helpers'; export const MembreFonction = [ 'conseiller', diff --git a/backend/src/common/models/enum.helpers.ts b/backend/src/common/models/enum.helpers.ts deleted file mode 100644 index 6c909b5468..0000000000 --- a/backend/src/common/models/enum.helpers.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Permet de créer un objet jouant le rôle d'enum à partir d'une liste de chaînes - * - * Usage : - * ``` - * const Color = [ "Red", "Green", "Blue" ] as const - * const ColorEnum = createEnumObject(Color); - * - * const colorEnum = pgEnum("color", Color); - * const colorSchema = z.enum(Color); - * const table = pgTable("table",{enum: colorEnum("enum")}); - * db.insert(table).values({enum: ColorEnum.BLUE}); - * ``` - * - * Ref: https://github.com/drizzle-team/drizzle-orm/discussions/1914#discussioncomment-8816193 - */ -export const createEnumObject = ( - values: T -): Record, T[number]> => { - const obj: Record = {}; - for (const value of values) { - obj[value.toUpperCase()] = value; - } - return obj; -}; diff --git a/backend/src/fiches/models/get-fiches-action-synthese.response.ts b/backend/src/fiches/models/get-fiches-action-synthese.response.ts deleted file mode 100644 index a8cf02d592..0000000000 --- a/backend/src/fiches/models/get-fiches-action-synthese.response.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { extendApi } from '@anatine/zod-openapi'; -import { z } from 'zod'; -import { countSyntheseValeurSchema } from '../../common/models/count-synthese.dto'; - -export const getFichesActionSyntheseSchema = extendApi( - z.object({ - par_statut: countSyntheseValeurSchema, - }) -); - -export type GetFichesActionSyntheseResponseType = z.infer< - typeof getFichesActionSyntheseSchema ->; diff --git a/backend/src/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts b/backend/src/plans/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts similarity index 100% rename from backend/src/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts rename to backend/src/plans/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts diff --git a/backend/src/fiches/bulk-edit/bulk-edit.router.ts b/backend/src/plans/fiches/bulk-edit/bulk-edit.router.ts similarity index 100% rename from backend/src/fiches/bulk-edit/bulk-edit.router.ts rename to backend/src/plans/fiches/bulk-edit/bulk-edit.router.ts diff --git a/backend/src/fiches/bulk-edit/bulk-edit.service.ts b/backend/src/plans/fiches/bulk-edit/bulk-edit.service.ts similarity index 93% rename from backend/src/fiches/bulk-edit/bulk-edit.service.ts rename to backend/src/plans/fiches/bulk-edit/bulk-edit.service.ts index 4b0330cb92..9b2a8bf063 100644 --- a/backend/src/fiches/bulk-edit/bulk-edit.service.ts +++ b/backend/src/plans/fiches/bulk-edit/bulk-edit.service.ts @@ -3,16 +3,16 @@ import { PermissionService } from '@/backend/auth/authorizations/permission.serv import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; import { AuthUser } from '@/backend/auth/models/auth.models'; import { DatabaseService } from '@/backend/common'; -import { ficheActionLibreTagTable } from '@/backend/plans/fiches'; -import { Injectable } from '@nestjs/common'; -import { and, inArray, or } from 'drizzle-orm'; -import z from 'zod'; -import { ficheActionPiloteTable } from '../../plans/fiches/shared/models/fiche-action-pilote.table'; +import { updateFicheActionRequestSchema } from '@/backend/fiches/models/update-fiche-action.request'; import { + ficheActionLibreTagTable, ficheActionSchema, ficheActionTable, -} from '../../plans/fiches/shared/models/fiche-action.table'; -import { updateFicheActionRequestSchema } from '../models/update-fiche-action.request'; +} from '@/backend/plans/fiches'; +import { Injectable } from '@nestjs/common'; +import { and, inArray, or } from 'drizzle-orm'; +import z from 'zod'; +import { ficheActionPiloteTable } from '../shared/models/fiche-action-pilote.table'; @Injectable() export class BulkEditService { diff --git a/backend/src/fiches/count-by-statut/count-by-statut.router.e2e-spec.ts b/backend/src/plans/fiches/count-by-statut/count-by-statut.router.e2e-spec.ts similarity index 100% rename from backend/src/fiches/count-by-statut/count-by-statut.router.e2e-spec.ts rename to backend/src/plans/fiches/count-by-statut/count-by-statut.router.e2e-spec.ts diff --git a/backend/src/fiches/count-by-statut/count-by-statut.router.ts b/backend/src/plans/fiches/count-by-statut/count-by-statut.router.ts similarity index 82% rename from backend/src/fiches/count-by-statut/count-by-statut.router.ts rename to backend/src/plans/fiches/count-by-statut/count-by-statut.router.ts index 04222cb25d..56f1b1417a 100644 --- a/backend/src/fiches/count-by-statut/count-by-statut.router.ts +++ b/backend/src/plans/fiches/count-by-statut/count-by-statut.router.ts @@ -1,12 +1,12 @@ +import { fetchFichesFilterRequestSchema } from '@/backend/plans/fiches/shared/fetch-fiches-filter.request'; +import { TrpcService } from '@/backend/utils/trpc/trpc.service'; import { Injectable } from '@nestjs/common'; import { z } from 'zod'; -import { getFichesActionFilterRequestSchema } from '../models/get-fiches-actions-filter.request'; -import { TrpcService } from '@/backend/utils/trpc/trpc.service'; import { CountByStatutService } from './count-by-statut.service'; const inputSchema = z.object({ collectiviteId: z.number(), - filter: getFichesActionFilterRequestSchema, + filter: fetchFichesFilterRequestSchema, }); @Injectable() diff --git a/backend/src/fiches/count-by-statut/count-by-statut.service.ts b/backend/src/plans/fiches/count-by-statut/count-by-statut.service.ts similarity index 92% rename from backend/src/fiches/count-by-statut/count-by-statut.service.ts rename to backend/src/plans/fiches/count-by-statut/count-by-statut.service.ts index b92b4c6ee0..ad71e827dd 100644 --- a/backend/src/fiches/count-by-statut/count-by-statut.service.ts +++ b/backend/src/plans/fiches/count-by-statut/count-by-statut.service.ts @@ -1,7 +1,15 @@ +import { DatabaseService } from '@/backend/common'; +import { getModifiedSinceDate } from '@/backend/common/models/modified-since.enum'; import { + axeTable, ficheActionPartenaireTagTable, ficheActionServiceTagTable, + ficheActionTable, + SANS_STATUT_FICHE_ACTION_SYNTHESE_KEY, + statutsEnumValues, } from '@/backend/plans/fiches'; +import { GetFichesActionFilterRequestType } from '@/backend/plans/fiches/shared/fetch-fiches-filter.request'; +import { CountByRecordType } from '@/backend/utils/count-by.dto'; import { Injectable, Logger } from '@nestjs/common'; import { and, @@ -16,18 +24,8 @@ import { SQLWrapper, } from 'drizzle-orm'; import { PgColumn } from 'drizzle-orm/pg-core'; -import { CountByRecordType } from '../../common/models/count-synthese.dto'; -import { getModifiedSinceDate } from '../../common/models/modified-since.enum'; -import DatabaseService from '../../common/services/database.service'; -import { axeTable } from '../../plans/fiches/shared/models/axe.table'; -import { ficheActionAxeTable } from '../../plans/fiches/shared/models/fiche-action-axe.table'; -import { ficheActionPiloteTable } from '../../plans/fiches/shared/models/fiche-action-pilote.table'; -import { - ficheActionTable, - SANS_STATUT_FICHE_ACTION_SYNTHESE_KEY, - statutsEnumValues, -} from '../../plans/fiches/shared/models/fiche-action.table'; -import { GetFichesActionFilterRequestType } from '../models/get-fiches-actions-filter.request'; +import { ficheActionAxeTable } from '../shared/models/fiche-action-axe.table'; +import { ficheActionPiloteTable } from '../shared/models/fiche-action-pilote.table'; @Injectable() export class CountByStatutService { @@ -38,9 +36,7 @@ export class CountByStatutService { private readonly FICHE_ACTION_PARTENAIRE_TAGS_QUERY_FIELD = 'partenaire_tag_ids'; - constructor( - private readonly databaseService: DatabaseService - ) {} + constructor(private readonly databaseService: DatabaseService) {} async countByStatut( collectiviteId: number, diff --git a/backend/src/fiches/fiche-action-etape/fiche-action-etape.router.e2e-spec.ts b/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.router.e2e-spec.ts similarity index 100% rename from backend/src/fiches/fiche-action-etape/fiche-action-etape.router.e2e-spec.ts rename to backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.router.e2e-spec.ts diff --git a/backend/src/fiches/fiche-action-etape/fiche-action-etape.router.ts b/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.router.ts similarity index 90% rename from backend/src/fiches/fiche-action-etape/fiche-action-etape.router.ts rename to backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.router.ts index 5fd4d7c2a0..05e0940987 100644 --- a/backend/src/fiches/fiche-action-etape/fiche-action-etape.router.ts +++ b/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.router.ts @@ -1,8 +1,8 @@ +import { TrpcService } from '@/backend/utils/trpc/trpc.service'; import { Injectable } from '@nestjs/common'; -import { upsertFicheActionEtapeSchema } from '@/backend/fiches/fiche-action-etape/fiche-action-etape.table'; import { z } from 'zod'; -import { TrpcService } from '@/backend/utils/trpc/trpc.service'; import { FicheActionEtapeService } from './fiche-action-etape.service'; +import { upsertFicheActionEtapeSchema } from './fiche-action-etape.table'; @Injectable() export class FicheActionEtapeRouter { diff --git a/backend/src/fiches/fiche-action-etape/fiche-action-etape.service.ts b/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.service.ts similarity index 96% rename from backend/src/fiches/fiche-action-etape/fiche-action-etape.service.ts rename to backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.service.ts index 830925c9db..f5c9322757 100644 --- a/backend/src/fiches/fiche-action-etape/fiche-action-etape.service.ts +++ b/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.service.ts @@ -1,8 +1,8 @@ +import { AuthenticatedUser } from '@/backend/auth/models/auth.models'; +import { DatabaseService } from '@/backend/common'; import { Injectable } from '@nestjs/common'; import { and, eq, gt, gte, lt, lte, sql } from 'drizzle-orm'; -import { AuthenticatedUser } from '../../auth/models/auth.models'; -import DatabaseService from '../../common/services/database.service'; -import FicheService from '../../plans/fiches/fiche.service'; +import FicheService from '../fiche.service'; import { ficheActionEtapeTable, FicheActionEtapeType, diff --git a/backend/src/fiches/fiche-action-etape/fiche-action-etape.table.ts b/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.table.ts similarity index 91% rename from backend/src/fiches/fiche-action-etape/fiche-action-etape.table.ts rename to backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.table.ts index 6bcc0f50c3..28133861a1 100644 --- a/backend/src/fiches/fiche-action-etape/fiche-action-etape.table.ts +++ b/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.table.ts @@ -3,7 +3,7 @@ import { InferSelectModel } from 'drizzle-orm'; import { boolean, integer, pgTable, serial, text } from 'drizzle-orm/pg-core'; import { createInsertSchema } from 'drizzle-zod'; import { z } from 'zod'; -import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; +import { ficheActionTable } from '../shared/models/fiche-action.table'; export const ficheActionEtapeTable = pgTable('fiche_action_etape', { id: serial('id').primaryKey(), diff --git a/backend/src/fiches/controllers/fiche-action-update.e2e-spec.ts b/backend/src/plans/fiches/fiche-action-update.e2e-spec.ts similarity index 97% rename from backend/src/fiches/controllers/fiche-action-update.e2e-spec.ts rename to backend/src/plans/fiches/fiche-action-update.e2e-spec.ts index 87af88bcb4..60cb331a59 100644 --- a/backend/src/fiches/controllers/fiche-action-update.e2e-spec.ts +++ b/backend/src/plans/fiches/fiche-action-update.e2e-spec.ts @@ -6,27 +6,8 @@ import { describe, expect, it } from 'vitest'; import { getTestApp } from '../../../test/app-utils'; import { getAuthToken } from '../../../test/auth-utils'; import DatabaseService from '../../common/services/database.service'; -import { ficheActionAxeTable } from '../../plans/fiches/shared/models/fiche-action-axe.table'; -import { - ciblesEnumSchema, - FicheActionStatutsEnumType, - ficheActionTable, - piliersEciEnumType, -} from '../../plans/fiches/shared/models/fiche-action.table'; -import { ficheActionActionTable } from '../models/fiche-action-action.table'; -import { ficheActionEffetAttenduTable } from '../models/fiche-action-effet-attendu.table'; -import { ficheActionFinanceurTagTable } from '../models/fiche-action-financeur-tag.table'; -import { ficheActionIndicateurTable } from '../models/fiche-action-indicateur.table'; -import { ficheActionLibreTagTable } from '../models/fiche-action-libre-tag.table'; -import { ficheActionLienTable } from '../models/fiche-action-lien.table'; -import { ficheActionPartenaireTagTable } from '../models/fiche-action-partenaire-tag.table'; -import { ficheActionPiloteTable } from '../models/fiche-action-pilote.table'; -import { ficheActionReferentTable } from '../models/fiche-action-referent.table'; -import { ficheActionServiceTagTable } from '../models/fiche-action-service.table'; -import { ficheActionSousThematiqueTable } from '../models/fiche-action-sous-thematique.table'; -import { ficheActionStructureTagTable } from '../models/fiche-action-structure-tag.table'; -import { ficheActionThematiqueTable } from '../models/fiche-action-thematique.table'; -import { UpdateFicheActionRequestType } from '../models/update-fiche-action.request'; +import { UpdateFicheActionRequestClass } from '../../fiches/controllers/fiches-action.controller'; +import { UpdateFicheActionRequestType } from '../../fiches/models/update-fiche-action.request'; import { actionsFixture, axesFixture, @@ -42,9 +23,28 @@ import { sousThematiquesFixture, structuresFixture, thematiquesFixture, -} from '../shared/fixtures/fiche-action-relations.fixture'; -import { ficheActionFixture } from '../shared/fixtures/fiche-action.fixture'; -import { UpdateFicheActionRequestClass } from './fiches-action.controller'; +} from '../../fiches/shared/fixtures/fiche-action-relations.fixture'; +import { ficheActionFixture } from '../../fiches/shared/fixtures/fiche-action.fixture'; +import { ficheActionActionTable } from '../models/fiche-action-action.table'; +import { ficheActionEffetAttenduTable } from '../models/fiche-action-effet-attendu.table'; +import { ficheActionFinanceurTagTable } from '../models/fiche-action-financeur-tag.table'; +import { ficheActionIndicateurTable } from '../models/fiche-action-indicateur.table'; +import { ficheActionLibreTagTable } from '../models/fiche-action-libre-tag.table'; +import { ficheActionLienTable } from '../models/fiche-action-lien.table'; +import { ficheActionPartenaireTagTable } from '../models/fiche-action-partenaire-tag.table'; +import { ficheActionPiloteTable } from '../models/fiche-action-pilote.table'; +import { ficheActionReferentTable } from '../models/fiche-action-referent.table'; +import { ficheActionServiceTagTable } from '../models/fiche-action-service.table'; +import { ficheActionSousThematiqueTable } from '../models/fiche-action-sous-thematique.table'; +import { ficheActionStructureTagTable } from '../models/fiche-action-structure-tag.table'; +import { ficheActionThematiqueTable } from '../models/fiche-action-thematique.table'; +import { ficheActionAxeTable } from './shared/models/fiche-action-axe.table'; +import { + ciblesEnumSchema, + FicheActionStatutsEnumType, + ficheActionTable, + piliersEciEnumType, +} from './shared/models/fiche-action.table'; const collectiviteId = 1; const ficheActionId = 9999; diff --git a/backend/src/fiches/controllers/fiches-action.controller.ts b/backend/src/plans/fiches/fiches-action.controller.ts similarity index 85% rename from backend/src/fiches/controllers/fiches-action.controller.ts rename to backend/src/plans/fiches/fiches-action.controller.ts index 87787b32c7..a519bb75d4 100644 --- a/backend/src/fiches/controllers/fiches-action.controller.ts +++ b/backend/src/plans/fiches/fiches-action.controller.ts @@ -1,5 +1,8 @@ import { ficheActionNoteSchema } from '@/backend/plans/fiches'; +import { CountByStatutService } from '@/backend/plans/fiches/count-by-statut/count-by-statut.service'; +import { countSyntheseValeurSchema } from '@/backend/utils/count-by.dto'; import { createZodDto } from '@anatine/zod-nestjs'; +import { extendApi } from '@anatine/zod-openapi'; import { Body, Controller, @@ -13,26 +16,28 @@ import { ApiOkResponse, ApiTags } from '@nestjs/swagger'; import { z } from 'zod'; import { TokenInfo } from '../../auth/decorators/token-info.decorators'; import type { AuthenticatedUser } from '../../auth/models/auth.models'; -import FicheService from '../../plans/fiches/fiche.service'; -import FichesActionUpdateService from '../../plans/fiches/fiches-action-update.service'; -import { CountByStatutService } from '../count-by-statut/count-by-statut.service'; -import { getFichesActionSyntheseSchema } from '../models/get-fiches-action-synthese.response'; -import { getFichesActionFilterRequestSchema } from '../models/get-fiches-actions-filter.request'; -import { updateFicheActionRequestSchema } from '../models/update-fiche-action.request'; +import { updateFicheActionRequestSchema } from '../../fiches/models/update-fiche-action.request'; import { deleteFicheActionNotesRequestSchema, upsertFicheActionNotesRequestSchema, -} from '../models/upsert-fiche-action-note.request'; +} from '../../fiches/models/upsert-fiche-action-note.request'; +import FicheService from './fiche.service'; +import FichesActionUpdateService from './fiches-action-update.service'; +import { fetchFichesFilterRequestSchema } from './shared/fetch-fiches-filter.request'; /** * Création des classes de réponse à partir du schema pour générer automatiquement la documentation OpenAPI */ export class GetFichesActionSyntheseResponseClass extends createZodDto( - getFichesActionSyntheseSchema + extendApi( + z.object({ + par_statut: countSyntheseValeurSchema, + }) + ) ) {} export class GetFichesActionFilterRequestClass extends createZodDto( - getFichesActionFilterRequestSchema + fetchFichesFilterRequestSchema ) {} export class UpdateFicheActionRequestClass extends createZodDto( updateFicheActionRequestSchema.refine( diff --git a/backend/src/fiches/fiches-action.module.ts b/backend/src/plans/fiches/fiches.module.ts similarity index 68% rename from backend/src/fiches/fiches-action.module.ts rename to backend/src/plans/fiches/fiches.module.ts index 7da7f9d17c..8325450ba3 100644 --- a/backend/src/fiches/fiches-action.module.ts +++ b/backend/src/plans/fiches/fiches.module.ts @@ -1,17 +1,17 @@ import { Module } from '@nestjs/common'; -import { AuthModule } from '../auth/auth.module'; -import { CollectivitesModule } from '../collectivites/collectivites.module'; -import { CommonModule } from '../common/common.module'; -import FicheService from '../plans/fiches/fiche.service'; -import FichesActionUpdateService from '../plans/fiches/fiches-action-update.service'; -import TagService from '../taxonomie/services/tag.service'; +import { AuthModule } from '../../auth/auth.module'; +import { CollectivitesModule } from '../../collectivites/collectivites.module'; +import { CommonModule } from '../../common/common.module'; +import TagService from '../../taxonomie/services/tag.service'; import { BulkEditRouter } from './bulk-edit/bulk-edit.router'; import { BulkEditService } from './bulk-edit/bulk-edit.service'; -import { FichesActionController } from './controllers/fiches-action.controller'; import { CountByStatutRouter } from './count-by-statut/count-by-statut.router'; import { CountByStatutService } from './count-by-statut/count-by-statut.service'; import { FicheActionEtapeRouter } from './fiche-action-etape/fiche-action-etape.router'; import { FicheActionEtapeService } from './fiche-action-etape/fiche-action-etape.service'; +import FicheService from './fiche.service'; +import FichesActionUpdateService from './fiches-action-update.service'; +import { FichesActionController } from './fiches-action.controller'; @Module({ imports: [CommonModule, AuthModule, CollectivitesModule], diff --git a/backend/src/fiches/models/get-fiches-actions-filter.request.ts b/backend/src/plans/fiches/shared/fetch-fiches-filter.request.ts similarity index 87% rename from backend/src/fiches/models/get-fiches-actions-filter.request.ts rename to backend/src/plans/fiches/shared/fetch-fiches-filter.request.ts index 0373575b5b..b471396d10 100644 --- a/backend/src/fiches/models/get-fiches-actions-filter.request.ts +++ b/backend/src/plans/fiches/shared/fetch-fiches-filter.request.ts @@ -1,8 +1,8 @@ +import { modifiedSinceSchema } from '@/backend/common/models/modified-since.enum'; import { z } from 'zod'; -import { modifiedSinceSchema } from '../../common/models/modified-since.enum'; -import { ciblesEnumSchema } from '../../plans/fiches/shared/models/fiche-action.table'; +import { ciblesEnumSchema } from './models/fiche-action.table'; -export const getFichesActionFilterRequestSchema = z +export const fetchFichesFilterRequestSchema = z .object({ cibles: z .string() @@ -64,5 +64,5 @@ export const getFichesActionFilterRequestSchema = z .describe('Filtre de récupération des fiches action'); export type GetFichesActionFilterRequestType = z.infer< - typeof getFichesActionFilterRequestSchema + typeof fetchFichesFilterRequestSchema >; diff --git a/backend/src/common/models/count-synthese.dto.ts b/backend/src/utils/count-by.dto.ts similarity index 100% rename from backend/src/common/models/count-synthese.dto.ts rename to backend/src/utils/count-by.dto.ts diff --git a/backend/src/utils/enum.utils.ts b/backend/src/utils/enum.utils.ts index d44a300441..ec2241276f 100644 --- a/backend/src/utils/enum.utils.ts +++ b/backend/src/utils/enum.utils.ts @@ -4,3 +4,29 @@ export function getEnumValues( // Returns as a non-empty array return Object.values(enumObj) as [Enum, ...Enum[]]; } + +/** + * Permet de créer un objet jouant le rôle d'enum à partir d'une liste de chaînes + * + * Usage : + * ``` + * const Color = [ "Red", "Green", "Blue" ] as const + * const ColorEnum = createEnumObject(Color); + * + * const colorEnum = pgEnum("color", Color); + * const colorSchema = z.enum(Color); + * const table = pgTable("table",{enum: colorEnum("enum")}); + * db.insert(table).values({enum: ColorEnum.BLUE}); + * ``` + * + * Ref: https://github.com/drizzle-team/drizzle-orm/discussions/1914#discussioncomment-8816193 + */ +export const createEnumObject = ( + values: T +): Record, T[number]> => { + const obj: Record = {}; + for (const value of values) { + obj[value.toUpperCase()] = value; + } + return obj; +}; diff --git a/backend/src/utils/trpc/trpc.router.ts b/backend/src/utils/trpc/trpc.router.ts index 3a279ef955..95e935720a 100644 --- a/backend/src/utils/trpc/trpc.router.ts +++ b/backend/src/utils/trpc/trpc.router.ts @@ -1,11 +1,11 @@ +import { BulkEditRouter } from '@/backend/plans/fiches/bulk-edit/bulk-edit.router'; +import { CountByStatutRouter } from '@/backend/plans/fiches/count-by-statut/count-by-statut.router'; +import { FicheActionEtapeRouter } from '@/backend/plans/fiches/fiche-action-etape/fiche-action-etape.router'; import { INestApplication, Injectable, Logger } from '@nestjs/common'; import { createExpressMiddleware } from '@trpc/server/adapters/express'; import { CollectiviteMembresRouter } from '../../collectivites/membres/membres.router'; import { PersonnesRouter } from '../../collectivites/personnes.router'; import SupabaseService from '../../common/services/supabase.service'; -import { BulkEditRouter } from '../../fiches/bulk-edit/bulk-edit.router'; -import { CountByStatutRouter } from '../../fiches/count-by-statut/count-by-statut.router'; -import { FicheActionEtapeRouter } from '../../fiches/fiche-action-etape/fiche-action-etape.router'; import { IndicateurFiltreRouter } from '../../indicateurs/indicateur-filtre/indicateur-filtre.router'; import { TrajectoiresRouter } from '../../indicateurs/routers/trajectoires.router'; import { ComputeScoreRouter } from '../../referentiels/compute-score/compute-score.router'; From bc095cc1a4f1f7de443ba1e784c821355475816c Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Thu, 19 Dec 2024 15:38:37 +0100 Subject: [PATCH 18/33] Fix backend tests --- .../bulk-edit/bulk-edit.router.e2e-spec.ts | 31 +++++++++-------- .../count-by-statut.router.e2e-spec.ts | 12 +++---- .../fiche-action-etape.router.e2e-spec.ts | 15 ++++---- .../fiches/fiche-action-update.e2e-spec.ts | 34 +++++++++---------- 4 files changed, 47 insertions(+), 45 deletions(-) diff --git a/backend/src/plans/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts b/backend/src/plans/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts index 19960be4b1..129b221f81 100644 --- a/backend/src/plans/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts +++ b/backend/src/plans/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts @@ -1,23 +1,24 @@ +import { AuthenticatedUser } from '@/backend/auth/models/auth.models'; +import { libreTagTable } from '@/backend/collectivites'; import { DatabaseService } from '@/backend/common'; -import { inferProcedureInput } from '@trpc/server'; -import { eq, inArray, sql } from 'drizzle-orm'; import { + getAuthUser, getTestApp, getTestDatabase, getTestRouter, -} from '../../../test/app-utils'; -import { getAuthUser } from '../../../test/auth-utils'; -import { YOLO_DODO, YULU_DUDU } from '../../../test/test-users.samples'; -import { AuthenticatedUser } from '../../auth/models/auth.models'; + YOLO_DODO, + YULU_DUDU, +} from '@/backend/test'; +import { AppRouter, TrpcRouter } from '@/backend/utils/trpc/trpc.router'; +import { inferProcedureInput } from '@trpc/server'; +import { eq, inArray, sql } from 'drizzle-orm'; +import { ficheActionLibreTagTable } from '../shared/models/fiche-action-libre-tag.table'; +import { ficheActionPiloteTable } from '../shared/models/fiche-action-pilote.table'; import { - FicheActionStatutsEnumType, ficheActionTable, prioriteEnumSchema, -} from '../../plans/fiches/shared/models/fiche-action.table'; -import { libreTagTable } from '../../shared/models/libre-tag.table'; -import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; -import { ficheActionLibreTagTable } from '../models/fiche-action-libre-tag.table'; -import { ficheActionPiloteTable } from '../models/fiche-action-pilote.table'; + statutsEnumSchema, +} from '../shared/models/fiche-action.table'; type Input = inferProcedureInput; @@ -94,7 +95,7 @@ describe('BulkEditRouter', () => { const input1: Input = { ficheIds, - statut: FicheActionStatutsEnumType.EN_RETARD, + statut: statutsEnumSchema.enum['En retard'], }; const result = await caller.plans.fiches.bulkEdit(input1); @@ -360,7 +361,7 @@ describe('BulkEditRouter', () => { const input = { ficheIds: [...ficheIds, newFiche.id], - statut: FicheActionStatutsEnumType.EN_RETARD, + statut: statutsEnumSchema.enum['En retard'], }; await expect(() => @@ -373,7 +374,7 @@ describe('BulkEditRouter', () => { const input = { ficheIds, - statut: FicheActionStatutsEnumType.EN_RETARD, + statut: statutsEnumSchema.Enum['En retard'], }; await expect(() => diff --git a/backend/src/plans/fiches/count-by-statut/count-by-statut.router.e2e-spec.ts b/backend/src/plans/fiches/count-by-statut/count-by-statut.router.e2e-spec.ts index c04d300954..933ef7e098 100644 --- a/backend/src/plans/fiches/count-by-statut/count-by-statut.router.e2e-spec.ts +++ b/backend/src/plans/fiches/count-by-statut/count-by-statut.router.e2e-spec.ts @@ -1,9 +1,9 @@ +import { AuthenticatedUser } from '@/backend/auth/models/auth.models'; +import { getAuthUser, getTestRouter } from '@/backend/test'; +import { AppRouter } from '@/backend/utils'; +import { TrpcRouter } from '@/backend/utils/trpc/trpc.router'; import { inferProcedureInput } from '@trpc/server'; -import { getTestRouter } from '../../../test/app-utils'; -import { getAuthUser } from '../../../test/auth-utils'; -import { FicheActionStatutsEnumType } from '../../plans/fiches/shared/models/fiche-action.table'; -import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; -import { AuthenticatedUser } from './../../auth/models/auth.models'; +import { statutsEnumValues } from '../shared/models/fiche-action.table'; type Input = inferProcedureInput; @@ -27,7 +27,7 @@ describe('CountByStatutRouter', () => { const result = await caller.plans.fiches.countByStatut(input); expect(result).toMatchObject({}); - for (const statut of Object.values(FicheActionStatutsEnumType)) { + for (const statut of statutsEnumValues) { expect(result[statut]).toMatchObject({ valeur: expect.any(String), count: expect.any(Number), diff --git a/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.router.e2e-spec.ts b/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.router.e2e-spec.ts index 3f5147d48d..d3c76b00cd 100644 --- a/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.router.e2e-spec.ts +++ b/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.router.e2e-spec.ts @@ -1,14 +1,15 @@ -import { inferProcedureInput } from '@trpc/server'; -import { eq } from 'drizzle-orm'; +import { AuthenticatedUser } from '@/backend/auth/models/auth.models'; +import { DatabaseService } from '@/backend/common'; import { + getAuthUser, getTestApp, getTestDatabase, getTestRouter, -} from '../../../test/app-utils'; -import { getAuthUser } from '../../../test/auth-utils'; -import DatabaseService from '../../common/services/database.service'; -import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; -import { AuthenticatedUser } from './../../auth/models/auth.models'; +} from '@/backend/test'; +import { AppRouter } from '@/backend/utils'; +import { TrpcRouter } from '@/backend/utils/trpc/trpc.router'; +import { inferProcedureInput } from '@trpc/server'; +import { eq } from 'drizzle-orm'; import { ficheActionEtapeTable } from './fiche-action-etape.table'; type upsertInput = inferProcedureInput< diff --git a/backend/src/plans/fiches/fiche-action-update.e2e-spec.ts b/backend/src/plans/fiches/fiche-action-update.e2e-spec.ts index 60cb331a59..edc2907465 100644 --- a/backend/src/plans/fiches/fiche-action-update.e2e-spec.ts +++ b/backend/src/plans/fiches/fiche-action-update.e2e-spec.ts @@ -1,4 +1,4 @@ -import { libreTagTable } from '@/backend/shared'; +import { libreTagTable } from '@/backend/collectivites'; import { INestApplication } from '@nestjs/common'; import { eq } from 'drizzle-orm'; import { default as request } from 'supertest'; @@ -6,7 +6,6 @@ import { describe, expect, it } from 'vitest'; import { getTestApp } from '../../../test/app-utils'; import { getAuthToken } from '../../../test/auth-utils'; import DatabaseService from '../../common/services/database.service'; -import { UpdateFicheActionRequestClass } from '../../fiches/controllers/fiches-action.controller'; import { UpdateFicheActionRequestType } from '../../fiches/models/update-fiche-action.request'; import { actionsFixture, @@ -25,25 +24,26 @@ import { thematiquesFixture, } from '../../fiches/shared/fixtures/fiche-action-relations.fixture'; import { ficheActionFixture } from '../../fiches/shared/fixtures/fiche-action.fixture'; -import { ficheActionActionTable } from '../models/fiche-action-action.table'; -import { ficheActionEffetAttenduTable } from '../models/fiche-action-effet-attendu.table'; -import { ficheActionFinanceurTagTable } from '../models/fiche-action-financeur-tag.table'; -import { ficheActionIndicateurTable } from '../models/fiche-action-indicateur.table'; -import { ficheActionLibreTagTable } from '../models/fiche-action-libre-tag.table'; -import { ficheActionLienTable } from '../models/fiche-action-lien.table'; -import { ficheActionPartenaireTagTable } from '../models/fiche-action-partenaire-tag.table'; -import { ficheActionPiloteTable } from '../models/fiche-action-pilote.table'; -import { ficheActionReferentTable } from '../models/fiche-action-referent.table'; -import { ficheActionServiceTagTable } from '../models/fiche-action-service.table'; -import { ficheActionSousThematiqueTable } from '../models/fiche-action-sous-thematique.table'; -import { ficheActionStructureTagTable } from '../models/fiche-action-structure-tag.table'; -import { ficheActionThematiqueTable } from '../models/fiche-action-thematique.table'; +import { UpdateFicheActionRequestClass } from './fiches-action.controller'; +import { ficheActionActionTable } from './shared/models/fiche-action-action.table'; import { ficheActionAxeTable } from './shared/models/fiche-action-axe.table'; +import { ficheActionEffetAttenduTable } from './shared/models/fiche-action-effet-attendu.table'; +import { ficheActionFinanceurTagTable } from './shared/models/fiche-action-financeur-tag.table'; +import { ficheActionIndicateurTable } from './shared/models/fiche-action-indicateur.table'; +import { ficheActionLibreTagTable } from './shared/models/fiche-action-libre-tag.table'; +import { ficheActionLienTable } from './shared/models/fiche-action-lien.table'; +import { ficheActionPartenaireTagTable } from './shared/models/fiche-action-partenaire-tag.table'; +import { ficheActionPiloteTable } from './shared/models/fiche-action-pilote.table'; +import { ficheActionReferentTable } from './shared/models/fiche-action-referent.table'; +import { ficheActionServiceTagTable } from './shared/models/fiche-action-service-tag.table'; +import { ficheActionSousThematiqueTable } from './shared/models/fiche-action-sous-thematique.table'; +import { ficheActionStructureTagTable } from './shared/models/fiche-action-structure-tag.table'; +import { ficheActionThematiqueTable } from './shared/models/fiche-action-thematique.table'; import { ciblesEnumSchema, - FicheActionStatutsEnumType, ficheActionTable, piliersEciEnumType, + statutsEnumSchema, } from './shared/models/fiche-action.table'; const collectiviteId = 1; @@ -212,7 +212,7 @@ describe('FichesActionUpdateService', () => { ressources: 'Service numérique', financements: 'De 40 000€ à 100 000€', budgetPrevisionnel: '35000', - statut: FicheActionStatutsEnumType.EN_PAUSE, + statut: statutsEnumSchema.enum['En pause'], ameliorationContinue: false, calendrier: 'Calendrier prévisionnel', notesComplementaires: 'Vive le vélo !', From ac8dd7102743209a2f0e15ab01ef4f15cbb323e3 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Thu, 19 Dec 2024 18:15:22 +0100 Subject: [PATCH 19/33] Totally migrate fiches/ to plans/fiches/ --- .../fiches/bulk-edit/bulk-edit.service.ts | 23 +++++++-------- .../fiches/fiche-action-update.e2e-spec.ts | 8 +++--- backend/src/plans/fiches/fiche.service.ts | 8 +++--- .../fiches/fiches-action-update.service.ts | 6 ++-- .../plans/fiches/fiches-action.controller.ts | 6 ++-- .../fiches/shared/edit-fiche.request.ts} | 28 +++++++++---------- .../fiche-action-relations.fixture.ts | 0 .../shared/fixtures/fiche-action.fixture.ts | 6 ++-- .../fiche-action-action-impact.table.ts} | 6 ++-- .../shared/models/fiche-action.table.ts | 12 ++++---- .../upsert-fiche-action-note.request.ts | 0 11 files changed, 49 insertions(+), 54 deletions(-) rename backend/src/{fiches/models/update-fiche-action.request.ts => plans/fiches/shared/edit-fiche.request.ts} (73%) rename backend/src/{ => plans}/fiches/shared/fixtures/fiche-action-relations.fixture.ts (100%) rename backend/src/{ => plans}/fiches/shared/fixtures/fiche-action.fixture.ts (85%) rename backend/src/{fiches/models/action-impact-fiche-action.table.ts => plans/fiches/shared/models/fiche-action-action-impact.table.ts} (64%) rename backend/src/{fiches/models => plans/fiches/shared}/upsert-fiche-action-note.request.ts (100%) diff --git a/backend/src/plans/fiches/bulk-edit/bulk-edit.service.ts b/backend/src/plans/fiches/bulk-edit/bulk-edit.service.ts index 9b2a8bf063..1514522943 100644 --- a/backend/src/plans/fiches/bulk-edit/bulk-edit.service.ts +++ b/backend/src/plans/fiches/bulk-edit/bulk-edit.service.ts @@ -3,12 +3,12 @@ import { PermissionService } from '@/backend/auth/authorizations/permission.serv import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; import { AuthUser } from '@/backend/auth/models/auth.models'; import { DatabaseService } from '@/backend/common'; -import { updateFicheActionRequestSchema } from '@/backend/fiches/models/update-fiche-action.request'; import { ficheActionLibreTagTable, - ficheActionSchema, ficheActionTable, + ficheSchema, } from '@/backend/plans/fiches'; +import { editFicheRequestSchema } from '@/backend/plans/fiches/shared/edit-fiche.request'; import { Injectable } from '@nestjs/common'; import { and, inArray, or } from 'drizzle-orm'; import z from 'zod'; @@ -24,18 +24,15 @@ export class BulkEditService { ) {} bulkEditRequestSchema = z.object({ - ficheIds: ficheActionSchema.shape.id.array(), - statut: ficheActionSchema.shape.statut.optional(), - priorite: ficheActionSchema.shape.priorite.optional(), - dateFin: ficheActionSchema.shape.dateFin.optional(), - ameliorationContinue: - ficheActionSchema.shape.ameliorationContinue.optional(), - - pilotes: listSchema( - updateFicheActionRequestSchema.shape.pilotes.unwrap().unwrap() - ), + ficheIds: ficheSchema.shape.id.array(), + statut: ficheSchema.shape.statut.optional(), + priorite: ficheSchema.shape.priorite.optional(), + dateFin: ficheSchema.shape.dateFin.optional(), + ameliorationContinue: ficheSchema.shape.ameliorationContinue.optional(), + + pilotes: listSchema(editFicheRequestSchema.shape.pilotes.unwrap().unwrap()), libreTags: listSchema( - updateFicheActionRequestSchema.shape.libresTag.unwrap().unwrap() + editFicheRequestSchema.shape.libresTag.unwrap().unwrap() ), }); diff --git a/backend/src/plans/fiches/fiche-action-update.e2e-spec.ts b/backend/src/plans/fiches/fiche-action-update.e2e-spec.ts index edc2907465..a38762c695 100644 --- a/backend/src/plans/fiches/fiche-action-update.e2e-spec.ts +++ b/backend/src/plans/fiches/fiche-action-update.e2e-spec.ts @@ -6,7 +6,8 @@ import { describe, expect, it } from 'vitest'; import { getTestApp } from '../../../test/app-utils'; import { getAuthToken } from '../../../test/auth-utils'; import DatabaseService from '../../common/services/database.service'; -import { UpdateFicheActionRequestType } from '../../fiches/models/update-fiche-action.request'; +import { UpdateFicheActionRequestClass } from './fiches-action.controller'; +import { UpdateFicheActionRequestType } from './shared/edit-fiche.request'; import { actionsFixture, axesFixture, @@ -22,9 +23,8 @@ import { sousThematiquesFixture, structuresFixture, thematiquesFixture, -} from '../../fiches/shared/fixtures/fiche-action-relations.fixture'; -import { ficheActionFixture } from '../../fiches/shared/fixtures/fiche-action.fixture'; -import { UpdateFicheActionRequestClass } from './fiches-action.controller'; +} from './shared/fixtures/fiche-action-relations.fixture'; +import { ficheActionFixture } from './shared/fixtures/fiche-action.fixture'; import { ficheActionActionTable } from './shared/models/fiche-action-action.table'; import { ficheActionAxeTable } from './shared/models/fiche-action-axe.table'; import { ficheActionEffetAttenduTable } from './shared/models/fiche-action-effet-attendu.table'; diff --git a/backend/src/plans/fiches/fiche.service.ts b/backend/src/plans/fiches/fiche.service.ts index 257bfba1d3..83fb4b0bf6 100644 --- a/backend/src/plans/fiches/fiche.service.ts +++ b/backend/src/plans/fiches/fiche.service.ts @@ -6,8 +6,8 @@ import { Injectable, Logger } from '@nestjs/common'; import { aliasedTable, desc, eq } from 'drizzle-orm'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import DatabaseService from '../../common/services/database.service'; -import { actionImpactFicheActionTable } from '../../fiches/models/action-impact-fiche-action.table'; import TagService from '../../taxonomie/services/tag.service'; +import { ficheActionActionImpactTable } from './shared/models/fiche-action-action-impact.table'; import { ficheActionActionTable } from './shared/models/fiche-action-action.table'; import { ficheActionEffetAttenduTable } from './shared/models/fiche-action-effet-attendu.table'; import { ficheActionIndicateurTable } from './shared/models/fiche-action-indicateur.table'; @@ -16,7 +16,7 @@ import { ficheActionPartenaireTagTable } from './shared/models/fiche-action-part import { ficheActionSousThematiqueTable } from './shared/models/fiche-action-sous-thematique.table'; import { ficheActionThematiqueTable } from './shared/models/fiche-action-thematique.table'; import { - CreateFicheActionType, + FicheCreate, ficheActionTable, } from './shared/models/fiche-action.table'; @@ -76,7 +76,7 @@ export default class FicheService { * @param fiche * @return identifiant de la fiche crée */ - async createFiche(fiche: CreateFicheActionType): Promise { + async createFiche(fiche: FicheCreate): Promise { this.logger.log( `Création de la fiche ${fiche.titre} pour la collectivité ${fiche.collectiviteId}` ); @@ -190,7 +190,7 @@ export default class FicheService { * @param actionId identifiant de l'action */ async addActionImpact(ficheId: number, actionId: number): Promise { - await this.databaseService.db.insert(actionImpactFicheActionTable).values({ + await this.databaseService.db.insert(ficheActionActionImpactTable).values({ ficheId: ficheId, actionImpactId: actionId, }); diff --git a/backend/src/plans/fiches/fiches-action-update.service.ts b/backend/src/plans/fiches/fiches-action-update.service.ts index 090992154c..eb645da7df 100644 --- a/backend/src/plans/fiches/fiches-action-update.service.ts +++ b/backend/src/plans/fiches/fiches-action-update.service.ts @@ -14,9 +14,9 @@ import { PostgresJsQueryResultHKT } from 'drizzle-orm/postgres-js'; import { toCamel } from 'postgres'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import DatabaseService from '../../common/services/database.service'; -import { UpdateFicheActionRequestType } from '../../fiches/models/update-fiche-action.request'; import { buildConflictUpdateColumns } from '../../utils/drizzle/conflict.utils'; import FicheService from './fiche.service'; +import { UpdateFicheActionRequestType } from './shared/edit-fiche.request'; import { ficheActionActionTable } from './shared/models/fiche-action-action.table'; import { ficheActionAxeTable } from './shared/models/fiche-action-axe.table'; import { ficheActionEffetAttenduTable } from './shared/models/fiche-action-effet-attendu.table'; @@ -37,7 +37,7 @@ import { ficheActionStructureTagTable } from './shared/models/fiche-action-struc import { ficheActionThematiqueTable } from './shared/models/fiche-action-thematique.table'; import { ficheActionTable, - updateFicheActionSchema, + ficheSchemaUpdate, } from './shared/models/fiche-action.table'; type TxType = PgTransaction< @@ -114,7 +114,7 @@ export default class FichesActionUpdateService { } // Removes all props that are not in the schema - const ficheAction = updateFicheActionSchema.parse(unsafeFicheAction); + const ficheAction = ficheSchemaUpdate.parse(unsafeFicheAction); let updatedFicheAction; let updatedAxes; diff --git a/backend/src/plans/fiches/fiches-action.controller.ts b/backend/src/plans/fiches/fiches-action.controller.ts index a519bb75d4..e8bcacfd9b 100644 --- a/backend/src/plans/fiches/fiches-action.controller.ts +++ b/backend/src/plans/fiches/fiches-action.controller.ts @@ -16,13 +16,13 @@ import { ApiOkResponse, ApiTags } from '@nestjs/swagger'; import { z } from 'zod'; import { TokenInfo } from '../../auth/decorators/token-info.decorators'; import type { AuthenticatedUser } from '../../auth/models/auth.models'; -import { updateFicheActionRequestSchema } from '../../fiches/models/update-fiche-action.request'; import { deleteFicheActionNotesRequestSchema, upsertFicheActionNotesRequestSchema, -} from '../../fiches/models/upsert-fiche-action-note.request'; +} from './shared/upsert-fiche-action-note.request'; import FicheService from './fiche.service'; import FichesActionUpdateService from './fiches-action-update.service'; +import { editFicheRequestSchema } from './shared/edit-fiche.request'; import { fetchFichesFilterRequestSchema } from './shared/fetch-fiches-filter.request'; /** @@ -40,7 +40,7 @@ export class GetFichesActionFilterRequestClass extends createZodDto( fetchFichesFilterRequestSchema ) {} export class UpdateFicheActionRequestClass extends createZodDto( - updateFicheActionRequestSchema.refine( + editFicheRequestSchema.refine( (schema) => Object.keys(schema).length > 0, 'Body cannot be empty' ) diff --git a/backend/src/fiches/models/update-fiche-action.request.ts b/backend/src/plans/fiches/shared/edit-fiche.request.ts similarity index 73% rename from backend/src/fiches/models/update-fiche-action.request.ts rename to backend/src/plans/fiches/shared/edit-fiche.request.ts index b08f759b34..77ec3579f0 100644 --- a/backend/src/fiches/models/update-fiche-action.request.ts +++ b/backend/src/plans/fiches/shared/edit-fiche.request.ts @@ -5,19 +5,19 @@ import { structureTagSchema, } from '@/backend/collectivites'; import z from 'zod'; -import { financeurTagSchema } from '../../collectivites/shared/models/financeur-tag.table'; -import { indicateurDefinitionSchema } from '../../indicateurs/models/indicateur-definition.table'; -import { axeSchema } from '../../plans/fiches/shared/models/axe.table'; +import { financeurTagSchema } from '../../../collectivites/shared/models/financeur-tag.table'; +import { indicateurDefinitionSchema } from '../../../indicateurs/models/indicateur-definition.table'; +import { actionRelationSchema } from '../../../referentiels/models/action-relation.table'; +import { effetAttenduSchema } from '../../../shared/models/effet-attendu.table'; +import { sousThematiqueSchema } from '../../../shared/models/sous-thematique.table'; +import { thematiqueSchema } from '../../../shared/models/thematique.table'; +import { axeSchema } from './models/axe.table'; import { ciblesEnumSchema, - ficheActionSchema, + ficheSchema, + ficheSchemaUpdate, piliersEciEnumType, - updateFicheActionSchema, -} from '../../plans/fiches/shared/models/fiche-action.table'; -import { actionRelationSchema } from '../../referentiels/models/action-relation.table'; -import { effetAttenduSchema } from '../../shared/models/effet-attendu.table'; -import { sousThematiqueSchema } from '../../shared/models/sous-thematique.table'; -import { thematiqueSchema } from '../../shared/models/thematique.table'; +} from './models/fiche-action.table'; // There is no proper Pilote or Referent tables, so we use a custom schema here export const personneSchema = z.object({ @@ -34,7 +34,7 @@ const financeurWithMontantSchema = z.object({ montantTtc: z.number().nullish(), }); -export const updateFicheActionRequestSchema = updateFicheActionSchema.extend({ +export const editFicheRequestSchema = ficheSchemaUpdate.extend({ // We're overriding piliersEci and cibles because, // for some unknown reason (a bug with zod/drizzle ?), extend() looses enum's array piliersEci: z @@ -83,13 +83,13 @@ export const updateFicheActionRequestSchema = updateFicheActionSchema.extend({ indicateurs: indicateurDefinitionSchema.pick({ id: true }).array().nullish(), services: serviceTagSchema.pick({ id: true }).array().nullish(), financeurs: financeurWithMontantSchema.array().nullish(), - fichesLiees: ficheActionSchema.pick({ id: true }).array().nullish(), + fichesLiees: ficheSchema.pick({ id: true }).array().nullish(), resultatsAttendus: effetAttenduSchema.pick({ id: true }).array().nullish(), libresTag: libreTagSchema.pick({ id: true }).array().nullish(), }); export type UpdateFicheActionRequestType = z.infer< - typeof updateFicheActionRequestSchema + typeof editFicheRequestSchema >; -export type UpdateFicheActionType = z.infer; +export type UpdateFicheActionType = z.infer; diff --git a/backend/src/fiches/shared/fixtures/fiche-action-relations.fixture.ts b/backend/src/plans/fiches/shared/fixtures/fiche-action-relations.fixture.ts similarity index 100% rename from backend/src/fiches/shared/fixtures/fiche-action-relations.fixture.ts rename to backend/src/plans/fiches/shared/fixtures/fiche-action-relations.fixture.ts diff --git a/backend/src/fiches/shared/fixtures/fiche-action.fixture.ts b/backend/src/plans/fiches/shared/fixtures/fiche-action.fixture.ts similarity index 85% rename from backend/src/fiches/shared/fixtures/fiche-action.fixture.ts rename to backend/src/plans/fiches/shared/fixtures/fiche-action.fixture.ts index 18c94388b6..fe27b195b1 100644 --- a/backend/src/fiches/shared/fixtures/fiche-action.fixture.ts +++ b/backend/src/plans/fiches/shared/fixtures/fiche-action.fixture.ts @@ -1,11 +1,11 @@ import { ciblesEnumSchema, - CreateFicheActionType, + FicheCreate, piliersEciEnumSchema, statutsEnumSchema, -} from '../../../plans/fiches/shared/models/fiche-action.table'; +} from '../models/fiche-action.table'; -export const ficheActionFixture: CreateFicheActionType = { +export const ficheActionFixture: FicheCreate = { id: 9999, titre: 'Test Fiche Action', description: 'patati', diff --git a/backend/src/fiches/models/action-impact-fiche-action.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-action-impact.table.ts similarity index 64% rename from backend/src/fiches/models/action-impact-fiche-action.table.ts rename to backend/src/plans/fiches/shared/models/fiche-action-action-impact.table.ts index 19b785b35e..7175041e34 100644 --- a/backend/src/fiches/models/action-impact-fiche-action.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-action-impact.table.ts @@ -1,8 +1,8 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { actionImpactTable } from '../../panier/models/action-impact.table'; -import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; +import { actionImpactTable } from '../../../../panier/models/action-impact.table'; +import { ficheActionTable } from './fiche-action.table'; -export const actionImpactFicheActionTable = pgTable( +export const ficheActionActionImpactTable = pgTable( 'action_impact_fiche_action', { ficheId: integer('fiche_id').references(() => ficheActionTable.id), diff --git a/backend/src/plans/fiches/shared/models/fiche-action.table.ts b/backend/src/plans/fiches/shared/models/fiche-action.table.ts index 58c7eb4050..a6faf34d81 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action.table.ts @@ -163,24 +163,22 @@ export const ficheActionTable = pgTable('fiche_action', { restreint: boolean('restreint').default(false), }); -export type CreateFicheActionType = InferInsertModel; - -export const ficheActionSchema = createSelectSchema(ficheActionTable, { +export const ficheSchema = createSelectSchema(ficheActionTable, { // Overriding array types as a workaround for drizzle-zod parsing issue // See https://github.com/drizzle-team/drizzle-orm/issues/1609 piliersEci: z.array(piliersEciEnumSchema), cibles: z.array(ciblesEnumSchema), }); -export const createFicheActionSchema = createInsertSchema(ficheActionTable, { +export const ficheSchemaCreate = createInsertSchema(ficheActionTable, { // Overriding array types as a workaround for drizzle-zod parsing issue // See https://github.com/drizzle-team/drizzle-orm/issues/1609 piliersEci: z.array(piliersEciEnumSchema), cibles: z.array(ciblesEnumSchema), }); -export const updateFicheActionSchema = createFicheActionSchema +export type FicheCreate = InferInsertModel; + +export const ficheSchemaUpdate = ficheSchemaCreate .omit({ id: true, createdAt: true, modifiedAt: true, modifiedBy: true }) .partial(); - -export type UpdateFicheActionType = z.infer; diff --git a/backend/src/fiches/models/upsert-fiche-action-note.request.ts b/backend/src/plans/fiches/shared/upsert-fiche-action-note.request.ts similarity index 100% rename from backend/src/fiches/models/upsert-fiche-action-note.request.ts rename to backend/src/plans/fiches/shared/upsert-fiche-action-note.request.ts From 66c512bebc8f948dfc281884b86f5cb255a38c1a Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Thu, 19 Dec 2024 18:21:43 +0100 Subject: [PATCH 20/33] Delete unused file --- .../taxonomie/services/thematique.service.ts | 29 ------------------- 1 file changed, 29 deletions(-) delete mode 100644 backend/src/taxonomie/services/thematique.service.ts diff --git a/backend/src/taxonomie/services/thematique.service.ts b/backend/src/taxonomie/services/thematique.service.ts deleted file mode 100644 index c980477d3e..0000000000 --- a/backend/src/taxonomie/services/thematique.service.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import DatabaseService from '../../common/services/database.service'; -import { - SousThematique, - sousThematiqueTable, -} from '../../shared/models/sous-thematique.table'; - -@Injectable() -export default class ThematiqueService { - private readonly logger = new Logger(ThematiqueService.name); - - constructor(private readonly databaseService: DatabaseService) {} - - /** - * Récupère les sous thématiques provenant de la BDD - * @return une map de sous thématiques avec en clé le nom de la sous thématique - */ - async getSousThematiquesMap(): Promise> { - const result = await this.databaseService.db - .select() - .from(sousThematiqueTable); - const toReturn = new Map(); - for (let i = 0; i < result.length; i++) { - const thematique = result[i]; - toReturn.set(thematique.nom, thematique); - } - return toReturn; - } -} From a4e47eb4113f7b2165ff9a6175546068cdc7987c Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Fri, 20 Dec 2024 10:48:56 +0100 Subject: [PATCH 21/33] =?UTF-8?q?R=C3=A9pare=20les=20d=C3=A9pendances=20ci?= =?UTF-8?q?rculaires?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/auth/authorizations/permission.models.ts | 10 +++++++--- .../roles/private-utilisateur-droit.table.ts | 4 ++-- backend/src/auth/index.ts | 8 +++++++- backend/src/auth/models/invitation.table.ts | 2 +- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/backend/src/auth/authorizations/permission.models.ts b/backend/src/auth/authorizations/permission.models.ts index 4558387b68..2145c887c0 100644 --- a/backend/src/auth/authorizations/permission.models.ts +++ b/backend/src/auth/authorizations/permission.models.ts @@ -1,9 +1,13 @@ -import { Role } from '@/backend/auth/authorizations/roles/role.enum'; -import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; +import { PermissionOperation } from './permission-operation.enum'; +import { Role } from './roles/role.enum'; export const Permission: Record = { [Role.CONNECTE]: [], - [Role.VERIFIE]: [PermissionOperation.COLLECTIVITES_VISITE, PermissionOperation.PLANS_FICHES_VISITE, PermissionOperation.INDICATEURS_VISITE], + [Role.VERIFIE]: [ + PermissionOperation.COLLECTIVITES_VISITE, + PermissionOperation.PLANS_FICHES_VISITE, + PermissionOperation.INDICATEURS_VISITE, + ], [Role.SUPPORT]: [ PermissionOperation.COLLECTIVITES_VISITE, PermissionOperation.COLLECTIVITES_LECTURE, diff --git a/backend/src/auth/authorizations/roles/private-utilisateur-droit.table.ts b/backend/src/auth/authorizations/roles/private-utilisateur-droit.table.ts index f15b247579..179756d4c6 100644 --- a/backend/src/auth/authorizations/roles/private-utilisateur-droit.table.ts +++ b/backend/src/auth/authorizations/roles/private-utilisateur-droit.table.ts @@ -1,9 +1,9 @@ +import { createdAt, modifiedAt } from '@/backend/utils'; import { InferSelectModel } from 'drizzle-orm'; import { boolean, integer, pgTable, serial, uuid } from 'drizzle-orm/pg-core'; import { collectiviteTable } from '../../../collectivites/models/collectivite.table'; +import { invitationTable } from '../../models/invitation.table'; import { NiveauAcces, niveauAccessEnum } from './niveau-acces.enum'; -import { createdAt, modifiedAt } from '@/backend/utils'; -import { invitationTable } from '@/backend/auth/models/invitation.table'; export const utilisateurDroitTable = pgTable('private_utilisateur_droit', { id: serial('id').primaryKey(), diff --git a/backend/src/auth/index.ts b/backend/src/auth/index.ts index d570b38f15..b864998055 100644 --- a/backend/src/auth/index.ts +++ b/backend/src/auth/index.ts @@ -1,2 +1,8 @@ +export * from './authorizations/permission-operation.enum'; +export * from './authorizations/permission.models'; +export * from './authorizations/resource-type.enum'; +export * from './authorizations/roles/private-utilisateur-droit.table'; +export * from './models/auth-users.table'; +export * from './models/auth.models'; export * from './models/dcp.table'; -export * from '@/backend/auth/authorizations/roles/private-utilisateur-droit.table'; +export * from './models/invitation.table'; diff --git a/backend/src/auth/models/invitation.table.ts b/backend/src/auth/models/invitation.table.ts index 6110bc2631..e16938bb5c 100644 --- a/backend/src/auth/models/invitation.table.ts +++ b/backend/src/auth/models/invitation.table.ts @@ -13,7 +13,7 @@ import { createdBy, TIMESTAMP_OPTIONS, } from '../../utils/column.utils'; -import { niveauAccessEnum } from '@/backend/auth/authorizations/roles/niveau-acces.enum'; +import { niveauAccessEnum } from '../authorizations/roles/niveau-acces.enum'; export const utilisateurSchema = pgSchema('utilisateur'); From 78f8aca18b63f3bcbbd6b7bc2733ed026354204e Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Fri, 20 Dec 2024 11:12:27 +0100 Subject: [PATCH 22/33] Simplify `auth` TS config --- packages/auth/next.config.mjs | 8 ++++++-- packages/auth/tsconfig.json | 8 +------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/packages/auth/next.config.mjs b/packages/auth/next.config.mjs index 21ab7c2eeb..c0b1da5be8 100644 --- a/packages/auth/next.config.mjs +++ b/packages/auth/next.config.mjs @@ -1,4 +1,4 @@ -import {composePlugins, withNx} from '@nx/next'; +import { composePlugins, withNx } from '@nx/next'; /** * @type {import('@nx/next/plugins/with-nx').WithNxOptions} @@ -10,6 +10,10 @@ const nextConfig = { svgr: false, }, + typescript: { + tsconfigPath: './tsconfig.json', + }, + // active le mode strict pour détecter les problèmes en dev reactStrictMode: true, // active la minification @@ -19,7 +23,7 @@ const nextConfig = { esmExternals: 'loose', }, // surcharge la config webpack - webpack: config => { + webpack: (config) => { // pour le chargement des fontes au format woff2 config.module.rules.push({ test: /\.woff2$/, diff --git a/packages/auth/tsconfig.json b/packages/auth/tsconfig.json index 80647ecaf5..74ef3720ca 100644 --- a/packages/auth/tsconfig.json +++ b/packages/auth/tsconfig.json @@ -2,15 +2,11 @@ "extends": "../../tsconfig.base.json", "compilerOptions": { "jsx": "preserve", - "allowJs": true, - "esModuleInterop": true, + "allowJs": false, "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, "noEmit": true, "resolveJsonModule": true, "isolatedModules": true, - "incremental": true, "plugins": [ { "name": "next" @@ -24,8 +20,6 @@ "**/*.js", "**/*.jsx", "**/*.mjs", - "../../packages/auth/.next/types/**/*.ts", - "../../dist/apps/auth/.next/types/**/*.ts", "next-env.d.ts", ".next/types/**/*.ts" ], From 7b46491f1906537e767f6e84359f63ea2fbed895 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Sun, 22 Dec 2024 15:44:04 +0100 Subject: [PATCH 23/33] Fix earthfile build dependencies --- Earthfile | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/Earthfile b/Earthfile index 7676214184..3f84268fbe 100644 --- a/Earthfile +++ b/Earthfile @@ -302,8 +302,7 @@ node-alpine-with-all-deps: # Copy shared libraries COPY $API_DIR $API_DIR COPY $UI_DIR $UI_DIR - # Temporarily consider the Backend as a shared library. - # The app build needs it to resolve the import of the trpc AppRouter. + # Backend is also used as a shared library COPY $BACKEND_DIR $BACKEND_DIR @@ -347,6 +346,8 @@ front-deps: # Copy only shared libraries COPY $API_DIR $API_DIR COPY $UI_DIR $UI_DIR + # Backend is also used as a shared library + COPY $BACKEND_DIR $BACKEND_DIR front-deps-builder: LOCALLY @@ -398,11 +399,11 @@ backend-test: tools-automation-api-docker: BUILD --pass-args ./apps/tools-automation-api+docker - + tools-automation-api-deploy: ARG --required KOYEB_API_KEY BUILD --pass-args ./apps/tools-automation-api+deploy - + tools-automation-api-test: BUILD --pass-args ./apps/tools-automation-api+test @@ -465,11 +466,9 @@ app-test-build: ## construit une image pour exécuter les tests unitaires de l'a FROM +front-deps ENV NEXT_PUBLIC_SUPABASE_URL ENV NEXT_PUBLIC_SUPABASE_ANON_KEY + # copie les sources du module à tester COPY $APP_DIR $APP_DIR - COPY $API_DIR $API_DIR - COPY $UI_DIR $UI_DIR - COPY ./vitest.workspace.ts ./ # la commande utilisée pour lancer les tests CMD pnpm run test:app @@ -490,8 +489,7 @@ package-api-test-build: ## construit une image pour exécuter les tests d'intég ENV SUPABASE_URL ENV SUPABASE_ANON_KEY ENV SUPABASE_SERVICE_ROLE_KEY - # copie les sources du module à tester - COPY $API_DIR $API_DIR + # la commande utilisée pour lancer les tests CMD pnpm run test:api SAVE IMAGE package-api-test:latest @@ -530,8 +528,7 @@ auth-build: ## construit l'image du module d'authentification EXPOSE $PORT # copie les sources des modules à construire COPY $AUTH_DIR $AUTH_DIR - COPY $UI_DIR $UI_DIR - COPY $API_DIR $API_DIR + RUN pnpm run build:auth CMD ["dumb-init", "./node_modules/.bin/next", "start", "./packages/auth/"] SAVE IMAGE --cache-from=$AUTH_IMG_NAME --push $AUTH_IMG_NAME From 44fc1ad9b51858f05a9abf4d66a4a6001924e041 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Mon, 23 Dec 2024 15:11:27 +0100 Subject: [PATCH 24/33] Move 'taxonomie' items to their related folder --- backend/src/app.module.ts | 2 - .../src/collectivites/collectivites.module.ts | 10 +++- .../list-categories.router.e2e-spec.ts} | 2 +- .../list-categories.router.ts} | 8 ++-- .../list-categories.service.ts} | 47 +++---------------- backend/src/collectivites/index.ts | 1 + .../collectivite-banatic-competence.table.ts | 5 +- .../shared}/models/categorie-tag.table.ts | 4 +- .../indicateur-filtre.service.ts | 2 +- .../models/indicateur-categorie-tag.table.ts | 5 +- .../action-impact-banatic-competence.table.ts | 5 +- .../action-impact-cateorie-fnv.table.ts | 2 +- .../models/action-impact-partenaire.table.ts | 2 +- .../src/panier/models/action-impact.table.ts | 8 ++-- backend/src/plans/fiches/fiche.service.ts | 19 +------- backend/src/plans/fiches/fiches.module.ts | 2 - .../models/banatic-competence.table.ts | 0 .../models/categorie-fnv.table.ts | 0 .../models/panier-partenaire.table.ts | 0 backend/src/taxonomie/taxonomie.module.ts | 26 ---------- backend/src/utils/trpc/trpc.router.ts | 4 +- 21 files changed, 38 insertions(+), 116 deletions(-) rename backend/src/{taxonomie/routers/get-categories-by-collectivite.router.e2e-spec.ts => collectivites/handle-categories/list-categories.router.e2e-spec.ts} (95%) rename backend/src/{taxonomie/routers/get-categories-by-collectivite.router.ts => collectivites/handle-categories/list-categories.router.ts} (75%) rename backend/src/{taxonomie/services/tag.service.ts => collectivites/handle-categories/list-categories.service.ts} (66%) rename backend/src/{taxonomie => collectivites/shared}/models/categorie-tag.table.ts (67%) rename backend/src/{taxonomie => shared}/models/banatic-competence.table.ts (100%) rename backend/src/{taxonomie => shared}/models/categorie-fnv.table.ts (100%) rename backend/src/{taxonomie => shared}/models/panier-partenaire.table.ts (100%) delete mode 100644 backend/src/taxonomie/taxonomie.module.ts diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 69d7cee971..9d7ce3c7f2 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -10,7 +10,6 @@ import { IndicateursModule } from './indicateurs/indicateurs.module'; import { PersonnalisationsModule } from './personnalisations/personnalisations.module'; import { FichesActionModule } from './plans/fiches/fiches.module'; import { ReferentielsModule } from './referentiels/referentiels.module'; -import { TaxonomieModule } from './taxonomie/taxonomie.module'; import { SheetModule } from './utils/google-sheets/sheet.module'; import { TrpcModule } from './utils/trpc/trpc.module'; import { TrpcRouter } from './utils/trpc/trpc.router'; @@ -33,7 +32,6 @@ import { TrpcRouter } from './utils/trpc/trpc.router'; FichesActionModule, PersonnalisationsModule, ReferentielsModule, - TaxonomieModule, ], providers: [TrpcRouter], }) diff --git a/backend/src/collectivites/collectivites.module.ts b/backend/src/collectivites/collectivites.module.ts index b541bc7b9f..c14f06ea6a 100644 --- a/backend/src/collectivites/collectivites.module.ts +++ b/backend/src/collectivites/collectivites.module.ts @@ -1,12 +1,14 @@ import { Module } from '@nestjs/common'; import { CommonModule } from '../common/common.module'; import { CollectiviteController } from './controllers/collectivite.controller'; +import { ListCategoriesRouter } from './handle-categories/list-categories.router'; +import ListCategoriesService from './handle-categories/list-categories.service'; +import { CollectiviteMembresRouter } from './membres/membres.router'; +import { CollectiviteMembresService } from './membres/membres.service'; import { PersonnesRouter } from './personnes.router'; import CollectivitesService from './services/collectivites.service'; import GroupementsService from './services/groupements.service'; import { PersonnesService } from './services/personnes.service'; -import { CollectiviteMembresService } from './membres/membres.service'; -import { CollectiviteMembresRouter } from './membres/membres.router'; @Module({ imports: [CommonModule], @@ -17,6 +19,8 @@ import { CollectiviteMembresRouter } from './membres/membres.router'; GroupementsService, PersonnesService, PersonnesRouter, + ListCategoriesService, + ListCategoriesRouter, ], exports: [ CollectivitesService, @@ -24,6 +28,8 @@ import { CollectiviteMembresRouter } from './membres/membres.router'; CollectiviteMembresRouter, GroupementsService, PersonnesRouter, + ListCategoriesService, + ListCategoriesRouter, ], controllers: [CollectiviteController], }) diff --git a/backend/src/taxonomie/routers/get-categories-by-collectivite.router.e2e-spec.ts b/backend/src/collectivites/handle-categories/list-categories.router.e2e-spec.ts similarity index 95% rename from backend/src/taxonomie/routers/get-categories-by-collectivite.router.e2e-spec.ts rename to backend/src/collectivites/handle-categories/list-categories.router.e2e-spec.ts index 2b9a481ae0..8dd952e649 100644 --- a/backend/src/taxonomie/routers/get-categories-by-collectivite.router.e2e-spec.ts +++ b/backend/src/collectivites/handle-categories/list-categories.router.e2e-spec.ts @@ -1,8 +1,8 @@ import { inferProcedureInput } from '@trpc/server'; import { getTestRouter } from '../../../test/app-utils'; import { getAuthUser } from '../../../test/auth-utils'; +import { AuthenticatedUser } from '../../auth/models/auth.models'; import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; -import { AuthenticatedUser } from './../../auth/models/auth.models'; type Input = inferProcedureInput; diff --git a/backend/src/taxonomie/routers/get-categories-by-collectivite.router.ts b/backend/src/collectivites/handle-categories/list-categories.router.ts similarity index 75% rename from backend/src/taxonomie/routers/get-categories-by-collectivite.router.ts rename to backend/src/collectivites/handle-categories/list-categories.router.ts index 78f2a126f2..bbd85d5c36 100644 --- a/backend/src/taxonomie/routers/get-categories-by-collectivite.router.ts +++ b/backend/src/collectivites/handle-categories/list-categories.router.ts @@ -1,7 +1,7 @@ import { TrpcService } from '@/backend/utils/trpc/trpc.service'; import { Injectable } from '@nestjs/common'; import { z } from 'zod'; -import TagService from '../services/tag.service'; +import ListCategoriesService from './list-categories.service'; const inputSchema = z.object({ collectiviteId: z.number(), @@ -9,10 +9,10 @@ const inputSchema = z.object({ }); @Injectable() -export class GetCategoriesByCollectiviteRouter { +export class ListCategoriesRouter { constructor( private readonly trpc: TrpcService, - private readonly service: TagService + private readonly service: ListCategoriesService ) {} router = this.trpc.router({ @@ -20,7 +20,7 @@ export class GetCategoriesByCollectiviteRouter { .input(inputSchema) .query(({ ctx, input }) => { const { collectiviteId, withPredefinedTags } = input; - return this.service.getCategoriesByCollectivite( + return this.service.listCategories( collectiviteId, withPredefinedTags, ctx.user diff --git a/backend/src/taxonomie/services/tag.service.ts b/backend/src/collectivites/handle-categories/list-categories.service.ts similarity index 66% rename from backend/src/taxonomie/services/tag.service.ts rename to backend/src/collectivites/handle-categories/list-categories.service.ts index a9bd674ad6..b84f01b455 100644 --- a/backend/src/taxonomie/services/tag.service.ts +++ b/backend/src/collectivites/handle-categories/list-categories.service.ts @@ -1,19 +1,18 @@ import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; import { PermissionService } from '@/backend/auth/authorizations/permission.service'; import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; -import { partenaireTagTable } from '@/backend/collectivites'; import CollectivitesService from '@/backend/collectivites/services/collectivites.service'; import { Injectable, Logger } from '@nestjs/common'; import { and, eq, inArray, isNull, or } from 'drizzle-orm'; import { AuthenticatedUser } from '../../auth/models/auth.models'; -import { groupementCollectiviteTable } from '../../collectivites/models/groupement-collectivite.table'; -import { Tag } from '../../collectivites/shared/models/tag.table-base'; import DatabaseService from '../../common/services/database.service'; -import { categorieTagTable } from '../models/categorie-tag.table'; +import { groupementCollectiviteTable } from '../models/groupement-collectivite.table'; +import { categorieTagTable } from '../shared/models/categorie-tag.table'; +import { Tag } from '../shared/models/tag.table-base'; @Injectable() -export default class TagService { - private readonly logger = new Logger(TagService.name); +export default class ListCategoriesService { + private readonly logger = new Logger(ListCategoriesService.name); constructor( private readonly databaseService: DatabaseService, @@ -21,47 +20,13 @@ export default class TagService { private readonly collectiviteService: CollectivitesService ) {} - /** - * TODO à factoriser avec les autres tags - * Récupère l'id du tag partenaire pour une collectivité et le crée s'il n'existe pas - * @param nom du partenaire - * @param collectiviteId identifiant de la collectivité - * @return identifiant du tag partenaire - */ - async getPartenaireId(nom: string, collectiviteId: number): Promise { - let tag = null; - if (collectiviteId) { - const tags = await this.databaseService.db - .select() - .from(partenaireTagTable) - .where( - and( - eq(partenaireTagTable.nom, nom.trim()), - eq(partenaireTagTable.collectiviteId, collectiviteId) - ) - ); - tag = tags.length > 0 ? tags[0] : null; - } - if (!tag) { - const toReturn = await this.databaseService.db - .insert(partenaireTagTable) - .values({ - collectiviteId: collectiviteId, - nom: nom, - }) - .returning(); - return toReturn[0]?.id; - } - return tag.id; - } - /** * Récupère les catégories possibles pour une collectivité * @param collectiviteId * @param withPredefinedTags vrai pour inclure les tags prédéfinis par TeT * @param tokenInfo */ - async getCategoriesByCollectivite( + async listCategories( collectiviteId: number, withPredefinedTags: boolean, tokenInfo: AuthenticatedUser diff --git a/backend/src/collectivites/index.ts b/backend/src/collectivites/index.ts index 9a14e5b08e..6d007dcde1 100644 --- a/backend/src/collectivites/index.ts +++ b/backend/src/collectivites/index.ts @@ -1,3 +1,4 @@ +export * from './shared/models/categorie-tag.table'; export * from './shared/models/financeur-tag.table'; export * from './shared/models/libre-tag.table'; export * from './shared/models/partenaire-tag.table'; diff --git a/backend/src/collectivites/models/collectivite-banatic-competence.table.ts b/backend/src/collectivites/models/collectivite-banatic-competence.table.ts index 9557f6e101..d0d4b37a30 100644 --- a/backend/src/collectivites/models/collectivite-banatic-competence.table.ts +++ b/backend/src/collectivites/models/collectivite-banatic-competence.table.ts @@ -1,7 +1,6 @@ -import { integer, pgTable } from 'drizzle-orm/pg-core'; +import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; +import { banaticCompetenceTable } from '../../shared/models/banatic-competence.table'; import { collectiviteTable } from './collectivite.table'; -import { primaryKey } from 'drizzle-orm/pg-core'; -import { banaticCompetenceTable } from '../../taxonomie/models/banatic-competence.table'; export const collectiviteBanaticCompetenceTable = pgTable( 'collectivite_banatic_competence', diff --git a/backend/src/taxonomie/models/categorie-tag.table.ts b/backend/src/collectivites/shared/models/categorie-tag.table.ts similarity index 67% rename from backend/src/taxonomie/models/categorie-tag.table.ts rename to backend/src/collectivites/shared/models/categorie-tag.table.ts index 3d40a47b5a..7e041cbceb 100644 --- a/backend/src/taxonomie/models/categorie-tag.table.ts +++ b/backend/src/collectivites/shared/models/categorie-tag.table.ts @@ -1,6 +1,6 @@ import { boolean, integer, pgTable } from 'drizzle-orm/pg-core'; -import { tagTableBase } from '../../collectivites/shared/models/tag.table-base'; -import { createdAt, createdBy } from '../../utils/column.utils'; +import { createdAt, createdBy } from '../../../utils/column.utils'; +import { tagTableBase } from './tag.table-base'; export const categorieTagTable = pgTable('categorie_tag', { ...tagTableBase, diff --git a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts index 2c182e971e..ae93b28f4d 100644 --- a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts +++ b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts @@ -10,9 +10,9 @@ import { intersection, isNil } from 'es-toolkit'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import { groupementCollectiviteTable } from '../../collectivites/models/groupement-collectivite.table'; import CollectivitesService from '../../collectivites/services/collectivites.service'; +import { categorieTagTable } from '../../collectivites/shared/models/categorie-tag.table'; import DatabaseService from '../../common/services/database.service'; import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; -import { categorieTagTable } from '../../taxonomie/models/categorie-tag.table'; import { indicateurActionTable } from '../models/indicateur-action.table'; import { indicateurCategorieTagTable } from '../models/indicateur-categorie-tag.table'; import { indicateurCollectiviteTable } from '../models/indicateur-collectivite.table'; diff --git a/backend/src/indicateurs/models/indicateur-categorie-tag.table.ts b/backend/src/indicateurs/models/indicateur-categorie-tag.table.ts index 08f217821c..9bdb2df45f 100644 --- a/backend/src/indicateurs/models/indicateur-categorie-tag.table.ts +++ b/backend/src/indicateurs/models/indicateur-categorie-tag.table.ts @@ -1,7 +1,6 @@ -import { integer, pgTable } from 'drizzle-orm/pg-core'; +import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; +import { categorieTagTable } from '../../collectivites/shared/models/categorie-tag.table'; import { indicateurDefinitionTable } from './indicateur-definition.table'; -import { primaryKey } from 'drizzle-orm/pg-core'; -import { categorieTagTable } from '../../taxonomie/models/categorie-tag.table'; export const indicateurCategorieTagTable = pgTable( 'indicateur_categorie_tag', diff --git a/backend/src/panier/models/action-impact-banatic-competence.table.ts b/backend/src/panier/models/action-impact-banatic-competence.table.ts index 4576428c79..706e0d155f 100644 --- a/backend/src/panier/models/action-impact-banatic-competence.table.ts +++ b/backend/src/panier/models/action-impact-banatic-competence.table.ts @@ -1,7 +1,6 @@ -import { integer, pgTable } from 'drizzle-orm/pg-core'; -import { primaryKey } from 'drizzle-orm/pg-core'; +import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; +import { banaticCompetenceTable } from '../../shared/models/banatic-competence.table'; import { actionImpactTable } from './action-impact.table'; -import { banaticCompetenceTable } from '../../taxonomie/models/banatic-competence.table'; export const actionImpactBanaticCompetenceTable = pgTable( 'action_impact_banatic_competence', diff --git a/backend/src/panier/models/action-impact-cateorie-fnv.table.ts b/backend/src/panier/models/action-impact-cateorie-fnv.table.ts index a1b6498c9e..e86f124955 100644 --- a/backend/src/panier/models/action-impact-cateorie-fnv.table.ts +++ b/backend/src/panier/models/action-impact-cateorie-fnv.table.ts @@ -1,6 +1,6 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; +import { categorieFNVTable } from '../../shared/models/categorie-fnv.table'; import { actionImpactTable } from './action-impact.table'; -import { categorieFNVTable } from '../../taxonomie/models/categorie-fnv.table'; export const actionImpactCategorieFNVTable = pgTable( 'action_impact_categorie_fnv', diff --git a/backend/src/panier/models/action-impact-partenaire.table.ts b/backend/src/panier/models/action-impact-partenaire.table.ts index 87add19f28..34aad9298c 100644 --- a/backend/src/panier/models/action-impact-partenaire.table.ts +++ b/backend/src/panier/models/action-impact-partenaire.table.ts @@ -1,5 +1,5 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { panierPartenaireTable } from '../../taxonomie/models/panier-partenaire.table'; +import { panierPartenaireTable } from '../../shared/models/panier-partenaire.table'; import { actionImpactTable } from './action-impact.table'; export const actionImpactPartenaireTable = pgTable( diff --git a/backend/src/panier/models/action-impact.table.ts b/backend/src/panier/models/action-impact.table.ts index 9a4372c55c..33a8996d69 100644 --- a/backend/src/panier/models/action-impact.table.ts +++ b/backend/src/panier/models/action-impact.table.ts @@ -11,15 +11,15 @@ import { import { createSelectSchema } from 'drizzle-zod'; import { z } from 'zod'; import { lienSchema, lienType } from '../../documents/models/document-lien.dto'; +import { + categorieFNVSchema, + CategorieFNVType, +} from '../../shared/models/categorie-fnv.table'; import { tempsDeMiseEnOeuvreTable } from '../../shared/models/temps-de-mise-en-oeuvre.table'; import { thematiqueSchema, ThematiqueType, } from '../../shared/models/thematique.table'; -import { - categorieFNVSchema, - CategorieFNVType, -} from '../../taxonomie/models/categorie-fnv.table'; import { actionImpactFourchetteBudgetaireTable } from './action-impact-fourchette-budgetaire.table'; import { actionImpactTierTable } from './action-impact-tier.table'; diff --git a/backend/src/plans/fiches/fiche.service.ts b/backend/src/plans/fiches/fiche.service.ts index 83fb4b0bf6..c58932491d 100644 --- a/backend/src/plans/fiches/fiche.service.ts +++ b/backend/src/plans/fiches/fiche.service.ts @@ -6,7 +6,6 @@ import { Injectable, Logger } from '@nestjs/common'; import { aliasedTable, desc, eq } from 'drizzle-orm'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import DatabaseService from '../../common/services/database.service'; -import TagService from '../../taxonomie/services/tag.service'; import { ficheActionActionImpactTable } from './shared/models/fiche-action-action-impact.table'; import { ficheActionActionTable } from './shared/models/fiche-action-action.table'; import { ficheActionEffetAttenduTable } from './shared/models/fiche-action-effet-attendu.table'; @@ -26,8 +25,7 @@ export default class FicheService { constructor( private readonly permissionService: PermissionService, - private readonly databaseService: DatabaseService, - private readonly tagService: TagService + private readonly databaseService: DatabaseService ) {} /** Renvoi une fiche à partir de son id */ @@ -155,21 +153,6 @@ export default class FicheService { }); } - /** - * Ajoute un partenaire à une fiche à partir du nom du partenaire et la collectivité - * @param ficheId identifiant de la fiche - * @param nomTag nom du partenaire - * @param collectiviteId identifiant de la collectivité - */ - async addPartenaireByNom( - ficheId: number, - nomTag: string, - collectiviteId: number - ): Promise { - const tagId = await this.tagService.getPartenaireId(nomTag, collectiviteId); - await this.addPartenaireById(ficheId, tagId); - } - // On ajoute le financement /** diff --git a/backend/src/plans/fiches/fiches.module.ts b/backend/src/plans/fiches/fiches.module.ts index 8325450ba3..e4afe5c910 100644 --- a/backend/src/plans/fiches/fiches.module.ts +++ b/backend/src/plans/fiches/fiches.module.ts @@ -2,7 +2,6 @@ import { Module } from '@nestjs/common'; import { AuthModule } from '../../auth/auth.module'; import { CollectivitesModule } from '../../collectivites/collectivites.module'; import { CommonModule } from '../../common/common.module'; -import TagService from '../../taxonomie/services/tag.service'; import { BulkEditRouter } from './bulk-edit/bulk-edit.router'; import { BulkEditService } from './bulk-edit/bulk-edit.service'; import { CountByStatutRouter } from './count-by-statut/count-by-statut.router'; @@ -22,7 +21,6 @@ import { FichesActionController } from './fiches-action.controller'; BulkEditService, BulkEditRouter, FichesActionUpdateService, - TagService, FicheActionEtapeService, FicheActionEtapeRouter, ], diff --git a/backend/src/taxonomie/models/banatic-competence.table.ts b/backend/src/shared/models/banatic-competence.table.ts similarity index 100% rename from backend/src/taxonomie/models/banatic-competence.table.ts rename to backend/src/shared/models/banatic-competence.table.ts diff --git a/backend/src/taxonomie/models/categorie-fnv.table.ts b/backend/src/shared/models/categorie-fnv.table.ts similarity index 100% rename from backend/src/taxonomie/models/categorie-fnv.table.ts rename to backend/src/shared/models/categorie-fnv.table.ts diff --git a/backend/src/taxonomie/models/panier-partenaire.table.ts b/backend/src/shared/models/panier-partenaire.table.ts similarity index 100% rename from backend/src/taxonomie/models/panier-partenaire.table.ts rename to backend/src/shared/models/panier-partenaire.table.ts diff --git a/backend/src/taxonomie/taxonomie.module.ts b/backend/src/taxonomie/taxonomie.module.ts deleted file mode 100644 index 0d70fd5f62..0000000000 --- a/backend/src/taxonomie/taxonomie.module.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Module } from '@nestjs/common'; -import { AuthModule } from '../auth/auth.module'; -import { CollectivitesModule } from '../collectivites/collectivites.module'; -import { CommonModule } from '../common/common.module'; -import { ConfigurationModule } from '../config/configuration.module'; -import TagService from '../taxonomie/services/tag.service'; -import { - GetCategoriesByCollectiviteRouter -} from '../taxonomie/routers/get-categories-by-collectivite.router'; - -@Module({ - imports: [ - ConfigurationModule, - CommonModule, - AuthModule, - CollectivitesModule, - ], - providers: [ - TagService, - GetCategoriesByCollectiviteRouter - ], - exports: [TagService, GetCategoriesByCollectiviteRouter], - controllers: [], -}) -export class TaxonomieModule {} - diff --git a/backend/src/utils/trpc/trpc.router.ts b/backend/src/utils/trpc/trpc.router.ts index 95e935720a..78ed354a1a 100644 --- a/backend/src/utils/trpc/trpc.router.ts +++ b/backend/src/utils/trpc/trpc.router.ts @@ -3,6 +3,7 @@ import { CountByStatutRouter } from '@/backend/plans/fiches/count-by-statut/coun import { FicheActionEtapeRouter } from '@/backend/plans/fiches/fiche-action-etape/fiche-action-etape.router'; import { INestApplication, Injectable, Logger } from '@nestjs/common'; import { createExpressMiddleware } from '@trpc/server/adapters/express'; +import { ListCategoriesRouter } from '../../collectivites/handle-categories/list-categories.router'; import { CollectiviteMembresRouter } from '../../collectivites/membres/membres.router'; import { PersonnesRouter } from '../../collectivites/personnes.router'; import SupabaseService from '../../common/services/supabase.service'; @@ -11,7 +12,6 @@ import { TrajectoiresRouter } from '../../indicateurs/routers/trajectoires.route import { ComputeScoreRouter } from '../../referentiels/compute-score/compute-score.router'; import { ScoreSnapshotsRouter } from '../../referentiels/snapshots/score-snaphots.router'; import { UpdateActionStatutRouter } from '../../referentiels/update-action-statut/update-action-statut.router'; -import { GetCategoriesByCollectiviteRouter } from '../../taxonomie/routers/get-categories-by-collectivite.router'; import { createContext, TrpcService } from './trpc.service'; @Injectable() @@ -23,7 +23,7 @@ export class TrpcRouter { private readonly supabase: SupabaseService, private readonly trajectoiresRouter: TrajectoiresRouter, private readonly countByStatutRouter: CountByStatutRouter, - private readonly getCategoriesByCollectiviteRouter: GetCategoriesByCollectiviteRouter, + private readonly getCategoriesByCollectiviteRouter: ListCategoriesRouter, private readonly personnes: PersonnesRouter, private readonly ficheActionEtapeRouter: FicheActionEtapeRouter, private readonly indicateurFiltreRouter: IndicateurFiltreRouter, From 2c528ccced621babbc4a3aa8729be19f47a9b5b7 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Mon, 23 Dec 2024 15:26:33 +0100 Subject: [PATCH 25/33] Simplifie et unifie les chemins d'appels trpc --- .../Indicateurs/lists/useFilteredIndicateurDefinitions.ts | 2 +- .../ui/dropdownLists/indicateur/use-categorie-tags.tsx | 7 +++++-- .../handle-categories/list-categories.router.e2e-spec.ts | 8 +++++--- .../indicateur-filtre.router.e2e-spec.ts | 6 +++--- backend/src/utils/trpc/trpc.router.ts | 4 +--- 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/useFilteredIndicateurDefinitions.ts b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/useFilteredIndicateurDefinitions.ts index 8a8a90ba9a..0c3f7b72da 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/useFilteredIndicateurDefinitions.ts +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/useFilteredIndicateurDefinitions.ts @@ -27,7 +27,7 @@ export const useFilteredIndicateurDefinitions = ( delete options.filtre?.text; // Delete it, search is done locally for now due to backend reasons } - const { data, error, isLoading } = trpc.indicateurs.filtre.list.useQuery( + const { data, error, isLoading } = trpc.indicateurs.list.useQuery( { collectiviteId: collectiviteId!, filtre: options.filtre ?? {}, diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/indicateur/use-categorie-tags.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/indicateur/use-categorie-tags.tsx index e96b0444d9..d34bb84eda 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/indicateur/use-categorie-tags.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/indicateur/use-categorie-tags.tsx @@ -3,8 +3,11 @@ import { useCollectiviteId } from '../../../core-logic/hooks/params'; export const useCategorieTags = () => { const collectiviteId = useCollectiviteId(); - if (!collectiviteId) return { data: null }; - return trpc.tags.categories.list.useQuery({ + if (!collectiviteId) { + return { data: null }; + } + + return trpc.collectivites.categories.list.useQuery({ collectiviteId, withPredefinedTags: true, }); diff --git a/backend/src/collectivites/handle-categories/list-categories.router.e2e-spec.ts b/backend/src/collectivites/handle-categories/list-categories.router.e2e-spec.ts index 8dd952e649..bcb1e293e0 100644 --- a/backend/src/collectivites/handle-categories/list-categories.router.e2e-spec.ts +++ b/backend/src/collectivites/handle-categories/list-categories.router.e2e-spec.ts @@ -4,7 +4,9 @@ import { getAuthUser } from '../../../test/auth-utils'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; -type Input = inferProcedureInput; +type Input = inferProcedureInput< + AppRouter['collectivites']['categories']['list'] +>; describe('Route de lecture des tags catégories', () => { let router: TrpcRouter; @@ -22,7 +24,7 @@ describe('Route de lecture des tags catégories', () => { collectiviteId: 1, withPredefinedTags: false, }; - const result = await caller.tags.categories.list(input); + const result = await caller.collectivites.categories.list(input); // Il n'y a pas de catégories propres à une collectivité dans le jeu de test expect(result.length).toBe(0); }); @@ -34,7 +36,7 @@ describe('Route de lecture des tags catégories', () => { collectiviteId: 1, withPredefinedTags: true, }; - const result = await caller.tags.categories.list(input); + const result = await caller.collectivites.categories.list(input); expect(result.length).not.toBe(0); }); }); diff --git a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.router.e2e-spec.ts b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.router.e2e-spec.ts index c016aaa805..d03f198b89 100644 --- a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.router.e2e-spec.ts +++ b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.router.e2e-spec.ts @@ -9,7 +9,7 @@ import { } from './get-filtered-indicateurs.request'; import { getFilteredIndicateurResponseSchema } from './get-filtered-indicateurs.response'; -type Input = inferProcedureInput; +type Input = inferProcedureInput; describe('Route de lecture des indicateurs filtrés', () => { let router: TrpcRouter; @@ -39,7 +39,7 @@ describe('Route de lecture des indicateurs filtrés', () => { filtre: filtre, queryOptions: queryOptions, }; - const result = await caller.indicateurs.filtre.list(input); + const result = await caller.indicateurs.list(input); expect(result.length).not.toBe(0); const toCheck = getFilteredIndicateurResponseSchema.safeParse(result); expect(toCheck.success).toBeTruthy; @@ -73,7 +73,7 @@ describe('Route de lecture des indicateurs filtrés', () => { queryOptions: queryOptions, }; - const result = await caller.indicateurs.filtre.list(input); + const result = await caller.indicateurs.list(input); expect(result.length).toBe(0); }); }); diff --git a/backend/src/utils/trpc/trpc.router.ts b/backend/src/utils/trpc/trpc.router.ts index 78ed354a1a..c391270215 100644 --- a/backend/src/utils/trpc/trpc.router.ts +++ b/backend/src/utils/trpc/trpc.router.ts @@ -37,7 +37,7 @@ export class TrpcRouter { appRouter = this.trpc.router({ indicateurs: { trajectoires: this.trajectoiresRouter.router, - filtre: this.indicateurFiltreRouter.router, + list: this.indicateurFiltreRouter.router.list, }, plans: { fiches: this.trpc.mergeRouters( @@ -49,8 +49,6 @@ export class TrpcRouter { collectivites: { personnes: this.personnes.router, membres: this.membresRouter.router, - }, - tags: { categories: this.getCategoriesByCollectiviteRouter.router, }, referentiels: { From b58f91e792d1a300730a05152e572d002436ea03 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Mon, 23 Dec 2024 15:38:04 +0100 Subject: [PATCH 26/33] Clean le dossier collectivites --- .../permission.service.e2e-spec.ts | 11 +++++++--- .../roles/private-utilisateur-droit.table.ts | 2 +- backend/src/auth/models/invitation.table.ts | 2 +- .../collectivite.controller.ts | 4 ++-- .../{models => }/collectivite.request.ts | 0 .../src/collectivites/collectivites.module.ts | 2 +- .../list-categories.service.ts | 2 +- .../{models => }/identite-collectivite.dto.ts | 6 ++--- backend/src/collectivites/index.ts | 1 + .../membres/membres.router.e2e-spec.ts | 4 ++-- .../collectivites/membres/membres.service.ts | 6 ++--- .../services/collectivites.service.ts | 22 +++++++++---------- .../services/groupements.service.ts | 4 ++-- .../collectivite-banatic-competence.table.ts | 2 +- .../models/collectivite-test.table.ts | 0 .../{ => shared}/models/collectivite.table.ts | 2 +- .../{ => shared}/models/commune.table.ts | 0 .../{ => shared}/models/epci.table.ts | 0 .../models/groupement-collectivite.table.ts | 0 .../{ => shared}/models/groupement.table.ts | 0 .../models/imports-banatic.table.ts | 0 .../models/imports-commune.table.ts | 0 .../models/imports-region.table.ts | 0 .../models/membre-fonction.enum.ts | 0 .../{ => shared}/models/membre.table.ts | 6 ++--- .../shared/models/tag.table-base.ts | 2 +- .../documents/models/document.basetable.ts | 2 +- .../controllers/trajectoires.controller.ts | 12 +++++----- .../indicateur-filtre.service.ts | 2 +- .../models/calcul-trajectoire.request.ts | 2 +- .../models/indicateur-collectivite.table.ts | 11 +++++++--- .../models/indicateur-definition.table.ts | 2 +- .../models/indicateur-pilote.table.ts | 2 +- .../models/indicateur-service-tag.table.ts | 2 +- .../models/indicateur-valeur.table.ts | 2 +- .../verification-trajectoire.request.ts | 2 +- .../verification-trajectoire.response.ts | 2 +- .../services/indicateurs.service.ts | 14 ++++++------ .../services/trajectoires-data.service.ts | 18 +++++++-------- .../trajectoires-spreadsheet.service.ts | 6 ++--- .../services/trajectoires-xlsx.service.ts | 8 +++---- backend/src/panier/models/panier.table.ts | 2 +- .../historique-reponse-binaire.table.ts | 2 +- .../models/historique-reponse-choix.table.ts | 2 +- .../historique-reponse-proportion.table.ts | 2 +- .../models/reponse-binaire.table.ts | 2 +- .../models/reponse-choix.table.ts | 2 +- .../models/reponse-proportion.table.ts | 2 +- .../expression-parser.service.spec.ts | 18 +++++++-------- .../services/expression-parser.service.ts | 2 +- .../services/personnalisations-service.ts | 8 +++---- .../plans/fiches/shared/models/axe.table.ts | 2 +- .../shared/models/fiche-action.table.ts | 2 +- .../models/action-commentaire.table.ts | 2 +- .../models/action-statut.table.ts | 2 +- .../models/client-scores.table.ts | 2 +- .../models/get-referentiel-scores.response.ts | 2 +- .../models/historique-action-statut.table.ts | 2 +- .../labellisation-action-audit-state.table.ts | 2 +- .../models/labellisation-audit.table.ts | 2 +- ...abellisation-bibliotheque-fichier.table.ts | 2 +- .../models/labellisation-demande.table.ts | 2 +- .../models/labellisation-preuve-base.table.ts | 2 +- .../models/score-snapshot.table.ts | 2 +- .../referentiels-scoring.service.spec.ts | 6 ++--- .../services/referentiels-scoring.service.ts | 10 ++++----- .../services/referentiels.service.spec.ts | 2 +- 67 files changed, 130 insertions(+), 121 deletions(-) rename backend/src/collectivites/{controllers => }/collectivite.controller.ts (85%) rename backend/src/collectivites/{models => }/collectivite.request.ts (100%) rename backend/src/collectivites/{models => }/identite-collectivite.dto.ts (90%) rename backend/src/collectivites/{ => shared}/models/collectivite-banatic-competence.table.ts (88%) rename backend/src/collectivites/{ => shared}/models/collectivite-test.table.ts (100%) rename backend/src/collectivites/{ => shared}/models/collectivite.table.ts (92%) rename backend/src/collectivites/{ => shared}/models/commune.table.ts (100%) rename backend/src/collectivites/{ => shared}/models/epci.table.ts (100%) rename backend/src/collectivites/{ => shared}/models/groupement-collectivite.table.ts (100%) rename backend/src/collectivites/{ => shared}/models/groupement.table.ts (100%) rename backend/src/collectivites/{ => shared}/models/imports-banatic.table.ts (100%) rename backend/src/collectivites/{ => shared}/models/imports-commune.table.ts (100%) rename backend/src/collectivites/{ => shared}/models/imports-region.table.ts (100%) rename backend/src/collectivites/{ => shared}/models/membre-fonction.enum.ts (100%) rename backend/src/collectivites/{ => shared}/models/membre.table.ts (81%) diff --git a/backend/src/auth/authorizations/permission.service.e2e-spec.ts b/backend/src/auth/authorizations/permission.service.e2e-spec.ts index e9276db8d8..7b3f6c9241 100644 --- a/backend/src/auth/authorizations/permission.service.e2e-spec.ts +++ b/backend/src/auth/authorizations/permission.service.e2e-spec.ts @@ -1,4 +1,9 @@ -import { getAuthUser, getTestApp, getTestDatabase, YOULOU_DOUDOU } from '@/backend/test'; +import { + getAuthUser, + getTestApp, + getTestDatabase, + YOULOU_DOUDOU, +} from '@/backend/test'; import { INestApplication } from '@nestjs/common'; import { PermissionService } from '@/backend/auth/authorizations/permission.service'; import { AuthenticatedUser } from '@/backend/auth/models/auth.models'; @@ -9,7 +14,7 @@ import { eq } from 'drizzle-orm'; import { utilisateurSupportTable } from '@/backend/auth/authorizations/roles/utilisateur-support.table'; import { utilisateurVerifieTable } from '@/backend/auth/authorizations/roles/utilisateur-verifie.table'; import { dcpTable } from '@/backend/auth'; -import { collectiviteTable } from '@/backend/collectivites/models/collectivite.table'; +import { collectiviteTable } from '@/backend/collectivites'; describe('Gestion des droits', () => { let app: INestApplication; @@ -22,7 +27,7 @@ describe('Gestion des droits', () => { app = await getTestApp(); permissionService = app.get(PermissionService); yoloDodoUser = await getAuthUser(); - youlouDoudouUser = await getAuthUser(YOULOU_DOUDOU) + youlouDoudouUser = await getAuthUser(YOULOU_DOUDOU); databaseService = await getTestDatabase(app); }); diff --git a/backend/src/auth/authorizations/roles/private-utilisateur-droit.table.ts b/backend/src/auth/authorizations/roles/private-utilisateur-droit.table.ts index 179756d4c6..23236bcbd5 100644 --- a/backend/src/auth/authorizations/roles/private-utilisateur-droit.table.ts +++ b/backend/src/auth/authorizations/roles/private-utilisateur-droit.table.ts @@ -1,7 +1,7 @@ import { createdAt, modifiedAt } from '@/backend/utils'; import { InferSelectModel } from 'drizzle-orm'; import { boolean, integer, pgTable, serial, uuid } from 'drizzle-orm/pg-core'; -import { collectiviteTable } from '../../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../../collectivites/shared/models/collectivite.table'; import { invitationTable } from '../../models/invitation.table'; import { NiveauAcces, niveauAccessEnum } from './niveau-acces.enum'; diff --git a/backend/src/auth/models/invitation.table.ts b/backend/src/auth/models/invitation.table.ts index e16938bb5c..9a597c7cef 100644 --- a/backend/src/auth/models/invitation.table.ts +++ b/backend/src/auth/models/invitation.table.ts @@ -7,7 +7,7 @@ import { timestamp, uuid, } from 'drizzle-orm/pg-core'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { createdAt, createdBy, diff --git a/backend/src/collectivites/controllers/collectivite.controller.ts b/backend/src/collectivites/collectivite.controller.ts similarity index 85% rename from backend/src/collectivites/controllers/collectivite.controller.ts rename to backend/src/collectivites/collectivite.controller.ts index 4b16cd5e30..08728510ba 100644 --- a/backend/src/collectivites/controllers/collectivite.controller.ts +++ b/backend/src/collectivites/collectivite.controller.ts @@ -1,7 +1,7 @@ import { Controller, Get, Param, Query } from '@nestjs/common'; import { ApiOkResponse } from '@nestjs/swagger'; -import { AllowPublicAccess } from '../../auth/decorators/allow-public-access.decorator'; -import CollectivitesService from '../services/collectivites.service'; +import { AllowPublicAccess } from '../auth/decorators/allow-public-access.decorator'; +import CollectivitesService from './services/collectivites.service'; /** * Création des classes de réponse à partir du schema pour générer automatiquement la documentation OpenAPI diff --git a/backend/src/collectivites/models/collectivite.request.ts b/backend/src/collectivites/collectivite.request.ts similarity index 100% rename from backend/src/collectivites/models/collectivite.request.ts rename to backend/src/collectivites/collectivite.request.ts diff --git a/backend/src/collectivites/collectivites.module.ts b/backend/src/collectivites/collectivites.module.ts index c14f06ea6a..96b926c5a0 100644 --- a/backend/src/collectivites/collectivites.module.ts +++ b/backend/src/collectivites/collectivites.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; import { CommonModule } from '../common/common.module'; -import { CollectiviteController } from './controllers/collectivite.controller'; +import { CollectiviteController } from './collectivite.controller'; import { ListCategoriesRouter } from './handle-categories/list-categories.router'; import ListCategoriesService from './handle-categories/list-categories.service'; import { CollectiviteMembresRouter } from './membres/membres.router'; diff --git a/backend/src/collectivites/handle-categories/list-categories.service.ts b/backend/src/collectivites/handle-categories/list-categories.service.ts index b84f01b455..0c146b6826 100644 --- a/backend/src/collectivites/handle-categories/list-categories.service.ts +++ b/backend/src/collectivites/handle-categories/list-categories.service.ts @@ -6,8 +6,8 @@ import { Injectable, Logger } from '@nestjs/common'; import { and, eq, inArray, isNull, or } from 'drizzle-orm'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import DatabaseService from '../../common/services/database.service'; -import { groupementCollectiviteTable } from '../models/groupement-collectivite.table'; import { categorieTagTable } from '../shared/models/categorie-tag.table'; +import { groupementCollectiviteTable } from '../shared/models/groupement-collectivite.table'; import { Tag } from '../shared/models/tag.table-base'; @Injectable() diff --git a/backend/src/collectivites/models/identite-collectivite.dto.ts b/backend/src/collectivites/identite-collectivite.dto.ts similarity index 90% rename from backend/src/collectivites/models/identite-collectivite.dto.ts rename to backend/src/collectivites/identite-collectivite.dto.ts index 3803e423d3..6d82b0ec58 100644 --- a/backend/src/collectivites/models/identite-collectivite.dto.ts +++ b/backend/src/collectivites/identite-collectivite.dto.ts @@ -1,8 +1,8 @@ import { pgEnum } from 'drizzle-orm/pg-core'; import { z } from 'zod'; -import { collectiviteSchema } from './collectivite.table'; -import { communeSchema } from './commune.table'; -import { epciSchema } from './epci.table'; +import { collectiviteSchema } from './shared/models/collectivite.table'; +import { communeSchema } from './shared/models/commune.table'; +import { epciSchema } from './shared/models/epci.table'; export enum CollectiviteTypeEnum { EPCI = 'EPCI', diff --git a/backend/src/collectivites/index.ts b/backend/src/collectivites/index.ts index 6d007dcde1..212dc2a2ad 100644 --- a/backend/src/collectivites/index.ts +++ b/backend/src/collectivites/index.ts @@ -1,4 +1,5 @@ export * from './shared/models/categorie-tag.table'; +export * from './shared/models/collectivite.table'; export * from './shared/models/financeur-tag.table'; export * from './shared/models/libre-tag.table'; export * from './shared/models/partenaire-tag.table'; diff --git a/backend/src/collectivites/membres/membres.router.e2e-spec.ts b/backend/src/collectivites/membres/membres.router.e2e-spec.ts index c60b7be763..e8859e5a88 100644 --- a/backend/src/collectivites/membres/membres.router.e2e-spec.ts +++ b/backend/src/collectivites/membres/membres.router.e2e-spec.ts @@ -1,3 +1,4 @@ +import { NiveauAcces } from '@/backend/auth/authorizations/roles/niveau-acces.enum'; import { INestApplication } from '@nestjs/common'; import { inferProcedureInput } from '@trpc/server'; import { sql } from 'drizzle-orm'; @@ -6,10 +7,9 @@ import { getAuthUser } from '../../../test/auth-utils'; import { YOLO_DODO } from '../../../test/test-users.samples'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import { invitationTable } from '../../auth/models/invitation.table'; -import { NiveauAcces } from '@/backend/auth/authorizations/roles/niveau-acces.enum'; import DatabaseService from '../../common/services/database.service'; import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; -import { MembreFonctionEnum } from '../models/membre-fonction.enum'; +import { MembreFonctionEnum } from '../shared/models/membre-fonction.enum'; type Input = inferProcedureInput; diff --git a/backend/src/collectivites/membres/membres.service.ts b/backend/src/collectivites/membres/membres.service.ts index 599227fd39..4664c9060d 100644 --- a/backend/src/collectivites/membres/membres.service.ts +++ b/backend/src/collectivites/membres/membres.service.ts @@ -1,13 +1,13 @@ import { dcpTable } from '@/backend/auth'; +import { utilisateurDroitTable } from '@/backend/auth/authorizations/roles/private-utilisateur-droit.table'; import { Injectable, Logger } from '@nestjs/common'; import { and, eq, sql } from 'drizzle-orm'; import { unionAll } from 'drizzle-orm/pg-core'; import z from 'zod'; import { invitationTable } from '../../auth/models/invitation.table'; -import { utilisateurDroitTable } from '@/backend/auth/authorizations/roles/private-utilisateur-droit.table'; import DatabaseService from '../../common/services/database.service'; -import { MembreFonction } from '../models/membre-fonction.enum'; -import { insertMembreSchema, membreTable } from '../models/membre.table'; +import { MembreFonction } from '../shared/models/membre-fonction.enum'; +import { insertMembreSchema, membreTable } from '../shared/models/membre.table'; @Injectable() export class CollectiviteMembresService { diff --git a/backend/src/collectivites/services/collectivites.service.ts b/backend/src/collectivites/services/collectivites.service.ts index 01f5f13bca..b6f20151b2 100644 --- a/backend/src/collectivites/services/collectivites.service.ts +++ b/backend/src/collectivites/services/collectivites.service.ts @@ -2,19 +2,19 @@ import { Injectable, Logger, NotFoundException } from '@nestjs/common'; import { aliasedTable, eq, or } from 'drizzle-orm'; import { isNil } from 'es-toolkit'; import DatabaseService from '../../common/services/database.service'; -import { collectiviteTestTable } from '../models/collectivite-test.table'; -import { collectiviteTable } from '../models/collectivite.table'; -import { communeTable, CommuneType } from '../models/commune.table'; -import { epciTable, EpciType } from '../models/epci.table'; import { CollectiviteAvecType, CollectivitePopulationTypeEnum, CollectiviteSousTypeEnum, CollectiviteTypeEnum, -} from '../models/identite-collectivite.dto'; -import { banaticTable } from '../models/imports-banatic.table'; -import { importCommuneTable } from '../models/imports-commune.table'; -import { regionTable } from '../models/imports-region.table'; +} from '../identite-collectivite.dto'; +import { collectiviteTestTable } from '../shared/models/collectivite-test.table'; +import { collectiviteTable } from '../shared/models/collectivite.table'; +import { communeTable, CommuneType } from '../shared/models/commune.table'; +import { epciTable, EpciType } from '../shared/models/epci.table'; +import { banaticTable } from '../shared/models/imports-banatic.table'; +import { importCommuneTable } from '../shared/models/imports-commune.table'; +import { regionTable } from '../shared/models/imports-region.table'; @Injectable() export default class CollectivitesService { @@ -199,10 +199,8 @@ export default class CollectivitesService { return epciBySirenResult[0]; } - async isPrivate(collectiviteId : number) : Promise{ - const collectivite = await this.getCollectivite( - collectiviteId - ); + async isPrivate(collectiviteId: number): Promise { + const collectivite = await this.getCollectivite(collectiviteId); return collectivite.collectivite.accessRestreint || false; } } diff --git a/backend/src/collectivites/services/groupements.service.ts b/backend/src/collectivites/services/groupements.service.ts index 2a51797fd1..fa552d0dc3 100644 --- a/backend/src/collectivites/services/groupements.service.ts +++ b/backend/src/collectivites/services/groupements.service.ts @@ -7,11 +7,11 @@ import { } from '@nestjs/common'; import { eq } from 'drizzle-orm'; import DatabaseService from '../../common/services/database.service'; -import { groupementTable } from '../models/groupement.table'; import { CreateGroupementCollectiviteType, groupementCollectiviteTable, -} from '../models/groupement-collectivite.table'; +} from '../shared/models/groupement-collectivite.table'; +import { groupementTable } from '../shared/models/groupement.table'; @Injectable() export default class GroupementsService { diff --git a/backend/src/collectivites/models/collectivite-banatic-competence.table.ts b/backend/src/collectivites/shared/models/collectivite-banatic-competence.table.ts similarity index 88% rename from backend/src/collectivites/models/collectivite-banatic-competence.table.ts rename to backend/src/collectivites/shared/models/collectivite-banatic-competence.table.ts index d0d4b37a30..921b9af375 100644 --- a/backend/src/collectivites/models/collectivite-banatic-competence.table.ts +++ b/backend/src/collectivites/shared/models/collectivite-banatic-competence.table.ts @@ -1,5 +1,5 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { banaticCompetenceTable } from '../../shared/models/banatic-competence.table'; +import { banaticCompetenceTable } from '../../../shared/models/banatic-competence.table'; import { collectiviteTable } from './collectivite.table'; export const collectiviteBanaticCompetenceTable = pgTable( diff --git a/backend/src/collectivites/models/collectivite-test.table.ts b/backend/src/collectivites/shared/models/collectivite-test.table.ts similarity index 100% rename from backend/src/collectivites/models/collectivite-test.table.ts rename to backend/src/collectivites/shared/models/collectivite-test.table.ts diff --git a/backend/src/collectivites/models/collectivite.table.ts b/backend/src/collectivites/shared/models/collectivite.table.ts similarity index 92% rename from backend/src/collectivites/models/collectivite.table.ts rename to backend/src/collectivites/shared/models/collectivite.table.ts index d65d978aec..35b21c5780 100644 --- a/backend/src/collectivites/models/collectivite.table.ts +++ b/backend/src/collectivites/shared/models/collectivite.table.ts @@ -1,7 +1,7 @@ import { InferInsertModel, InferSelectModel } from 'drizzle-orm'; import { boolean, pgTable, serial } from 'drizzle-orm/pg-core'; import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; -import { createdAt, modifiedAt } from '../../utils/column.utils'; +import { createdAt, modifiedAt } from '../../../utils/column.utils'; // TODO: create domain siren as varchar(9) check ( value ~ '^\d{9}$' ); // TODO: create domain codegeo as varchar(5); diff --git a/backend/src/collectivites/models/commune.table.ts b/backend/src/collectivites/shared/models/commune.table.ts similarity index 100% rename from backend/src/collectivites/models/commune.table.ts rename to backend/src/collectivites/shared/models/commune.table.ts diff --git a/backend/src/collectivites/models/epci.table.ts b/backend/src/collectivites/shared/models/epci.table.ts similarity index 100% rename from backend/src/collectivites/models/epci.table.ts rename to backend/src/collectivites/shared/models/epci.table.ts diff --git a/backend/src/collectivites/models/groupement-collectivite.table.ts b/backend/src/collectivites/shared/models/groupement-collectivite.table.ts similarity index 100% rename from backend/src/collectivites/models/groupement-collectivite.table.ts rename to backend/src/collectivites/shared/models/groupement-collectivite.table.ts diff --git a/backend/src/collectivites/models/groupement.table.ts b/backend/src/collectivites/shared/models/groupement.table.ts similarity index 100% rename from backend/src/collectivites/models/groupement.table.ts rename to backend/src/collectivites/shared/models/groupement.table.ts diff --git a/backend/src/collectivites/models/imports-banatic.table.ts b/backend/src/collectivites/shared/models/imports-banatic.table.ts similarity index 100% rename from backend/src/collectivites/models/imports-banatic.table.ts rename to backend/src/collectivites/shared/models/imports-banatic.table.ts diff --git a/backend/src/collectivites/models/imports-commune.table.ts b/backend/src/collectivites/shared/models/imports-commune.table.ts similarity index 100% rename from backend/src/collectivites/models/imports-commune.table.ts rename to backend/src/collectivites/shared/models/imports-commune.table.ts diff --git a/backend/src/collectivites/models/imports-region.table.ts b/backend/src/collectivites/shared/models/imports-region.table.ts similarity index 100% rename from backend/src/collectivites/models/imports-region.table.ts rename to backend/src/collectivites/shared/models/imports-region.table.ts diff --git a/backend/src/collectivites/models/membre-fonction.enum.ts b/backend/src/collectivites/shared/models/membre-fonction.enum.ts similarity index 100% rename from backend/src/collectivites/models/membre-fonction.enum.ts rename to backend/src/collectivites/shared/models/membre-fonction.enum.ts diff --git a/backend/src/collectivites/models/membre.table.ts b/backend/src/collectivites/shared/models/membre.table.ts similarity index 81% rename from backend/src/collectivites/models/membre.table.ts rename to backend/src/collectivites/shared/models/membre.table.ts index 4772fe7bda..fc251072ec 100644 --- a/backend/src/collectivites/models/membre.table.ts +++ b/backend/src/collectivites/shared/models/membre.table.ts @@ -7,9 +7,9 @@ import { uuid, } from 'drizzle-orm/pg-core'; import { createInsertSchema } from 'drizzle-zod'; -import { authUsersTable } from '../../auth/models/auth-users.table'; -import { referentielEnum } from '../../referentiels/models/referentiel.enum'; -import { createdAt, modifiedAt } from '../../utils/column.utils'; +import { authUsersTable } from '../../../auth/models/auth-users.table'; +import { referentielEnum } from '../../../referentiels/models/referentiel.enum'; +import { createdAt, modifiedAt } from '../../../utils/column.utils'; import { collectiviteTable } from './collectivite.table'; import { membreFonctionEnum } from './membre-fonction.enum'; diff --git a/backend/src/collectivites/shared/models/tag.table-base.ts b/backend/src/collectivites/shared/models/tag.table-base.ts index 8217a66a3f..0140060a09 100644 --- a/backend/src/collectivites/shared/models/tag.table-base.ts +++ b/backend/src/collectivites/shared/models/tag.table-base.ts @@ -1,6 +1,6 @@ import { integer, serial, text } from 'drizzle-orm/pg-core'; import z from 'zod'; -import { collectiviteTable } from '../../models/collectivite.table'; +import { collectiviteTable } from './collectivite.table'; export type TagType = | 'personne' diff --git a/backend/src/documents/models/document.basetable.ts b/backend/src/documents/models/document.basetable.ts index 96ea0f073f..fa57e82b7f 100644 --- a/backend/src/documents/models/document.basetable.ts +++ b/backend/src/documents/models/document.basetable.ts @@ -7,7 +7,7 @@ import { timestamp, uuid, } from 'drizzle-orm/pg-core'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; export const DocumentBase = { id: serial('id').primaryKey(), diff --git a/backend/src/indicateurs/controllers/trajectoires.controller.ts b/backend/src/indicateurs/controllers/trajectoires.controller.ts index ecc84cbd3b..a312ade9c8 100644 --- a/backend/src/indicateurs/controllers/trajectoires.controller.ts +++ b/backend/src/indicateurs/controllers/trajectoires.controller.ts @@ -12,16 +12,16 @@ import { ApiOkResponse, ApiResponse, ApiTags } from '@nestjs/swagger'; import { NextFunction, Response } from 'express'; import { AllowPublicAccess } from '../../auth/decorators/allow-public-access.decorator'; import { TokenInfo } from '../../auth/decorators/token-info.decorators'; -import { CollectiviteRequestClass } from '../../collectivites/models/collectivite.request'; +import type { AuthenticatedUser } from '../../auth/models/auth.models'; +import { CollectiviteRequestClass } from '../../collectivites/collectivite.request'; import { calculTrajectoireRequestSchema } from '../models/calcul-trajectoire.request'; +import { calculTrajectoireResponseSchema } from '../models/calcul-trajectoire.response'; +import { modeleTrajectoireTelechargementRequestSchema } from '../models/modele-trajectoire-telechargement.request'; +import { verificationTrajectoireRequestSchema } from '../models/verification-trajectoire.request'; +import { verificationTrajectoireResponseSchema } from '../models/verification-trajectoire.response'; import TrajectoiresDataService from '../services/trajectoires-data.service'; import TrajectoiresSpreadsheetService from '../services/trajectoires-spreadsheet.service'; import TrajectoiresXlsxService from '../services/trajectoires-xlsx.service'; -import type { AuthenticatedUser } from '../../auth/models/auth.models'; -import { verificationTrajectoireResponseSchema } from '../models/verification-trajectoire.response'; -import { modeleTrajectoireTelechargementRequestSchema } from '../models/modele-trajectoire-telechargement.request'; -import { verificationTrajectoireRequestSchema } from '../models/verification-trajectoire.request'; -import { calculTrajectoireResponseSchema } from '../models/calcul-trajectoire.response'; /** * Création des classes de requête/réponse à partir du schema pour générer automatiquement la documentation OpenAPI et la validation des entrées diff --git a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts index ae93b28f4d..a54d983b1a 100644 --- a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts +++ b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts @@ -8,9 +8,9 @@ import { Injectable } from '@nestjs/common'; import { getTableName, sql } from 'drizzle-orm'; import { intersection, isNil } from 'es-toolkit'; import { AuthenticatedUser } from '../../auth/models/auth.models'; -import { groupementCollectiviteTable } from '../../collectivites/models/groupement-collectivite.table'; import CollectivitesService from '../../collectivites/services/collectivites.service'; import { categorieTagTable } from '../../collectivites/shared/models/categorie-tag.table'; +import { groupementCollectiviteTable } from '../../collectivites/shared/models/groupement-collectivite.table'; import DatabaseService from '../../common/services/database.service'; import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; import { indicateurActionTable } from '../models/indicateur-action.table'; diff --git a/backend/src/indicateurs/models/calcul-trajectoire.request.ts b/backend/src/indicateurs/models/calcul-trajectoire.request.ts index 2b13e4ccdb..db10e771d2 100644 --- a/backend/src/indicateurs/models/calcul-trajectoire.request.ts +++ b/backend/src/indicateurs/models/calcul-trajectoire.request.ts @@ -1,6 +1,6 @@ import { extendApi } from '@anatine/zod-openapi'; import { z } from 'zod'; -import { collectiviteRequestSchema } from '../../collectivites/models/collectivite.request'; +import { collectiviteRequestSchema } from '../../collectivites/collectivite.request'; export enum CalculTrajectoireReset { MAJ_SPREADSHEET_EXISTANT = 'maj_spreadsheet_existant', diff --git a/backend/src/indicateurs/models/indicateur-collectivite.table.ts b/backend/src/indicateurs/models/indicateur-collectivite.table.ts index 8c5b0a2fe9..78e3a2177b 100644 --- a/backend/src/indicateurs/models/indicateur-collectivite.table.ts +++ b/backend/src/indicateurs/models/indicateur-collectivite.table.ts @@ -1,7 +1,12 @@ -import { boolean, integer, pgTable, text } from 'drizzle-orm/pg-core'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { + boolean, + integer, + pgTable, + primaryKey, + text, +} from 'drizzle-orm/pg-core'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { indicateurDefinitionTable } from './indicateur-definition.table'; -import { primaryKey } from 'drizzle-orm/pg-core'; export const indicateurCollectiviteTable = pgTable( 'indicateur_collectivite', diff --git a/backend/src/indicateurs/models/indicateur-definition.table.ts b/backend/src/indicateurs/models/indicateur-definition.table.ts index 7118cfdcd2..415755e4ea 100644 --- a/backend/src/indicateurs/models/indicateur-definition.table.ts +++ b/backend/src/indicateurs/models/indicateur-definition.table.ts @@ -9,7 +9,7 @@ import { } from 'drizzle-orm/pg-core'; import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; import { z } from 'zod'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { createdAt, createdBy, diff --git a/backend/src/indicateurs/models/indicateur-pilote.table.ts b/backend/src/indicateurs/models/indicateur-pilote.table.ts index 35f2dfc0d7..5f206437cd 100644 --- a/backend/src/indicateurs/models/indicateur-pilote.table.ts +++ b/backend/src/indicateurs/models/indicateur-pilote.table.ts @@ -1,5 +1,5 @@ import { integer, pgTable, serial, uuid } from 'drizzle-orm/pg-core'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { personneTagTable } from '../../collectivites/shared/models/personne-tag.table'; import { indicateurDefinitionTable } from './indicateur-definition.table'; diff --git a/backend/src/indicateurs/models/indicateur-service-tag.table.ts b/backend/src/indicateurs/models/indicateur-service-tag.table.ts index 165b762098..41cc60e87e 100644 --- a/backend/src/indicateurs/models/indicateur-service-tag.table.ts +++ b/backend/src/indicateurs/models/indicateur-service-tag.table.ts @@ -1,6 +1,6 @@ import { serviceTagTable } from '@/backend/collectivites'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { indicateurDefinitionTable } from './indicateur-definition.table'; export const indicateurServiceTagTable = pgTable( diff --git a/backend/src/indicateurs/models/indicateur-valeur.table.ts b/backend/src/indicateurs/models/indicateur-valeur.table.ts index 1a00009fd2..38b68d4b2b 100644 --- a/backend/src/indicateurs/models/indicateur-valeur.table.ts +++ b/backend/src/indicateurs/models/indicateur-valeur.table.ts @@ -11,7 +11,7 @@ import { } from 'drizzle-orm/pg-core'; import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; import { z } from 'zod'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { createdAt, createdBy, diff --git a/backend/src/indicateurs/models/verification-trajectoire.request.ts b/backend/src/indicateurs/models/verification-trajectoire.request.ts index c4cd36391c..f151aa801b 100644 --- a/backend/src/indicateurs/models/verification-trajectoire.request.ts +++ b/backend/src/indicateurs/models/verification-trajectoire.request.ts @@ -1,6 +1,6 @@ import { extendApi } from '@anatine/zod-openapi'; import { z } from 'zod'; -import { collectiviteRequestSchema } from '../../collectivites/models/collectivite.request'; +import { collectiviteRequestSchema } from '../../collectivites/collectivite.request'; export const verificationTrajectoireRequestSchema = extendApi( collectiviteRequestSchema.extend({ diff --git a/backend/src/indicateurs/models/verification-trajectoire.response.ts b/backend/src/indicateurs/models/verification-trajectoire.response.ts index 69bc300b98..515150c151 100644 --- a/backend/src/indicateurs/models/verification-trajectoire.response.ts +++ b/backend/src/indicateurs/models/verification-trajectoire.response.ts @@ -1,6 +1,6 @@ import { extendApi } from '@anatine/zod-openapi'; import { z } from 'zod'; -import { epciSchema } from '../../collectivites/models/epci.table'; +import { epciSchema } from '../../collectivites/shared/models/epci.table'; import { donneesCalculTrajectoireARemplirSchema } from './donnees-calcul-trajectoire-a-remplir.dto'; import { IndicateurValeurType } from './indicateur-valeur.table'; diff --git a/backend/src/indicateurs/services/indicateurs.service.ts b/backend/src/indicateurs/services/indicateurs.service.ts index 54060a14c1..3fe533df3b 100644 --- a/backend/src/indicateurs/services/indicateurs.service.ts +++ b/backend/src/indicateurs/services/indicateurs.service.ts @@ -1,3 +1,6 @@ +import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; +import { PermissionService } from '@/backend/auth/authorizations/permission.service'; +import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; import { Injectable, Logger } from '@nestjs/common'; import { aliasedTable, @@ -14,10 +17,12 @@ import { SQL, SQLWrapper, } from 'drizzle-orm'; -import { objectToCamel } from 'ts-case-convert'; import { groupBy, partition } from 'es-toolkit'; import * as _ from 'lodash'; +import { objectToCamel } from 'ts-case-convert'; import { AuthenticatedUser, AuthRole } from '../../auth/models/auth.models'; +import { groupementCollectiviteTable } from '../../collectivites/shared/models/groupement-collectivite.table'; +import { groupementTable } from '../../collectivites/shared/models/groupement.table'; import DatabaseService from '../../common/services/database.service'; import { DeleteIndicateursValeursRequestType } from '../models/delete-indicateurs.request'; import { GetIndicateursValeursRequestType } from '../models/get-indicateurs.request'; @@ -28,6 +33,7 @@ import { IndicateurDefinitionType, MinimalIndicateurDefinitionType, } from '../models/indicateur-definition.table'; +import { indicateurGroupeTable } from '../models/indicateur-groupe.table'; import { indicateurSourceMetadonneeTable, IndicateurSourceMetadonneeType, @@ -42,12 +48,6 @@ import { indicateurValeurTable, IndicateurValeurType, } from '../models/indicateur-valeur.table'; -import { indicateurGroupeTable } from '../models/indicateur-groupe.table'; -import { groupementTable } from '../../collectivites/models/groupement.table'; -import { groupementCollectiviteTable } from '../../collectivites/models/groupement-collectivite.table'; -import { PermissionService } from '@/backend/auth/authorizations/permission.service'; -import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; -import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; @Injectable() export default class IndicateursService { diff --git a/backend/src/indicateurs/services/trajectoires-data.service.ts b/backend/src/indicateurs/services/trajectoires-data.service.ts index fc0bbb253f..3ceebef346 100644 --- a/backend/src/indicateurs/services/trajectoires-data.service.ts +++ b/backend/src/indicateurs/services/trajectoires-data.service.ts @@ -1,3 +1,6 @@ +import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; +import { PermissionService } from '@/backend/auth/authorizations/permission.service'; +import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; import { Injectable, InternalServerErrorException, @@ -7,8 +10,11 @@ import { isNil } from 'es-toolkit'; import * as _ from 'lodash'; import { DateTime } from 'luxon'; import { AuthenticatedUser } from '../../auth/models/auth.models'; -import { EpciType } from '../../collectivites/models/epci.table'; import CollectivitesService from '../../collectivites/services/collectivites.service'; +import { EpciType } from '../../collectivites/shared/models/epci.table'; +import { DonneesARemplirResultType } from '../models/donnees-a-remplir-result.dto'; +import { DonneesARemplirValeurType } from '../models/donnees-a-remplir-valeur.dto'; +import { DonneesCalculTrajectoireARemplirType } from '../models/donnees-calcul-trajectoire-a-remplir.dto'; import { CreateIndicateurSourceMetadonneeType, IndicateurSourceMetadonneeType, @@ -18,17 +24,11 @@ import { IndicateurValeurAvecMetadonnesDefinition, IndicateurValeurType, } from '../models/indicateur-valeur.table'; +import { VerificationTrajectoireRequestType } from '../models/verification-trajectoire.request'; import { VerificationTrajectoireResultType, VerificationTrajectoireStatus, } from '../models/verification-trajectoire.response'; -import { VerificationTrajectoireRequestType } from '../models/verification-trajectoire.request'; -import { DonneesCalculTrajectoireARemplirType } from '../models/donnees-calcul-trajectoire-a-remplir.dto'; -import { DonneesARemplirValeurType } from '../models/donnees-a-remplir-valeur.dto'; -import { DonneesARemplirResultType } from '../models/donnees-a-remplir-result.dto'; -import { PermissionService } from '@/backend/auth/authorizations/permission.service'; -import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; -import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; import IndicateurSourcesService from './indicateur-sources.service'; import IndicateursService from './indicateurs.service'; @@ -684,7 +684,7 @@ export default class TrajectoiresDataService { return response; } } - if(!forceRecuperationDonneesUniquementPourLecture) { + if (!forceRecuperationDonneesUniquementPourLecture) { // Vérification des droits pour calculer les données await this.permissionService.isAllowed( tokenInfo, diff --git a/backend/src/indicateurs/services/trajectoires-spreadsheet.service.ts b/backend/src/indicateurs/services/trajectoires-spreadsheet.service.ts index a3c3eea4ff..c1d8d793c3 100644 --- a/backend/src/indicateurs/services/trajectoires-spreadsheet.service.ts +++ b/backend/src/indicateurs/services/trajectoires-spreadsheet.service.ts @@ -8,8 +8,8 @@ import { isNil, partition } from 'es-toolkit'; import * as _ from 'lodash'; import slugify from 'slugify'; import { AuthenticatedUser } from '../../auth/models/auth.models'; -import { EpciType } from '../../collectivites/models/epci.table'; import GroupementsService from '../../collectivites/services/groupements.service'; +import { EpciType } from '../../collectivites/shared/models/epci.table'; import ConfigurationService from '../../config/configuration.service'; import SheetService from '../../utils/google-sheets/sheet.service'; import { @@ -261,7 +261,7 @@ export default class TrajectoiresSpreadsheetService { // Ecriture des informations d'émission GES const emissionGesSpreadsheetData = resultatVerification.donneesEntree!.emissionsGes.valeurs.map((valeur) => [ - (valeur.valeur || 0), + valeur.valeur || 0, ]); await this.sheetService.overwriteRawDataToSheet( trajectoireCalculSheetId, @@ -273,7 +273,7 @@ export default class TrajectoiresSpreadsheetService { // Les valeurs de séquestration sont positives en base quand il y a une séquestration mais doivent être écrites avec le signe opposé const sequestrationSpreadsheetData = resultatVerification.donneesEntree!.sequestrations.valeurs.map( - (valeur) => [((valeur.valeur || 0) * -1)] + (valeur) => [(valeur.valeur || 0) * -1] ); await this.sheetService.overwriteRawDataToSheet( trajectoireCalculSheetId, diff --git a/backend/src/indicateurs/services/trajectoires-xlsx.service.ts b/backend/src/indicateurs/services/trajectoires-xlsx.service.ts index e9c37f1b2d..e6767fc5be 100644 --- a/backend/src/indicateurs/services/trajectoires-xlsx.service.ts +++ b/backend/src/indicateurs/services/trajectoires-xlsx.service.ts @@ -7,8 +7,8 @@ import { import { NextFunction, Response } from 'express'; import { default as XlsxTemplate } from 'xlsx-template'; import { AuthenticatedUser } from '../../auth/models/auth.models'; -import { CollectiviteRequestType } from '../../collectivites/models/collectivite.request'; -import { EpciType } from '../../collectivites/models/epci.table'; +import { CollectiviteRequestType } from '../../collectivites/collectivite.request'; +import { EpciType } from '../../collectivites/shared/models/epci.table'; import BackendConfigurationService from '../../config/configuration.service'; import SheetService from '../../utils/google-sheets/sheet.service'; import { DonneesCalculTrajectoireARemplirType } from '../models/donnees-calcul-trajectoire-a-remplir.dto'; @@ -162,14 +162,14 @@ export default class TrajectoiresXlsxService { valeur.identifiantsReferentiel ); emissionGesSequestrationConsommationsSubstitionValeurs[cleSubstitution] = - (valeur.valeur || 0); + valeur.valeur || 0; }); valeurIndicateurs?.sequestrations.valeurs.forEach((valeur) => { const cleSubstitution = this.getXlsxCleSubstitution( valeur.identifiantsReferentiel ); emissionGesSequestrationConsommationsSubstitionValeurs[cleSubstitution] = - ((valeur.valeur || 0) * -1); + (valeur.valeur || 0) * -1; }); valeurIndicateurs?.consommationsFinales.valeurs.forEach((valeur) => { const cleSubstitution = this.getXlsxCleSubstitution( diff --git a/backend/src/panier/models/panier.table.ts b/backend/src/panier/models/panier.table.ts index a5168c1541..c3e28f1daa 100644 --- a/backend/src/panier/models/panier.table.ts +++ b/backend/src/panier/models/panier.table.ts @@ -7,7 +7,7 @@ import { uuid, } from 'drizzle-orm/pg-core'; import { createSelectSchema } from 'drizzle-zod'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; export const panierTable = pgTable('panier', { id: uuid('id').primaryKey().defaultRandom(), diff --git a/backend/src/personnalisations/models/historique-reponse-binaire.table.ts b/backend/src/personnalisations/models/historique-reponse-binaire.table.ts index 844bba1b12..267126ba52 100644 --- a/backend/src/personnalisations/models/historique-reponse-binaire.table.ts +++ b/backend/src/personnalisations/models/historique-reponse-binaire.table.ts @@ -1,6 +1,6 @@ import { sql } from 'drizzle-orm'; import { boolean, integer, timestamp, varchar } from 'drizzle-orm/pg-core'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { historiqueSchema } from './historique-reponse-choix.table'; export const historiqueReponseBinaireTable = historiqueSchema.table( diff --git a/backend/src/personnalisations/models/historique-reponse-choix.table.ts b/backend/src/personnalisations/models/historique-reponse-choix.table.ts index 67ed56d4ee..f249b42745 100644 --- a/backend/src/personnalisations/models/historique-reponse-choix.table.ts +++ b/backend/src/personnalisations/models/historique-reponse-choix.table.ts @@ -1,6 +1,6 @@ import { sql } from 'drizzle-orm'; import { integer, pgSchema, timestamp, varchar } from 'drizzle-orm/pg-core'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; export const historiqueSchema = pgSchema('historique'); export const historiqueReponseChoixTable = historiqueSchema.table( diff --git a/backend/src/personnalisations/models/historique-reponse-proportion.table.ts b/backend/src/personnalisations/models/historique-reponse-proportion.table.ts index fbe93bb74d..b93b4a300d 100644 --- a/backend/src/personnalisations/models/historique-reponse-proportion.table.ts +++ b/backend/src/personnalisations/models/historique-reponse-proportion.table.ts @@ -5,7 +5,7 @@ import { timestamp, varchar, } from 'drizzle-orm/pg-core'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { historiqueSchema } from './historique-reponse-choix.table'; export const historiqueReponseProportionTable = historiqueSchema.table( diff --git a/backend/src/personnalisations/models/reponse-binaire.table.ts b/backend/src/personnalisations/models/reponse-binaire.table.ts index ca2177877f..40b12e47c7 100644 --- a/backend/src/personnalisations/models/reponse-binaire.table.ts +++ b/backend/src/personnalisations/models/reponse-binaire.table.ts @@ -1,6 +1,6 @@ import { modifiedAt } from '@/backend/utils'; import { boolean, integer, pgTable, varchar } from 'drizzle-orm/pg-core'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; export const reponseBinaireTable = pgTable('reponse_binaire', { modifiedAt, diff --git a/backend/src/personnalisations/models/reponse-choix.table.ts b/backend/src/personnalisations/models/reponse-choix.table.ts index 7adb0253a5..94ebcb32b0 100644 --- a/backend/src/personnalisations/models/reponse-choix.table.ts +++ b/backend/src/personnalisations/models/reponse-choix.table.ts @@ -1,6 +1,6 @@ import { modifiedAt } from '@/backend/utils'; import { integer, pgTable, varchar } from 'drizzle-orm/pg-core'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; export const reponseChoixTable = pgTable('reponse_choix', { modifiedAt, diff --git a/backend/src/personnalisations/models/reponse-proportion.table.ts b/backend/src/personnalisations/models/reponse-proportion.table.ts index 4e0ebae1ba..a954abf564 100644 --- a/backend/src/personnalisations/models/reponse-proportion.table.ts +++ b/backend/src/personnalisations/models/reponse-proportion.table.ts @@ -5,7 +5,7 @@ import { pgTable, varchar, } from 'drizzle-orm/pg-core'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; export const reponseProportionTable = pgTable('reponse_proportion', { modifiedAt, diff --git a/backend/src/personnalisations/services/expression-parser.service.spec.ts b/backend/src/personnalisations/services/expression-parser.service.spec.ts index c890520417..cd48cd5f55 100644 --- a/backend/src/personnalisations/services/expression-parser.service.spec.ts +++ b/backend/src/personnalisations/services/expression-parser.service.spec.ts @@ -2,7 +2,7 @@ import { Test } from '@nestjs/testing'; import { CollectivitePopulationTypeEnum, CollectiviteTypeEnum, -} from '../../collectivites/models/identite-collectivite.dto'; +} from '../../collectivites/identite-collectivite.dto'; import ExpressionParserService from './expression-parser.service'; describe('ExpressionParserService', () => { @@ -256,8 +256,8 @@ describe('ExpressionParserService', () => { le score de la 1.2.3 est réduit à 2 points. */ - const expression = `si reponse(dechets_1, OUI) et reponse(dechets_2, OUI) et reponse(dechets_3, OUI) alors 1.0 -sinon si reponse(dechets_1, NON) et reponse(dechets_2, NON) et reponse(dechets_3, NON) alors 2/12 + const expression = `si reponse(dechets_1, OUI) et reponse(dechets_2, OUI) et reponse(dechets_3, OUI) alors 1.0 +sinon si reponse(dechets_1, NON) et reponse(dechets_2, NON) et reponse(dechets_3, NON) alors 2/12 sinon 0.75`; expect(() => expressionParserService.parseAndEvaluateExpression(expression) @@ -331,12 +331,12 @@ sinon 0.75`; Ces réductions sont cumulables dans la limite de 2 points restants pour prendre en compte la part d’influence dans les instances compétentes et les actions partenariales. */ - const expression = `si reponse(AOD_elec, OUI) et reponse(AOD_gaz, OUI) et reponse(AOD_chaleur, OUI) alors 1.0 -sinon si reponse(AOD_elec, NON) et reponse(AOD_gaz, NON) et reponse(AOD_chaleur, NON) alors 2/10 -sinon si reponse(AOD_elec, NON) et reponse(AOD_gaz, NON) alors 4/10 -sinon si reponse(AOD_elec, NON) et reponse(AOD_chaleur, NON) alors 3/10 -sinon si reponse(AOD_gaz, NON) et reponse(AOD_chaleur, NON) alors 3/10 -sinon si reponse(AOD_elec, NON) ou reponse(AOD_gaz, NON) alors 7/10 + const expression = `si reponse(AOD_elec, OUI) et reponse(AOD_gaz, OUI) et reponse(AOD_chaleur, OUI) alors 1.0 +sinon si reponse(AOD_elec, NON) et reponse(AOD_gaz, NON) et reponse(AOD_chaleur, NON) alors 2/10 +sinon si reponse(AOD_elec, NON) et reponse(AOD_gaz, NON) alors 4/10 +sinon si reponse(AOD_elec, NON) et reponse(AOD_chaleur, NON) alors 3/10 +sinon si reponse(AOD_gaz, NON) et reponse(AOD_chaleur, NON) alors 3/10 +sinon si reponse(AOD_elec, NON) ou reponse(AOD_gaz, NON) alors 7/10 sinon si reponse(AOD_chaleur, NON) alors 6/10`; expect( diff --git a/backend/src/personnalisations/services/expression-parser.service.ts b/backend/src/personnalisations/services/expression-parser.service.ts index 9882405ddb..4ff7403c0a 100644 --- a/backend/src/personnalisations/services/expression-parser.service.ts +++ b/backend/src/personnalisations/services/expression-parser.service.ts @@ -7,7 +7,7 @@ import { tokenMatcher, } from 'chevrotain'; import * as _ from 'lodash'; -import { IdentiteCollectivite } from '../../collectivites/models/identite-collectivite.dto'; +import { IdentiteCollectivite } from '../../collectivites/identite-collectivite.dto'; // Define all the tokens used in the grammar const VRAI = createToken({ name: 'VRAI', pattern: /VRAI/ }); diff --git a/backend/src/personnalisations/services/personnalisations-service.ts b/backend/src/personnalisations/services/personnalisations-service.ts index 84c9a5028d..dde0d47c8d 100644 --- a/backend/src/personnalisations/services/personnalisations-service.ts +++ b/backend/src/personnalisations/services/personnalisations-service.ts @@ -1,10 +1,13 @@ +import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; +import { PermissionService } from '@/backend/auth/authorizations/permission.service'; +import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; import { Injectable, Logger } from '@nestjs/common'; import { and, asc, desc, eq, like, lte, SQL, SQLWrapper } from 'drizzle-orm'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import { CollectiviteAvecType, IdentiteCollectivite, -} from '../../collectivites/models/identite-collectivite.dto'; +} from '../../collectivites/identite-collectivite.dto'; import CollectivitesService from '../../collectivites/services/collectivites.service'; import DatabaseService from '../../common/services/database.service'; import { GetPersonnalisationConsequencesRequestType } from '../models/get-personnalisation-consequences.request'; @@ -22,9 +25,6 @@ import { reponseBinaireTable } from '../models/reponse-binaire.table'; import { reponseChoixTable } from '../models/reponse-choix.table'; import { reponseProportionTable } from '../models/reponse-proportion.table'; import ExpressionParserService from './expression-parser.service'; -import { PermissionService } from '@/backend/auth/authorizations/permission.service'; -import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; -import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; export type ReponseTables = | typeof reponseBinaireTable diff --git a/backend/src/plans/fiches/shared/models/axe.table.ts b/backend/src/plans/fiches/shared/models/axe.table.ts index fe60ea9bb1..6d2b301808 100644 --- a/backend/src/plans/fiches/shared/models/axe.table.ts +++ b/backend/src/plans/fiches/shared/models/axe.table.ts @@ -9,7 +9,7 @@ import { } from 'drizzle-orm/pg-core'; import { createSelectSchema } from 'drizzle-zod'; import z from 'zod'; -import { collectiviteTable } from '../../../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../../../collectivites/shared/models/collectivite.table'; import { panierTable } from '../../../../panier/models/panier.table'; import { planActionTypeSchema, diff --git a/backend/src/plans/fiches/shared/models/fiche-action.table.ts b/backend/src/plans/fiches/shared/models/fiche-action.table.ts index a6faf34d81..300a3c4a42 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action.table.ts @@ -12,7 +12,7 @@ import { } from 'drizzle-orm/pg-core'; import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; import { z } from 'zod'; -import { collectiviteTable } from '../../../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../../../collectivites/shared/models/collectivite.table'; import { tempsDeMiseEnOeuvreTable } from '../../../../shared/models/temps-de-mise-en-oeuvre.table'; import { createdAt, diff --git a/backend/src/referentiels/models/action-commentaire.table.ts b/backend/src/referentiels/models/action-commentaire.table.ts index 82e6ca22b1..334b9fefcf 100644 --- a/backend/src/referentiels/models/action-commentaire.table.ts +++ b/backend/src/referentiels/models/action-commentaire.table.ts @@ -9,7 +9,7 @@ import { } from 'drizzle-orm/pg-core'; import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; import { authUsersTable } from '../../auth/models/auth-users.table'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { actionIdVarchar } from './action-definition.table'; import { actionRelationTable } from './action-relation.table'; diff --git a/backend/src/referentiels/models/action-statut.table.ts b/backend/src/referentiels/models/action-statut.table.ts index 742da7a863..f9d30d656b 100644 --- a/backend/src/referentiels/models/action-statut.table.ts +++ b/backend/src/referentiels/models/action-statut.table.ts @@ -8,7 +8,7 @@ import { pgTable, } from 'drizzle-orm/pg-core'; import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { actionIdReference } from './action-definition.table'; export const avancementEnum = pgEnum('avancement', [ diff --git a/backend/src/referentiels/models/client-scores.table.ts b/backend/src/referentiels/models/client-scores.table.ts index a8fc7aa69a..31dbf20a28 100644 --- a/backend/src/referentiels/models/client-scores.table.ts +++ b/backend/src/referentiels/models/client-scores.table.ts @@ -8,7 +8,7 @@ import { timestamp, } from 'drizzle-orm/pg-core'; import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { referentielEnum } from './referentiel.enum'; export const clientScoresTable = pgTable( diff --git a/backend/src/referentiels/models/get-referentiel-scores.response.ts b/backend/src/referentiels/models/get-referentiel-scores.response.ts index 0e0856274f..e71e5d8a48 100644 --- a/backend/src/referentiels/models/get-referentiel-scores.response.ts +++ b/backend/src/referentiels/models/get-referentiel-scores.response.ts @@ -1,6 +1,6 @@ import { extendApi } from '@anatine/zod-openapi'; import { z } from 'zod'; -import { collectiviteAvecTypeSchema } from '../../collectivites/models/identite-collectivite.dto'; +import { collectiviteAvecTypeSchema } from '../../collectivites/identite-collectivite.dto'; import { ComputeScoreMode } from './compute-scores-mode.enum'; import { referentielActionAvecScoreDtoSchema } from './referentiel-action-avec-score.dto'; import { ReferentielType } from './referentiel.enum'; diff --git a/backend/src/referentiels/models/historique-action-statut.table.ts b/backend/src/referentiels/models/historique-action-statut.table.ts index c91e15e2ec..6daa45fe6a 100644 --- a/backend/src/referentiels/models/historique-action-statut.table.ts +++ b/backend/src/referentiels/models/historique-action-statut.table.ts @@ -7,7 +7,7 @@ import { uuid, } from 'drizzle-orm/pg-core'; import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { historiqueSchema } from '../../personnalisations/models/historique-reponse-choix.table'; import { actionIdReference } from './action-definition.table'; import { avancementEnum } from './action-statut.table'; diff --git a/backend/src/referentiels/models/labellisation-action-audit-state.table.ts b/backend/src/referentiels/models/labellisation-action-audit-state.table.ts index 5b1dba7709..3a80c21877 100644 --- a/backend/src/referentiels/models/labellisation-action-audit-state.table.ts +++ b/backend/src/referentiels/models/labellisation-action-audit-state.table.ts @@ -11,7 +11,7 @@ import { uuid, } from 'drizzle-orm/pg-core'; import { authUsersTable } from '../../auth/models/auth-users.table'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { actionIdReference } from './action-definition.table'; import { labellisationAuditTable } from './labellisation-audit.table'; import { labellisationSchema } from './labellisation.schema'; diff --git a/backend/src/referentiels/models/labellisation-audit.table.ts b/backend/src/referentiels/models/labellisation-audit.table.ts index efbb04db9a..2e2517cd54 100644 --- a/backend/src/referentiels/models/labellisation-audit.table.ts +++ b/backend/src/referentiels/models/labellisation-audit.table.ts @@ -9,7 +9,7 @@ import { uniqueIndex, } from 'drizzle-orm/pg-core'; import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { labellisationDemandeTable } from './labellisation-demande.table'; import { labellisationSchema } from './labellisation.schema'; import { referentielEnum } from './referentiel.enum'; diff --git a/backend/src/referentiels/models/labellisation-bibliotheque-fichier.table.ts b/backend/src/referentiels/models/labellisation-bibliotheque-fichier.table.ts index c23960665a..93e9f7e3d9 100644 --- a/backend/src/referentiels/models/labellisation-bibliotheque-fichier.table.ts +++ b/backend/src/referentiels/models/labellisation-bibliotheque-fichier.table.ts @@ -7,7 +7,7 @@ import { unique, varchar, } from 'drizzle-orm/pg-core'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { labellisationSchema } from './labellisation.schema'; export const labellisationBibliothequeFichierTable = labellisationSchema.table( diff --git a/backend/src/referentiels/models/labellisation-demande.table.ts b/backend/src/referentiels/models/labellisation-demande.table.ts index e9980da56a..8ea3ddbdbd 100644 --- a/backend/src/referentiels/models/labellisation-demande.table.ts +++ b/backend/src/referentiels/models/labellisation-demande.table.ts @@ -8,7 +8,7 @@ import { uuid, } from 'drizzle-orm/pg-core'; import { authUsersTable } from '../../auth/models/auth-users.table'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { labellisationEtoileEnum } from './labellisation-etoile.table'; import { labellisationSchema } from './labellisation.schema'; import { referentielEnum } from './referentiel.enum'; diff --git a/backend/src/referentiels/models/labellisation-preuve-base.table.ts b/backend/src/referentiels/models/labellisation-preuve-base.table.ts index 97b1fd808e..d26eef2dfc 100644 --- a/backend/src/referentiels/models/labellisation-preuve-base.table.ts +++ b/backend/src/referentiels/models/labellisation-preuve-base.table.ts @@ -2,7 +2,7 @@ import { modifiedAt, modifiedBy } from '@/backend/utils'; import { sql } from 'drizzle-orm'; import { foreignKey, integer, jsonb, text } from 'drizzle-orm/pg-core'; import { authUsersTable } from '../../auth/models/auth-users.table'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { labellisationBibliothequeFichierTable } from './labellisation-bibliotheque-fichier.table'; import { labellisationSchema } from './labellisation.schema'; diff --git a/backend/src/referentiels/models/score-snapshot.table.ts b/backend/src/referentiels/models/score-snapshot.table.ts index c81e7cb31a..74e831211d 100644 --- a/backend/src/referentiels/models/score-snapshot.table.ts +++ b/backend/src/referentiels/models/score-snapshot.table.ts @@ -12,7 +12,7 @@ import { } from 'drizzle-orm/pg-core'; import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; import z from 'zod'; -import { collectiviteTable } from '../../collectivites/models/collectivite.table'; +import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { getPersonnalitionReponsesResponseSchema } from '../../personnalisations/models/get-personnalisation-reponses.response'; import { createdAt, diff --git a/backend/src/referentiels/services/referentiels-scoring.service.spec.ts b/backend/src/referentiels/services/referentiels-scoring.service.spec.ts index 9e26adc9c9..c3977d6a14 100644 --- a/backend/src/referentiels/services/referentiels-scoring.service.spec.ts +++ b/backend/src/referentiels/services/referentiels-scoring.service.spec.ts @@ -1,18 +1,19 @@ +import { PermissionService } from '@/backend/auth/authorizations/permission.service'; import { Test } from '@nestjs/testing'; import { CollectiviteTypeEnum, IdentiteCollectivite, -} from '../../collectivites/models/identite-collectivite.dto'; +} from '../../collectivites/identite-collectivite.dto'; import CollectivitesService from '../../collectivites/services/collectivites.service'; import DatabaseService from '../../common/services/database.service'; import MattermostNotificationService from '../../common/services/mattermost-notification.service'; import { roundTo } from '../../common/services/number.helper'; -import ConfigurationService from '../../config/configuration.service'; import { GetPersonnalitionConsequencesResponseType } from '../../personnalisations/models/get-personnalisation-consequences.response'; import { GetPersonnalisationReponsesResponseType } from '../../personnalisations/models/get-personnalisation-reponses.response'; import { caePersonnalisationRegles } from '../../personnalisations/models/samples/cae-personnalisation-regles.sample'; import ExpressionParserService from '../../personnalisations/services/expression-parser.service'; import PersonnalisationsService from '../../personnalisations/services/personnalisations-service'; +import ConfigurationService from '../../utils/config/configuration.service'; import SheetService from '../../utils/google-sheets/sheet.service'; import { ActionPointScoreType } from '../models/action-point-score.dto'; import { ActionType } from '../models/action-type.enum'; @@ -26,7 +27,6 @@ import LabellisationService from './labellisation.service'; import ReferentielsScoringSnapshotsService from './referentiels-scoring-snapshots.service'; import ReferentielsScoringService from './referentiels-scoring.service'; import ReferentielsService from './referentiels.service'; -import { PermissionService } from '@/backend/auth/authorizations/permission.service'; describe('ReferentielsScoringService', () => { let referentielsScoringService: ReferentielsScoringService; diff --git a/backend/src/referentiels/services/referentiels-scoring.service.ts b/backend/src/referentiels/services/referentiels-scoring.service.ts index 1165903de1..c32a2c09aa 100644 --- a/backend/src/referentiels/services/referentiels-scoring.service.ts +++ b/backend/src/referentiels/services/referentiels-scoring.service.ts @@ -1,3 +1,7 @@ +import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; +import { PermissionService } from '@/backend/auth/authorizations/permission.service'; +import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; +import { NiveauAcces } from '@/backend/auth/authorizations/roles/niveau-acces.enum'; import { HttpException, Injectable, @@ -20,8 +24,7 @@ import { chunk, isNil } from 'es-toolkit'; import * as _ from 'lodash'; import { DateTime } from 'luxon'; import { AuthenticatedUser } from '../../auth/models/auth.models'; -import { NiveauAcces } from '@/backend/auth/authorizations/roles/niveau-acces.enum'; -import { CollectiviteAvecType } from '../../collectivites/models/identite-collectivite.dto'; +import { CollectiviteAvecType } from '../../collectivites/identite-collectivite.dto'; import CollectivitesService from '../../collectivites/services/collectivites.service'; import DatabaseService from '../../common/services/database.service'; import { getErrorMessage } from '../../common/services/errors.helper'; @@ -76,9 +79,6 @@ import { ScoreJalon } from '../models/score-jalon.enum'; import LabellisationService from './labellisation.service'; import ReferentielsScoringSnapshotsService from './referentiels-scoring-snapshots.service'; import ReferentielsService from './referentiels.service'; -import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; -import { PermissionService } from '@/backend/auth/authorizations/permission.service'; -import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; @Injectable() export default class ReferentielsScoringService { diff --git a/backend/src/referentiels/services/referentiels.service.spec.ts b/backend/src/referentiels/services/referentiels.service.spec.ts index 67b5ffa745..27a463b746 100644 --- a/backend/src/referentiels/services/referentiels.service.spec.ts +++ b/backend/src/referentiels/services/referentiels.service.spec.ts @@ -1,6 +1,6 @@ import { Test } from '@nestjs/testing'; import DatabaseService from '../../common/services/database.service'; -import ConfigurationService from '../../config/configuration.service'; +import ConfigurationService from '../../utils/config/configuration.service'; import ExpressionParserService from '../../personnalisations/services/expression-parser.service'; import SheetService from '../../utils/google-sheets/sheet.service'; import { ActionDefinitionAvecParentType } from '../models/action-definition.table'; From ee318f892eeddb0b2a8ba4549675c68763a1712e Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Mon, 23 Dec 2024 15:39:12 +0100 Subject: [PATCH 27/33] Move configuration module to utils --- backend/src/app.module.ts | 4 ++-- backend/src/auth/auth.module.ts | 8 ++++---- backend/src/auth/guards/auth.guard.ts | 2 +- backend/src/common/common.module.ts | 2 +- backend/src/common/services/database.service.ts | 2 +- .../common/services/mattermost-notification.service.ts | 2 +- backend/src/common/services/supabase.service.ts | 2 +- backend/src/indicateurs/indicateurs.module.ts | 2 +- .../services/trajectoires-spreadsheet.service.ts | 2 +- .../src/indicateurs/services/trajectoires-xlsx.service.ts | 2 +- backend/src/referentiels/referentiels.module.ts | 2 +- .../referentiels/services/referentiels-scoring.service.ts | 2 +- backend/src/referentiels/services/referentiels.service.ts | 2 +- backend/src/{ => utils}/config/configuration.model.ts | 0 backend/src/{ => utils}/config/configuration.module.ts | 0 backend/src/{ => utils}/config/configuration.service.ts | 0 backend/src/{ => utils}/config/configuration.ts | 0 17 files changed, 17 insertions(+), 17 deletions(-) rename backend/src/{ => utils}/config/configuration.model.ts (100%) rename backend/src/{ => utils}/config/configuration.module.ts (100%) rename backend/src/{ => utils}/config/configuration.service.ts (100%) rename backend/src/{ => utils}/config/configuration.ts (100%) diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 9d7ce3c7f2..8885be857d 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -4,12 +4,12 @@ import { SentryModule } from '@sentry/nestjs/setup'; import { AuthModule } from './auth/auth.module'; import { CollectivitesModule } from './collectivites/collectivites.module'; import { CommonModule } from './common/common.module'; -import configuration from './config/configuration'; -import { ConfigurationModule } from './config/configuration.module'; import { IndicateursModule } from './indicateurs/indicateurs.module'; import { PersonnalisationsModule } from './personnalisations/personnalisations.module'; import { FichesActionModule } from './plans/fiches/fiches.module'; import { ReferentielsModule } from './referentiels/referentiels.module'; +import configuration from './utils/config/configuration'; +import { ConfigurationModule } from './utils/config/configuration.module'; import { SheetModule } from './utils/google-sheets/sheet.module'; import { TrpcModule } from './utils/trpc/trpc.module'; import { TrpcRouter } from './utils/trpc/trpc.router'; diff --git a/backend/src/auth/auth.module.ts b/backend/src/auth/auth.module.ts index 110b14009a..7ac720d954 100644 --- a/backend/src/auth/auth.module.ts +++ b/backend/src/auth/auth.module.ts @@ -1,12 +1,12 @@ +import { PermissionService } from '@/backend/auth/authorizations/permission.service'; +import { RoleService } from '@/backend/auth/authorizations/roles/role.service'; import { Global, Module } from '@nestjs/common'; import { APP_GUARD } from '@nestjs/core'; import { JwtModule } from '@nestjs/jwt'; import { CollectivitesModule } from '../collectivites/collectivites.module'; import { CommonModule } from '../common/common.module'; -import { ConfigurationModule } from '../config/configuration.module'; +import { ConfigurationModule } from '../utils/config/configuration.module'; import { AuthGuard } from './guards/auth.guard'; -import { PermissionService } from '@/backend/auth/authorizations/permission.service'; -import { RoleService } from '@/backend/auth/authorizations/roles/role.service'; @Global() @Module({ @@ -25,7 +25,7 @@ import { RoleService } from '@/backend/auth/authorizations/roles/role.service'; useClass: AuthGuard, }, PermissionService, - RoleService + RoleService, ], exports: [PermissionService], }) diff --git a/backend/src/auth/guards/auth.guard.ts b/backend/src/auth/guards/auth.guard.ts index 3ae9e9d25f..3e8762d6ae 100644 --- a/backend/src/auth/guards/auth.guard.ts +++ b/backend/src/auth/guards/auth.guard.ts @@ -9,7 +9,7 @@ import { Reflector } from '@nestjs/core'; import { JwtService } from '@nestjs/jwt'; import { Request } from 'express'; import { getErrorMessage } from '../../common/services/errors.helper'; -import BackendConfigurationService from '../../config/configuration.service'; +import BackendConfigurationService from '../../utils/config/configuration.service'; import { AllowAnonymousAccess } from '../decorators/allow-anonymous-access.decorator'; import { AllowPublicAccess } from '../decorators/allow-public-access.decorator'; import { diff --git a/backend/src/common/common.module.ts b/backend/src/common/common.module.ts index 4a852c82da..48f26a4202 100644 --- a/backend/src/common/common.module.ts +++ b/backend/src/common/common.module.ts @@ -1,5 +1,5 @@ import { Module } from '@nestjs/common'; -import { ConfigurationModule } from '../config/configuration.module'; +import { ConfigurationModule } from '../utils/config/configuration.module'; import { VersionController } from '../utils/version/version.controller'; import DatabaseService from './services/database.service'; import MattermostNotificationService from './services/mattermost-notification.service'; diff --git a/backend/src/common/services/database.service.ts b/backend/src/common/services/database.service.ts index 591ba41e59..75b140e1b7 100644 --- a/backend/src/common/services/database.service.ts +++ b/backend/src/common/services/database.service.ts @@ -3,7 +3,7 @@ import { Injectable, Logger, OnApplicationShutdown } from '@nestjs/common'; import { sql } from 'drizzle-orm'; import { drizzle } from 'drizzle-orm/postgres-js'; import { default as postgres } from 'postgres'; -import ConfigurationService from '../../config/configuration.service'; +import ConfigurationService from '../../utils/config/configuration.service'; @Injectable() export default class DatabaseService implements OnApplicationShutdown { diff --git a/backend/src/common/services/mattermost-notification.service.ts b/backend/src/common/services/mattermost-notification.service.ts index 8456a4b338..ff5e46aa58 100644 --- a/backend/src/common/services/mattermost-notification.service.ts +++ b/backend/src/common/services/mattermost-notification.service.ts @@ -1,5 +1,5 @@ import { Injectable, Logger } from '@nestjs/common'; -import ConfigurationService from '../../config/configuration.service'; +import ConfigurationService from '../../utils/config/configuration.service'; import { getErrorMessage } from './errors.helper'; @Injectable() diff --git a/backend/src/common/services/supabase.service.ts b/backend/src/common/services/supabase.service.ts index 36fb13a7e9..80ea8eb6aa 100644 --- a/backend/src/common/services/supabase.service.ts +++ b/backend/src/common/services/supabase.service.ts @@ -1,6 +1,6 @@ import { Injectable, Logger } from '@nestjs/common'; import { createClient } from '@supabase/supabase-js'; -import ConfigurationService from '../../config/configuration.service'; +import ConfigurationService from '../../utils/config/configuration.service'; @Injectable() export default class SupabaseService { diff --git a/backend/src/indicateurs/indicateurs.module.ts b/backend/src/indicateurs/indicateurs.module.ts index ffe839fe6a..1eedd76e11 100644 --- a/backend/src/indicateurs/indicateurs.module.ts +++ b/backend/src/indicateurs/indicateurs.module.ts @@ -2,7 +2,7 @@ import { Module } from '@nestjs/common'; import { AuthModule } from '../auth/auth.module'; import { CollectivitesModule } from '../collectivites/collectivites.module'; import { CommonModule } from '../common/common.module'; -import { ConfigurationModule } from '../config/configuration.module'; +import { ConfigurationModule } from '../utils/config/configuration.module'; import { SheetModule } from '../utils/google-sheets/sheet.module'; import { IndicateursController } from './controllers/indicateurs.controller'; import { TrajectoiresController } from './controllers/trajectoires.controller'; diff --git a/backend/src/indicateurs/services/trajectoires-spreadsheet.service.ts b/backend/src/indicateurs/services/trajectoires-spreadsheet.service.ts index c1d8d793c3..fae81d1e33 100644 --- a/backend/src/indicateurs/services/trajectoires-spreadsheet.service.ts +++ b/backend/src/indicateurs/services/trajectoires-spreadsheet.service.ts @@ -10,7 +10,7 @@ import slugify from 'slugify'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import GroupementsService from '../../collectivites/services/groupements.service'; import { EpciType } from '../../collectivites/shared/models/epci.table'; -import ConfigurationService from '../../config/configuration.service'; +import ConfigurationService from '../../utils/config/configuration.service'; import SheetService from '../../utils/google-sheets/sheet.service'; import { CalculTrajectoireRequestType, diff --git a/backend/src/indicateurs/services/trajectoires-xlsx.service.ts b/backend/src/indicateurs/services/trajectoires-xlsx.service.ts index e6767fc5be..703fd41903 100644 --- a/backend/src/indicateurs/services/trajectoires-xlsx.service.ts +++ b/backend/src/indicateurs/services/trajectoires-xlsx.service.ts @@ -9,7 +9,7 @@ import { default as XlsxTemplate } from 'xlsx-template'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import { CollectiviteRequestType } from '../../collectivites/collectivite.request'; import { EpciType } from '../../collectivites/shared/models/epci.table'; -import BackendConfigurationService from '../../config/configuration.service'; +import BackendConfigurationService from '../../utils/config/configuration.service'; import SheetService from '../../utils/google-sheets/sheet.service'; import { DonneesCalculTrajectoireARemplirType } from '../models/donnees-calcul-trajectoire-a-remplir.dto'; import { ModeleTrajectoireTelechargementRequestType } from '../models/modele-trajectoire-telechargement.request'; diff --git a/backend/src/referentiels/referentiels.module.ts b/backend/src/referentiels/referentiels.module.ts index 02e7b7d675..9a03f96f22 100644 --- a/backend/src/referentiels/referentiels.module.ts +++ b/backend/src/referentiels/referentiels.module.ts @@ -2,8 +2,8 @@ import { Module } from '@nestjs/common'; import { AuthModule } from '../auth/auth.module'; import { CollectivitesModule } from '../collectivites/collectivites.module'; import { CommonModule } from '../common/common.module'; -import { ConfigurationModule } from '../config/configuration.module'; import { PersonnalisationsModule } from '../personnalisations/personnalisations.module'; +import { ConfigurationModule } from '../utils/config/configuration.module'; import { SheetModule } from '../utils/google-sheets/sheet.module'; import { ComputeScoreRouter } from './compute-score/compute-score.router'; import { ReferentielsScoringController } from './controllers/referentiels-scoring.controller'; diff --git a/backend/src/referentiels/services/referentiels-scoring.service.ts b/backend/src/referentiels/services/referentiels-scoring.service.ts index c32a2c09aa..134800657a 100644 --- a/backend/src/referentiels/services/referentiels-scoring.service.ts +++ b/backend/src/referentiels/services/referentiels-scoring.service.ts @@ -31,10 +31,10 @@ import { getErrorMessage } from '../../common/services/errors.helper'; import MattermostNotificationService from '../../common/services/mattermost-notification.service'; import { roundTo } from '../../common/services/number.helper'; import { sleep } from '../../common/services/sleep.helper'; -import ConfigurationService from '../../config/configuration.service'; import { GetPersonnalitionConsequencesResponseType } from '../../personnalisations/models/get-personnalisation-consequences.response'; import ExpressionParserService from '../../personnalisations/services/expression-parser.service'; import PersonnalisationsService from '../../personnalisations/services/personnalisations-service'; +import ConfigurationService from '../../utils/config/configuration.service'; import { actionCommentaireTable } from '../models/action-commentaire.table'; import { ActionPointScoreType, diff --git a/backend/src/referentiels/services/referentiels.service.ts b/backend/src/referentiels/services/referentiels.service.ts index 4fe42b5c58..cc0b584ca4 100644 --- a/backend/src/referentiels/services/referentiels.service.ts +++ b/backend/src/referentiels/services/referentiels.service.ts @@ -12,7 +12,6 @@ import * as _ from 'lodash'; import * as semver from 'semver'; import DatabaseService from '../../common/services/database.service'; import { getErrorMessage } from '../../common/services/errors.helper'; -import ConfigurationService from '../../config/configuration.service'; import { CreatePersonnalisationRegleType, personnalisationRegleTable, @@ -22,6 +21,7 @@ import { PersonnalisationType, } from '../../personnalisations/models/personnalisation.table'; import ExpressionParserService from '../../personnalisations/services/expression-parser.service'; +import ConfigurationService from '../../utils/config/configuration.service'; import SheetService from '../../utils/google-sheets/sheet.service'; import { actionDefinitionTagTable, diff --git a/backend/src/config/configuration.model.ts b/backend/src/utils/config/configuration.model.ts similarity index 100% rename from backend/src/config/configuration.model.ts rename to backend/src/utils/config/configuration.model.ts diff --git a/backend/src/config/configuration.module.ts b/backend/src/utils/config/configuration.module.ts similarity index 100% rename from backend/src/config/configuration.module.ts rename to backend/src/utils/config/configuration.module.ts diff --git a/backend/src/config/configuration.service.ts b/backend/src/utils/config/configuration.service.ts similarity index 100% rename from backend/src/config/configuration.service.ts rename to backend/src/utils/config/configuration.service.ts diff --git a/backend/src/config/configuration.ts b/backend/src/utils/config/configuration.ts similarity index 100% rename from backend/src/config/configuration.ts rename to backend/src/utils/config/configuration.ts From 03edb730aa160105f0c552d374ed820d6ed5116b Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Mon, 23 Dec 2024 15:51:35 +0100 Subject: [PATCH 28/33] Update document.basetable.ts --- .../src/documents/models/document.basetable.ts | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/backend/src/documents/models/document.basetable.ts b/backend/src/documents/models/document.basetable.ts index fa57e82b7f..b32effdcbc 100644 --- a/backend/src/documents/models/document.basetable.ts +++ b/backend/src/documents/models/document.basetable.ts @@ -1,12 +1,5 @@ -import { TIMESTAMP_OPTIONS } from '@/backend/utils'; -import { - integer, - jsonb, - serial, - text, - timestamp, - uuid, -} from 'drizzle-orm/pg-core'; +import { modifiedAt, modifiedBy } from '@/backend/utils'; +import { integer, jsonb, serial, text } from 'drizzle-orm/pg-core'; import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; export const DocumentBase = { @@ -18,9 +11,7 @@ export const DocumentBase = { url: text('url'), titre: text('titre'), commentaire: text('commentaire'), - modifiedAt: timestamp('modified_at', TIMESTAMP_OPTIONS) - .notNull() - .defaultNow(), - modifiedBy: uuid('modified_by'), // TODO references auth.uid, + modifiedAt, + modifiedBy, lien: jsonb('lien'), }; From efea035b0ce9407a9ca4fe090fa9828a5bf53cab Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Mon, 23 Dec 2024 20:28:04 +0100 Subject: [PATCH 29/33] Move folder panier/ to plans/ --- .../plans/fiches/shared/models/axe.table.ts | 2 +- .../fiche-action-action-impact.table.ts | 2 +- backend/src/plans/paniers/index.ts | 1 + .../models/action-impact-action.table.ts | 7 +++---- .../action-impact-banatic-competence.table.ts | 2 +- .../models/action-impact-categorie.table.ts | 0 .../action-impact-cateorie-fnv.table.ts | 2 +- .../action-impact-effet-attendu.table.ts | 2 +- ...tion-impact-fourchette-budgetaire.table.ts | 0 .../models/action-impact-indicateur.table.ts | 4 ++-- .../models/action-impact-panier.table.ts | 0 .../models/action-impact-partenaire.table.ts | 2 +- .../action-impact-sous-thematique.table.ts | 2 +- .../models/action-impact-statut.table.ts | 0 .../models/action-impact-thematique.table.ts | 2 +- .../models/action-impact-tier.table.ts | 0 .../paniers}/models/action-impact.table.ts | 21 ++++++++++--------- .../models/panier-partenaire.table.ts | 0 .../paniers}/models/panier.table.ts | 2 +- backend/src/shared/index.ts | 2 ++ 20 files changed, 28 insertions(+), 25 deletions(-) create mode 100644 backend/src/plans/paniers/index.ts rename backend/src/{panier => plans/paniers}/models/action-impact-action.table.ts (75%) rename backend/src/{panier => plans/paniers}/models/action-impact-banatic-competence.table.ts (88%) rename backend/src/{panier => plans/paniers}/models/action-impact-categorie.table.ts (100%) rename backend/src/{panier => plans/paniers}/models/action-impact-cateorie-fnv.table.ts (88%) rename backend/src/{panier => plans/paniers}/models/action-impact-effet-attendu.table.ts (90%) rename backend/src/{panier => plans/paniers}/models/action-impact-fourchette-budgetaire.table.ts (100%) rename backend/src/{panier => plans/paniers}/models/action-impact-indicateur.table.ts (88%) rename backend/src/{panier => plans/paniers}/models/action-impact-panier.table.ts (100%) rename backend/src/{panier => plans/paniers}/models/action-impact-partenaire.table.ts (87%) rename backend/src/{panier => plans/paniers}/models/action-impact-sous-thematique.table.ts (90%) rename backend/src/{panier => plans/paniers}/models/action-impact-statut.table.ts (100%) rename backend/src/{panier => plans/paniers}/models/action-impact-thematique.table.ts (90%) rename backend/src/{panier => plans/paniers}/models/action-impact-tier.table.ts (100%) rename backend/src/{panier => plans/paniers}/models/action-impact.table.ts (92%) rename backend/src/{shared => plans/paniers}/models/panier-partenaire.table.ts (100%) rename backend/src/{panier => plans/paniers}/models/panier.table.ts (92%) diff --git a/backend/src/plans/fiches/shared/models/axe.table.ts b/backend/src/plans/fiches/shared/models/axe.table.ts index 6d2b301808..afa3fd2455 100644 --- a/backend/src/plans/fiches/shared/models/axe.table.ts +++ b/backend/src/plans/fiches/shared/models/axe.table.ts @@ -1,3 +1,4 @@ +import { panierTable } from '@/backend/plans/paniers/models/panier.table'; import { createdAt, modifiedAt, modifiedBy } from '@/backend/utils'; import { InferInsertModel } from 'drizzle-orm'; import { @@ -10,7 +11,6 @@ import { import { createSelectSchema } from 'drizzle-zod'; import z from 'zod'; import { collectiviteTable } from '../../../../collectivites/shared/models/collectivite.table'; -import { panierTable } from '../../../../panier/models/panier.table'; import { planActionTypeSchema, planActionTypeTable, diff --git a/backend/src/plans/fiches/shared/models/fiche-action-action-impact.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-action-impact.table.ts index 7175041e34..c7bb460249 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action-action-impact.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-action-impact.table.ts @@ -1,5 +1,5 @@ +import { actionImpactTable } from '@/backend/plans/paniers'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { actionImpactTable } from '../../../../panier/models/action-impact.table'; import { ficheActionTable } from './fiche-action.table'; export const ficheActionActionImpactTable = pgTable( diff --git a/backend/src/plans/paniers/index.ts b/backend/src/plans/paniers/index.ts new file mode 100644 index 0000000000..664af55c3e --- /dev/null +++ b/backend/src/plans/paniers/index.ts @@ -0,0 +1 @@ +export * from './models/action-impact.table'; diff --git a/backend/src/panier/models/action-impact-action.table.ts b/backend/src/plans/paniers/models/action-impact-action.table.ts similarity index 75% rename from backend/src/panier/models/action-impact-action.table.ts rename to backend/src/plans/paniers/models/action-impact-action.table.ts index 6cb1162297..3707cb74aa 100644 --- a/backend/src/panier/models/action-impact-action.table.ts +++ b/backend/src/plans/paniers/models/action-impact-action.table.ts @@ -1,8 +1,7 @@ -import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { actionRelationTable } from '../../referentiels/models/action-relation.table'; -import { actionImpactTable } from './action-impact.table'; -import { text } from 'drizzle-orm/pg-core'; +import { actionRelationTable } from '@/backend/referentiels'; import { InferSelectModel } from 'drizzle-orm'; +import { integer, pgTable, primaryKey, text } from 'drizzle-orm/pg-core'; +import { actionImpactTable } from './action-impact.table'; export const actionImpactActionTable = pgTable( 'action_impact_action', diff --git a/backend/src/panier/models/action-impact-banatic-competence.table.ts b/backend/src/plans/paniers/models/action-impact-banatic-competence.table.ts similarity index 88% rename from backend/src/panier/models/action-impact-banatic-competence.table.ts rename to backend/src/plans/paniers/models/action-impact-banatic-competence.table.ts index 706e0d155f..c2107dfd8c 100644 --- a/backend/src/panier/models/action-impact-banatic-competence.table.ts +++ b/backend/src/plans/paniers/models/action-impact-banatic-competence.table.ts @@ -1,6 +1,6 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { banaticCompetenceTable } from '../../shared/models/banatic-competence.table'; import { actionImpactTable } from './action-impact.table'; +import { banaticCompetenceTable } from '@/backend/shared'; export const actionImpactBanaticCompetenceTable = pgTable( 'action_impact_banatic_competence', diff --git a/backend/src/panier/models/action-impact-categorie.table.ts b/backend/src/plans/paniers/models/action-impact-categorie.table.ts similarity index 100% rename from backend/src/panier/models/action-impact-categorie.table.ts rename to backend/src/plans/paniers/models/action-impact-categorie.table.ts diff --git a/backend/src/panier/models/action-impact-cateorie-fnv.table.ts b/backend/src/plans/paniers/models/action-impact-cateorie-fnv.table.ts similarity index 88% rename from backend/src/panier/models/action-impact-cateorie-fnv.table.ts rename to backend/src/plans/paniers/models/action-impact-cateorie-fnv.table.ts index e86f124955..1b63e5d984 100644 --- a/backend/src/panier/models/action-impact-cateorie-fnv.table.ts +++ b/backend/src/plans/paniers/models/action-impact-cateorie-fnv.table.ts @@ -1,5 +1,5 @@ +import { categorieFNVTable } from '@/backend/shared'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { categorieFNVTable } from '../../shared/models/categorie-fnv.table'; import { actionImpactTable } from './action-impact.table'; export const actionImpactCategorieFNVTable = pgTable( diff --git a/backend/src/panier/models/action-impact-effet-attendu.table.ts b/backend/src/plans/paniers/models/action-impact-effet-attendu.table.ts similarity index 90% rename from backend/src/panier/models/action-impact-effet-attendu.table.ts rename to backend/src/plans/paniers/models/action-impact-effet-attendu.table.ts index 6fa9b9d30f..0b7dfb1307 100644 --- a/backend/src/panier/models/action-impact-effet-attendu.table.ts +++ b/backend/src/plans/paniers/models/action-impact-effet-attendu.table.ts @@ -1,6 +1,6 @@ +import { effetAttenduTable } from '@/backend/shared'; import { InferSelectModel } from 'drizzle-orm'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { effetAttenduTable } from '../../shared/models/effet-attendu.table'; import { actionImpactTable } from './action-impact.table'; export const actionImpactEffetAttenduTable = pgTable( diff --git a/backend/src/panier/models/action-impact-fourchette-budgetaire.table.ts b/backend/src/plans/paniers/models/action-impact-fourchette-budgetaire.table.ts similarity index 100% rename from backend/src/panier/models/action-impact-fourchette-budgetaire.table.ts rename to backend/src/plans/paniers/models/action-impact-fourchette-budgetaire.table.ts diff --git a/backend/src/panier/models/action-impact-indicateur.table.ts b/backend/src/plans/paniers/models/action-impact-indicateur.table.ts similarity index 88% rename from backend/src/panier/models/action-impact-indicateur.table.ts rename to backend/src/plans/paniers/models/action-impact-indicateur.table.ts index fc44a9a54d..137f626656 100644 --- a/backend/src/panier/models/action-impact-indicateur.table.ts +++ b/backend/src/plans/paniers/models/action-impact-indicateur.table.ts @@ -1,7 +1,7 @@ +import { indicateurDefinitionTable } from '@/backend/indicateurs'; +import { InferSelectModel } from 'drizzle-orm'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { actionImpactTable } from './action-impact.table'; -import { indicateurDefinitionTable } from '../../indicateurs/models/indicateur-definition.table'; -import { InferSelectModel } from 'drizzle-orm'; export const actionImpactIndicateurTable = pgTable( 'action_impact_indicateur', diff --git a/backend/src/panier/models/action-impact-panier.table.ts b/backend/src/plans/paniers/models/action-impact-panier.table.ts similarity index 100% rename from backend/src/panier/models/action-impact-panier.table.ts rename to backend/src/plans/paniers/models/action-impact-panier.table.ts diff --git a/backend/src/panier/models/action-impact-partenaire.table.ts b/backend/src/plans/paniers/models/action-impact-partenaire.table.ts similarity index 87% rename from backend/src/panier/models/action-impact-partenaire.table.ts rename to backend/src/plans/paniers/models/action-impact-partenaire.table.ts index 34aad9298c..781de1198c 100644 --- a/backend/src/panier/models/action-impact-partenaire.table.ts +++ b/backend/src/plans/paniers/models/action-impact-partenaire.table.ts @@ -1,6 +1,6 @@ import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { panierPartenaireTable } from '../../shared/models/panier-partenaire.table'; import { actionImpactTable } from './action-impact.table'; +import { panierPartenaireTable } from './panier-partenaire.table'; export const actionImpactPartenaireTable = pgTable( 'action_impact_partenaire', diff --git a/backend/src/panier/models/action-impact-sous-thematique.table.ts b/backend/src/plans/paniers/models/action-impact-sous-thematique.table.ts similarity index 90% rename from backend/src/panier/models/action-impact-sous-thematique.table.ts rename to backend/src/plans/paniers/models/action-impact-sous-thematique.table.ts index 71d3ceddbc..c6397d2a63 100644 --- a/backend/src/panier/models/action-impact-sous-thematique.table.ts +++ b/backend/src/plans/paniers/models/action-impact-sous-thematique.table.ts @@ -1,6 +1,6 @@ +import { sousThematiqueTable } from '@/backend/shared'; import { InferSelectModel } from 'drizzle-orm'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { sousThematiqueTable } from '../../shared/models/sous-thematique.table'; import { actionImpactTable } from './action-impact.table'; export const actionImpactSousThematiqueTable = pgTable( diff --git a/backend/src/panier/models/action-impact-statut.table.ts b/backend/src/plans/paniers/models/action-impact-statut.table.ts similarity index 100% rename from backend/src/panier/models/action-impact-statut.table.ts rename to backend/src/plans/paniers/models/action-impact-statut.table.ts diff --git a/backend/src/panier/models/action-impact-thematique.table.ts b/backend/src/plans/paniers/models/action-impact-thematique.table.ts similarity index 90% rename from backend/src/panier/models/action-impact-thematique.table.ts rename to backend/src/plans/paniers/models/action-impact-thematique.table.ts index d2a0c061e8..c900e66eb8 100644 --- a/backend/src/panier/models/action-impact-thematique.table.ts +++ b/backend/src/plans/paniers/models/action-impact-thematique.table.ts @@ -1,6 +1,6 @@ +import { thematiqueTable } from '@/backend/shared'; import { InferSelectModel } from 'drizzle-orm'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; -import { thematiqueTable } from '../../shared/models/thematique.table'; import { actionImpactTable } from './action-impact.table'; export const actionImpactThematiqueTable = pgTable( diff --git a/backend/src/panier/models/action-impact-tier.table.ts b/backend/src/plans/paniers/models/action-impact-tier.table.ts similarity index 100% rename from backend/src/panier/models/action-impact-tier.table.ts rename to backend/src/plans/paniers/models/action-impact-tier.table.ts diff --git a/backend/src/panier/models/action-impact.table.ts b/backend/src/plans/paniers/models/action-impact.table.ts similarity index 92% rename from backend/src/panier/models/action-impact.table.ts rename to backend/src/plans/paniers/models/action-impact.table.ts index 33a8996d69..285c796260 100644 --- a/backend/src/panier/models/action-impact.table.ts +++ b/backend/src/plans/paniers/models/action-impact.table.ts @@ -1,3 +1,14 @@ +import { + lienSchema, + lienType, +} from '@/backend/documents/models/document-lien.dto'; +import { + categorieFNVSchema, + CategorieFNVType, + tempsDeMiseEnOeuvreTable, + thematiqueSchema, + ThematiqueType, +} from '@/backend/shared'; import { createZodDto } from '@anatine/zod-nestjs'; import { InferSelectModel } from 'drizzle-orm'; import { @@ -10,16 +21,6 @@ import { } from 'drizzle-orm/pg-core'; import { createSelectSchema } from 'drizzle-zod'; import { z } from 'zod'; -import { lienSchema, lienType } from '../../documents/models/document-lien.dto'; -import { - categorieFNVSchema, - CategorieFNVType, -} from '../../shared/models/categorie-fnv.table'; -import { tempsDeMiseEnOeuvreTable } from '../../shared/models/temps-de-mise-en-oeuvre.table'; -import { - thematiqueSchema, - ThematiqueType, -} from '../../shared/models/thematique.table'; import { actionImpactFourchetteBudgetaireTable } from './action-impact-fourchette-budgetaire.table'; import { actionImpactTierTable } from './action-impact-tier.table'; diff --git a/backend/src/shared/models/panier-partenaire.table.ts b/backend/src/plans/paniers/models/panier-partenaire.table.ts similarity index 100% rename from backend/src/shared/models/panier-partenaire.table.ts rename to backend/src/plans/paniers/models/panier-partenaire.table.ts diff --git a/backend/src/panier/models/panier.table.ts b/backend/src/plans/paniers/models/panier.table.ts similarity index 92% rename from backend/src/panier/models/panier.table.ts rename to backend/src/plans/paniers/models/panier.table.ts index c3e28f1daa..a472cbfc85 100644 --- a/backend/src/panier/models/panier.table.ts +++ b/backend/src/plans/paniers/models/panier.table.ts @@ -1,3 +1,4 @@ +import { collectiviteTable } from '@/backend/collectivites'; import { InferSelectModel, SQL, sql } from 'drizzle-orm'; import { boolean, @@ -7,7 +8,6 @@ import { uuid, } from 'drizzle-orm/pg-core'; import { createSelectSchema } from 'drizzle-zod'; -import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; export const panierTable = pgTable('panier', { id: uuid('id').primaryKey().defaultRandom(), diff --git a/backend/src/shared/index.ts b/backend/src/shared/index.ts index 3363d19e75..db7a99858d 100644 --- a/backend/src/shared/index.ts +++ b/backend/src/shared/index.ts @@ -1,3 +1,5 @@ +export * from './models/banatic-competence.table'; +export * from './models/categorie-fnv.table'; export * from './models/effet-attendu.table'; export * from './models/sous-thematique.table'; export * from './models/temps-de-mise-en-oeuvre.table'; From b64717a21c8632b22bec13550dde12b7a5e4d3ad Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Tue, 24 Dec 2024 12:17:13 +0100 Subject: [PATCH 30/33] Move common/* to utils/ --- .gitignore | 2 +- backend/src/app.module.ts | 7 +++++-- backend/src/auth/auth.module.ts | 4 ---- .../permission.service.e2e-spec.ts | 18 +++++++++--------- .../auth/authorizations/roles/role.service.ts | 15 +++++++-------- backend/src/auth/guards/auth.guard.ts | 2 +- .../src/collectivites/collectivites.module.ts | 3 +-- .../list-categories.service.ts | 2 +- .../membres/membres.router.e2e-spec.ts | 2 +- .../collectivites/membres/membres.service.ts | 2 +- .../collectivites/personnes.router.e2e-spec.ts | 4 ++-- .../services/collectivites.service.ts | 2 +- .../services/groupements.service.ts | 2 +- .../services/personnes.service.ts | 2 +- backend/src/common/common.module.ts | 14 -------------- backend/src/common/index.ts | 1 - .../common/services/optionalBooleanMapper.ts | 7 ------- .../src/documents/services/document.service.ts | 2 +- .../indicateur-filtre.service.spec.ts | 8 ++++---- .../indicateur-filtre.service.ts | 2 +- backend/src/indicateurs/indicateurs.module.ts | 10 +--------- .../services/export-indicateurs.service.ts | 2 +- .../services/indicateur-sources.service.ts | 2 +- .../services/indicateurs.service.spec.ts | 5 ++--- .../services/indicateurs.service.ts | 2 +- backend/src/main.ts | 8 ++++---- .../personnalisations.module.ts | 3 +-- .../services/personnalisations-service.ts | 2 +- backend/src/plans/fiches/axe.service.ts | 2 +- .../bulk-edit/bulk-edit.router.e2e-spec.ts | 2 +- .../fiches/bulk-edit/bulk-edit.service.ts | 2 +- .../count-by-statut/count-by-statut.service.ts | 4 ++-- .../fiche-action-etape.router.e2e-spec.ts | 3 +-- .../fiche-action-etape.service.ts | 2 +- .../fiches/fiche-action-update.e2e-spec.ts | 2 +- backend/src/plans/fiches/fiche.service.ts | 2 +- .../fiches/fiches-action-update.service.ts | 4 ++-- backend/src/plans/fiches/fiches.module.ts | 3 +-- .../shared/fetch-fiches-filter.request.ts | 2 +- .../plans/fiches/shared/models/axe.table.ts | 2 +- .../referentiels-scoring.e2e-spec.ts | 2 +- .../src/referentiels/referentiels.module.ts | 4 ---- .../services/labellisation.service.ts | 2 +- .../referentiels-scoring-snapshots.service.ts | 12 ++++++------ .../referentiels-scoring.service.spec.ts | 6 +++--- .../services/referentiels-scoring.service.ts | 10 +++++----- .../services/referentiels.service.spec.ts | 4 ++-- .../services/referentiels.service.ts | 4 ++-- .../update-action-statut.service.ts | 12 ++++++------ .../src/utils/config/configuration.module.ts | 3 ++- .../{drizzle => database}/conflict.utils.ts | 0 backend/src/utils/database/database.module.ts | 10 ++++++++++ .../database}/database.service.ts | 4 ++-- .../database}/supabase.service.ts | 2 +- .../excel/excel.utils.ts} | 0 .../google-sheets}/gcloud.helper.ts | 13 ++++++------- .../src/utils/google-sheets/sheet.service.ts | 6 +++--- backend/src/utils/index.ts | 1 + .../mattermost-notification.service.ts | 4 ++-- .../models => utils}/modified-since.enum.ts | 0 .../nest}/all-exceptions.filter.ts | 4 ++-- .../nest/errors.utils.ts} | 0 .../nest}/http-error.response.ts | 0 .../services => utils}/number.helper.spec.ts | 0 .../services => utils}/number.helper.ts | 0 .../postgresql-error-codes.enum.ts | 0 .../sentry.service.ts => utils/sentry-init.ts} | 0 .../sleep.helper.ts => utils/sleep.utils.ts} | 0 backend/src/utils/trpc/trpc.router.ts | 2 +- backend/src/utils/utils.module.ts | 11 +++++++++++ .../zod.helper.ts => utils/zod.utils.ts} | 0 backend/test/app-utils.ts | 2 +- 72 files changed, 132 insertions(+), 151 deletions(-) delete mode 100644 backend/src/common/common.module.ts delete mode 100644 backend/src/common/index.ts delete mode 100644 backend/src/common/services/optionalBooleanMapper.ts rename backend/src/utils/{drizzle => database}/conflict.utils.ts (100%) create mode 100644 backend/src/utils/database/database.module.ts rename backend/src/{common/services => utils/database}/database.service.ts (93%) rename backend/src/{common/services => utils/database}/supabase.service.ts (88%) rename backend/src/{common/services/xlsx.helper.ts => utils/excel/excel.utils.ts} (100%) rename backend/src/{common/services => utils/google-sheets}/gcloud.helper.ts (81%) rename backend/src/{common/services => utils}/mattermost-notification.service.ts (91%) rename backend/src/{common/models => utils}/modified-since.enum.ts (100%) rename backend/src/{common/filters => utils/nest}/all-exceptions.filter.ts (92%) rename backend/src/{common/services/errors.helper.ts => utils/nest/errors.utils.ts} (100%) rename backend/src/{common/models => utils/nest}/http-error.response.ts (100%) rename backend/src/{common/services => utils}/number.helper.spec.ts (100%) rename backend/src/{common/services => utils}/number.helper.ts (100%) rename backend/src/{common/models => utils}/postgresql-error-codes.enum.ts (100%) rename backend/src/{common/services/sentry.service.ts => utils/sentry-init.ts} (100%) rename backend/src/{common/services/sleep.helper.ts => utils/sleep.utils.ts} (100%) create mode 100644 backend/src/utils/utils.module.ts rename backend/src/{common/services/zod.helper.ts => utils/zod.utils.ts} (100%) diff --git a/.gitignore b/.gitignore index 74e53c1044..cece4bc63a 100644 --- a/.gitignore +++ b/.gitignore @@ -61,4 +61,4 @@ storybook-static **/package.json # gcloud credentials -backend/src/common/services/keyfile.json +keyfile.json diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 8885be857d..f45b3df0fc 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -3,16 +3,17 @@ import { ConfigModule } from '@nestjs/config'; import { SentryModule } from '@sentry/nestjs/setup'; import { AuthModule } from './auth/auth.module'; import { CollectivitesModule } from './collectivites/collectivites.module'; -import { CommonModule } from './common/common.module'; import { IndicateursModule } from './indicateurs/indicateurs.module'; import { PersonnalisationsModule } from './personnalisations/personnalisations.module'; import { FichesActionModule } from './plans/fiches/fiches.module'; import { ReferentielsModule } from './referentiels/referentiels.module'; import configuration from './utils/config/configuration'; import { ConfigurationModule } from './utils/config/configuration.module'; +import { DatabaseModule } from './utils/database/database.module'; import { SheetModule } from './utils/google-sheets/sheet.module'; import { TrpcModule } from './utils/trpc/trpc.module'; import { TrpcRouter } from './utils/trpc/trpc.router'; +import { UtilsModule } from './utils/utils.module'; @Module({ imports: [ @@ -23,7 +24,9 @@ import { TrpcRouter } from './utils/trpc/trpc.router'; load: [configuration], }), ConfigurationModule, - CommonModule, + // Test without + UtilsModule, + DatabaseModule, TrpcModule, SheetModule, CollectivitesModule, diff --git a/backend/src/auth/auth.module.ts b/backend/src/auth/auth.module.ts index 7ac720d954..bfe825c7de 100644 --- a/backend/src/auth/auth.module.ts +++ b/backend/src/auth/auth.module.ts @@ -4,8 +4,6 @@ import { Global, Module } from '@nestjs/common'; import { APP_GUARD } from '@nestjs/core'; import { JwtModule } from '@nestjs/jwt'; import { CollectivitesModule } from '../collectivites/collectivites.module'; -import { CommonModule } from '../common/common.module'; -import { ConfigurationModule } from '../utils/config/configuration.module'; import { AuthGuard } from './guards/auth.guard'; @Global() @@ -15,8 +13,6 @@ import { AuthGuard } from './guards/auth.guard'; global: true, secret: process.env.SUPABASE_JWT_SECRET, }), - ConfigurationModule, - CommonModule, CollectivitesModule, ], providers: [ diff --git a/backend/src/auth/authorizations/permission.service.e2e-spec.ts b/backend/src/auth/authorizations/permission.service.e2e-spec.ts index 7b3f6c9241..b470c89093 100644 --- a/backend/src/auth/authorizations/permission.service.e2e-spec.ts +++ b/backend/src/auth/authorizations/permission.service.e2e-spec.ts @@ -1,20 +1,20 @@ +import { dcpTable } from '@/backend/auth'; +import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; +import { PermissionService } from '@/backend/auth/authorizations/permission.service'; +import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; +import { utilisateurSupportTable } from '@/backend/auth/authorizations/roles/utilisateur-support.table'; +import { utilisateurVerifieTable } from '@/backend/auth/authorizations/roles/utilisateur-verifie.table'; +import { AuthenticatedUser } from '@/backend/auth/models/auth.models'; +import { collectiviteTable } from '@/backend/collectivites'; import { getAuthUser, getTestApp, getTestDatabase, YOULOU_DOUDOU, } from '@/backend/test'; +import { DatabaseService } from '@/backend/utils'; import { INestApplication } from '@nestjs/common'; -import { PermissionService } from '@/backend/auth/authorizations/permission.service'; -import { AuthenticatedUser } from '@/backend/auth/models/auth.models'; -import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; -import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; -import DatabaseService from '../../common/services/database.service'; import { eq } from 'drizzle-orm'; -import { utilisateurSupportTable } from '@/backend/auth/authorizations/roles/utilisateur-support.table'; -import { utilisateurVerifieTable } from '@/backend/auth/authorizations/roles/utilisateur-verifie.table'; -import { dcpTable } from '@/backend/auth'; -import { collectiviteTable } from '@/backend/collectivites'; describe('Gestion des droits', () => { let app: INestApplication; diff --git a/backend/src/auth/authorizations/roles/role.service.ts b/backend/src/auth/authorizations/roles/role.service.ts index 9d68fbb712..a445a362a0 100644 --- a/backend/src/auth/authorizations/roles/role.service.ts +++ b/backend/src/auth/authorizations/roles/role.service.ts @@ -1,18 +1,17 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { and, eq, sql } from 'drizzle-orm'; -import DatabaseService from '../../../common/services/database.service'; -import { AuthRole, AuthUser } from '../../models/auth.models'; import { + dcpTable, utilisateurDroitTable, UtilisateurDroitType, } from '@/backend/auth'; +import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; +import { Role } from '@/backend/auth/authorizations/roles/role.enum'; +import { DatabaseService } from '@/backend/utils'; +import { Injectable, Logger } from '@nestjs/common'; +import { and, eq, sql } from 'drizzle-orm'; +import { AuthRole, AuthUser } from '../../models/auth.models'; import { NiveauAcces } from './niveau-acces.enum'; import { utilisateurSupportTable } from './utilisateur-support.table'; import { utilisateurVerifieTable } from './utilisateur-verifie.table'; -import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; -import { Role } from '@/backend/auth/authorizations/roles/role.enum'; -import { dcpTable } from '@/backend/auth'; - @Injectable() export class RoleService { diff --git a/backend/src/auth/guards/auth.guard.ts b/backend/src/auth/guards/auth.guard.ts index 3e8762d6ae..8141eea06b 100644 --- a/backend/src/auth/guards/auth.guard.ts +++ b/backend/src/auth/guards/auth.guard.ts @@ -8,8 +8,8 @@ import { import { Reflector } from '@nestjs/core'; import { JwtService } from '@nestjs/jwt'; import { Request } from 'express'; -import { getErrorMessage } from '../../common/services/errors.helper'; import BackendConfigurationService from '../../utils/config/configuration.service'; +import { getErrorMessage } from '../../utils/nest/errors.utils'; import { AllowAnonymousAccess } from '../decorators/allow-anonymous-access.decorator'; import { AllowPublicAccess } from '../decorators/allow-public-access.decorator'; import { diff --git a/backend/src/collectivites/collectivites.module.ts b/backend/src/collectivites/collectivites.module.ts index 96b926c5a0..10223c180b 100644 --- a/backend/src/collectivites/collectivites.module.ts +++ b/backend/src/collectivites/collectivites.module.ts @@ -1,5 +1,4 @@ import { Module } from '@nestjs/common'; -import { CommonModule } from '../common/common.module'; import { CollectiviteController } from './collectivite.controller'; import { ListCategoriesRouter } from './handle-categories/list-categories.router'; import ListCategoriesService from './handle-categories/list-categories.service'; @@ -11,7 +10,7 @@ import GroupementsService from './services/groupements.service'; import { PersonnesService } from './services/personnes.service'; @Module({ - imports: [CommonModule], + imports: [], providers: [ CollectivitesService, CollectiviteMembresService, diff --git a/backend/src/collectivites/handle-categories/list-categories.service.ts b/backend/src/collectivites/handle-categories/list-categories.service.ts index 0c146b6826..29a2c29387 100644 --- a/backend/src/collectivites/handle-categories/list-categories.service.ts +++ b/backend/src/collectivites/handle-categories/list-categories.service.ts @@ -5,7 +5,7 @@ import CollectivitesService from '@/backend/collectivites/services/collectivites import { Injectable, Logger } from '@nestjs/common'; import { and, eq, inArray, isNull, or } from 'drizzle-orm'; import { AuthenticatedUser } from '../../auth/models/auth.models'; -import DatabaseService from '../../common/services/database.service'; +import { DatabaseService } from '../../utils/database/database.service'; import { categorieTagTable } from '../shared/models/categorie-tag.table'; import { groupementCollectiviteTable } from '../shared/models/groupement-collectivite.table'; import { Tag } from '../shared/models/tag.table-base'; diff --git a/backend/src/collectivites/membres/membres.router.e2e-spec.ts b/backend/src/collectivites/membres/membres.router.e2e-spec.ts index e8859e5a88..093f2a0048 100644 --- a/backend/src/collectivites/membres/membres.router.e2e-spec.ts +++ b/backend/src/collectivites/membres/membres.router.e2e-spec.ts @@ -7,7 +7,7 @@ import { getAuthUser } from '../../../test/auth-utils'; import { YOLO_DODO } from '../../../test/test-users.samples'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import { invitationTable } from '../../auth/models/invitation.table'; -import DatabaseService from '../../common/services/database.service'; +import { DatabaseService } from '../../utils/database/database.service'; import { AppRouter, TrpcRouter } from '../../utils/trpc/trpc.router'; import { MembreFonctionEnum } from '../shared/models/membre-fonction.enum'; diff --git a/backend/src/collectivites/membres/membres.service.ts b/backend/src/collectivites/membres/membres.service.ts index 4664c9060d..b761cef753 100644 --- a/backend/src/collectivites/membres/membres.service.ts +++ b/backend/src/collectivites/membres/membres.service.ts @@ -5,7 +5,7 @@ import { and, eq, sql } from 'drizzle-orm'; import { unionAll } from 'drizzle-orm/pg-core'; import z from 'zod'; import { invitationTable } from '../../auth/models/invitation.table'; -import DatabaseService from '../../common/services/database.service'; +import { DatabaseService } from '../../utils/database/database.service'; import { MembreFonction } from '../shared/models/membre-fonction.enum'; import { insertMembreSchema, membreTable } from '../shared/models/membre.table'; diff --git a/backend/src/collectivites/personnes.router.e2e-spec.ts b/backend/src/collectivites/personnes.router.e2e-spec.ts index b6e6b77b60..a3354d6a37 100644 --- a/backend/src/collectivites/personnes.router.e2e-spec.ts +++ b/backend/src/collectivites/personnes.router.e2e-spec.ts @@ -1,3 +1,4 @@ +import { utilisateurDroitTable } from '@/backend/auth/authorizations/roles/private-utilisateur-droit.table'; import { inferProcedureInput } from '@trpc/server'; import { eq } from 'drizzle-orm'; import { @@ -8,8 +9,7 @@ import { import { getAuthUser } from '../../test/auth-utils'; import { YOLO_DODO, YULU_DUDU } from '../../test/test-users.samples'; import { AuthenticatedUser } from '../auth/models/auth.models'; -import { utilisateurDroitTable } from '@/backend/auth/authorizations/roles/private-utilisateur-droit.table'; -import DatabaseService from '../common/services/database.service'; +import { DatabaseService } from '../utils/database/database.service'; import { AppRouter, TrpcRouter } from '../utils/trpc/trpc.router'; type ListRequest = inferProcedureInput< diff --git a/backend/src/collectivites/services/collectivites.service.ts b/backend/src/collectivites/services/collectivites.service.ts index b6f20151b2..35220cefd8 100644 --- a/backend/src/collectivites/services/collectivites.service.ts +++ b/backend/src/collectivites/services/collectivites.service.ts @@ -1,7 +1,7 @@ import { Injectable, Logger, NotFoundException } from '@nestjs/common'; import { aliasedTable, eq, or } from 'drizzle-orm'; import { isNil } from 'es-toolkit'; -import DatabaseService from '../../common/services/database.service'; +import { DatabaseService } from '../../utils/database/database.service'; import { CollectiviteAvecType, CollectivitePopulationTypeEnum, diff --git a/backend/src/collectivites/services/groupements.service.ts b/backend/src/collectivites/services/groupements.service.ts index fa552d0dc3..73297b124a 100644 --- a/backend/src/collectivites/services/groupements.service.ts +++ b/backend/src/collectivites/services/groupements.service.ts @@ -6,7 +6,7 @@ import { NotFoundException, } from '@nestjs/common'; import { eq } from 'drizzle-orm'; -import DatabaseService from '../../common/services/database.service'; +import { DatabaseService } from '../../utils/database/database.service'; import { CreateGroupementCollectiviteType, groupementCollectiviteTable, diff --git a/backend/src/collectivites/services/personnes.service.ts b/backend/src/collectivites/services/personnes.service.ts index f82cead51f..b2ccdbebf1 100644 --- a/backend/src/collectivites/services/personnes.service.ts +++ b/backend/src/collectivites/services/personnes.service.ts @@ -1,6 +1,6 @@ import { dcpTable, utilisateurDroitTable } from '@/backend/auth'; import { personneTagTable } from '@/backend/collectivites/shared/models/personne-tag.table'; -import { DatabaseService } from '@/backend/common'; +import { DatabaseService } from '@/backend/utils'; import { Injectable } from '@nestjs/common'; import { and, eq, sql } from 'drizzle-orm'; import { union } from 'drizzle-orm/pg-core'; diff --git a/backend/src/common/common.module.ts b/backend/src/common/common.module.ts deleted file mode 100644 index 48f26a4202..0000000000 --- a/backend/src/common/common.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Module } from '@nestjs/common'; -import { ConfigurationModule } from '../utils/config/configuration.module'; -import { VersionController } from '../utils/version/version.controller'; -import DatabaseService from './services/database.service'; -import MattermostNotificationService from './services/mattermost-notification.service'; -import SupabaseService from './services/supabase.service'; - -@Module({ - imports: [ConfigurationModule], - providers: [DatabaseService, MattermostNotificationService, SupabaseService], - exports: [DatabaseService, MattermostNotificationService, SupabaseService], - controllers: [VersionController], -}) -export class CommonModule {} diff --git a/backend/src/common/index.ts b/backend/src/common/index.ts deleted file mode 100644 index 35e7573d73..0000000000 --- a/backend/src/common/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as DatabaseService } from './services/database.service'; diff --git a/backend/src/common/services/optionalBooleanMapper.ts b/backend/src/common/services/optionalBooleanMapper.ts deleted file mode 100644 index c70023fb91..0000000000 --- a/backend/src/common/services/optionalBooleanMapper.ts +++ /dev/null @@ -1,7 +0,0 @@ -const optionalBooleanMapper = new Map([ - ['undefined', undefined], - ['true', true], - ['false', false], -]); - -export default optionalBooleanMapper; diff --git a/backend/src/documents/services/document.service.ts b/backend/src/documents/services/document.service.ts index 9eab9bfbf8..39da0d0c15 100644 --- a/backend/src/documents/services/document.service.ts +++ b/backend/src/documents/services/document.service.ts @@ -1,5 +1,5 @@ import { Injectable, Logger } from '@nestjs/common'; -import DatabaseService from '../../common/services/database.service'; +import { DatabaseService } from '../../utils/database/database.service'; import { annexeTable } from '../models/annexe.table'; import { lienType } from '../models/document-lien.dto'; diff --git a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.spec.ts b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.spec.ts index 2545b68566..4d8d6e6898 100644 --- a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.spec.ts +++ b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.spec.ts @@ -1,12 +1,12 @@ +import { PermissionService } from '@/backend/auth/authorizations/permission.service'; import { Test } from '@nestjs/testing'; -import DatabaseService from '../../common/services/database.service'; -import IndicateurFiltreService from './indicateur-filtre.service'; +import CollectivitesService from '../../collectivites/services/collectivites.service'; +import { DatabaseService } from '../../utils/database/database.service'; import { GetFilteredIndicateurRequestQueryOptionType, GetFilteredIndicateursRequestOptionType, } from './get-filtered-indicateurs.request'; -import { PermissionService } from '@/backend/auth/authorizations/permission.service'; -import CollectivitesService from '../../collectivites/services/collectivites.service'; +import IndicateurFiltreService from './indicateur-filtre.service'; describe('IndicateurFiltreService', () => { let indicateurFiltreService: IndicateurFiltreService; diff --git a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts index a54d983b1a..a024c25324 100644 --- a/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts +++ b/backend/src/indicateurs/indicateur-filtre/indicateur-filtre.service.ts @@ -11,8 +11,8 @@ import { AuthenticatedUser } from '../../auth/models/auth.models'; import CollectivitesService from '../../collectivites/services/collectivites.service'; import { categorieTagTable } from '../../collectivites/shared/models/categorie-tag.table'; import { groupementCollectiviteTable } from '../../collectivites/shared/models/groupement-collectivite.table'; -import DatabaseService from '../../common/services/database.service'; import { ficheActionTable } from '../../plans/fiches/shared/models/fiche-action.table'; +import { DatabaseService } from '../../utils/database/database.service'; import { indicateurActionTable } from '../models/indicateur-action.table'; import { indicateurCategorieTagTable } from '../models/indicateur-categorie-tag.table'; import { indicateurCollectiviteTable } from '../models/indicateur-collectivite.table'; diff --git a/backend/src/indicateurs/indicateurs.module.ts b/backend/src/indicateurs/indicateurs.module.ts index 1eedd76e11..ee5d077ad8 100644 --- a/backend/src/indicateurs/indicateurs.module.ts +++ b/backend/src/indicateurs/indicateurs.module.ts @@ -1,8 +1,6 @@ import { Module } from '@nestjs/common'; import { AuthModule } from '../auth/auth.module'; import { CollectivitesModule } from '../collectivites/collectivites.module'; -import { CommonModule } from '../common/common.module'; -import { ConfigurationModule } from '../utils/config/configuration.module'; import { SheetModule } from '../utils/google-sheets/sheet.module'; import { IndicateursController } from './controllers/indicateurs.controller'; import { TrajectoiresController } from './controllers/trajectoires.controller'; @@ -17,13 +15,7 @@ import TrajectoiresSpreadsheetService from './services/trajectoires-spreadsheet. import TrajectoiresXlsxService from './services/trajectoires-xlsx.service'; @Module({ - imports: [ - ConfigurationModule, - CommonModule, - AuthModule, - CollectivitesModule, - SheetModule, - ], + imports: [AuthModule, CollectivitesModule, SheetModule], providers: [ ExportIndicateursService, IndicateurSourcesService, diff --git a/backend/src/indicateurs/services/export-indicateurs.service.ts b/backend/src/indicateurs/services/export-indicateurs.service.ts index 439ca17472..d72896c5d6 100644 --- a/backend/src/indicateurs/services/export-indicateurs.service.ts +++ b/backend/src/indicateurs/services/export-indicateurs.service.ts @@ -15,7 +15,7 @@ import { adjustColumnWidth, BOLD, normalizeWorksheetName, -} from '../../common/services/xlsx.helper'; +} from '../../utils/excel/excel.utils'; import CollectivitesService from '../../collectivites/services/collectivites.service'; import { PermissionService } from '@/backend/auth/authorizations/permission.service'; import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; diff --git a/backend/src/indicateurs/services/indicateur-sources.service.ts b/backend/src/indicateurs/services/indicateur-sources.service.ts index cc13ebac21..1569205084 100644 --- a/backend/src/indicateurs/services/indicateur-sources.service.ts +++ b/backend/src/indicateurs/services/indicateur-sources.service.ts @@ -1,6 +1,6 @@ import { Injectable, Logger } from '@nestjs/common'; import { and, eq } from 'drizzle-orm'; -import DatabaseService from '../../common/services/database.service'; +import { DatabaseService } from '../../utils/database/database.service'; import { CreateIndicateurSourceMetadonneeType, indicateurSourceMetadonneeTable, diff --git a/backend/src/indicateurs/services/indicateurs.service.spec.ts b/backend/src/indicateurs/services/indicateurs.service.spec.ts index 72f5d87182..3b5ddf408d 100644 --- a/backend/src/indicateurs/services/indicateurs.service.spec.ts +++ b/backend/src/indicateurs/services/indicateurs.service.spec.ts @@ -1,7 +1,7 @@ +import { PermissionService } from '@/backend/auth/authorizations/permission.service'; import { Test } from '@nestjs/testing'; import * as _ from 'lodash'; -import { DateTime } from 'luxon'; -import DatabaseService from '../../common/services/database.service'; +import { DatabaseService } from '../../utils/database/database.service'; import { IndicateurDefinitionType } from '../models/indicateur-definition.table'; import { IndicateurSourceMetadonneeType } from '../models/indicateur-source-metadonnee.table'; import { @@ -10,7 +10,6 @@ import { IndicateurValeurAvecMetadonnesDefinition, IndicateurValeurType, } from '../models/indicateur-valeur.table'; -import { PermissionService } from '@/backend/auth/authorizations/permission.service'; import IndicateursService from './indicateurs.service'; describe('IndicateursService', () => { diff --git a/backend/src/indicateurs/services/indicateurs.service.ts b/backend/src/indicateurs/services/indicateurs.service.ts index 3fe533df3b..69f79ce059 100644 --- a/backend/src/indicateurs/services/indicateurs.service.ts +++ b/backend/src/indicateurs/services/indicateurs.service.ts @@ -23,7 +23,7 @@ import { objectToCamel } from 'ts-case-convert'; import { AuthenticatedUser, AuthRole } from '../../auth/models/auth.models'; import { groupementCollectiviteTable } from '../../collectivites/shared/models/groupement-collectivite.table'; import { groupementTable } from '../../collectivites/shared/models/groupement.table'; -import DatabaseService from '../../common/services/database.service'; +import { DatabaseService } from '../../utils/database/database.service'; import { DeleteIndicateursValeursRequestType } from '../models/delete-indicateurs.request'; import { GetIndicateursValeursRequestType } from '../models/get-indicateurs.request'; import { GetIndicateursValeursResponseType } from '../models/get-indicateurs.response'; diff --git a/backend/src/main.ts b/backend/src/main.ts index 19f8a20428..c9b049d939 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -1,13 +1,13 @@ // WARNING: Do this import first -import './common/services/sentry.service'; +import './utils/sentry-init'; // Other imports import { patchNestjsSwagger, ZodValidationPipe } from '@anatine/zod-nestjs'; import { Logger } from '@nestjs/common'; import { HttpAdapterHost, NestFactory } from '@nestjs/core'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; import { AppModule } from './app.module'; -import { AllExceptionsFilter } from './common/filters/all-exceptions.filter'; -import { initApplicationCredentials } from './common/services/gcloud.helper'; +import { initGoogleCloudCredentials } from './utils/google-sheets/gcloud.helper'; +import { AllExceptionsFilter } from './utils/nest/all-exceptions.filter'; import { TrpcRouter } from './utils/trpc/trpc.router'; const logger = new Logger('main'); @@ -15,7 +15,7 @@ const port = process.env.PORT || 8080; logger.log(`Launching NestJS app on port ${port}`); async function bootstrap() { - initApplicationCredentials(); + initGoogleCloudCredentials(); const app = await NestFactory.create(AppModule, { logger: ['fatal', 'error', 'warn', 'log'], // No debug by default diff --git a/backend/src/personnalisations/personnalisations.module.ts b/backend/src/personnalisations/personnalisations.module.ts index 0cbbd90cd5..9f8a90ddf0 100644 --- a/backend/src/personnalisations/personnalisations.module.ts +++ b/backend/src/personnalisations/personnalisations.module.ts @@ -1,13 +1,12 @@ import { Module } from '@nestjs/common'; import { AuthModule } from '../auth/auth.module'; import { CollectivitesModule } from '../collectivites/collectivites.module'; -import { CommonModule } from '../common/common.module'; import { PersonnalisationsController } from './controllers/personnalisations.controller'; import ExpressionParserService from './services/expression-parser.service'; import PersonnalisationsService from './services/personnalisations-service'; @Module({ - imports: [CommonModule, CollectivitesModule, AuthModule], + imports: [CollectivitesModule, AuthModule], providers: [ExpressionParserService, PersonnalisationsService], exports: [ExpressionParserService, PersonnalisationsService], controllers: [PersonnalisationsController], diff --git a/backend/src/personnalisations/services/personnalisations-service.ts b/backend/src/personnalisations/services/personnalisations-service.ts index dde0d47c8d..bc8ac5cdcb 100644 --- a/backend/src/personnalisations/services/personnalisations-service.ts +++ b/backend/src/personnalisations/services/personnalisations-service.ts @@ -9,7 +9,7 @@ import { IdentiteCollectivite, } from '../../collectivites/identite-collectivite.dto'; import CollectivitesService from '../../collectivites/services/collectivites.service'; -import DatabaseService from '../../common/services/database.service'; +import { DatabaseService } from '../../utils/database/database.service'; import { GetPersonnalisationConsequencesRequestType } from '../models/get-personnalisation-consequences.request'; import { GetPersonnalitionConsequencesResponseType } from '../models/get-personnalisation-consequences.response'; import { GetPersonnalisationReglesResponseType } from '../models/get-personnalisation-regles.response'; diff --git a/backend/src/plans/fiches/axe.service.ts b/backend/src/plans/fiches/axe.service.ts index db5d2fe629..b92731e39a 100644 --- a/backend/src/plans/fiches/axe.service.ts +++ b/backend/src/plans/fiches/axe.service.ts @@ -1,5 +1,5 @@ import { Injectable, Logger } from '@nestjs/common'; -import DatabaseService from '../../common/services/database.service'; +import { DatabaseService } from '../../utils/database/database.service'; import { axeTable, CreateAxeType } from './shared/models/axe.table'; import { ficheActionAxeTable } from './shared/models/fiche-action-axe.table'; diff --git a/backend/src/plans/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts b/backend/src/plans/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts index 129b221f81..88607faa83 100644 --- a/backend/src/plans/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts +++ b/backend/src/plans/fiches/bulk-edit/bulk-edit.router.e2e-spec.ts @@ -1,6 +1,5 @@ import { AuthenticatedUser } from '@/backend/auth/models/auth.models'; import { libreTagTable } from '@/backend/collectivites'; -import { DatabaseService } from '@/backend/common'; import { getAuthUser, getTestApp, @@ -9,6 +8,7 @@ import { YOLO_DODO, YULU_DUDU, } from '@/backend/test'; +import { DatabaseService } from '@/backend/utils'; import { AppRouter, TrpcRouter } from '@/backend/utils/trpc/trpc.router'; import { inferProcedureInput } from '@trpc/server'; import { eq, inArray, sql } from 'drizzle-orm'; diff --git a/backend/src/plans/fiches/bulk-edit/bulk-edit.service.ts b/backend/src/plans/fiches/bulk-edit/bulk-edit.service.ts index 1514522943..961d8ddae3 100644 --- a/backend/src/plans/fiches/bulk-edit/bulk-edit.service.ts +++ b/backend/src/plans/fiches/bulk-edit/bulk-edit.service.ts @@ -2,13 +2,13 @@ import { PermissionOperation } from '@/backend/auth/authorizations/permission-op import { PermissionService } from '@/backend/auth/authorizations/permission.service'; import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; import { AuthUser } from '@/backend/auth/models/auth.models'; -import { DatabaseService } from '@/backend/common'; import { ficheActionLibreTagTable, ficheActionTable, ficheSchema, } from '@/backend/plans/fiches'; import { editFicheRequestSchema } from '@/backend/plans/fiches/shared/edit-fiche.request'; +import { DatabaseService } from '@/backend/utils'; import { Injectable } from '@nestjs/common'; import { and, inArray, or } from 'drizzle-orm'; import z from 'zod'; diff --git a/backend/src/plans/fiches/count-by-statut/count-by-statut.service.ts b/backend/src/plans/fiches/count-by-statut/count-by-statut.service.ts index ad71e827dd..f170db3249 100644 --- a/backend/src/plans/fiches/count-by-statut/count-by-statut.service.ts +++ b/backend/src/plans/fiches/count-by-statut/count-by-statut.service.ts @@ -1,5 +1,3 @@ -import { DatabaseService } from '@/backend/common'; -import { getModifiedSinceDate } from '@/backend/common/models/modified-since.enum'; import { axeTable, ficheActionPartenaireTagTable, @@ -9,7 +7,9 @@ import { statutsEnumValues, } from '@/backend/plans/fiches'; import { GetFichesActionFilterRequestType } from '@/backend/plans/fiches/shared/fetch-fiches-filter.request'; +import { DatabaseService } from '@/backend/utils'; import { CountByRecordType } from '@/backend/utils/count-by.dto'; +import { getModifiedSinceDate } from '@/backend/utils/modified-since.enum'; import { Injectable, Logger } from '@nestjs/common'; import { and, diff --git a/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.router.e2e-spec.ts b/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.router.e2e-spec.ts index d3c76b00cd..58f4fd0030 100644 --- a/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.router.e2e-spec.ts +++ b/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.router.e2e-spec.ts @@ -1,12 +1,11 @@ import { AuthenticatedUser } from '@/backend/auth/models/auth.models'; -import { DatabaseService } from '@/backend/common'; import { getAuthUser, getTestApp, getTestDatabase, getTestRouter, } from '@/backend/test'; -import { AppRouter } from '@/backend/utils'; +import { AppRouter, DatabaseService } from '@/backend/utils'; import { TrpcRouter } from '@/backend/utils/trpc/trpc.router'; import { inferProcedureInput } from '@trpc/server'; import { eq } from 'drizzle-orm'; diff --git a/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.service.ts b/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.service.ts index f5c9322757..be9451760b 100644 --- a/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.service.ts +++ b/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.service.ts @@ -1,5 +1,5 @@ import { AuthenticatedUser } from '@/backend/auth/models/auth.models'; -import { DatabaseService } from '@/backend/common'; +import { DatabaseService } from '@/backend/utils'; import { Injectable } from '@nestjs/common'; import { and, eq, gt, gte, lt, lte, sql } from 'drizzle-orm'; import FicheService from '../fiche.service'; diff --git a/backend/src/plans/fiches/fiche-action-update.e2e-spec.ts b/backend/src/plans/fiches/fiche-action-update.e2e-spec.ts index 9b3b8c37a7..3175d29021 100644 --- a/backend/src/plans/fiches/fiche-action-update.e2e-spec.ts +++ b/backend/src/plans/fiches/fiche-action-update.e2e-spec.ts @@ -5,7 +5,7 @@ import { default as request } from 'supertest'; import { describe, expect, it } from 'vitest'; import { getTestApp } from '../../../test/app-utils'; import { getAuthToken } from '../../../test/auth-utils'; -import DatabaseService from '../../common/services/database.service'; +import { DatabaseService } from '../../utils/database/database.service'; import { UpdateFicheActionRequestClass } from './fiches-action.controller'; import { UpdateFicheActionRequestType } from './shared/edit-fiche.request'; import { diff --git a/backend/src/plans/fiches/fiche.service.ts b/backend/src/plans/fiches/fiche.service.ts index c58932491d..4f095a8f0b 100644 --- a/backend/src/plans/fiches/fiche.service.ts +++ b/backend/src/plans/fiches/fiche.service.ts @@ -5,7 +5,7 @@ import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; import { Injectable, Logger } from '@nestjs/common'; import { aliasedTable, desc, eq } from 'drizzle-orm'; import { AuthenticatedUser } from '../../auth/models/auth.models'; -import DatabaseService from '../../common/services/database.service'; +import { DatabaseService } from '../../utils/database/database.service'; import { ficheActionActionImpactTable } from './shared/models/fiche-action-action-impact.table'; import { ficheActionActionTable } from './shared/models/fiche-action-action.table'; import { ficheActionEffetAttenduTable } from './shared/models/fiche-action-effet-attendu.table'; diff --git a/backend/src/plans/fiches/fiches-action-update.service.ts b/backend/src/plans/fiches/fiches-action-update.service.ts index 5aed237bea..ec2e5fa39a 100644 --- a/backend/src/plans/fiches/fiches-action-update.service.ts +++ b/backend/src/plans/fiches/fiches-action-update.service.ts @@ -1,3 +1,4 @@ +import { DatabaseService } from '@/backend/utils'; import { Injectable, Logger, NotFoundException } from '@nestjs/common'; import { and, @@ -13,8 +14,7 @@ import { PgTable, PgTransaction } from 'drizzle-orm/pg-core'; import { PostgresJsQueryResultHKT } from 'drizzle-orm/postgres-js'; import { toCamel } from 'postgres'; import { AuthenticatedUser } from '../../auth/models/auth.models'; -import DatabaseService from '../../common/services/database.service'; -import { buildConflictUpdateColumns } from '../../utils/drizzle/conflict.utils'; +import { buildConflictUpdateColumns } from '../../utils/database/conflict.utils'; import FicheService from './fiche.service'; import { UpdateFicheActionRequestType } from './shared/edit-fiche.request'; import { ficheActionActionTable } from './shared/models/fiche-action-action.table'; diff --git a/backend/src/plans/fiches/fiches.module.ts b/backend/src/plans/fiches/fiches.module.ts index e4afe5c910..038b77f118 100644 --- a/backend/src/plans/fiches/fiches.module.ts +++ b/backend/src/plans/fiches/fiches.module.ts @@ -1,7 +1,6 @@ import { Module } from '@nestjs/common'; import { AuthModule } from '../../auth/auth.module'; import { CollectivitesModule } from '../../collectivites/collectivites.module'; -import { CommonModule } from '../../common/common.module'; import { BulkEditRouter } from './bulk-edit/bulk-edit.router'; import { BulkEditService } from './bulk-edit/bulk-edit.service'; import { CountByStatutRouter } from './count-by-statut/count-by-statut.router'; @@ -13,7 +12,7 @@ import FichesActionUpdateService from './fiches-action-update.service'; import { FichesActionController } from './fiches-action.controller'; @Module({ - imports: [CommonModule, AuthModule, CollectivitesModule], + imports: [AuthModule, CollectivitesModule], providers: [ FicheService, CountByStatutService, diff --git a/backend/src/plans/fiches/shared/fetch-fiches-filter.request.ts b/backend/src/plans/fiches/shared/fetch-fiches-filter.request.ts index b471396d10..004b72354c 100644 --- a/backend/src/plans/fiches/shared/fetch-fiches-filter.request.ts +++ b/backend/src/plans/fiches/shared/fetch-fiches-filter.request.ts @@ -1,4 +1,4 @@ -import { modifiedSinceSchema } from '@/backend/common/models/modified-since.enum'; +import { modifiedSinceSchema } from '@/backend/utils/modified-since.enum'; import { z } from 'zod'; import { ciblesEnumSchema } from './models/fiche-action.table'; diff --git a/backend/src/plans/fiches/shared/models/axe.table.ts b/backend/src/plans/fiches/shared/models/axe.table.ts index afa3fd2455..277fc080af 100644 --- a/backend/src/plans/fiches/shared/models/axe.table.ts +++ b/backend/src/plans/fiches/shared/models/axe.table.ts @@ -1,4 +1,3 @@ -import { panierTable } from '@/backend/plans/paniers/models/panier.table'; import { createdAt, modifiedAt, modifiedBy } from '@/backend/utils'; import { InferInsertModel } from 'drizzle-orm'; import { @@ -11,6 +10,7 @@ import { import { createSelectSchema } from 'drizzle-zod'; import z from 'zod'; import { collectiviteTable } from '../../../../collectivites/shared/models/collectivite.table'; +import { panierTable } from '../../../paniers/models/panier.table'; import { planActionTypeSchema, planActionTypeTable, diff --git a/backend/src/referentiels/controllers/referentiels-scoring.e2e-spec.ts b/backend/src/referentiels/controllers/referentiels-scoring.e2e-spec.ts index 023504f9b9..431f7fe40a 100644 --- a/backend/src/referentiels/controllers/referentiels-scoring.e2e-spec.ts +++ b/backend/src/referentiels/controllers/referentiels-scoring.e2e-spec.ts @@ -3,7 +3,7 @@ import { default as request } from 'supertest'; import { getTestApp } from '../../../test/app-utils'; import { getAuthToken } from '../../../test/auth-utils'; import { getCollectiviteIdBySiren } from '../../../test/collectivites-utils'; -import { HttpErrorResponse } from '../../common/models/http-error.response'; +import { HttpErrorResponse } from '../../utils/nest/http-error.response'; import { ActionScoreType } from '../models/action-score.dto'; import { ActionStatutType } from '../models/action-statut.table'; import { ActionType } from '../models/action-type.enum'; diff --git a/backend/src/referentiels/referentiels.module.ts b/backend/src/referentiels/referentiels.module.ts index 9a03f96f22..7e0f13c2f6 100644 --- a/backend/src/referentiels/referentiels.module.ts +++ b/backend/src/referentiels/referentiels.module.ts @@ -1,9 +1,7 @@ import { Module } from '@nestjs/common'; import { AuthModule } from '../auth/auth.module'; import { CollectivitesModule } from '../collectivites/collectivites.module'; -import { CommonModule } from '../common/common.module'; import { PersonnalisationsModule } from '../personnalisations/personnalisations.module'; -import { ConfigurationModule } from '../utils/config/configuration.module'; import { SheetModule } from '../utils/google-sheets/sheet.module'; import { ComputeScoreRouter } from './compute-score/compute-score.router'; import { ReferentielsScoringController } from './controllers/referentiels-scoring.controller'; @@ -20,8 +18,6 @@ import { UpdateActionStatutService } from './update-action-statut/update-action- imports: [ AuthModule, CollectivitesModule, - CommonModule, - ConfigurationModule, SheetModule, PersonnalisationsModule, ], diff --git a/backend/src/referentiels/services/labellisation.service.ts b/backend/src/referentiels/services/labellisation.service.ts index 89fbfca4fe..c2c7ac7385 100644 --- a/backend/src/referentiels/services/labellisation.service.ts +++ b/backend/src/referentiels/services/labellisation.service.ts @@ -1,6 +1,6 @@ +import { DatabaseService } from '@/backend/utils'; import { Injectable, Logger } from '@nestjs/common'; import { and, desc, eq, isNotNull, SQL, SQLWrapper } from 'drizzle-orm'; -import DatabaseService from '../../common/services/database.service'; import { labellisationAuditTable, LabellisationAuditType, diff --git a/backend/src/referentiels/services/referentiels-scoring-snapshots.service.ts b/backend/src/referentiels/services/referentiels-scoring-snapshots.service.ts index 17bd58b4c5..296f0c3f2d 100644 --- a/backend/src/referentiels/services/referentiels-scoring-snapshots.service.ts +++ b/backend/src/referentiels/services/referentiels-scoring-snapshots.service.ts @@ -1,3 +1,6 @@ +import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; +import { PermissionService } from '@/backend/auth/authorizations/permission.service'; +import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; import { BadRequestException, Injectable, @@ -10,10 +13,10 @@ import { and, asc, eq, inArray, sql } from 'drizzle-orm'; import { DateTime } from 'luxon'; import slugify from 'slugify'; import { AuthRole, AuthUser } from '../../auth/models/auth.models'; -import { PgIntegrityConstraintViolation } from '../../common/models/postgresql-error-codes.enum'; -import DatabaseService from '../../common/services/database.service'; -import { getErrorWithCode } from '../../common/services/errors.helper'; import { GetPersonnalisationReponsesResponseType } from '../../personnalisations/models/get-personnalisation-reponses.response'; +import { DatabaseService } from '../../utils/database/database.service'; +import { getErrorWithCode } from '../../utils/nest/errors.utils'; +import { PgIntegrityConstraintViolation } from '../../utils/postgresql-error-codes.enum'; import { GetReferentielScoresResponseType } from '../models/get-referentiel-scores.response'; import { GetScoreSnapshotsRequestType } from '../models/get-score-snapshots.request'; import { @@ -28,9 +31,6 @@ import { scoreSnapshotTable, ScoreSnapshotType, } from '../models/score-snapshot.table'; -import { PermissionService } from '@/backend/auth/authorizations/permission.service'; -import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; -import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; @Injectable() export default class ReferentielsScoringSnapshotsService { diff --git a/backend/src/referentiels/services/referentiels-scoring.service.spec.ts b/backend/src/referentiels/services/referentiels-scoring.service.spec.ts index c3977d6a14..55fe1a87c4 100644 --- a/backend/src/referentiels/services/referentiels-scoring.service.spec.ts +++ b/backend/src/referentiels/services/referentiels-scoring.service.spec.ts @@ -5,16 +5,16 @@ import { IdentiteCollectivite, } from '../../collectivites/identite-collectivite.dto'; import CollectivitesService from '../../collectivites/services/collectivites.service'; -import DatabaseService from '../../common/services/database.service'; -import MattermostNotificationService from '../../common/services/mattermost-notification.service'; -import { roundTo } from '../../common/services/number.helper'; import { GetPersonnalitionConsequencesResponseType } from '../../personnalisations/models/get-personnalisation-consequences.response'; import { GetPersonnalisationReponsesResponseType } from '../../personnalisations/models/get-personnalisation-reponses.response'; import { caePersonnalisationRegles } from '../../personnalisations/models/samples/cae-personnalisation-regles.sample'; import ExpressionParserService from '../../personnalisations/services/expression-parser.service'; import PersonnalisationsService from '../../personnalisations/services/personnalisations-service'; import ConfigurationService from '../../utils/config/configuration.service'; +import { DatabaseService } from '../../utils/database/database.service'; import SheetService from '../../utils/google-sheets/sheet.service'; +import MattermostNotificationService from '../../utils/mattermost-notification.service'; +import { roundTo } from '../../utils/number.helper'; import { ActionPointScoreType } from '../models/action-point-score.dto'; import { ActionType } from '../models/action-type.enum'; import { GetActionStatutsResponseType } from '../models/get-action-statuts.response'; diff --git a/backend/src/referentiels/services/referentiels-scoring.service.ts b/backend/src/referentiels/services/referentiels-scoring.service.ts index 134800657a..b133e2ae5b 100644 --- a/backend/src/referentiels/services/referentiels-scoring.service.ts +++ b/backend/src/referentiels/services/referentiels-scoring.service.ts @@ -26,15 +26,15 @@ import { DateTime } from 'luxon'; import { AuthenticatedUser } from '../../auth/models/auth.models'; import { CollectiviteAvecType } from '../../collectivites/identite-collectivite.dto'; import CollectivitesService from '../../collectivites/services/collectivites.service'; -import DatabaseService from '../../common/services/database.service'; -import { getErrorMessage } from '../../common/services/errors.helper'; -import MattermostNotificationService from '../../common/services/mattermost-notification.service'; -import { roundTo } from '../../common/services/number.helper'; -import { sleep } from '../../common/services/sleep.helper'; import { GetPersonnalitionConsequencesResponseType } from '../../personnalisations/models/get-personnalisation-consequences.response'; import ExpressionParserService from '../../personnalisations/services/expression-parser.service'; import PersonnalisationsService from '../../personnalisations/services/personnalisations-service'; import ConfigurationService from '../../utils/config/configuration.service'; +import { DatabaseService } from '../../utils/database/database.service'; +import MattermostNotificationService from '../../utils/mattermost-notification.service'; +import { getErrorMessage } from '../../utils/nest/errors.utils'; +import { roundTo } from '../../utils/number.helper'; +import { sleep } from '../../utils/sleep.utils'; import { actionCommentaireTable } from '../models/action-commentaire.table'; import { ActionPointScoreType, diff --git a/backend/src/referentiels/services/referentiels.service.spec.ts b/backend/src/referentiels/services/referentiels.service.spec.ts index 27a463b746..9b13db9e58 100644 --- a/backend/src/referentiels/services/referentiels.service.spec.ts +++ b/backend/src/referentiels/services/referentiels.service.spec.ts @@ -1,7 +1,7 @@ +import { DatabaseService } from '@/backend/utils'; import { Test } from '@nestjs/testing'; -import DatabaseService from '../../common/services/database.service'; -import ConfigurationService from '../../utils/config/configuration.service'; import ExpressionParserService from '../../personnalisations/services/expression-parser.service'; +import ConfigurationService from '../../utils/config/configuration.service'; import SheetService from '../../utils/google-sheets/sheet.service'; import { ActionDefinitionAvecParentType } from '../models/action-definition.table'; import { CreateActionOrigineType } from '../models/action-origine.table'; diff --git a/backend/src/referentiels/services/referentiels.service.ts b/backend/src/referentiels/services/referentiels.service.ts index cc0b584ca4..70dec62743 100644 --- a/backend/src/referentiels/services/referentiels.service.ts +++ b/backend/src/referentiels/services/referentiels.service.ts @@ -1,3 +1,4 @@ +import { DatabaseService } from '@/backend/utils'; import { HttpException, HttpStatus, @@ -10,8 +11,6 @@ import { and, asc, eq, getTableColumns, inArray, sql } from 'drizzle-orm'; import { isNil } from 'es-toolkit'; import * as _ from 'lodash'; import * as semver from 'semver'; -import DatabaseService from '../../common/services/database.service'; -import { getErrorMessage } from '../../common/services/errors.helper'; import { CreatePersonnalisationRegleType, personnalisationRegleTable, @@ -23,6 +22,7 @@ import { import ExpressionParserService from '../../personnalisations/services/expression-parser.service'; import ConfigurationService from '../../utils/config/configuration.service'; import SheetService from '../../utils/google-sheets/sheet.service'; +import { getErrorMessage } from '../../utils/nest/errors.utils'; import { actionDefinitionTagTable, CreateActionDefinitionTagType, diff --git a/backend/src/referentiels/update-action-statut/update-action-statut.service.ts b/backend/src/referentiels/update-action-statut/update-action-statut.service.ts index 3034ae3c37..28a92cd0e0 100644 --- a/backend/src/referentiels/update-action-statut/update-action-statut.service.ts +++ b/backend/src/referentiels/update-action-statut/update-action-statut.service.ts @@ -1,11 +1,14 @@ +import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; +import { PermissionService } from '@/backend/auth/authorizations/permission.service'; +import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; +import { DatabaseService } from '@/backend/utils'; import { Injectable, Logger, NotFoundException } from '@nestjs/common'; import { sql } from 'drizzle-orm'; import { PostgresError } from 'postgres'; import z from 'zod'; import { AuthenticatedUser } from '../../auth/models/auth.models'; -import { PgIntegrityConstraintViolation } from '../../common/models/postgresql-error-codes.enum'; -import DatabaseService from '../../common/services/database.service'; -import { getErrorWithCode } from '../../common/services/errors.helper'; +import { getErrorWithCode } from '../../utils/nest/errors.utils'; +import { PgIntegrityConstraintViolation } from '../../utils/postgresql-error-codes.enum'; import { actionStatutTable, createActionStatutSchema, @@ -14,9 +17,6 @@ import { ComputeScoreMode } from '../models/compute-scores-mode.enum'; import { GetReferentielScoresRequestType } from '../models/get-referentiel-scores.request'; import ReferentielsScoringService from '../services/referentiels-scoring.service'; import ReferentielsService from '../services/referentiels.service'; -import { PermissionService } from '@/backend/auth/authorizations/permission.service'; -import { PermissionOperation } from '@/backend/auth/authorizations/permission-operation.enum'; -import { ResourceType } from '@/backend/auth/authorizations/resource-type.enum'; export const upsertActionStatutRequestSchema = z.object({ actionStatut: createActionStatutSchema, diff --git a/backend/src/utils/config/configuration.module.ts b/backend/src/utils/config/configuration.module.ts index f6a34547f9..440337dc0e 100644 --- a/backend/src/utils/config/configuration.module.ts +++ b/backend/src/utils/config/configuration.module.ts @@ -1,7 +1,8 @@ -import { Module } from '@nestjs/common'; +import { Global, Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import ConfigurationService from './configuration.service'; +@Global() @Module({ imports: [ConfigModule.forRoot()], providers: [ConfigurationService], diff --git a/backend/src/utils/drizzle/conflict.utils.ts b/backend/src/utils/database/conflict.utils.ts similarity index 100% rename from backend/src/utils/drizzle/conflict.utils.ts rename to backend/src/utils/database/conflict.utils.ts diff --git a/backend/src/utils/database/database.module.ts b/backend/src/utils/database/database.module.ts new file mode 100644 index 0000000000..cb10e22ac7 --- /dev/null +++ b/backend/src/utils/database/database.module.ts @@ -0,0 +1,10 @@ +import { Global, Module } from '@nestjs/common'; +import { DatabaseService } from './database.service'; +import SupabaseService from './supabase.service'; + +@Global() +@Module({ + providers: [DatabaseService, SupabaseService], + exports: [DatabaseService, SupabaseService], +}) +export class DatabaseModule {} diff --git a/backend/src/common/services/database.service.ts b/backend/src/utils/database/database.service.ts similarity index 93% rename from backend/src/common/services/database.service.ts rename to backend/src/utils/database/database.service.ts index 75b140e1b7..94a125585b 100644 --- a/backend/src/common/services/database.service.ts +++ b/backend/src/utils/database/database.service.ts @@ -3,10 +3,10 @@ import { Injectable, Logger, OnApplicationShutdown } from '@nestjs/common'; import { sql } from 'drizzle-orm'; import { drizzle } from 'drizzle-orm/postgres-js'; import { default as postgres } from 'postgres'; -import ConfigurationService from '../../utils/config/configuration.service'; +import ConfigurationService from '../config/configuration.service'; @Injectable() -export default class DatabaseService implements OnApplicationShutdown { +export class DatabaseService implements OnApplicationShutdown { private readonly logger = new Logger(DatabaseService.name); private readonly client = postgres( diff --git a/backend/src/common/services/supabase.service.ts b/backend/src/utils/database/supabase.service.ts similarity index 88% rename from backend/src/common/services/supabase.service.ts rename to backend/src/utils/database/supabase.service.ts index 80ea8eb6aa..1646953aa7 100644 --- a/backend/src/common/services/supabase.service.ts +++ b/backend/src/utils/database/supabase.service.ts @@ -1,6 +1,6 @@ import { Injectable, Logger } from '@nestjs/common'; import { createClient } from '@supabase/supabase-js'; -import ConfigurationService from '../../utils/config/configuration.service'; +import ConfigurationService from '../config/configuration.service'; @Injectable() export default class SupabaseService { diff --git a/backend/src/common/services/xlsx.helper.ts b/backend/src/utils/excel/excel.utils.ts similarity index 100% rename from backend/src/common/services/xlsx.helper.ts rename to backend/src/utils/excel/excel.utils.ts diff --git a/backend/src/common/services/gcloud.helper.ts b/backend/src/utils/google-sheets/gcloud.helper.ts similarity index 81% rename from backend/src/common/services/gcloud.helper.ts rename to backend/src/utils/google-sheets/gcloud.helper.ts index a4d39c8ae4..bfae96e5dc 100644 --- a/backend/src/common/services/gcloud.helper.ts +++ b/backend/src/utils/google-sheets/gcloud.helper.ts @@ -3,7 +3,7 @@ import * as fs from 'fs'; const logger = new Logger('gcloud.helper'); -export const initApplicationCredentials = () => { +export const initGoogleCloudCredentials = () => { if ( process.env.GCLOUD_SERVICE_ACCOUNT_KEY && !process.env.GOOGLE_APPLICATION_CREDENTIALS @@ -15,13 +15,12 @@ export const initApplicationCredentials = () => { let credentialsJson = process.env.GCLOUD_SERVICE_ACCOUNT_KEY; if (!credentialsJson.includes('{')) { // Assume it's a base64 encoded string - credentialsJson = Buffer.from(credentialsJson, 'base64').toString('utf-8'); + credentialsJson = Buffer.from(credentialsJson, 'base64').toString( + 'utf-8' + ); } - - fs.writeFileSync( - serviceAccountFile, - credentialsJson - ); + + fs.writeFileSync(serviceAccountFile, credentialsJson); process.env.GOOGLE_APPLICATION_CREDENTIALS = serviceAccountFile; } }; diff --git a/backend/src/utils/google-sheets/sheet.service.ts b/backend/src/utils/google-sheets/sheet.service.ts index 24275920c8..7ff70fc816 100644 --- a/backend/src/utils/google-sheets/sheet.service.ts +++ b/backend/src/utils/google-sheets/sheet.service.ts @@ -6,8 +6,8 @@ import * as auth from 'google-auth-library'; import { drive_v3, google, sheets_v4 } from 'googleapis'; import * as _ from 'lodash'; import { z } from 'zod'; -import { initApplicationCredentials } from '../../common/services/gcloud.helper'; -import { getPropertyPaths } from '../../common/services/zod.helper'; +import { getPropertyPaths } from '../zod.utils'; +import { initGoogleCloudCredentials } from './gcloud.helper'; import { SheetValueInputOption, SheetValueRenderOption, @@ -43,7 +43,7 @@ export default class SheetService { | auth.Impersonated > { if (!this.authClient) { - initApplicationCredentials(); + initGoogleCloudCredentials(); this.authClient = await google.auth.getClient({ scopes: [ 'https://www.googleapis.com/auth/spreadsheets', diff --git a/backend/src/utils/index.ts b/backend/src/utils/index.ts index 60ddf66f13..3ab2d4956a 100644 --- a/backend/src/utils/index.ts +++ b/backend/src/utils/index.ts @@ -1,4 +1,5 @@ export * from './column.utils'; +export * from './database/database.service'; export * from './enum.utils'; export * from './pagination.schema'; diff --git a/backend/src/common/services/mattermost-notification.service.ts b/backend/src/utils/mattermost-notification.service.ts similarity index 91% rename from backend/src/common/services/mattermost-notification.service.ts rename to backend/src/utils/mattermost-notification.service.ts index ff5e46aa58..90f7b125a3 100644 --- a/backend/src/common/services/mattermost-notification.service.ts +++ b/backend/src/utils/mattermost-notification.service.ts @@ -1,6 +1,6 @@ import { Injectable, Logger } from '@nestjs/common'; -import ConfigurationService from '../../utils/config/configuration.service'; -import { getErrorMessage } from './errors.helper'; +import ConfigurationService from './config/configuration.service'; +import { getErrorMessage } from './nest/errors.utils'; @Injectable() export default class MattermostNotificationService { diff --git a/backend/src/common/models/modified-since.enum.ts b/backend/src/utils/modified-since.enum.ts similarity index 100% rename from backend/src/common/models/modified-since.enum.ts rename to backend/src/utils/modified-since.enum.ts diff --git a/backend/src/common/filters/all-exceptions.filter.ts b/backend/src/utils/nest/all-exceptions.filter.ts similarity index 92% rename from backend/src/common/filters/all-exceptions.filter.ts rename to backend/src/utils/nest/all-exceptions.filter.ts index 58c97fd2dc..3dadb4e499 100644 --- a/backend/src/common/filters/all-exceptions.filter.ts +++ b/backend/src/utils/nest/all-exceptions.filter.ts @@ -3,8 +3,8 @@ import { ArgumentsHost, Catch, HttpException, Logger } from '@nestjs/common'; import { BaseExceptionFilter } from '@nestjs/core'; import { SentryExceptionCaptured } from '@sentry/nestjs'; import { Request, Response } from 'express'; -import { HttpErrorResponse } from '../models/http-error.response'; -import { getErrorWithCode } from '../services/errors.helper'; +import { getErrorWithCode } from './errors.utils'; +import { HttpErrorResponse } from './http-error.response'; export const getHttpErrorResponse = (exception: unknown): HttpErrorResponse => { const errorWithCode = getErrorWithCode(exception); diff --git a/backend/src/common/services/errors.helper.ts b/backend/src/utils/nest/errors.utils.ts similarity index 100% rename from backend/src/common/services/errors.helper.ts rename to backend/src/utils/nest/errors.utils.ts diff --git a/backend/src/common/models/http-error.response.ts b/backend/src/utils/nest/http-error.response.ts similarity index 100% rename from backend/src/common/models/http-error.response.ts rename to backend/src/utils/nest/http-error.response.ts diff --git a/backend/src/common/services/number.helper.spec.ts b/backend/src/utils/number.helper.spec.ts similarity index 100% rename from backend/src/common/services/number.helper.spec.ts rename to backend/src/utils/number.helper.spec.ts diff --git a/backend/src/common/services/number.helper.ts b/backend/src/utils/number.helper.ts similarity index 100% rename from backend/src/common/services/number.helper.ts rename to backend/src/utils/number.helper.ts diff --git a/backend/src/common/models/postgresql-error-codes.enum.ts b/backend/src/utils/postgresql-error-codes.enum.ts similarity index 100% rename from backend/src/common/models/postgresql-error-codes.enum.ts rename to backend/src/utils/postgresql-error-codes.enum.ts diff --git a/backend/src/common/services/sentry.service.ts b/backend/src/utils/sentry-init.ts similarity index 100% rename from backend/src/common/services/sentry.service.ts rename to backend/src/utils/sentry-init.ts diff --git a/backend/src/common/services/sleep.helper.ts b/backend/src/utils/sleep.utils.ts similarity index 100% rename from backend/src/common/services/sleep.helper.ts rename to backend/src/utils/sleep.utils.ts diff --git a/backend/src/utils/trpc/trpc.router.ts b/backend/src/utils/trpc/trpc.router.ts index c391270215..09ee01c91c 100644 --- a/backend/src/utils/trpc/trpc.router.ts +++ b/backend/src/utils/trpc/trpc.router.ts @@ -6,12 +6,12 @@ import { createExpressMiddleware } from '@trpc/server/adapters/express'; import { ListCategoriesRouter } from '../../collectivites/handle-categories/list-categories.router'; import { CollectiviteMembresRouter } from '../../collectivites/membres/membres.router'; import { PersonnesRouter } from '../../collectivites/personnes.router'; -import SupabaseService from '../../common/services/supabase.service'; import { IndicateurFiltreRouter } from '../../indicateurs/indicateur-filtre/indicateur-filtre.router'; import { TrajectoiresRouter } from '../../indicateurs/routers/trajectoires.router'; import { ComputeScoreRouter } from '../../referentiels/compute-score/compute-score.router'; import { ScoreSnapshotsRouter } from '../../referentiels/snapshots/score-snaphots.router'; import { UpdateActionStatutRouter } from '../../referentiels/update-action-statut/update-action-statut.router'; +import SupabaseService from '../database/supabase.service'; import { createContext, TrpcService } from './trpc.service'; @Injectable() diff --git a/backend/src/utils/utils.module.ts b/backend/src/utils/utils.module.ts new file mode 100644 index 0000000000..f8e13ea85c --- /dev/null +++ b/backend/src/utils/utils.module.ts @@ -0,0 +1,11 @@ +import { Global, Module } from '@nestjs/common'; +import MattermostNotificationService from './mattermost-notification.service'; +import { VersionController } from './version/version.controller'; + +@Global() +@Module({ + providers: [MattermostNotificationService], + exports: [MattermostNotificationService], + controllers: [VersionController], +}) +export class UtilsModule {} diff --git a/backend/src/common/services/zod.helper.ts b/backend/src/utils/zod.utils.ts similarity index 100% rename from backend/src/common/services/zod.helper.ts rename to backend/src/utils/zod.utils.ts diff --git a/backend/test/app-utils.ts b/backend/test/app-utils.ts index 4b7fae3fd9..9f42d5c913 100644 --- a/backend/test/app-utils.ts +++ b/backend/test/app-utils.ts @@ -2,7 +2,7 @@ import { ZodValidationPipe } from '@anatine/zod-nestjs/src/lib/zod-validation-pi import { INestApplication } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import { AppModule } from '../src/app.module'; -import DatabaseService from '../src/common/services/database.service'; +import { DatabaseService } from '../src/utils/database/database.service'; import { TrpcRouter } from '../src/utils/trpc/trpc.router'; export const getTestApp = async (): Promise => { From 899660c9aa75a4d3b07e1a85c8b7d404508ca202 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Tue, 24 Dec 2024 13:03:29 +0100 Subject: [PATCH 31/33] Use `@/domain/*` path alias in client-side apps --- .eslintrc.json | 6 +++--- .../Indicateur/detail/useIndicateurServices.ts | 2 +- .../Indicateurs/IndicateurPersoNouveau.tsx | 2 +- .../IndicateurCardEditModal.tsx | 4 ++-- .../useUpdateIndicateurCard.ts | 4 ++-- .../ActionsGroupees/EditionPriorite.tsx | 2 +- .../ActionsGroupees/EditionTagsLibres.tsx | 2 +- .../FicheAction/Budget/FinanceursInput.tsx | 2 +- .../FicheAction/Budget/FinanceursListe.tsx | 2 +- .../ModaleDescription.tsx | 2 +- .../FicheAction/Header/CheminsFiche.tsx | 2 +- .../PlansActions/FicheAction/utils.ts | 2 +- .../PlanActionFiltres/FiltrePriorites.tsx | 2 +- .../PlanActionFiltres/FiltreStatuts.tsx | 2 +- .../PlanAction/list/card/PlanActionCard.tsx | 2 +- .../PlanAction/list/card/Statuts.tsx | 2 +- .../PlansActions/Synthese/utils.ts | 2 +- .../PlansActions/components/BadgeStatut.tsx | 2 +- .../ModalAvancementFichesAction.tsx | 2 +- .../ModuleAvancementFichesAction.tsx | 2 +- .../ModuleAvancementFichesAction/utils.ts | 2 +- .../FichesActionsDropdown.tsx | 2 +- .../FinanceursDropdown/FinanceursDropdown.tsx | 2 +- .../FinanceursDropdown/useFinanceursListe.ts | 2 +- .../PartenairesDropdown.tsx | 2 +- .../PartenairesDropdown/usePartenairesListe.ts | 2 +- .../ServicesPilotesDropdown.tsx | 2 +- .../useServicesPilotesListe.ts | 2 +- .../SousThematiquesDropdown.tsx | 2 +- .../useSousThematiqueListe.ts | 2 +- .../StructuresDropdown/StructuresDropdown.tsx | 2 +- .../StructuresDropdown/useStructuresListe.ts | 2 +- .../TagsSuiviPersoDropdown.tsx | 2 +- .../useTagsSuiviPersoListe.ts | 2 +- .../CiblesDropdown/CiblesDropdown.tsx | 2 +- .../EffetsAttendusDropdown.tsx | 2 +- .../MiseEnOeuvreDropdown.tsx | 2 +- .../ParticipationCitoyenneDropdown.tsx | 2 +- .../priorites/PrioritesFilterDropdown.tsx | 2 +- .../priorites/PrioritesSelectDropdown.tsx | 2 +- .../statuts/StatutsFilterDropdown.tsx | 2 +- .../statuts/StatutsSelectDropdown.tsx | 2 +- .../src/ui/dropdownLists/listesStatiques.ts | 2 +- .../src/ui/dropdownLists/tags/SelectTags.tsx | 2 +- .../src/ui/dropdownLists/tags/useTagCreate.ts | 2 +- .../src/ui/dropdownLists/tags/useTagUpdate.ts | 2 +- .../components/Badge/BadgeStatut.tsx | 2 +- .../roles/private-utilisateur-droit.table.ts | 2 +- .../roles/utilisateur-support.table.ts | 2 +- .../roles/utilisateur-verifie.table.ts | 2 +- backend/src/auth/index-domain.ts | 11 +++++++++++ backend/src/auth/index.ts | 9 +-------- backend/src/collectivites/index-domain.ts | 12 ++++++++++++ backend/src/collectivites/index.ts | 10 +--------- .../documents/models/preuve-rapport.table.ts | 2 +- backend/src/indicateurs/index-domain.ts | 4 ++++ backend/src/indicateurs/index.ts | 2 +- .../models/indicateur-service-tag.table.ts | 2 +- .../models/personnalisation-regle.table.ts | 2 +- .../models/reponse-binaire.table.ts | 2 +- .../models/reponse-choix.table.ts | 2 +- .../models/reponse-proportion.table.ts | 2 +- .../fiche-action-etape.table.ts | 2 +- backend/src/plans/fiches/index-domain.ts | 18 ++++++++++++++++++ backend/src/plans/fiches/index.ts | 16 +--------------- .../plans/fiches/shared/models/axe.table.ts | 2 +- .../models/fiche-action-action-impact.table.ts | 2 +- .../shared/models/fiche-action-action.table.ts | 2 +- .../models/fiche-action-effet-attendu.table.ts | 2 +- .../models/fiche-action-indicateur.table.ts | 2 +- .../models/fiche-action-libre-tag.table.ts | 4 ++-- .../shared/models/fiche-action-note.table.ts | 2 +- .../fiche-action-partenaire-tag.table.ts | 2 +- .../models/fiche-action-referent.table.ts | 2 +- .../models/fiche-action-service-tag.table.ts | 2 +- .../fiche-action-sous-thematique.table.ts | 2 +- .../models/fiche-action-structure-tag.table.ts | 2 +- backend/src/plans/paniers/index-domain.ts | 4 ++++ backend/src/plans/paniers/index.ts | 2 +- .../models/action-impact-action.table.ts | 2 +- .../action-impact-banatic-competence.table.ts | 2 +- .../models/action-impact-cateorie-fnv.table.ts | 2 +- .../action-impact-effet-attendu.table.ts | 2 +- .../models/action-impact-indicateur.table.ts | 2 +- .../action-impact-sous-thematique.table.ts | 2 +- .../models/action-impact-thematique.table.ts | 2 +- .../paniers/models/action-impact.table.ts | 10 +++++----- .../src/plans/paniers/models/panier.table.ts | 2 +- backend/src/referentiels/index-domain.ts | 4 ++++ backend/src/referentiels/index.ts | 2 +- .../models/action-commentaire.table.ts | 2 +- .../models/action-computed-points.table.ts | 2 +- .../models/action-definition.table.ts | 2 +- .../referentiels/models/action-statut.table.ts | 2 +- .../labellisation-action-audit-state.table.ts | 2 +- .../models/labellisation-audit.table.ts | 2 +- .../models/labellisation-demande.table.ts | 2 +- .../models/labellisation-preuve-base.table.ts | 2 +- .../models/referentiel-definition.table.ts | 2 +- backend/src/shared/index-domain.ts | 9 +++++++++ backend/src/shared/index.ts | 7 +------ backend/src/utils/index-domain.ts | 8 ++++++++ backend/src/utils/index.ts | 6 +----- .../indicateurs/actions/indicateur.fetch.ts | 2 +- .../actions/indicateur.save.test.ts | 4 ++-- .../src/indicateurs/actions/indicateur.save.ts | 4 ++-- .../indicateurs/domain/definition.schema.ts | 2 +- .../indicateurs/domain/fetch-options.schema.ts | 2 +- .../plan-actions/domain/fiche-action.schema.ts | 8 ++++---- .../domain/fetch-options.schema.ts | 4 ++-- .../data-access/plan-actions.fetch.ts | 2 +- .../domain/fetch-options.schema.ts | 2 +- packages/api/src/shared/actions/tag.fetch.ts | 2 +- .../api/src/shared/actions/tag.save.test.ts | 2 +- packages/api/src/shared/actions/tag.save.ts | 2 +- .../api/src/shared/actions/thematique.fetch.ts | 2 +- packages/api/src/utils/trpc/client.tsx | 2 +- tsconfig.base.json | 1 + 118 files changed, 195 insertions(+), 162 deletions(-) create mode 100644 backend/src/auth/index-domain.ts create mode 100644 backend/src/collectivites/index-domain.ts create mode 100644 backend/src/indicateurs/index-domain.ts create mode 100644 backend/src/plans/fiches/index-domain.ts create mode 100644 backend/src/plans/paniers/index-domain.ts create mode 100644 backend/src/referentiels/index-domain.ts create mode 100644 backend/src/shared/index-domain.ts create mode 100644 backend/src/utils/index-domain.ts diff --git a/.eslintrc.json b/.eslintrc.json index 49ee147585..ca73ac10bd 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -17,9 +17,9 @@ // https://github.com/tailwindlabs/tailwindcss/issues/11097 "../ui/src/tailwind-preset", - // Backend is an application but is also used as a library, - // we want our front apps to be allowed to reference it - "@/backend" + // `@/domain` imports are used as a library but exists inside the `backend` application. + // We explicitely allow our front apps to be allowed to reference it. + "@/domain" ], "depConstraints": [ { diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/Indicateur/detail/useIndicateurServices.ts b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/Indicateur/detail/useIndicateurServices.ts index 59e3dd6d29..b400f62f33 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/Indicateur/detail/useIndicateurServices.ts +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/Indicateur/detail/useIndicateurServices.ts @@ -1,7 +1,7 @@ import { Indicateurs } from '@/api'; import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; -import { Tag } from '@/backend/collectivites'; +import { Tag } from '@/domain/collectivites'; import { useMutation, useQuery, useQueryClient } from 'react-query'; /** Met à jour les services pilotes d'un indicateur */ diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/IndicateurPersoNouveau.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/IndicateurPersoNouveau.tsx index 53cbc9d761..b5f6dcd4eb 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/IndicateurPersoNouveau.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/IndicateurPersoNouveau.tsx @@ -7,7 +7,7 @@ import { makeCollectiviteIndicateursUrl } from '@/app/app/paths'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; import ThematiquesDropdown from '@/app/ui/dropdownLists/ThematiquesDropdown/ThematiquesDropdown'; import FormikInput from '@/app/ui/shared/form/formik/FormikInput'; -import { Thematique } from '@/backend/shared'; +import { Thematique } from '@/domain/shared'; import { Alert, Button, Checkbox, Field, FormSectionGrid } from '@/ui'; import { Form, Formik } from 'formik'; import { useRouter } from 'next/navigation'; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/IndicateurCardEditModal.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/IndicateurCardEditModal.tsx index d177c3b7e0..d56245a498 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/IndicateurCardEditModal.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/IndicateurCardEditModal.tsx @@ -3,8 +3,8 @@ import { useUpdateIndicateurCard } from '@/app/app/pages/collectivite/Indicateur import PersonnesDropdown from '@/app/ui/dropdownLists/PersonnesDropdown/PersonnesDropdown'; import ServicesPilotesDropdown from '@/app/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown'; import ThematiquesDropdown from '@/app/ui/dropdownLists/ThematiquesDropdown/ThematiquesDropdown'; -import { Tag } from '@/backend/collectivites'; -import { Thematique } from '@/backend/shared'; +import { Tag } from '@/domain/collectivites'; +import { Thematique } from '@/domain/shared'; import { Field, Modal, ModalFooterOKCancel } from '@/ui'; import { OpenState } from '@/ui/utils/types'; import { useEffect, useState } from 'react'; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/useUpdateIndicateurCard.ts b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/useUpdateIndicateurCard.ts index e566071a0f..7ff880d756 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/useUpdateIndicateurCard.ts +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/Indicateurs/lists/IndicateurCard/IndicateurCardEdit/useUpdateIndicateurCard.ts @@ -2,8 +2,8 @@ import { Indicateurs } from '@/api'; import { Personne } from '@/api/collectivites'; import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; -import { Tag } from '@/backend/collectivites'; -import { Thematique } from '@/backend/shared'; +import { Tag } from '@/domain/collectivites'; +import { Thematique } from '@/domain/shared'; import { useMutation } from 'react-query'; /** Met à jour les pilotes, les services pilotes, les thématique d'un indicateur */ diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionPriorite.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionPriorite.tsx index aaa0304aa0..9dec48e2bd 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionPriorite.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionPriorite.tsx @@ -1,6 +1,6 @@ import { useCollectiviteId } from '@/app/core-logic/hooks/params'; import PrioritesSelectDropdown from '@/app/ui/dropdownLists/ficheAction/priorites/PrioritesSelectDropdown'; -import { Priorite } from '@/backend/plans/fiches'; +import { Priorite } from '@/domain/plans/fiches'; import { Button, Field, useEventTracker } from '@/ui'; import { OpenState } from '@/ui/utils/types'; import { useState } from 'react'; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionTagsLibres.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionTagsLibres.tsx index 0eeb8384dc..d3a6e8bdcc 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionTagsLibres.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/ActionsGroupees/EditionTagsLibres.tsx @@ -1,6 +1,6 @@ import { useCollectiviteId } from '@/app/core-logic/hooks/params'; import TagsSuiviPersoDropdown from '@/app/ui/dropdownLists/TagsSuiviPersoDropdown/TagsSuiviPersoDropdown'; -import { Tag } from '@/backend/collectivites'; +import { Tag } from '@/domain/collectivites'; import { Button, Field, useEventTracker } from '@/ui'; import { OpenState } from '@/ui/utils/types'; import { useState } from 'react'; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursInput.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursInput.tsx index 6db4202032..ce58bdcc98 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursInput.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursInput.tsx @@ -1,5 +1,5 @@ import FinanceursDropdown from '@/app/ui/dropdownLists/FinanceursDropdown/FinanceursDropdown'; -import { Financeur, FinanceurUpdate } from '@/backend/plans/fiches'; +import { Financeur, FinanceurUpdate } from '@/domain/plans/fiches'; import { Button, Field, Input } from '@/ui'; type FinanceurPartial = Omit; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursListe.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursListe.tsx index e0e52dc470..0fe915fc0a 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursListe.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Budget/FinanceursListe.tsx @@ -1,5 +1,5 @@ import { getFormattedNumber } from '@/app/utils/formatUtils'; -import { FinanceurUpdate } from '@/backend/plans/fiches'; +import { FinanceurUpdate } from '@/domain/plans/fiches'; import { Badge } from '@/ui'; type FinanceursListeProps = { diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionDescription/ModaleDescription.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionDescription/ModaleDescription.tsx index 2c908d0127..564b6f781c 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionDescription/ModaleDescription.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/FicheActionDescription/ModaleDescription.tsx @@ -4,7 +4,7 @@ import SousThematiquesDropdown from '@/app/ui/dropdownLists/SousThematiquesDropd import TagsSuiviPersoDropdown from '@/app/ui/dropdownLists/TagsSuiviPersoDropdown/TagsSuiviPersoDropdown'; import ThematiquesDropdown from '@/app/ui/dropdownLists/ThematiquesDropdown/ThematiquesDropdown'; import { getMaxLengthMessage } from '@/app/utils/formatUtils'; -import { Thematique } from '@/backend/shared'; +import { Thematique } from '@/domain/shared'; import { Button, Field, diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Header/CheminsFiche.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Header/CheminsFiche.tsx index c48d6b6f1f..66122bf7db 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Header/CheminsFiche.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/Header/CheminsFiche.tsx @@ -1,5 +1,5 @@ import { makeCollectiviteFichesNonClasseesUrl } from '@/app/app/paths'; -import { Axe } from '@/backend/plans/fiches'; +import { Axe } from '@/domain/plans/fiches'; import { Breadcrumbs, Button } from '@/ui'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/utils.ts b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/utils.ts index 0ca1363d1c..e17e276831 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/utils.ts +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/FicheAction/utils.ts @@ -1,4 +1,4 @@ -import { Statut } from '@/backend/plans/fiches'; +import { Statut } from '@/domain/plans/fiches'; import { preset } from '@/ui'; /** Correspondance entre les statuts et couleurs associées */ diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/PlanActionFiltres/FiltrePriorites.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/PlanActionFiltres/FiltrePriorites.tsx index bbb1a73105..a6bb9c9e97 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/PlanActionFiltres/FiltrePriorites.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/PlanActionFiltres/FiltrePriorites.tsx @@ -1,5 +1,5 @@ import { TOption } from '@/app/ui/shared/select/commons'; -import { Priorite } from '@/backend/plans/fiches'; +import { Priorite } from '@/domain/plans/fiches'; import { Field, OptionValue, SelectFilter } from '@/ui'; import { ficheActionNiveauPrioriteOptions } from '../../../../../../ui/dropdownLists/listesStatiques'; import BadgePriorite from '../../components/BadgePriorite'; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/PlanActionFiltres/FiltreStatuts.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/PlanActionFiltres/FiltreStatuts.tsx index 5e691ec087..19f36785bb 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/PlanActionFiltres/FiltreStatuts.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/PlanActionFiltres/FiltreStatuts.tsx @@ -1,6 +1,6 @@ import { TFicheActionStatuts } from '@/app/types/alias'; import { TOption } from '@/app/ui/shared/select/commons'; -import { Statut } from '@/backend/plans/fiches'; +import { Statut } from '@/domain/plans/fiches'; import { Field, OptionValue, SelectFilter } from '@/ui'; import { ficheActionStatutOptions } from '../../../../../../ui/dropdownLists/listesStatiques'; import BadgeStatut from '../../components/BadgeStatut'; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/list/card/PlanActionCard.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/list/card/PlanActionCard.tsx index 48219cf027..c7a688665d 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/list/card/PlanActionCard.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/list/card/PlanActionCard.tsx @@ -2,7 +2,7 @@ import { generateTitle } from '@/app/app/pages/collectivite/PlansActions/FicheAc import Statuts from '@/app/app/pages/collectivite/PlansActions/PlanAction/list/card/Statuts'; import { useFichesActionStatuts } from '@/app/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/useFichesActionStatuts'; import { ModuleDisplay } from '@/app/app/pages/collectivite/TableauDeBord/components/Module'; -import { Axe } from '@/backend/plans/fiches'; +import { Axe } from '@/domain/plans/fiches'; import { Card } from '@/ui'; import classNames from 'classnames'; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/list/card/Statuts.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/list/card/Statuts.tsx index 3c42932ab7..a5c6ba14c5 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/list/card/Statuts.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/PlanAction/list/card/Statuts.tsx @@ -2,7 +2,7 @@ import BadgeStatut from '@/app/app/pages/collectivite/PlansActions/components/Ba import { statutToColor } from '@/app/app/pages/collectivite/PlansActions/FicheAction/utils'; import { ModuleDisplay } from '@/app/app/pages/collectivite/TableauDeBord/components/Module'; import Chart from '@/app/ui/charts/Chart'; -import { Statut } from '@/backend/plans/fiches'; +import { Statut } from '@/domain/plans/fiches'; import { Tooltip } from '@/ui'; type Props = { diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/Synthese/utils.ts b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/Synthese/utils.ts index aea8f22319..bbbee167f0 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/Synthese/utils.ts +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/Synthese/utils.ts @@ -1,6 +1,6 @@ import { statutToColor } from '@/app/app/pages/collectivite/PlansActions/FicheAction/utils'; import { DonutData } from '@/app/ui/charts/Donut/DonutChart'; -import { Statut } from '@/backend/plans/fiches'; +import { Statut } from '@/domain/plans/fiches'; import { FiltersKeys } from '../FicheAction/data/filters'; import { TPlanActionTableauDeBord } from './data/usePlanActionTableauDeBord'; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/components/BadgeStatut.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/components/BadgeStatut.tsx index c47dc1d107..c573dd1f5a 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/components/BadgeStatut.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/PlansActions/components/BadgeStatut.tsx @@ -1,4 +1,4 @@ -import { Statut } from '@/backend/plans/fiches'; +import { Statut } from '@/domain/plans/fiches'; import { Badge, BadgeState } from '@/ui'; import classNames from 'classnames'; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/ModalAvancementFichesAction.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/ModalAvancementFichesAction.tsx index 4e7c35e37c..a8cfd14bbe 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/ModalAvancementFichesAction.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/ModalAvancementFichesAction.tsx @@ -23,7 +23,7 @@ import { } from '@/app/ui/dropdownLists/PersonnesDropdown/utils'; import PlansActionDropdown from '@/app/ui/dropdownLists/PlansActionDropdown'; import ServicesPilotesDropdown from '@/app/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown'; -import { Cible } from '@/backend/plans/fiches'; +import { Cible } from '@/domain/plans/fiches'; type Props = ModalProps & { module: ModuleFicheActionCountByStatusSelect; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/ModuleAvancementFichesAction.tsx b/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/ModuleAvancementFichesAction.tsx index 887569f444..caf4bdb667 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/ModuleAvancementFichesAction.tsx +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/ModuleAvancementFichesAction.tsx @@ -12,7 +12,7 @@ import { TDBViewParam } from '@/app/app/paths'; import { useCurrentCollectivite } from '@/app/core-logic/hooks/useCurrentCollectivite'; import Chart from '@/app/ui/charts/Chart'; import PictoDocument from '@/app/ui/pictogrammes/PictoDocument'; -import { Statut } from '@/backend/plans/fiches'; +import { Statut } from '@/domain/plans/fiches'; import { useEventTracker } from '@/ui'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; diff --git a/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/utils.ts b/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/utils.ts index ee793833cf..3d5d314d84 100644 --- a/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/utils.ts +++ b/app.territoiresentransitions.react/src/app/pages/collectivite/TableauDeBord/Collectivite/ModuleAvancementFichesAction/utils.ts @@ -1,7 +1,7 @@ import { Filtre } from '@/api/plan-actions/dashboards/collectivite-dashboard/domain/fiches-synthese.schema'; import { FicheActionParam } from '@/app/app/pages/collectivite/PlansActions/ToutesLesFichesAction/ToutesLesFichesAction'; import { makeCollectiviteToutesLesFichesUrl } from '@/app/app/paths'; -import { Statut } from '@/backend/plans/fiches'; +import { Statut } from '@/domain/plans/fiches'; /** Permet de transformer les filtres de modules fiches action en paramètres d'URL */ export const makeFichesActionUrlWithParams = ( diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/FichesActionsDropdown/FichesActionsDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/FichesActionsDropdown/FichesActionsDropdown.tsx index b8aa5f2946..fb6c74b882 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/FichesActionsDropdown/FichesActionsDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/FichesActionsDropdown/FichesActionsDropdown.tsx @@ -2,7 +2,7 @@ import { FicheResume } from '@/api/plan-actions'; import { useFicheResumesFetch } from '@/app/app/pages/collectivite/PlansActions/FicheAction/data/useFicheResumesFetch'; import { generateTitle } from '@/app/app/pages/collectivite/PlansActions/FicheAction/data/utils'; import { naturalSort } from '@/app/utils/naturalSort'; -import { CreateAxeType } from '@/backend/plans/fiches'; +import { CreateAxeType } from '@/domain/plans/fiches'; import { Option, OptionValue, diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/FinanceursDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/FinanceursDropdown.tsx index 2894c6dc96..3973598590 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/FinanceursDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/FinanceursDropdown.tsx @@ -1,4 +1,4 @@ -import { Tag } from '@/backend/collectivites'; +import { Tag } from '@/domain/collectivites'; import { SelectMultipleProps } from '@/ui'; import SelectTags from '../tags/SelectTags'; import { useFinanceursListe } from './useFinanceursListe'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/useFinanceursListe.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/useFinanceursListe.ts index dc397c4dcd..f44b016863 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/useFinanceursListe.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/FinanceursDropdown/useFinanceursListe.ts @@ -1,6 +1,6 @@ import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; -import { Tag } from '@/backend/collectivites'; +import { Tag } from '@/domain/collectivites'; import { useQuery } from 'react-query'; import { objectToCamel } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/PartenairesDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/PartenairesDropdown.tsx index c7c14fc913..bd9d5affb4 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/PartenairesDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/PartenairesDropdown.tsx @@ -1,4 +1,4 @@ -import { Tag } from '@/backend/collectivites'; +import { Tag } from '@/domain/collectivites'; import { SelectMultipleProps } from '@/ui'; import SelectTags from '../tags/SelectTags'; import { usePartenairesListe } from './usePartenairesListe'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/usePartenairesListe.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/usePartenairesListe.ts index 1722c5dc74..3dc46bf18a 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/usePartenairesListe.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/PartenairesDropdown/usePartenairesListe.ts @@ -1,6 +1,6 @@ import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; -import { Tag } from '@/backend/collectivites'; +import { Tag } from '@/domain/collectivites'; import { useQuery } from 'react-query'; import { objectToCamel } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown.tsx index 75567c3140..1b191dcb10 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/ServicesPilotesDropdown.tsx @@ -1,4 +1,4 @@ -import { Tag } from '@/backend/collectivites'; +import { Tag } from '@/domain/collectivites'; import { SelectMultipleProps } from '@/ui'; import SelectTags from '../tags/SelectTags'; import { useServicesPilotesListe } from './useServicesPilotesListe'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/useServicesPilotesListe.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/useServicesPilotesListe.ts index 7d98653aa6..6fa252c30b 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/useServicesPilotesListe.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ServicesPilotesDropdown/useServicesPilotesListe.ts @@ -1,6 +1,6 @@ import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; -import { Tag } from '@/backend/collectivites'; +import { Tag } from '@/domain/collectivites'; import { useQuery } from 'react-query'; import { objectToCamel } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/SousThematiquesDropdown/SousThematiquesDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/SousThematiquesDropdown/SousThematiquesDropdown.tsx index 64192c0a61..1319d79357 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/SousThematiquesDropdown/SousThematiquesDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/SousThematiquesDropdown/SousThematiquesDropdown.tsx @@ -1,4 +1,4 @@ -import { SousThematique } from '@/backend/shared'; +import { SousThematique } from '@/domain/shared'; import { Option, OptionValue, SelectFilter, SelectMultipleProps } from '@/ui'; import { useEffect } from 'react'; import { useSousThematiqueListe } from './useSousThematiqueListe'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/SousThematiquesDropdown/useSousThematiqueListe.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/SousThematiquesDropdown/useSousThematiqueListe.ts index 4ccc531dac..cd1bdc4fe9 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/SousThematiquesDropdown/useSousThematiqueListe.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/SousThematiquesDropdown/useSousThematiqueListe.ts @@ -1,5 +1,5 @@ import { supabaseClient } from '@/app/core-logic/api/supabase'; -import { SousThematique } from '@/backend/shared'; +import { SousThematique } from '@/domain/shared'; import { useQuery } from 'react-query'; import { objectToCamel } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/StructuresDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/StructuresDropdown.tsx index b162391307..91e42c3fe6 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/StructuresDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/StructuresDropdown.tsx @@ -1,4 +1,4 @@ -import { Tag } from '@/backend/collectivites'; +import { Tag } from '@/domain/collectivites'; import { SelectMultipleProps } from '@/ui'; import SelectTags from '../tags/SelectTags'; import { useStructuresListe } from './useStructuresListe'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/useStructuresListe.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/useStructuresListe.ts index 1167fdfac3..29bfa7df95 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/useStructuresListe.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/StructuresDropdown/useStructuresListe.ts @@ -1,6 +1,6 @@ import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; -import { Tag } from '@/backend/collectivites'; +import { Tag } from '@/domain/collectivites'; import { useQuery } from 'react-query'; import { objectToCamel } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/TagsSuiviPersoDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/TagsSuiviPersoDropdown.tsx index 01f7a9c395..b2e8752a43 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/TagsSuiviPersoDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/TagsSuiviPersoDropdown.tsx @@ -1,4 +1,4 @@ -import { Tag } from '@/backend/collectivites'; +import { Tag } from '@/domain/collectivites'; import { SelectMultipleProps } from '@/ui'; import SelectTags from '../tags/SelectTags'; import { useTagsSuiviPersoListe } from './useTagsSuiviPersoListe'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/useTagsSuiviPersoListe.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/useTagsSuiviPersoListe.ts index e18faba78c..3519772bd7 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/useTagsSuiviPersoListe.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/TagsSuiviPersoDropdown/useTagsSuiviPersoListe.ts @@ -1,6 +1,6 @@ import { supabaseClient } from '@/app/core-logic/api/supabase'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; -import { Tag } from '@/backend/collectivites'; +import { Tag } from '@/domain/collectivites'; import { useQuery } from 'react-query'; import { objectToCamel } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/CiblesDropdown/CiblesDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/CiblesDropdown/CiblesDropdown.tsx index 266e328606..3d665232b8 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/CiblesDropdown/CiblesDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/CiblesDropdown/CiblesDropdown.tsx @@ -1,4 +1,4 @@ -import { Cible } from '@/backend/plans/fiches'; +import { Cible } from '@/domain/plans/fiches'; import { SelectFilter, SelectMultipleProps } from '@/ui'; import { ficheActionCiblesOptions } from '../../listesStatiques'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/EffetsAttendusDropdown/EffetsAttendusDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/EffetsAttendusDropdown/EffetsAttendusDropdown.tsx index 18918bdc4c..4b13c01ad6 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/EffetsAttendusDropdown/EffetsAttendusDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/EffetsAttendusDropdown/EffetsAttendusDropdown.tsx @@ -1,4 +1,4 @@ -import { EffetAttendu } from '@/backend/shared'; +import { EffetAttendu } from '@/domain/shared'; import { SelectFilter, SelectMultipleProps } from '@/ui'; import { useEffetsAttendus } from './useEffetsAttendus'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/MiseEnOeuvreDropdown/MiseEnOeuvreDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/MiseEnOeuvreDropdown/MiseEnOeuvreDropdown.tsx index 25b5c9b9ea..3fe8a4c467 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/MiseEnOeuvreDropdown/MiseEnOeuvreDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/MiseEnOeuvreDropdown/MiseEnOeuvreDropdown.tsx @@ -1,4 +1,4 @@ -import { TempsDeMiseEnOeuvre } from '@/backend/shared'; +import { TempsDeMiseEnOeuvre } from '@/domain/shared'; import { Select, SelectProps } from '@/ui'; import { useMiseEnOeuvre } from './useMiseEnOeuvre'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/ParticipationCitoyenneDropdown/ParticipationCitoyenneDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/ParticipationCitoyenneDropdown/ParticipationCitoyenneDropdown.tsx index b661738c7f..9ddc72b70a 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/ParticipationCitoyenneDropdown/ParticipationCitoyenneDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/ParticipationCitoyenneDropdown/ParticipationCitoyenneDropdown.tsx @@ -1,4 +1,4 @@ -import { ParticipationCitoyenne } from '@/backend/plans/fiches'; +import { ParticipationCitoyenne } from '@/domain/plans/fiches'; import { Select, SelectMultipleProps } from '@/ui'; import { ficheActionParticipationOptions } from '../../listesStatiques'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/priorites/PrioritesFilterDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/priorites/PrioritesFilterDropdown.tsx index 111851acad..5a2a58f778 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/priorites/PrioritesFilterDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/priorites/PrioritesFilterDropdown.tsx @@ -1,6 +1,6 @@ import BadgePriorite from '@/app/app/pages/collectivite/PlansActions/components/BadgePriorite'; import { ficheActionNiveauPrioriteOptions } from '@/app/ui/dropdownLists/listesStatiques'; -import { Priorite } from '@/backend/plans/fiches'; +import { Priorite } from '@/domain/plans/fiches'; import { SelectFilter, SelectMultipleProps } from '@/ui'; type Props = Omit & { diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/priorites/PrioritesSelectDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/priorites/PrioritesSelectDropdown.tsx index 5dd06b23d0..c46933c28e 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/priorites/PrioritesSelectDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/priorites/PrioritesSelectDropdown.tsx @@ -1,6 +1,6 @@ import BadgePriorite from '@/app/app/pages/collectivite/PlansActions/components/BadgePriorite'; import { ficheActionNiveauPrioriteOptions } from '@/app/ui/dropdownLists/listesStatiques'; -import { Priorite } from '@/backend/plans/fiches'; +import { Priorite } from '@/domain/plans/fiches'; import { Select, SelectProps } from '@/ui'; type Props = Omit & { diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/statuts/StatutsFilterDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/statuts/StatutsFilterDropdown.tsx index f85afee49e..031ec9f23d 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/statuts/StatutsFilterDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/statuts/StatutsFilterDropdown.tsx @@ -1,6 +1,6 @@ import BadgeStatut from '@/app/app/pages/collectivite/PlansActions/components/BadgeStatut'; import { ficheActionStatutOptions } from '@/app/ui/dropdownLists/listesStatiques'; -import { Statut } from '@/backend/plans/fiches'; +import { Statut } from '@/domain/plans/fiches'; import { SelectFilter, SelectMultipleProps } from '@/ui'; type Props = Omit & { diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/statuts/StatutsSelectDropdown.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/statuts/StatutsSelectDropdown.tsx index 28f59fcd2e..cb5205c7da 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/statuts/StatutsSelectDropdown.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/ficheAction/statuts/StatutsSelectDropdown.tsx @@ -1,6 +1,6 @@ import BadgeStatut from '@/app/app/pages/collectivite/PlansActions/components/BadgeStatut'; import { ficheActionStatutOptions } from '@/app/ui/dropdownLists/listesStatiques'; -import { Statut } from '@/backend/plans/fiches'; +import { Statut } from '@/domain/plans/fiches'; import { Select, SelectProps } from '@/ui'; type Props = Omit & { diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/listesStatiques.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/listesStatiques.ts index e8b49d8e1c..ae2082fff2 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/listesStatiques.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/listesStatiques.ts @@ -5,7 +5,7 @@ import { ParticipationCitoyenne, Priorite, Statut, -} from '@/backend/plans/fiches'; +} from '@/domain/plans/fiches'; type Options = { value: T; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/SelectTags.tsx b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/SelectTags.tsx index 8be3d875f6..c3048a64ba 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/SelectTags.tsx +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/SelectTags.tsx @@ -1,6 +1,6 @@ import { TableTag } from '@/api'; import { useCollectiviteId } from '@/app/core-logic/hooks/params'; -import { Tag } from '@/backend/collectivites'; +import { Tag } from '@/domain/collectivites'; import { Option, OptionValue, SelectFilter, SelectMultipleProps } from '@/ui'; import { useEffect } from 'react'; import { QueryKey } from 'react-query'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagCreate.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagCreate.ts index f0978b73d5..b98c370ba0 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagCreate.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagCreate.ts @@ -1,6 +1,6 @@ import { CollectiviteTag, TableTag } from '@/api'; import { supabaseClient } from '@/app/core-logic/api/supabase'; -import { TagInsert } from '@/backend/collectivites'; +import { TagInsert } from '@/domain/collectivites'; import { QueryKey, useMutation, useQueryClient } from 'react-query'; import { objectToSnake } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagUpdate.ts b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagUpdate.ts index 3d021f8cef..3f4b40a70f 100644 --- a/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagUpdate.ts +++ b/app.territoiresentransitions.react/src/ui/dropdownLists/tags/useTagUpdate.ts @@ -1,6 +1,6 @@ import { TableTag } from '@/api'; import { supabaseClient } from '@/app/core-logic/api/supabase'; -import { TagUpdate } from '@/backend/collectivites'; +import { TagUpdate } from '@/domain/collectivites'; import { QueryKey, useMutation, useQueryClient } from 'react-query'; import { objectToSnake } from 'ts-case-convert'; diff --git a/app.territoiresentransitions.react/src/ui/export-pdf/components/Badge/BadgeStatut.tsx b/app.territoiresentransitions.react/src/ui/export-pdf/components/Badge/BadgeStatut.tsx index 27b01f2372..a4c288703e 100644 --- a/app.territoiresentransitions.react/src/ui/export-pdf/components/Badge/BadgeStatut.tsx +++ b/app.territoiresentransitions.react/src/ui/export-pdf/components/Badge/BadgeStatut.tsx @@ -1,5 +1,5 @@ import { statusToState } from '@/app/app/pages/collectivite/PlansActions/components/BadgeStatut'; -import { Statut } from '@/backend/plans/fiches'; +import { Statut } from '@/domain/plans/fiches'; import classNames from 'classnames'; import { Badge } from './Badge'; diff --git a/backend/src/auth/authorizations/roles/private-utilisateur-droit.table.ts b/backend/src/auth/authorizations/roles/private-utilisateur-droit.table.ts index 23236bcbd5..e06ce601f5 100644 --- a/backend/src/auth/authorizations/roles/private-utilisateur-droit.table.ts +++ b/backend/src/auth/authorizations/roles/private-utilisateur-droit.table.ts @@ -1,4 +1,4 @@ -import { createdAt, modifiedAt } from '@/backend/utils'; +import { createdAt, modifiedAt } from '@/domain/utils'; import { InferSelectModel } from 'drizzle-orm'; import { boolean, integer, pgTable, serial, uuid } from 'drizzle-orm/pg-core'; import { collectiviteTable } from '../../../collectivites/shared/models/collectivite.table'; diff --git a/backend/src/auth/authorizations/roles/utilisateur-support.table.ts b/backend/src/auth/authorizations/roles/utilisateur-support.table.ts index 9a4cca0e2a..72986bcbe6 100644 --- a/backend/src/auth/authorizations/roles/utilisateur-support.table.ts +++ b/backend/src/auth/authorizations/roles/utilisateur-support.table.ts @@ -1,5 +1,5 @@ +import { dcpTable } from '@/domain/auth'; import { boolean, pgTable, uuid } from 'drizzle-orm/pg-core'; -import { dcpTable } from '@/backend/auth'; export const utilisateurSupportTable = pgTable('utilisateur_support', { userId: uuid('user_id') diff --git a/backend/src/auth/authorizations/roles/utilisateur-verifie.table.ts b/backend/src/auth/authorizations/roles/utilisateur-verifie.table.ts index f9f13170dc..f3d32453ae 100644 --- a/backend/src/auth/authorizations/roles/utilisateur-verifie.table.ts +++ b/backend/src/auth/authorizations/roles/utilisateur-verifie.table.ts @@ -1,5 +1,5 @@ +import { dcpTable } from '@/domain/auth'; import { boolean, pgTable, uuid } from 'drizzle-orm/pg-core'; -import { dcpTable } from '@/backend/auth'; export const utilisateurVerifieTable = pgTable('utilisateur_verifie', { userId: uuid('user_id') diff --git a/backend/src/auth/index-domain.ts b/backend/src/auth/index-domain.ts new file mode 100644 index 0000000000..9629ef3391 --- /dev/null +++ b/backend/src/auth/index-domain.ts @@ -0,0 +1,11 @@ +// `index-domain.ts` file must only contain exports that are shareable with client-side apps. +// Exports from this file can be imported with `@/domain/*` alias path. + +export * from './authorizations/permission-operation.enum'; +export * from './authorizations/permission.models'; +export * from './authorizations/resource-type.enum'; +export * from './authorizations/roles/private-utilisateur-droit.table'; +export * from './models/auth-users.table'; +export * from './models/auth.models'; +export * from './models/dcp.table'; +export * from './models/invitation.table'; diff --git a/backend/src/auth/index.ts b/backend/src/auth/index.ts index b864998055..81ce45f809 100644 --- a/backend/src/auth/index.ts +++ b/backend/src/auth/index.ts @@ -1,8 +1 @@ -export * from './authorizations/permission-operation.enum'; -export * from './authorizations/permission.models'; -export * from './authorizations/resource-type.enum'; -export * from './authorizations/roles/private-utilisateur-droit.table'; -export * from './models/auth-users.table'; -export * from './models/auth.models'; -export * from './models/dcp.table'; -export * from './models/invitation.table'; +export * from './index-domain'; diff --git a/backend/src/collectivites/index-domain.ts b/backend/src/collectivites/index-domain.ts new file mode 100644 index 0000000000..e89c558080 --- /dev/null +++ b/backend/src/collectivites/index-domain.ts @@ -0,0 +1,12 @@ +// `index-domain.ts` file must only contain exports that are shareable with client-side apps. +// Exports from this file can be imported with `@/domain/*` alias path. + +export * from './shared/models/categorie-tag.table'; +export * from './shared/models/collectivite.table'; +export * from './shared/models/financeur-tag.table'; +export * from './shared/models/libre-tag.table'; +export * from './shared/models/partenaire-tag.table'; +export * from './shared/models/personne-tag.table'; +export * from './shared/models/service-tag.table'; +export * from './shared/models/structure-tag.table'; +export * from './shared/models/tag.table-base'; diff --git a/backend/src/collectivites/index.ts b/backend/src/collectivites/index.ts index 212dc2a2ad..81ce45f809 100644 --- a/backend/src/collectivites/index.ts +++ b/backend/src/collectivites/index.ts @@ -1,9 +1 @@ -export * from './shared/models/categorie-tag.table'; -export * from './shared/models/collectivite.table'; -export * from './shared/models/financeur-tag.table'; -export * from './shared/models/libre-tag.table'; -export * from './shared/models/partenaire-tag.table'; -export * from './shared/models/personne-tag.table'; -export * from './shared/models/service-tag.table'; -export * from './shared/models/structure-tag.table'; -export * from './shared/models/tag.table-base'; +export * from './index-domain'; diff --git a/backend/src/documents/models/preuve-rapport.table.ts b/backend/src/documents/models/preuve-rapport.table.ts index 749dc99736..56de6ef904 100644 --- a/backend/src/documents/models/preuve-rapport.table.ts +++ b/backend/src/documents/models/preuve-rapport.table.ts @@ -1,4 +1,4 @@ -import { TIMESTAMP_OPTIONS } from '@/backend/utils'; +import { TIMESTAMP_OPTIONS } from '@/domain/utils'; import { pgTable, timestamp } from 'drizzle-orm/pg-core'; import { DocumentBase } from './document.basetable'; diff --git a/backend/src/indicateurs/index-domain.ts b/backend/src/indicateurs/index-domain.ts new file mode 100644 index 0000000000..a10e793525 --- /dev/null +++ b/backend/src/indicateurs/index-domain.ts @@ -0,0 +1,4 @@ +// `index-domain.ts` file must only contain exports that are shareable with client-side apps. +// Exports from this file can be imported with `@/domain/*` alias path. + +export * from './models/indicateur-definition.table'; diff --git a/backend/src/indicateurs/index.ts b/backend/src/indicateurs/index.ts index a45ee415da..81ce45f809 100644 --- a/backend/src/indicateurs/index.ts +++ b/backend/src/indicateurs/index.ts @@ -1 +1 @@ -export * from './models/indicateur-definition.table'; +export * from './index-domain'; diff --git a/backend/src/indicateurs/models/indicateur-service-tag.table.ts b/backend/src/indicateurs/models/indicateur-service-tag.table.ts index 41cc60e87e..dab77b160c 100644 --- a/backend/src/indicateurs/models/indicateur-service-tag.table.ts +++ b/backend/src/indicateurs/models/indicateur-service-tag.table.ts @@ -1,4 +1,4 @@ -import { serviceTagTable } from '@/backend/collectivites'; +import { serviceTagTable } from '@/domain/collectivites'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; import { indicateurDefinitionTable } from './indicateur-definition.table'; diff --git a/backend/src/personnalisations/models/personnalisation-regle.table.ts b/backend/src/personnalisations/models/personnalisation-regle.table.ts index 151c1ca3f5..fa1557ba37 100644 --- a/backend/src/personnalisations/models/personnalisation-regle.table.ts +++ b/backend/src/personnalisations/models/personnalisation-regle.table.ts @@ -1,4 +1,4 @@ -import { modifiedAt } from '@/backend/utils'; +import { modifiedAt } from '@/domain/utils'; import { InferInsertModel, InferSelectModel } from 'drizzle-orm'; import { pgEnum, pgTable, primaryKey, text } from 'drizzle-orm/pg-core'; import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; diff --git a/backend/src/personnalisations/models/reponse-binaire.table.ts b/backend/src/personnalisations/models/reponse-binaire.table.ts index 40b12e47c7..77704f35a7 100644 --- a/backend/src/personnalisations/models/reponse-binaire.table.ts +++ b/backend/src/personnalisations/models/reponse-binaire.table.ts @@ -1,4 +1,4 @@ -import { modifiedAt } from '@/backend/utils'; +import { modifiedAt } from '@/domain/utils'; import { boolean, integer, pgTable, varchar } from 'drizzle-orm/pg-core'; import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; diff --git a/backend/src/personnalisations/models/reponse-choix.table.ts b/backend/src/personnalisations/models/reponse-choix.table.ts index 94ebcb32b0..b561bcd56c 100644 --- a/backend/src/personnalisations/models/reponse-choix.table.ts +++ b/backend/src/personnalisations/models/reponse-choix.table.ts @@ -1,4 +1,4 @@ -import { modifiedAt } from '@/backend/utils'; +import { modifiedAt } from '@/domain/utils'; import { integer, pgTable, varchar } from 'drizzle-orm/pg-core'; import { collectiviteTable } from '../../collectivites/shared/models/collectivite.table'; diff --git a/backend/src/personnalisations/models/reponse-proportion.table.ts b/backend/src/personnalisations/models/reponse-proportion.table.ts index a954abf564..7f908efb8f 100644 --- a/backend/src/personnalisations/models/reponse-proportion.table.ts +++ b/backend/src/personnalisations/models/reponse-proportion.table.ts @@ -1,4 +1,4 @@ -import { modifiedAt } from '@/backend/utils'; +import { modifiedAt } from '@/domain/utils'; import { doublePrecision, integer, diff --git a/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.table.ts b/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.table.ts index 28133861a1..1b1a1f1ab0 100644 --- a/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.table.ts +++ b/backend/src/plans/fiches/fiche-action-etape/fiche-action-etape.table.ts @@ -1,4 +1,4 @@ -import { createdAt, createdBy, modifiedAt, modifiedBy } from '@/backend/utils'; +import { createdAt, createdBy, modifiedAt, modifiedBy } from '@/domain/utils'; import { InferSelectModel } from 'drizzle-orm'; import { boolean, integer, pgTable, serial, text } from 'drizzle-orm/pg-core'; import { createInsertSchema } from 'drizzle-zod'; diff --git a/backend/src/plans/fiches/index-domain.ts b/backend/src/plans/fiches/index-domain.ts new file mode 100644 index 0000000000..5d35bca520 --- /dev/null +++ b/backend/src/plans/fiches/index-domain.ts @@ -0,0 +1,18 @@ +// `index-domain.ts` file must only contain exports that are shareable with client-side apps. +// Exports from this file can be imported with `@/domain/*` alias path. + +export * from './shared/models/axe.table'; +export * from './shared/models/fiche-action-effet-attendu.table'; +export * from './shared/models/fiche-action-financeur-tag.table'; +export * from './shared/models/fiche-action-indicateur.table'; +export * from './shared/models/fiche-action-libre-tag.table'; +export * from './shared/models/fiche-action-lien.table'; +export * from './shared/models/fiche-action-note.table'; +export * from './shared/models/fiche-action-partenaire-tag.table'; +export * from './shared/models/fiche-action-service-tag.table'; +export * from './shared/models/fiche-action-sous-thematique.table'; +export * from './shared/models/fiche-action-structure-tag.table'; +export * from './shared/models/fiche-action-thematique.table'; +export * from './shared/models/fiche-action.table'; +export * from './shared/models/plan-action-type-categorie.table'; +export * from './shared/models/plan-action-type.table'; diff --git a/backend/src/plans/fiches/index.ts b/backend/src/plans/fiches/index.ts index 3c07fa18a5..81ce45f809 100644 --- a/backend/src/plans/fiches/index.ts +++ b/backend/src/plans/fiches/index.ts @@ -1,15 +1 @@ -export * from './shared/models/axe.table'; -export * from './shared/models/fiche-action-effet-attendu.table'; -export * from './shared/models/fiche-action-financeur-tag.table'; -export * from './shared/models/fiche-action-indicateur.table'; -export * from './shared/models/fiche-action-libre-tag.table'; -export * from './shared/models/fiche-action-lien.table'; -export * from './shared/models/fiche-action-note.table'; -export * from './shared/models/fiche-action-partenaire-tag.table'; -export * from './shared/models/fiche-action-service-tag.table'; -export * from './shared/models/fiche-action-sous-thematique.table'; -export * from './shared/models/fiche-action-structure-tag.table'; -export * from './shared/models/fiche-action-thematique.table'; -export * from './shared/models/fiche-action.table'; -export * from './shared/models/plan-action-type-categorie.table'; -export * from './shared/models/plan-action-type.table'; +export * from './index-domain'; diff --git a/backend/src/plans/fiches/shared/models/axe.table.ts b/backend/src/plans/fiches/shared/models/axe.table.ts index 277fc080af..eababe421b 100644 --- a/backend/src/plans/fiches/shared/models/axe.table.ts +++ b/backend/src/plans/fiches/shared/models/axe.table.ts @@ -1,4 +1,4 @@ -import { createdAt, modifiedAt, modifiedBy } from '@/backend/utils'; +import { createdAt, modifiedAt, modifiedBy } from '@/domain/utils'; import { InferInsertModel } from 'drizzle-orm'; import { AnyPgColumn, diff --git a/backend/src/plans/fiches/shared/models/fiche-action-action-impact.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-action-impact.table.ts index c7bb460249..e641bd8481 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action-action-impact.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-action-impact.table.ts @@ -1,4 +1,4 @@ -import { actionImpactTable } from '@/backend/plans/paniers'; +import { actionImpactTable } from '@/domain/plans/paniers'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { ficheActionTable } from './fiche-action.table'; diff --git a/backend/src/plans/fiches/shared/models/fiche-action-action.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-action.table.ts index 27b64d507c..7b4494fd0d 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action-action.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-action.table.ts @@ -1,4 +1,4 @@ -import { actionRelationTable } from '@/backend/referentiels'; +import { actionRelationTable } from '@/domain/referentiels'; import { integer, pgTable, primaryKey, varchar } from 'drizzle-orm/pg-core'; import { ficheActionTable } from './fiche-action.table'; diff --git a/backend/src/plans/fiches/shared/models/fiche-action-effet-attendu.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-effet-attendu.table.ts index 319c3b18d4..065a080499 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action-effet-attendu.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-effet-attendu.table.ts @@ -1,8 +1,8 @@ +import { effetAttenduTable } from '@/domain/shared'; import { sql } from 'drizzle-orm'; import { integer, pgPolicy, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { authenticatedRole } from 'drizzle-orm/supabase'; import { ficheActionTable } from './fiche-action.table'; -import { effetAttenduTable } from '@/backend/shared'; export const ficheActionEffetAttenduTable = pgTable( 'fiche_action_effet_attendu', diff --git a/backend/src/plans/fiches/shared/models/fiche-action-indicateur.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-indicateur.table.ts index 3712df1742..cec0085d97 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action-indicateur.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-indicateur.table.ts @@ -1,4 +1,4 @@ -import { indicateurDefinitionTable } from '@/backend/indicateurs'; +import { indicateurDefinitionTable } from '@/domain/indicateurs'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { ficheActionTable } from './fiche-action.table'; diff --git a/backend/src/plans/fiches/shared/models/fiche-action-libre-tag.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-libre-tag.table.ts index 6f2c4d3d3b..e081215f87 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action-libre-tag.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-libre-tag.table.ts @@ -1,5 +1,5 @@ -import { libreTagTable } from '@/backend/collectivites'; -import { createdAt, createdBy } from '@/backend/utils'; +import { libreTagTable } from '@/domain/collectivites'; +import { createdAt, createdBy } from '@/domain/utils'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { ficheActionTable } from './fiche-action.table'; diff --git a/backend/src/plans/fiches/shared/models/fiche-action-note.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-note.table.ts index ffb278bd7e..331bfbc2d3 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action-note.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-note.table.ts @@ -1,4 +1,4 @@ -import { createdAt, createdBy, modifiedAt, modifiedBy } from '@/backend/utils'; +import { createdAt, createdBy, modifiedAt, modifiedBy } from '@/domain/utils'; import { InferSelectModel } from 'drizzle-orm'; import { date, integer, pgTable, serial, text } from 'drizzle-orm/pg-core'; import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; diff --git a/backend/src/plans/fiches/shared/models/fiche-action-partenaire-tag.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-partenaire-tag.table.ts index 3900c9a802..5063515b23 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action-partenaire-tag.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-partenaire-tag.table.ts @@ -1,4 +1,4 @@ -import { partenaireTagTable } from '@/backend/collectivites'; +import { partenaireTagTable } from '@/domain/collectivites'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { ficheActionTable } from './fiche-action.table'; diff --git a/backend/src/plans/fiches/shared/models/fiche-action-referent.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-referent.table.ts index efd1e7e5a7..449606ef43 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action-referent.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-referent.table.ts @@ -1,4 +1,4 @@ -import { personneTagTable } from '@/backend/collectivites'; +import { personneTagTable } from '@/domain/collectivites'; import { integer, pgTable, uniqueIndex, uuid } from 'drizzle-orm/pg-core'; import { ficheActionTable } from './fiche-action.table'; diff --git a/backend/src/plans/fiches/shared/models/fiche-action-service-tag.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-service-tag.table.ts index 01940fe9ac..4f4926ec1c 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action-service-tag.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-service-tag.table.ts @@ -1,4 +1,4 @@ -import { serviceTagTable } from '@/backend/collectivites'; +import { serviceTagTable } from '@/domain/collectivites'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { ficheActionTable } from './fiche-action.table'; diff --git a/backend/src/plans/fiches/shared/models/fiche-action-sous-thematique.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-sous-thematique.table.ts index 11d7d442b3..843ea92d62 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action-sous-thematique.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-sous-thematique.table.ts @@ -1,4 +1,4 @@ -import { sousThematiqueTable } from '@/backend/shared'; +import { sousThematiqueTable } from '@/domain/shared'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { ficheActionTable } from './fiche-action.table'; diff --git a/backend/src/plans/fiches/shared/models/fiche-action-structure-tag.table.ts b/backend/src/plans/fiches/shared/models/fiche-action-structure-tag.table.ts index 3f0c824532..dd374909fe 100644 --- a/backend/src/plans/fiches/shared/models/fiche-action-structure-tag.table.ts +++ b/backend/src/plans/fiches/shared/models/fiche-action-structure-tag.table.ts @@ -1,4 +1,4 @@ -import { structureTagTable } from '@/backend/collectivites'; +import { structureTagTable } from '@/domain/collectivites'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { ficheActionTable } from './fiche-action.table'; diff --git a/backend/src/plans/paniers/index-domain.ts b/backend/src/plans/paniers/index-domain.ts new file mode 100644 index 0000000000..745028455c --- /dev/null +++ b/backend/src/plans/paniers/index-domain.ts @@ -0,0 +1,4 @@ +// `index-domain.ts` file must only contain exports that are shareable with client-side apps. +// Exports from this file can be imported with `@/domain/*` alias path. + +export * from './models/action-impact.table'; diff --git a/backend/src/plans/paniers/index.ts b/backend/src/plans/paniers/index.ts index 664af55c3e..81ce45f809 100644 --- a/backend/src/plans/paniers/index.ts +++ b/backend/src/plans/paniers/index.ts @@ -1 +1 @@ -export * from './models/action-impact.table'; +export * from './index-domain'; diff --git a/backend/src/plans/paniers/models/action-impact-action.table.ts b/backend/src/plans/paniers/models/action-impact-action.table.ts index 3707cb74aa..250c4c526e 100644 --- a/backend/src/plans/paniers/models/action-impact-action.table.ts +++ b/backend/src/plans/paniers/models/action-impact-action.table.ts @@ -1,4 +1,4 @@ -import { actionRelationTable } from '@/backend/referentiels'; +import { actionRelationTable } from '@/domain/referentiels'; import { InferSelectModel } from 'drizzle-orm'; import { integer, pgTable, primaryKey, text } from 'drizzle-orm/pg-core'; import { actionImpactTable } from './action-impact.table'; diff --git a/backend/src/plans/paniers/models/action-impact-banatic-competence.table.ts b/backend/src/plans/paniers/models/action-impact-banatic-competence.table.ts index c2107dfd8c..cd49d67c50 100644 --- a/backend/src/plans/paniers/models/action-impact-banatic-competence.table.ts +++ b/backend/src/plans/paniers/models/action-impact-banatic-competence.table.ts @@ -1,6 +1,6 @@ +import { banaticCompetenceTable } from '@/domain/shared'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { actionImpactTable } from './action-impact.table'; -import { banaticCompetenceTable } from '@/backend/shared'; export const actionImpactBanaticCompetenceTable = pgTable( 'action_impact_banatic_competence', diff --git a/backend/src/plans/paniers/models/action-impact-cateorie-fnv.table.ts b/backend/src/plans/paniers/models/action-impact-cateorie-fnv.table.ts index 1b63e5d984..cda3bc21cd 100644 --- a/backend/src/plans/paniers/models/action-impact-cateorie-fnv.table.ts +++ b/backend/src/plans/paniers/models/action-impact-cateorie-fnv.table.ts @@ -1,4 +1,4 @@ -import { categorieFNVTable } from '@/backend/shared'; +import { categorieFNVTable } from '@/domain/shared'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { actionImpactTable } from './action-impact.table'; diff --git a/backend/src/plans/paniers/models/action-impact-effet-attendu.table.ts b/backend/src/plans/paniers/models/action-impact-effet-attendu.table.ts index 0b7dfb1307..cb5e8fde2e 100644 --- a/backend/src/plans/paniers/models/action-impact-effet-attendu.table.ts +++ b/backend/src/plans/paniers/models/action-impact-effet-attendu.table.ts @@ -1,4 +1,4 @@ -import { effetAttenduTable } from '@/backend/shared'; +import { effetAttenduTable } from '@/domain/shared'; import { InferSelectModel } from 'drizzle-orm'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { actionImpactTable } from './action-impact.table'; diff --git a/backend/src/plans/paniers/models/action-impact-indicateur.table.ts b/backend/src/plans/paniers/models/action-impact-indicateur.table.ts index 137f626656..2b12b683e8 100644 --- a/backend/src/plans/paniers/models/action-impact-indicateur.table.ts +++ b/backend/src/plans/paniers/models/action-impact-indicateur.table.ts @@ -1,4 +1,4 @@ -import { indicateurDefinitionTable } from '@/backend/indicateurs'; +import { indicateurDefinitionTable } from '@/domain/indicateurs'; import { InferSelectModel } from 'drizzle-orm'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { actionImpactTable } from './action-impact.table'; diff --git a/backend/src/plans/paniers/models/action-impact-sous-thematique.table.ts b/backend/src/plans/paniers/models/action-impact-sous-thematique.table.ts index c6397d2a63..f8a07d7bc6 100644 --- a/backend/src/plans/paniers/models/action-impact-sous-thematique.table.ts +++ b/backend/src/plans/paniers/models/action-impact-sous-thematique.table.ts @@ -1,4 +1,4 @@ -import { sousThematiqueTable } from '@/backend/shared'; +import { sousThematiqueTable } from '@/domain/shared'; import { InferSelectModel } from 'drizzle-orm'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { actionImpactTable } from './action-impact.table'; diff --git a/backend/src/plans/paniers/models/action-impact-thematique.table.ts b/backend/src/plans/paniers/models/action-impact-thematique.table.ts index c900e66eb8..b3771648b4 100644 --- a/backend/src/plans/paniers/models/action-impact-thematique.table.ts +++ b/backend/src/plans/paniers/models/action-impact-thematique.table.ts @@ -1,4 +1,4 @@ -import { thematiqueTable } from '@/backend/shared'; +import { thematiqueTable } from '@/domain/shared'; import { InferSelectModel } from 'drizzle-orm'; import { integer, pgTable, primaryKey } from 'drizzle-orm/pg-core'; import { actionImpactTable } from './action-impact.table'; diff --git a/backend/src/plans/paniers/models/action-impact.table.ts b/backend/src/plans/paniers/models/action-impact.table.ts index 285c796260..778c93d5b7 100644 --- a/backend/src/plans/paniers/models/action-impact.table.ts +++ b/backend/src/plans/paniers/models/action-impact.table.ts @@ -1,14 +1,10 @@ -import { - lienSchema, - lienType, -} from '@/backend/documents/models/document-lien.dto'; import { categorieFNVSchema, CategorieFNVType, tempsDeMiseEnOeuvreTable, thematiqueSchema, ThematiqueType, -} from '@/backend/shared'; +} from '@/domain/shared'; import { createZodDto } from '@anatine/zod-nestjs'; import { InferSelectModel } from 'drizzle-orm'; import { @@ -21,6 +17,10 @@ import { } from 'drizzle-orm/pg-core'; import { createSelectSchema } from 'drizzle-zod'; import { z } from 'zod'; +import { + lienSchema, + lienType, +} from '../../../documents/models/document-lien.dto'; import { actionImpactFourchetteBudgetaireTable } from './action-impact-fourchette-budgetaire.table'; import { actionImpactTierTable } from './action-impact-tier.table'; diff --git a/backend/src/plans/paniers/models/panier.table.ts b/backend/src/plans/paniers/models/panier.table.ts index a472cbfc85..274d34aa8d 100644 --- a/backend/src/plans/paniers/models/panier.table.ts +++ b/backend/src/plans/paniers/models/panier.table.ts @@ -1,4 +1,4 @@ -import { collectiviteTable } from '@/backend/collectivites'; +import { collectiviteTable } from '@/domain/collectivites'; import { InferSelectModel, SQL, sql } from 'drizzle-orm'; import { boolean, diff --git a/backend/src/referentiels/index-domain.ts b/backend/src/referentiels/index-domain.ts new file mode 100644 index 0000000000..b429561207 --- /dev/null +++ b/backend/src/referentiels/index-domain.ts @@ -0,0 +1,4 @@ +// `index-domain.ts` file must only contain exports that are shareable with client-side apps. +// Exports from this file can be imported with `@/domain/*` alias path. + +export * from './models/action-relation.table'; diff --git a/backend/src/referentiels/index.ts b/backend/src/referentiels/index.ts index 9fcfb558d3..81ce45f809 100644 --- a/backend/src/referentiels/index.ts +++ b/backend/src/referentiels/index.ts @@ -1 +1 @@ -export * from './models/action-relation.table'; +export * from './index-domain'; diff --git a/backend/src/referentiels/models/action-commentaire.table.ts b/backend/src/referentiels/models/action-commentaire.table.ts index 334b9fefcf..5c98b5d376 100644 --- a/backend/src/referentiels/models/action-commentaire.table.ts +++ b/backend/src/referentiels/models/action-commentaire.table.ts @@ -1,4 +1,4 @@ -import { modifiedAt, modifiedBy } from '@/backend/utils'; +import { modifiedAt, modifiedBy } from '@/domain/utils'; import { InferInsertModel, InferSelectModel } from 'drizzle-orm'; import { foreignKey, diff --git a/backend/src/referentiels/models/action-computed-points.table.ts b/backend/src/referentiels/models/action-computed-points.table.ts index e9c40c4612..b60a319ef4 100644 --- a/backend/src/referentiels/models/action-computed-points.table.ts +++ b/backend/src/referentiels/models/action-computed-points.table.ts @@ -1,4 +1,4 @@ -import { modifiedAt } from '@/backend/utils'; +import { modifiedAt } from '@/domain/utils'; import { InferInsertModel, InferSelectModel } from 'drizzle-orm'; import { doublePrecision, pgTable } from 'drizzle-orm/pg-core'; import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; diff --git a/backend/src/referentiels/models/action-definition.table.ts b/backend/src/referentiels/models/action-definition.table.ts index 38d46bc07b..1199cb1677 100644 --- a/backend/src/referentiels/models/action-definition.table.ts +++ b/backend/src/referentiels/models/action-definition.table.ts @@ -1,4 +1,4 @@ -import { modifiedAt } from '@/backend/utils'; +import { modifiedAt } from '@/domain/utils'; import { InferInsertModel, InferSelectModel } from 'drizzle-orm'; import { doublePrecision, diff --git a/backend/src/referentiels/models/action-statut.table.ts b/backend/src/referentiels/models/action-statut.table.ts index f9d30d656b..3409611752 100644 --- a/backend/src/referentiels/models/action-statut.table.ts +++ b/backend/src/referentiels/models/action-statut.table.ts @@ -1,4 +1,4 @@ -import { modifiedAt, modifiedBy } from '@/backend/utils'; +import { modifiedAt, modifiedBy } from '@/domain/utils'; import { InferInsertModel, InferSelectModel } from 'drizzle-orm'; import { boolean, diff --git a/backend/src/referentiels/models/labellisation-action-audit-state.table.ts b/backend/src/referentiels/models/labellisation-action-audit-state.table.ts index 3a80c21877..2524ec4ec3 100644 --- a/backend/src/referentiels/models/labellisation-action-audit-state.table.ts +++ b/backend/src/referentiels/models/labellisation-action-audit-state.table.ts @@ -1,4 +1,4 @@ -import { modifiedAt } from '@/backend/utils'; +import { modifiedAt } from '@/domain/utils'; import { sql } from 'drizzle-orm'; import { boolean, diff --git a/backend/src/referentiels/models/labellisation-audit.table.ts b/backend/src/referentiels/models/labellisation-audit.table.ts index 2e2517cd54..039a59a572 100644 --- a/backend/src/referentiels/models/labellisation-audit.table.ts +++ b/backend/src/referentiels/models/labellisation-audit.table.ts @@ -1,4 +1,4 @@ -import { TIMESTAMP_OPTIONS } from '@/backend/utils'; +import { TIMESTAMP_OPTIONS } from '@/domain/utils'; import { InferInsertModel, InferSelectModel, sql } from 'drizzle-orm'; import { boolean, diff --git a/backend/src/referentiels/models/labellisation-demande.table.ts b/backend/src/referentiels/models/labellisation-demande.table.ts index 8ea3ddbdbd..bfa1098ade 100644 --- a/backend/src/referentiels/models/labellisation-demande.table.ts +++ b/backend/src/referentiels/models/labellisation-demande.table.ts @@ -1,4 +1,4 @@ -import { TIMESTAMP_OPTIONS } from '@/backend/utils'; +import { TIMESTAMP_OPTIONS } from '@/domain/utils'; import { boolean, foreignKey, diff --git a/backend/src/referentiels/models/labellisation-preuve-base.table.ts b/backend/src/referentiels/models/labellisation-preuve-base.table.ts index d26eef2dfc..3e3244c680 100644 --- a/backend/src/referentiels/models/labellisation-preuve-base.table.ts +++ b/backend/src/referentiels/models/labellisation-preuve-base.table.ts @@ -1,4 +1,4 @@ -import { modifiedAt, modifiedBy } from '@/backend/utils'; +import { modifiedAt, modifiedBy } from '@/domain/utils'; import { sql } from 'drizzle-orm'; import { foreignKey, integer, jsonb, text } from 'drizzle-orm/pg-core'; import { authUsersTable } from '../../auth/models/auth-users.table'; diff --git a/backend/src/referentiels/models/referentiel-definition.table.ts b/backend/src/referentiels/models/referentiel-definition.table.ts index b50531c827..7eff77303c 100644 --- a/backend/src/referentiels/models/referentiel-definition.table.ts +++ b/backend/src/referentiels/models/referentiel-definition.table.ts @@ -1,4 +1,4 @@ -import { createdAt, modifiedAt } from '@/backend/utils'; +import { createdAt, modifiedAt } from '@/domain/utils'; import { InferSelectModel } from 'drizzle-orm'; import { pgTable, varchar } from 'drizzle-orm/pg-core'; import { createInsertSchema, createSelectSchema } from 'drizzle-zod'; diff --git a/backend/src/shared/index-domain.ts b/backend/src/shared/index-domain.ts new file mode 100644 index 0000000000..50fb079a2c --- /dev/null +++ b/backend/src/shared/index-domain.ts @@ -0,0 +1,9 @@ +// `index-domain.ts` file must only contain exports that are shareable with client-side apps. +// Exports from this file can be imported with `@/domain/*` alias path. + +export * from './models/banatic-competence.table'; +export * from './models/categorie-fnv.table'; +export * from './models/effet-attendu.table'; +export * from './models/sous-thematique.table'; +export * from './models/temps-de-mise-en-oeuvre.table'; +export * from './models/thematique.table'; diff --git a/backend/src/shared/index.ts b/backend/src/shared/index.ts index db7a99858d..81ce45f809 100644 --- a/backend/src/shared/index.ts +++ b/backend/src/shared/index.ts @@ -1,6 +1 @@ -export * from './models/banatic-competence.table'; -export * from './models/categorie-fnv.table'; -export * from './models/effet-attendu.table'; -export * from './models/sous-thematique.table'; -export * from './models/temps-de-mise-en-oeuvre.table'; -export * from './models/thematique.table'; +export * from './index-domain'; diff --git a/backend/src/utils/index-domain.ts b/backend/src/utils/index-domain.ts new file mode 100644 index 0000000000..b8a8135053 --- /dev/null +++ b/backend/src/utils/index-domain.ts @@ -0,0 +1,8 @@ +// `index-domain.ts` file must only contain exports that are shareable with client-side apps. +// Exports from this file can be imported with `@/domain/*` alias path. + +export * from './column.utils'; +export * from './enum.utils'; +export * from './pagination.schema'; + +export type { AppRouter } from './trpc/trpc.router'; diff --git a/backend/src/utils/index.ts b/backend/src/utils/index.ts index 3ab2d4956a..ac2e13e9a5 100644 --- a/backend/src/utils/index.ts +++ b/backend/src/utils/index.ts @@ -1,6 +1,2 @@ -export * from './column.utils'; export * from './database/database.service'; -export * from './enum.utils'; -export * from './pagination.schema'; - -export type { AppRouter } from './trpc/trpc.router'; +export * from './index-domain'; diff --git a/packages/api/src/indicateurs/actions/indicateur.fetch.ts b/packages/api/src/indicateurs/actions/indicateur.fetch.ts index d8af51bee9..9b955622e8 100644 --- a/packages/api/src/indicateurs/actions/indicateur.fetch.ts +++ b/packages/api/src/indicateurs/actions/indicateur.fetch.ts @@ -19,7 +19,7 @@ import { ValeurComparaison, ValeurComparaisonLigne, } from '../domain/valeur.schema'; -import { Thematique } from '@/backend/shared'; +import { Thematique } from '@/domain/shared'; // cas spécial pour cet indicateur TODO: utiliser un champ distinct dans les markdowns plutôt que cet ID "en dur" const ID_COMPACITE_FORMES_URBAINES = 'cae_9'; diff --git a/packages/api/src/indicateurs/actions/indicateur.save.test.ts b/packages/api/src/indicateurs/actions/indicateur.save.test.ts index e40a28db5d..39c8188328 100644 --- a/packages/api/src/indicateurs/actions/indicateur.save.test.ts +++ b/packages/api/src/indicateurs/actions/indicateur.save.test.ts @@ -1,5 +1,5 @@ -import { TagInsert } from '@/backend/collectivites'; -import { Thematique } from '@/backend/shared'; +import { TagInsert } from '@/domain/collectivites'; +import { Thematique } from '@/domain/shared'; import { beforeAll, describe, expect, test } from 'vitest'; import { Personne } from '../../collectivites/shared/domain/personne.schema'; import { FicheResume } from '../../plan-actions/domain/fiche-action.schema'; diff --git a/packages/api/src/indicateurs/actions/indicateur.save.ts b/packages/api/src/indicateurs/actions/indicateur.save.ts index 178b5e891f..28f3b506c8 100644 --- a/packages/api/src/indicateurs/actions/indicateur.save.ts +++ b/packages/api/src/indicateurs/actions/indicateur.save.ts @@ -1,5 +1,5 @@ -import { Tag, TagInsert } from '@/backend/collectivites'; -import { Thematique } from '@/backend/shared'; +import { Tag, TagInsert } from '@/domain/collectivites'; +import { Thematique } from '@/domain/shared'; import { isNil } from 'es-toolkit/predicate'; import { objectToSnake } from 'ts-case-convert'; import { Personne } from '../../collectivites/shared/domain/personne.schema'; diff --git a/packages/api/src/indicateurs/domain/definition.schema.ts b/packages/api/src/indicateurs/domain/definition.schema.ts index f2cdd4c153..c0832cc909 100644 --- a/packages/api/src/indicateurs/domain/definition.schema.ts +++ b/packages/api/src/indicateurs/domain/definition.schema.ts @@ -1,4 +1,4 @@ -import { thematiqueSchema } from '@/backend/shared'; +import { thematiqueSchema } from '@/domain/shared'; import { z } from 'zod'; import { actionSchema } from '../../referentiel/domain/action.schema'; import { categorieSchema } from './categorie.schema'; diff --git a/packages/api/src/indicateurs/domain/fetch-options.schema.ts b/packages/api/src/indicateurs/domain/fetch-options.schema.ts index 7240ff6151..6106407c09 100644 --- a/packages/api/src/indicateurs/domain/fetch-options.schema.ts +++ b/packages/api/src/indicateurs/domain/fetch-options.schema.ts @@ -1,4 +1,4 @@ -import { getPaginationSchema } from '@/backend/utils'; +import { getPaginationSchema } from '@/domain/utils'; import { z } from 'zod'; import { filtreRessourceLieesSchema } from '../../collectivites/shared/domain/filtre-ressource-liees.schema'; diff --git a/packages/api/src/plan-actions/domain/fiche-action.schema.ts b/packages/api/src/plan-actions/domain/fiche-action.schema.ts index 8aa181715b..0144343604 100644 --- a/packages/api/src/plan-actions/domain/fiche-action.schema.ts +++ b/packages/api/src/plan-actions/domain/fiche-action.schema.ts @@ -1,8 +1,8 @@ import { personneSchema } from '@/api/collectivites'; import { indicateurListItemSchema } from '@/api/indicateurs/domain'; import { actionSchema } from '@/api/referentiel'; -import { authorSchema } from '@/backend/auth'; -import { tagSchema } from '@/backend/collectivites'; +import { authorSchema } from '@/domain/auth'; +import { tagSchema } from '@/domain/collectivites'; import { axeSchema, ciblesEnumSchema, @@ -10,13 +10,13 @@ import { participationCitoyenneEnumSchema, prioriteEnumSchema, statutsEnumSchema, -} from '@/backend/plans/fiches'; +} from '@/domain/plans/fiches'; import { effetAttenduSchema, sousThematiqueSchema, tempsDeMiseEnOeuvreSchema, thematiqueSchema, -} from '@/backend/shared'; +} from '@/domain/shared'; import { z } from 'zod'; export const ficheActionSchema = z.object({ diff --git a/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts b/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts index 42892fee0a..a26e11fb3c 100644 --- a/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts +++ b/packages/api/src/plan-actions/fiche-resumes.list/domain/fetch-options.schema.ts @@ -2,8 +2,8 @@ import { ciblesEnumSchema, prioriteEnumSchema, statutsEnumSchema, -} from '@/backend/plans/fiches'; -import { getPaginationSchema } from '@/backend/utils'; +} from '@/domain/plans/fiches'; +import { getPaginationSchema } from '@/domain/utils'; import { z } from 'zod'; import { filtreRessourceLieesSchema } from '../../../collectivites/shared/domain/filtre-ressource-liees.schema'; diff --git a/packages/api/src/plan-actions/plan-actions.list/data-access/plan-actions.fetch.ts b/packages/api/src/plan-actions/plan-actions.list/data-access/plan-actions.fetch.ts index 5eb39ea6ed..872d38fbc0 100644 --- a/packages/api/src/plan-actions/plan-actions.list/data-access/plan-actions.fetch.ts +++ b/packages/api/src/plan-actions/plan-actions.list/data-access/plan-actions.fetch.ts @@ -1,5 +1,5 @@ import { DBClient } from '@/api/typeUtils'; -import { Axe, PlanActionType } from '@/backend/plans/fiches'; +import { Axe, PlanActionType } from '@/domain/plans/fiches'; import { objectToCamel } from 'ts-case-convert'; import { FetchOptions, diff --git a/packages/api/src/plan-actions/plan-actions.list/domain/fetch-options.schema.ts b/packages/api/src/plan-actions/plan-actions.list/domain/fetch-options.schema.ts index 00d6108d12..1442d87d95 100644 --- a/packages/api/src/plan-actions/plan-actions.list/domain/fetch-options.schema.ts +++ b/packages/api/src/plan-actions/plan-actions.list/domain/fetch-options.schema.ts @@ -1,4 +1,4 @@ -import { getPaginationSchema } from '@/backend/utils'; +import { getPaginationSchema } from '@/domain/utils'; import { z } from 'zod'; import { filtreRessourceLieesSchema } from '../../../collectivites/shared/domain/filtre-ressource-liees.schema'; diff --git a/packages/api/src/shared/actions/tag.fetch.ts b/packages/api/src/shared/actions/tag.fetch.ts index d6af0f2abe..f984bc740d 100644 --- a/packages/api/src/shared/actions/tag.fetch.ts +++ b/packages/api/src/shared/actions/tag.fetch.ts @@ -1,4 +1,4 @@ -import { Tag, TagType } from '@/backend/collectivites'; +import { Tag, TagType } from '@/domain/collectivites'; import { objectToCamel } from 'ts-case-convert'; import { DBClient } from '../../typeUtils'; diff --git a/packages/api/src/shared/actions/tag.save.test.ts b/packages/api/src/shared/actions/tag.save.test.ts index f9c2df5894..792302263f 100644 --- a/packages/api/src/shared/actions/tag.save.test.ts +++ b/packages/api/src/shared/actions/tag.save.test.ts @@ -1,4 +1,4 @@ -import { TagInsert } from '@/backend/collectivites'; +import { TagInsert } from '@/domain/collectivites'; import { beforeAll, expect, test } from 'vitest'; import { signIn, signOut } from '../../tests/auth'; import { supabase } from '../../tests/supabase'; diff --git a/packages/api/src/shared/actions/tag.save.ts b/packages/api/src/shared/actions/tag.save.ts index 8b4e60acb6..f1b283af1e 100644 --- a/packages/api/src/shared/actions/tag.save.ts +++ b/packages/api/src/shared/actions/tag.save.ts @@ -1,4 +1,4 @@ -import { Tag, TagInsert, TagType } from '@/backend/collectivites'; +import { Tag, TagInsert, TagType } from '@/domain/collectivites'; import { objectToCamel, objectToSnake } from 'ts-case-convert'; import { DBClient } from '../../typeUtils'; diff --git a/packages/api/src/shared/actions/thematique.fetch.ts b/packages/api/src/shared/actions/thematique.fetch.ts index d1802304dc..ebd19c06b9 100644 --- a/packages/api/src/shared/actions/thematique.fetch.ts +++ b/packages/api/src/shared/actions/thematique.fetch.ts @@ -1,4 +1,4 @@ -import { Thematique } from '@/backend/shared'; +import { Thematique } from '@/domain/shared'; import { DBClient } from '../../typeUtils'; /** diff --git a/packages/api/src/utils/trpc/client.tsx b/packages/api/src/utils/trpc/client.tsx index 28998038e8..12457d49bd 100644 --- a/packages/api/src/utils/trpc/client.tsx +++ b/packages/api/src/utils/trpc/client.tsx @@ -14,7 +14,7 @@ import { makeQueryClient } from './query-client'; // By using `import type` you ensure that the reference will be stripped at compile-time, meaning you don't inadvertently import server-side code into your client. // For more information, see the Typescript docs: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html#type-only-imports-and-export // eslint-disable-next-line @nx/enforce-module-boundaries -import type { AppRouter } from '@/backend/utils/trpc/trpc.router'; +import type { AppRouter } from '@/domain/utils'; import { getAuthHeaders } from '../authTokens'; export type RouterInput = inferRouterInputs; diff --git a/tsconfig.base.json b/tsconfig.base.json index 87e8ddda9c..49c70ccaca 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -24,6 +24,7 @@ "@/api/*": ["./packages/api/src/*"], "@/app/*": ["./app.territoiresentransitions.react/src/*"], "@/auth/*": ["./packages/auth/*"], + "@/domain/*": ["./backend/src/*/index-domain.ts"], "@/backend/*": ["./backend/src/*"], "@/backend/test": ["./backend/test/index.ts"], "@/panier/*": ["./packages/panier/*"], From f98fc936e8cf0046d49f93e2042ee6a50171e79e Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Tue, 24 Dec 2024 14:50:47 +0100 Subject: [PATCH 32/33] Update README.md --- backend/README.md | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/backend/README.md b/backend/README.md index 58be49e156..3fd452f999 100644 --- a/backend/README.md +++ b/backend/README.md @@ -46,20 +46,31 @@ $ nx test backend ### Tests -Pour lancer tous les tests : +Les tests sont colocalisés au plus près du fichier testé. + +Exemple : ``` -nx test backend +└ update-action-statut.router.ts +└ update-action-statut.router.e2e-spec.ts ``` -Pour lancer uniquement les tests unitaires (dossier `src`) : +--- -``` -nx test backend src +Lancer tous les tests : + +```sh +nx test backend ``` -Pour lancer uniquement les tests end-to-end (dossier `test`) : +Lancer uniquement un fichier de test donné : +```sh +nx test backend 'update-action-statut.router.e2e-spec.ts' ``` -nx test backend test + +Lancer uniquement les tests dont le chemin contient `referentiels` : + +```sh +nx test backend 'referentiels' ``` From 22431f8ff60e51628dad92e4ece45d28dfa48aa6 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Tue, 24 Dec 2024 14:50:54 +0100 Subject: [PATCH 33/33] Update update-action-statut.router.e2e-spec.ts --- .../update-action-statut.router.e2e-spec.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/backend/src/referentiels/update-action-statut/update-action-statut.router.e2e-spec.ts b/backend/src/referentiels/update-action-statut/update-action-statut.router.e2e-spec.ts index 2b4b73dc2a..e783e091d5 100644 --- a/backend/src/referentiels/update-action-statut/update-action-statut.router.e2e-spec.ts +++ b/backend/src/referentiels/update-action-statut/update-action-statut.router.e2e-spec.ts @@ -26,7 +26,6 @@ describe('UpdateActionStatutRouter', () => { const caller = router.createCaller({ user: null }); const input: Input = { - referentielId: ReferentielType.CAE, actionStatut: { collectiviteId: 1, actionId: 'cae_1.1.1.2', @@ -47,7 +46,6 @@ describe('UpdateActionStatutRouter', () => { const caller = router.createCaller({ user: yoloDodoUser }); const input: Input = { - referentielId: ReferentielType.CAE, actionStatut: { collectiviteId: rhoneAggloCollectiviteId, actionId: 'cae_1.1.1.2', @@ -68,7 +66,6 @@ describe('UpdateActionStatutRouter', () => { const caller = router.createCaller({ user: yoloDodoUser }); const input: Input = { - referentielId: ReferentielType.CAE, actionStatut: { collectiviteId: 1, actionId: 'cae_1.1.1.11', @@ -91,7 +88,6 @@ describe('UpdateActionStatutRouter', () => { const caller = router.createCaller({ user: yoloDodoUser }); const input: Input = { - referentielId: ReferentielType.CAE, actionStatut: { collectiviteId: 1, actionId: 'cae_1.1.1.1.2', @@ -140,7 +136,6 @@ describe('UpdateActionStatutRouter', () => { // Restore the previous state const actionNonFaite: Input = { - referentielId: ReferentielType.CAE, actionStatut: { collectiviteId: 1, actionId: 'cae_1.1.1.1.2',