Skip to content

Commit

Permalink
feat(backend): calcule des indicateurs calcules lors de la mise à jou…
Browse files Browse the repository at this point in the history
…r d'une valeur d'indicateur, import de la définition des indicateurs depuis un spreadsheet
  • Loading branch information
dthib committed Mar 5, 2025
1 parent 672d91f commit 7ecf723
Show file tree
Hide file tree
Showing 240 changed files with 4,154 additions and 32,026 deletions.
1 change: 1 addition & 0 deletions .github/workflows/cd-backend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ jobs:
--TRAJECTOIRE_SNBC_XLSX_ID=${{ vars.TRAJECTOIRE_SNBC_XLSX_ID }}
--TRAJECTOIRE_SNBC_RESULT_FOLDER_ID=${{ vars.TRAJECTOIRE_SNBC_RESULT_FOLDER_ID }}
--REFERENTIEL_TE_SHEET_ID=${{ vars.REFERENTIEL_TE_SHEET_ID }}
--INDICATEUR_DEFINITIONS_SHEET_ID=${{ vars.INDICATEUR_DEFINITIONS_SHEET_ID }}
deploy-test-backend:
name: Déploie le backend de test
Expand Down
42 changes: 42 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,11 @@ jobs:
--SERVICE_ROLE_KEY=${{ secrets.SERVICE_ROLE_KEY }}
--ANON_KEY=${{ secrets.ANON_KEY }}
--API_URL=${{ secrets.API_URL }}
--JWT_SECRET=${{ secrets.JWT_SECRET }}
--REFERENTIEL_TE_SHEET_ID=${{ vars.REFERENTIEL_TE_SHEET_ID }}
--INDICATEUR_DEFINITIONS_SHEET_ID=${{ vars.INDICATEUR_DEFINITIONS_SHEET_ID }}
--TRAJECTOIRE_SNBC_XLSX_ID=${{ vars.TRAJECTOIRE_SNBC_XLSX_ID }}
--GCLOUD_SERVICE_ACCOUNT_KEY=${{ secrets.GCLOUD_SERVICE_ACCOUNT_KEY }}
test-api:
needs:
Expand Down Expand Up @@ -185,6 +190,11 @@ jobs:
--SERVICE_ROLE_KEY=${{ secrets.SERVICE_ROLE_KEY }}
--ANON_KEY=${{ secrets.ANON_KEY }}
--API_URL=${{ secrets.API_URL }}
--JWT_SECRET=${{ secrets.JWT_SECRET }}
--REFERENTIEL_TE_SHEET_ID=${{ vars.REFERENTIEL_TE_SHEET_ID }}
--INDICATEUR_DEFINITIONS_SHEET_ID=${{ vars.INDICATEUR_DEFINITIONS_SHEET_ID }}
--TRAJECTOIRE_SNBC_XLSX_ID=${{ vars.TRAJECTOIRE_SNBC_XLSX_ID }}
--GCLOUD_SERVICE_ACCOUNT_KEY=${{ secrets.GCLOUD_SERVICE_ACCOUNT_KEY }}
- name: Reset de postgrest
run: docker restart supabase_rest_tet
Expand Down Expand Up @@ -238,6 +248,11 @@ jobs:
--SERVICE_ROLE_KEY=${{ secrets.SERVICE_ROLE_KEY }}
--ANON_KEY=${{ secrets.ANON_KEY }}
--API_URL=${{ secrets.API_URL }}
--JWT_SECRET=${{ secrets.JWT_SECRET }}
--REFERENTIEL_TE_SHEET_ID=${{ vars.REFERENTIEL_TE_SHEET_ID }}
--INDICATEUR_DEFINITIONS_SHEET_ID=${{ vars.INDICATEUR_DEFINITIONS_SHEET_ID }}
--TRAJECTOIRE_SNBC_XLSX_ID=${{ vars.TRAJECTOIRE_SNBC_XLSX_ID }}
--GCLOUD_SERVICE_ACCOUNT_KEY=${{ secrets.GCLOUD_SERVICE_ACCOUNT_KEY }}
- name: Reset de postgrest
run: docker restart supabase_rest_tet
Expand Down Expand Up @@ -293,6 +308,11 @@ jobs:
--SERVICE_ROLE_KEY=${{ secrets.SERVICE_ROLE_KEY }}
--ANON_KEY=${{ secrets.ANON_KEY }}
--API_URL=${{ secrets.API_URL }}
--JWT_SECRET=${{ secrets.JWT_SECRET }}
--REFERENTIEL_TE_SHEET_ID=${{ vars.REFERENTIEL_TE_SHEET_ID }}
--INDICATEUR_DEFINITIONS_SHEET_ID=${{ vars.INDICATEUR_DEFINITIONS_SHEET_ID }}
--TRAJECTOIRE_SNBC_XLSX_ID=${{ vars.TRAJECTOIRE_SNBC_XLSX_ID }}
--GCLOUD_SERVICE_ACCOUNT_KEY=${{ secrets.GCLOUD_SERVICE_ACCOUNT_KEY }}
- name: Reset de postgrest
run: docker restart supabase_rest_tet
Expand All @@ -317,6 +337,7 @@ jobs:
--TRAJECTOIRE_SNBC_XLSX_ID=${{ vars.TRAJECTOIRE_SNBC_XLSX_ID }}
--TRAJECTOIRE_SNBC_RESULT_FOLDER_ID=${{ vars.TRAJECTOIRE_SNBC_RESULT_FOLDER_ID }}
--REFERENTIEL_TE_SHEET_ID=${{ vars.REFERENTIEL_TE_SHEET_ID }}
--INDICATEUR_DEFINITIONS_SHEET_ID=${{ vars.INDICATEUR_DEFINITIONS_SHEET_ID }}
--BREVO_API_KEY=${{ secrets.BREVO_API_KEY }}
--DIRECTUS_API_KEY=${{ secrets.DIRECTUS_API_KEY }}
--GCLOUD_SERVICE_ACCOUNT_KEY=${{ secrets.GCLOUD_SERVICE_ACCOUNT_KEY }}
Expand Down Expand Up @@ -370,6 +391,11 @@ jobs:
--SERVICE_ROLE_KEY=${{ secrets.SERVICE_ROLE_KEY }}
--ANON_KEY=${{ secrets.ANON_KEY }}
--API_URL=${{ secrets.API_URL }}
--JWT_SECRET=${{ secrets.JWT_SECRET }}
--REFERENTIEL_TE_SHEET_ID=${{ vars.REFERENTIEL_TE_SHEET_ID }}
--INDICATEUR_DEFINITIONS_SHEET_ID=${{ vars.INDICATEUR_DEFINITIONS_SHEET_ID }}
--TRAJECTOIRE_SNBC_XLSX_ID=${{ vars.TRAJECTOIRE_SNBC_XLSX_ID }}
--GCLOUD_SERVICE_ACCOUNT_KEY=${{ secrets.GCLOUD_SERVICE_ACCOUNT_KEY }}
- name: Reset de postgrest
run: docker restart supabase_rest_tet
Expand Down Expand Up @@ -447,6 +473,11 @@ jobs:
--SERVICE_ROLE_KEY=${{ secrets.SERVICE_ROLE_KEY }}
--ANON_KEY=${{ secrets.ANON_KEY }}
--API_URL=${{ secrets.API_URL }}
--JWT_SECRET=${{ secrets.JWT_SECRET }}
--REFERENTIEL_TE_SHEET_ID=${{ vars.REFERENTIEL_TE_SHEET_ID }}
--INDICATEUR_DEFINITIONS_SHEET_ID=${{ vars.INDICATEUR_DEFINITIONS_SHEET_ID }}
--TRAJECTOIRE_SNBC_XLSX_ID=${{ vars.TRAJECTOIRE_SNBC_XLSX_ID }}
--GCLOUD_SERVICE_ACCOUNT_KEY=${{ secrets.GCLOUD_SERVICE_ACCOUNT_KEY }}
- name: Test curl
run: >
Expand Down Expand Up @@ -493,6 +524,12 @@ jobs:
--SERVICE_ROLE_KEY=${{ secrets.SERVICE_ROLE_KEY }}
--ANON_KEY=${{ secrets.ANON_KEY }}
--API_URL=${{ secrets.API_URL }}
--JWT_SECRET=${{ secrets.JWT_SECRET }}
--REFERENTIEL_TE_SHEET_ID=${{ vars.REFERENTIEL_TE_SHEET_ID }}
--INDICATEUR_DEFINITIONS_SHEET_ID=${{ vars.INDICATEUR_DEFINITIONS_SHEET_ID }}
--TRAJECTOIRE_SNBC_XLSX_ID=${{ vars.TRAJECTOIRE_SNBC_XLSX_ID }}
--GCLOUD_SERVICE_ACCOUNT_KEY=${{ secrets.GCLOUD_SERVICE_ACCOUNT_KEY }}
- name: Test Deploy
run: >
Expand Down Expand Up @@ -552,6 +589,11 @@ jobs:
--SERVICE_ROLE_KEY=${{ secrets.SERVICE_ROLE_KEY }}
--API_URL=${{ secrets.API_URL }}
--ANON_KEY=${{ secrets.ANON_KEY }}
--JWT_SECRET=${{ secrets.JWT_SECRET }}
--REFERENTIEL_TE_SHEET_ID=${{ vars.REFERENTIEL_TE_SHEET_ID }}
--INDICATEUR_DEFINITIONS_SHEET_ID=${{ vars.INDICATEUR_DEFINITIONS_SHEET_ID }}
--TRAJECTOIRE_SNBC_XLSX_ID=${{ vars.TRAJECTOIRE_SNBC_XLSX_ID }}
--GCLOUD_SERVICE_ACCOUNT_KEY=${{ secrets.GCLOUD_SERVICE_ACCOUNT_KEY }}
- run: docker restart supabase_rest_tet

Expand Down
47 changes: 46 additions & 1 deletion Earthfile
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,12 @@ app-deploy:
# BACKEND ENTRYPOINTS
# -------------------

backend-local-seed:
BUILD --pass-args ./backend+local-seed

backend-seed:
BUILD --pass-args ./backend+seed

backend-docker:
BUILD --pass-args ./backend+docker

Expand All @@ -439,6 +445,7 @@ backend-test:
ARG --required TRAJECTOIRE_SNBC_XLSX_ID
ARG --required TRAJECTOIRE_SNBC_RESULT_FOLDER_ID
ARG --required REFERENTIEL_TE_SHEET_ID
ARG --required INDICATEUR_DEFINITIONS_SHEET_ID
ARG --required GCLOUD_SERVICE_ACCOUNT_KEY
ARG --required SUPABASE_DATABASE_URL
ARG --required SUPABASE_URL
Expand Down Expand Up @@ -727,6 +734,11 @@ dev:
ARG --required API_URL
ARG --required ANON_KEY
ARG --required SERVICE_ROLE_KEY
ARG JWT_SECRET
ARG REFERENTIEL_TE_SHEET_ID
ARG INDICATEUR_DEFINITIONS_SHEET_ID
ARG TRAJECTOIRE_SNBC_XLSX_ID
ARG GCLOUD_SERVICE_ACCOUNT_KEY
ARG network=host
ARG stop=yes
ARG datalayer=yes
Expand Down Expand Up @@ -775,6 +787,26 @@ dev:

RUN earthly +load-json --SERVICE_ROLE_KEY=$SERVICE_ROLE_KEY --API_URL=$API_URL

# Seed des indicateurs et des referentiels à partir des spreadsheets
IF [ "$CI" = "true" ]
RUN earthly +backend-seed \

Check failure on line 792 in Earthfile

View workflow job for this annotation

GitHub Actions / Lecture et conversion des fichiers Markdown en JSON

Error

The command RUN earthly +backend-seed --REFERENTIEL_TE_SHEET_ID=$REFERENTIEL_TE_SHEET_ID --INDICATEUR_DEFINITIONS_SHEET_ID=$INDICATEUR_DEFINITIONS_SHEET_ID --GCLOUD_SERVICE_ACCOUNT_KEY=$GCLOUD_SERVICE_ACCOUNT_KEY --SUPABASE_DATABASE_URL=$DB_URL --SUPABASE_ANON_KEY=$ANON_KEY --SUPABASE_SERVICE_ROLE_KEY=$SERVICE_ROLE_KEY --SUPABASE_JWT_SECRET=$JWT_SECRET --SUPABASE_URL=$API_URL --TRAJECTOIRE_SNBC_XLSX_ID=$TRAJECTOIRE_SNBC_XLSX_ID --BREVO_API_KEY=fake --DIRECTUS_API_KEY=fake --TRAJECTOIRE_SNBC_SHEET_ID=fake --TRAJECTOIRE_SNBC_RESULT_FOLDER_ID=fake did not complete successfully. Exit code 1
--REFERENTIEL_TE_SHEET_ID=$REFERENTIEL_TE_SHEET_ID \
--INDICATEUR_DEFINITIONS_SHEET_ID=$INDICATEUR_DEFINITIONS_SHEET_ID \
--GCLOUD_SERVICE_ACCOUNT_KEY=$GCLOUD_SERVICE_ACCOUNT_KEY \
--SUPABASE_DATABASE_URL=$DB_URL \
--SUPABASE_ANON_KEY=$ANON_KEY \
--SUPABASE_SERVICE_ROLE_KEY=$SERVICE_ROLE_KEY \
--SUPABASE_JWT_SECRET=$JWT_SECRET \
--SUPABASE_URL=$API_URL \
--TRAJECTOIRE_SNBC_XLSX_ID=$TRAJECTOIRE_SNBC_XLSX_ID \
--BREVO_API_KEY=fake \
--DIRECTUS_API_KEY=fake \
--TRAJECTOIRE_SNBC_SHEET_ID=fake \
--TRAJECTOIRE_SNBC_RESULT_FOLDER_ID=fake
ELSE
RUN earthly +backend-local-seed
END

# Seed si aucune collectivité en base
RUN docker run --rm \
--network $network \
Expand Down Expand Up @@ -887,6 +919,11 @@ prepare-faster:
ARG --required SERVICE_ROLE_KEY
ARG --required API_URL
ARG --required ANON_KEY
ARG --required JWT_SECRET
ARG --required REFERENTIEL_TE_SHEET_ID
ARG --required INDICATEUR_DEFINITIONS_SHEET_ID
ARG --required TRAJECTOIRE_SNBC_XLSX_ID
ARG --required GCLOUD_SERVICE_ACCOUNT_KEY
LOCALLY
IF [ "$push" = "yes" ]
RUN docker pull $DB_SAVE_IMG_NAME || echo "Image $DB_SAVE_IMG_NAME not found in registry"
Expand All @@ -897,7 +934,15 @@ prepare-faster:
RUN echo "Image $DB_SAVE_IMG_NAME not found, start datalayer"
RUN earthly +dev \
--stop=$stop --business=no --app=no --fast=no \
--DB_URL=$DB_URL --ANON_KEY=$ANON_KEY --SERVICE_ROLE_KEY=$SERVICE_ROLE_KEY --API_URL=$API_URL
--DB_URL=$DB_URL \
--ANON_KEY=$ANON_KEY \
--SERVICE_ROLE_KEY=$SERVICE_ROLE_KEY \
--JWT_SECRET=$JWT_SECRET \
--API_URL=$API_URL \
--REFERENTIEL_TE_SHEET_ID=$REFERENTIEL_TE_SHEET_ID \
--INDICATEUR_DEFINITIONS_SHEET_ID=$INDICATEUR_DEFINITIONS_SHEET_ID \
--TRAJECTOIRE_SNBC_XLSX_ID=$TRAJECTOIRE_SNBC_XLSX_ID \
--GCLOUD_SERVICE_ACCOUNT_KEY=$GCLOUD_SERVICE_ACCOUNT_KEY
RUN earthly +save-db --push=$push
END

Expand Down
60 changes: 54 additions & 6 deletions backend/Earthfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,15 @@ build:

COPY . ./backend

RUN pnpm build:backend
RUN pnpm build:backend

SAVE ARTIFACT dist /dist AS LOCAL earthly-build/dist

local-seed:
LOCALLY
# Trigger import indicateur & referentiel to seed the database
RUN pnpm test:backend --skipNxCache src/indicateurs/import-indicateurs/import-indicateur-definition.controller.e2e-spec.ts src/referentiels/import-referentiel/import-referentiel.controller.e2e-spec.ts

docker:
FROM ../+prod-deps

Expand All @@ -33,6 +38,7 @@ deploy: ## Déploie le backend dans une app Koyeb existante
ARG --required TRAJECTOIRE_SNBC_XLSX_ID
ARG --required TRAJECTOIRE_SNBC_RESULT_FOLDER_ID
ARG --required REFERENTIEL_TE_SHEET_ID
ARG --required INDICATEUR_DEFINITIONS_SHEET_ID
ARG --required DEPLOYMENT_TIMESTAMP
ARG SERVICE_NAME=$ENV_NAME-backend
FROM ../+koyeb --KOYEB_API_KEY=$KOYEB_API_KEY
Expand All @@ -54,16 +60,13 @@ deploy: ## Déploie le backend dans une app Koyeb existante
--env MATTERMOST_NOTIFICATIONS_WEBHOOK_URL=@MATTERMOST_NOTIFICATIONS_WEBHOOK_URL_$ENV_NAME \
--env BREVO_API_KEY=@BREVO_API_KEY \
--env DIRECTUS_API_KEY=@DIRECTUS_API_KEY \
--env REFERENTIEL_TE_SHEET_ID=$REFERENTIEL_TE_SHEET_ID
--env REFERENTIEL_TE_SHEET_ID=$REFERENTIEL_TE_SHEET_ID \
--env INDICATEUR_DEFINITIONS_SHEET_ID=$INDICATEUR_DEFINITIONS_SHEET_ID

test-build: ## construit une image pour exécuter les tests du backend
FROM ../+front-deps
COPY . ./backend

#FROM ../+prod-deps
#ENV SUPABASE_URL
#ENV SUPABASE_ANON_KEY
#ENV SUPABASE_SERVICE_ROLE_KEY
# la commande utilisée pour lancer les tests
CMD pnpm --version && pnpm run test:backend
SAVE IMAGE backend-test:latest
Expand All @@ -73,6 +76,7 @@ test: ## lance les tests
ARG --required TRAJECTOIRE_SNBC_XLSX_ID
ARG --required TRAJECTOIRE_SNBC_RESULT_FOLDER_ID
ARG --required REFERENTIEL_TE_SHEET_ID
ARG --required INDICATEUR_DEFINITIONS_SHEET_ID
ARG --required GCLOUD_SERVICE_ACCOUNT_KEY
ARG --required SUPABASE_DATABASE_URL
ARG --required SUPABASE_URL
Expand All @@ -91,6 +95,7 @@ test: ## lance les tests
--env TRAJECTOIRE_SNBC_XLSX_ID=$TRAJECTOIRE_SNBC_XLSX_ID \
--env TRAJECTOIRE_SNBC_RESULT_FOLDER_ID=$TRAJECTOIRE_SNBC_RESULT_FOLDER_ID \
--env REFERENTIEL_TE_SHEET_ID=$REFERENTIEL_TE_SHEET_ID \
--env INDICATEUR_DEFINITIONS_SHEET_ID=$INDICATEUR_DEFINITIONS_SHEET_ID \
--env GCLOUD_SERVICE_ACCOUNT_KEY=$GCLOUD_SERVICE_ACCOUNT_KEY \
--env SUPABASE_DATABASE_URL=$SUPABASE_DATABASE_URL \
--env SUPABASE_URL=$SUPABASE_URL \
Expand All @@ -101,3 +106,46 @@ test: ## lance les tests
--env DIRECTUS_API_KEY=$DIRECTUS_API_KEY \
backend-test:latest

seed-build: ## construit une image pour exécuter les tests du backend
FROM ../+front-deps
COPY . ./backend

# la commande utilisée pour lancer les tests
CMD pnpm --version && pnpm run test:backend src/indicateurs/import-indicateurs/import-indicateur-definition.controller.e2e-spec.ts src/referentiels/import-referentiel/import-referentiel.controller.e2e-spec.ts
SAVE IMAGE backend-seed:latest

seed: ## lance le seed
ARG --required TRAJECTOIRE_SNBC_SHEET_ID
ARG --required TRAJECTOIRE_SNBC_XLSX_ID
ARG --required TRAJECTOIRE_SNBC_RESULT_FOLDER_ID
ARG --required REFERENTIEL_TE_SHEET_ID
ARG --required INDICATEUR_DEFINITIONS_SHEET_ID
ARG --required GCLOUD_SERVICE_ACCOUNT_KEY
ARG --required SUPABASE_DATABASE_URL
ARG --required SUPABASE_URL
ARG --required SUPABASE_ANON_KEY
ARG --required SUPABASE_SERVICE_ROLE_KEY
ARG --required SUPABASE_JWT_SECRET
ARG --required BREVO_API_KEY
ARG --required DIRECTUS_API_KEY
ARG network=host
LOCALLY
RUN earthly +seed-build
RUN docker run --rm \
--name backend-seed_tet \
--network $network \
--env TRAJECTOIRE_SNBC_SHEET_ID=$TRAJECTOIRE_SNBC_SHEET_ID \
--env TRAJECTOIRE_SNBC_XLSX_ID=$TRAJECTOIRE_SNBC_XLSX_ID \
--env TRAJECTOIRE_SNBC_RESULT_FOLDER_ID=$TRAJECTOIRE_SNBC_RESULT_FOLDER_ID \
--env REFERENTIEL_TE_SHEET_ID=$REFERENTIEL_TE_SHEET_ID \
--env INDICATEUR_DEFINITIONS_SHEET_ID=$INDICATEUR_DEFINITIONS_SHEET_ID \
--env GCLOUD_SERVICE_ACCOUNT_KEY=$GCLOUD_SERVICE_ACCOUNT_KEY \
--env SUPABASE_DATABASE_URL=$SUPABASE_DATABASE_URL \
--env SUPABASE_URL=$SUPABASE_URL \
--env SUPABASE_ANON_KEY=$SUPABASE_ANON_KEY \
--env SUPABASE_SERVICE_ROLE_KEY=$SUPABASE_SERVICE_ROLE_KEY \
--env SUPABASE_JWT_SECRET=$SUPABASE_JWT_SECRET \
--env BREVO_API_KEY=$BREVO_API_KEY \
--env DIRECTUS_API_KEY=$DIRECTUS_API_KEY \
backend-seed:latest

Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,6 @@ export default class ListCategoriesService {
)
: // Récupère seulement les catégories propres à la collectivité
eq(categorieTagTable.collectiviteId, collectiviteId)
);
) as Promise<Tag[]>; // We know that the collectiviteId is not null in this case
}
}
2 changes: 1 addition & 1 deletion backend/src/collectivites/identite-collectivite.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export const identiteCollectiviteSchema = z.object({
soustype: z.nativeEnum(CollectiviteSousTypeEnum).nullable(),
populationTags: z.array(z.nativeEnum(CollectivitePopulationTypeEnum)),
drom: z.boolean().nullable(),
test: z.boolean(),
test: z.boolean().optional(),
});

export type IdentiteCollectivite = z.infer<typeof identiteCollectiviteSchema>;
Expand Down
8 changes: 8 additions & 0 deletions backend/src/collectivites/tags/categorie-tag.table.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
import { collectiviteTable } from '@/backend/collectivites/shared/models/collectivite.table';
import { InferInsertModel, InferSelectModel } from 'drizzle-orm';
import { boolean, integer, pgTable } from 'drizzle-orm/pg-core';
import { createdAt, createdBy } from '../../utils/column.utils';
import { tagTableBase } from './tag.table-base';

export const categorieTagTable = pgTable('categorie_tag', {
...tagTableBase,
collectiviteId: integer('collectivite_id').references(
() => collectiviteTable.id
),
groupementId: integer('groupement_id'), // TODO .references(() => groupementTable.id)
visible: boolean('visible').default(true),
createdAt,
createdBy,
});

export type CategorieTagType = InferSelectModel<typeof categorieTagTable>;
export type CreateCategorieTagType = InferInsertModel<typeof categorieTagTable>;
7 changes: 7 additions & 0 deletions backend/src/collectivites/tags/tag.table-base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,13 @@ export const tagSchema = z.object({
});
export type Tag = z.infer<typeof tagSchema>;

export const tagWithOptionalCollectiviteSchema = tagSchema.extend({
collectiviteId: z.number().optional().nullable(),
});
export type TagWithOptionalCollectivite = z.infer<
typeof tagWithOptionalCollectiviteSchema
>;

export const tagUpdateSchema = tagSchema.partial();
export type TagUpdate = z.input<typeof tagUpdateSchema>;

Expand Down
Loading

0 comments on commit 7ecf723

Please sign in to comment.