Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ Plugins use TS module augmentation to extend `ProjectStore` and `Config` interfa

## Database (Prisma)

Multi-file schema in `apps/server/src/prisma/schema/*.prisma` (project, user, token, admin, topography).
Multi-file schema in `packages/database/prisma/schema/*.prisma` (project, user, token, admin, topography).
Migrations: standard Prisma Migrate. Major version data migrations in `migrations/v9/`.

## Environment config
Expand Down
12 changes: 6 additions & 6 deletions apps/client/src/utils/env.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
export const serverHost: string = process.env.SERVER_HOST ?? 'dso-server-host'

export const serverPort: string = process.env.SERVER_PORT ?? 'dso-server-port'
export const serverPort: string = '4001'

export const clientPort: string = process.env.CLIENT_PORT ?? 'dso-client-port'

export const keycloakProtocol: string = process.env.KEYCLOAK_PROTOCOL ?? 'dso-keycloak-protocol'
export const keycloakProtocol: string = 'https'

export const keycloakDomain: string = process.env.KEYCLOAK_DOMAIN ?? 'dso-keycloak-domain'
export const keycloakDomain: string = 'keycloak.dso.cpin-hp.numerique-interieur.fr'

export const keycloakRealm: string = process.env.KEYCLOAK_REALM ?? 'dso-keycloak-realm'
export const keycloakRealm: string = 'dso'

export const keycloakClientId: string = process.env.KEYCLOAK_CLIENT_ID ?? 'dso-keycloak-client-id'
export const keycloakClientId: string = 'console-frontend'

export const keycloakRedirectUri: string = process.env.KEYCLOAK_REDIRECT_URI ?? 'dso-keycloak-redirect-uri'
export const keycloakRedirectUri: string = 'http://localhost:8080'

export const contactEmail: string = process.env.CONTACT_EMAIL ?? 'cloudpinative-relations@interieur.gouv.fr'

Expand Down
11 changes: 5 additions & 6 deletions apps/server-nestjs/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ COPY --chown=node:root apps/server-nestjs/package.json ./apps/server-n
COPY --chown=node:root packages/eslintconfig/package.json ./packages/eslintconfig/package.json
COPY --chown=node:root packages/shared/package.json ./packages/shared/package.json
COPY --chown=node:root packages/logger/package.json ./packages/logger/package.json
COPY --chown=node:root packages/database/package.json ./packages/database/package.json
COPY --chown=node:root packages/hooks/package.json ./packages/hooks/package.json
COPY --chown=node:root packages/test-utils/package.json ./packages/test-utils/package.json
COPY --chown=node:root packages/tsconfig/package.json ./packages/tsconfig/package.json
Expand All @@ -37,11 +38,10 @@ COPY --chown=node:root plugins/ ./plugins/
COPY --chown=node:root packages/ ./packages/
COPY --chown=node:root apps/server-nestjs/ ./apps/server-nestjs/

# Générer le client Prisma (schéma multi-fichiers : pointer sur le dossier)
RUN pnpm --filter @cpn-console/server-nestjs exec prisma generate \
--schema=src/prisma/schema
# Générer le client Prisma depuis le package partagé
RUN pnpm --filter @cpn-console/database run generate

ENTRYPOINT ["pnpm", "--filter", "server-nestjs", "run"]
ENTRYPOINT ["pnpm", "--filter", "@cpn-console/server-nestjs", "run"]
CMD ["start:dev"]

# Build stage ----------------------------------------------------------------------
Expand All @@ -59,6 +59,7 @@ RUN pnpm --filter @cpn-console/server-nestjs run build

# Export @cpn-console/server to target build directory
RUN pnpm --filter @cpn-console/server-nestjs --prod deploy build
RUN cd /app/build && /app/packages/database/node_modules/.bin/prisma generate --schema=node_modules/@cpn-console/database/prisma/schema

# Prod stage -----------------------------------------------------------------------
FROM docker.io/node:24.13.1-bullseye-slim AS prod
Expand All @@ -79,8 +80,6 @@ COPY --chown=node:root --from=build /app/apps/server-nestjs/dist ./dist
# COPY --chown=node:root --from=build /app/build/node_modules ./node_modules

# Regénérer le client Prisma dans l'image de production
RUN npm run db:generate

USER node
EXPOSE 3001

Expand Down
24 changes: 24 additions & 0 deletions apps/server-nestjs/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
PNPM = corepack pnpm

-include .env
ifeq ($(DOCKER),true)
-include .env.docker
endif
ifeq ($(INTEGRATION),true)
-include .env.integ
endif

db-generate:
$(PNPM) --filter @cpn-console/database run generate

db-migrate:
$(PNPM) --filter @cpn-console/database run migrate

db-deploy:
$(PNPM) --filter @cpn-console/database run deploy

db-diff:
$(PNPM) --filter @cpn-console/database run diff

db-reset:
$(PNPM) --filter @cpn-console/database run reset
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@

- Le nginx existant dans l'image `client` proxifiait directement vers `server:8080` — upstream changé vers `nginx-strangler:8080`
- `server-nestjs/src/main.ts` utilisait `process.env.PORT ?? 0` au lieu de `ConfigurationService.port` — corrigé
- Le schéma Prisma de `server-nestjs` est multi-fichiers dans `src/prisma/schema/` — `prisma generate` doit pointer sur le dossier, pas sur `schema.prisma`
- Le schéma Prisma est multi-fichiers dans `packages/database/prisma/schema/` — `prisma generate` doit pointer sur le dossier, pas sur `schema.prisma`
- En CI (`job-lint.yml`), `nginx -t` échoue si `apt-get update -qq` n'est pas exécuté avant l'install, et si les chemins `pid`/`error_log`/`access_log` ne sont pas patchés vers `/tmp/` (runner non-root)
- En CI (`job-playwright.yml`), les images `server-nestjs:ci` et `nginx-strangler:ci` doivent être buildées localement avant le `docker compose up --no-build` (même pattern que `opencds-mockoon`)

Expand Down Expand Up @@ -134,7 +134,7 @@ location = /api/v1/system/health {

### Tâche 2.2 : Créer `apps/server-nestjs/Dockerfile` ✅

Multi-stage : `base` → `deps` → `build` → `prod`. `prisma generate --schema=src/prisma/schema` (dossier multi-fichiers). `USER node`, `HEALTHCHECK`, `EXPOSE 3001`.
Multi-stage : `base` → `deps` → `build` → `prod`. `pnpm --filter @cpn-console/database run generate` (schéma multi-fichiers). `USER node`, `HEALTHCHECK`, `EXPOSE 3001`.

### Tâche 2.3 : `apps/server-nestjs/.env.docker-example` ✅

Expand Down
8 changes: 1 addition & 7 deletions apps/server-nestjs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,20 @@
},
"scripts": {
"build": "nest build",
"db:generate": "prisma generate",
"db:migrate": "prisma migrate dev --name dso",
"db:reset": "prisma migrate reset",
"format": "eslint ./ --fix",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"start": "nest start",
"start:debug": "nest start --debug --watch",
"start:dev": "nest start --watch",
"start:prod": "node dist/main",
"pretest": "pnpm run db:generate",
"test": "vitest run",
"test:watch": "vitest",
"pretest:cov": "pnpm run db:generate",
"test:cov": "vitest run --coverage",
"test:debug": "vitest --inspect"
},
"dependencies": {
"@cpn-console/argocd-plugin": "workspace:^",
"@cpn-console/database": "workspace:^",
"@cpn-console/gitlab-plugin": "workspace:^",
"@cpn-console/harbor-plugin": "workspace:^",
"@cpn-console/hooks": "workspace:^",
Expand Down Expand Up @@ -63,7 +59,6 @@
"@opentelemetry/sdk-metrics": "^2.5.1",
"@opentelemetry/sdk-node": "^0.212.0",
"@opentelemetry/sdk-trace-node": "^2.5.1",
"@prisma/client": "^6.19.2",
"@ts-rest/core": "^3.52.1",
"@ts-rest/fastify": "^3.52.1",
"@ts-rest/open-api": "^3.52.1",
Expand All @@ -76,7 +71,6 @@
"mustache": "^4.2.0",
"nestjs-pino": "^4.6.0",
"pino-http": "^11.0.0",
"prisma": "^6.19.2",
"reflect-metadata": "^0.2.2",
"rxjs": "^7.8.2",
"undici": "^7.24.0",
Expand Down
22 changes: 0 additions & 22 deletions apps/server-nestjs/prisma.config.ts

This file was deleted.

2 changes: 1 addition & 1 deletion apps/server-nestjs/src/__mocks__/prisma.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { PrismaClient } from '@prisma/client'
import type { PrismaClient } from '@cpn-console/database'
import { beforeEach, vi } from 'vitest'
import { mockDeep, mockReset } from 'vitest-mock-extended'

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// @ts-nocheck
import { Prisma } from '@prisma/client'
import { Prisma } from '@cpn-console/database'

// eslint-disable-next-line no-extend-native
BigInt.prototype.toJSON = function () {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { OnModuleDestroy, OnModuleInit } from '@nestjs/common'
import { PrismaClient } from '@cpn-console/database'
import { Injectable } from '@nestjs/common'
import { PrismaClient } from '@prisma/client'

@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { Prisma } from '@prisma/client'
import type { Prisma } from '@cpn-console/database'
import { Inject, Injectable } from '@nestjs/common'
import { PrismaService } from '../../cpin-module/infrastructure/database/prisma.service'

Expand Down
3 changes: 0 additions & 3 deletions apps/server-nestjs/src/prisma/migrations/migration_lock.toml

This file was deleted.

20 changes: 0 additions & 20 deletions apps/server-nestjs/src/prisma/schema/admin.prisma

This file was deleted.

108 changes: 0 additions & 108 deletions apps/server-nestjs/src/prisma/schema/project.prisma

This file was deleted.

7 changes: 4 additions & 3 deletions apps/server/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ COPY --chown=node:root apps/server/package.json ./apps/server/package.json
COPY --chown=node:root packages/eslintconfig/package.json ./packages/eslintconfig/package.json
COPY --chown=node:root packages/shared/package.json ./packages/shared/package.json
COPY --chown=node:root packages/logger/package.json ./packages/logger/package.json
COPY --chown=node:root packages/database/package.json ./packages/database/package.json
COPY --chown=node:root packages/hooks/package.json ./packages/hooks/package.json
COPY --chown=node:root packages/test-utils/package.json ./packages/test-utils/package.json
COPY --chown=node:root packages/tsconfig/package.json ./packages/tsconfig/package.json
Expand All @@ -33,8 +34,8 @@ COPY --chown=node:root packages/ ./packages/

COPY --chown=node:root apps/server/ ./apps/server/
# Generate Prisma client
RUN pnpm --filter server run db:generate
ENTRYPOINT [ "pnpm", "--filter", "server", "run" ]
RUN pnpm --filter @cpn-console/server run db:generate
ENTRYPOINT [ "pnpm", "--filter", "@cpn-console/server", "run" ]
CMD [ "dev" ]


Expand All @@ -47,6 +48,7 @@ RUN pnpm run build
RUN pnpm --filter @cpn-console/server run build
# Export @cpn-console/server to target build directory
RUN pnpm --filter @cpn-console/server --prod deploy build
RUN cd /app/build && /app/packages/database/node_modules/.bin/prisma generate --schema=node_modules/@cpn-console/database/prisma/schema


# Prod stage -----------------------------------------------------------------------
Expand All @@ -61,7 +63,6 @@ RUN mkdir -p /home/node/logs && chmod 770 -R /home/node/logs \
&& mkdir -p /home/node/.npm && chmod 770 -R /home/node/.npm \
&& chown node:root /app
COPY --chown=node:root --from=build /app/build .
RUN npm run db:generate
USER node
EXPOSE 8080
ENTRYPOINT ["npm", "start"]
Loading
Loading