Repository navigation
v1.0.0
1.0.0 (2026-10-06)
- chore: add CODEOWNERS and document PR reviewers (#81) (ac69548), closes #81
- chore(deps): update dependency mairie360/cicd to v2.3.3 (#54) (1c71faf), closes #54
- chore(deps): update dependency mairie360/cicd to v3 (#76) (685112f), closes #76
- chore(deps): update dependency mairie360/cicd to v3.1.1 (#83) (c18475a), closes #83
- chore(deps): update dependency mairie360/cicd to v4.0.2 (#98) (935f492), closes #98
- chore(deps): update dependency mairie360/cicd to v4.0.3 (#121) (290db44), closes #121
- chore(deps): update dependency mairie360/cicd to v4.0.4 (#123) (630afc7), closes #123
- chore(deps): update ghcr.io/mairie360/database docker tag to v1.3.0 (#58) (dd8cc64), closes #58
- chore(deps): update ghcr.io/mairie360/database docker tag to v1.3.0 (#85) (c8b919e), closes #85
- chore(deps): update ghcr.io/mairie360/liquibase-migrations docker tag to v1.3.0 (#59) (0ad6018), closes #59
- chore(deps): update ghcr.io/mairie360/liquibase-migrations docker tag to v1.3.0 (#86) (410259b), closes #86
- chore(deps): update rust crate mairie360_api_lib to v1.4.0 (#84) (e8aea8f), closes #84
- chore(deps): update rust crate mairie360_api_lib to v1.4.1 (#88) (b4e7ee0), closes #88
- chore(deps): update rust crate mairie360_api_lib to v1.4.2 (#94) (eb8f3c8), closes #94
- chore(deps): update rust crate tokio to v1.53.2 (#119) (b411d10), closes #119
- chore(deps): update rust crate utoipa-swagger-ui to v10.0.1 (#73) (9238055), closes #73
- chore(deps): update rust:1.99-bookworm docker digest to fbc3a35 (#125) (97cfb31), closes #125
- chore(deps): update rust:1.99-slim-bookworm docker digest to 60aef4c (#124) (d9dce3d), closes #124
- fix: Expect 404 for completing an unknown module in the Postman collection (#92) (7e62f2b), closes #92
- fix: MAIR-315 Fix ELearning_API tests against database 1.3.0 password constraint (#90) (e3b5bc7), closes #90
- fix: MAIR-395 [Audit 02/10] ELearning_API : environnement de dev cassé, complétion déclarative, erre (37b4892), closes #97
- fix: MAIR-419 [Audit 02/10] Toutes les APIs : inclure endpoints/ dans le seuil de couverture et test (676daa0), closes #109
- fix: MAIR-420 [Audit 02/10] Toutes les APIs : écritures multi-requêtes sans transaction (#110) (a442bfd), closes #110
- fix: MAIR-422 [Audit 02/10] Toutes les APIs : identifiants u64 tronqués par « as i32 » (#112) (370f18a), closes #112
- fix: MAIR-428 [Audit 02/10] Toutes les APIs : secret JWT HS256 unique partagé, JWT admin de test com (c7cf9de), closes #117
- fix: percent-encode the Postgres credentials in the connection URL (MAIR-171) (#64) (5ce3b5d), closes #64
- fix(deps): update rust crate rust-s3 to 0.38.0 (#120) (9f47497), closes #120
- fix(deps): update utoipa monorepo (major) (#65) (db1c272), closes #65
- ci: MAIR-427 [Audit 02/10] Toutes les APIs : code copié du template à remonter dans API_lib, pipelin (95eb146), closes #116
- ci: run the CI/CD workflow on pull requests (#87) (0965fdc), closes #87
- feat: MAIR-421 [Audit 02/10] Toutes les APIs : erreurs de base avalées sans log ni statut correct (# (fe7f053), closes #111
- feat: MAIR-423 [Audit 02/10] Toutes les APIs : /health ne teste rien et l'API démarre sans base (#11 (e63a3de), closes #113
- feat: MAIR-425 [Audit 02/10] Toutes les APIs : listes sans pagination ni borne, aucun rate limiting (093098b), closes #115
- feat!: MAIR-424 [Audit 02/10] Toutes les APIs : Swagger et OpenAPI servis sans authentification en p (dd501c9), closes #114
- MAIR-117 Improve integration tests (#70) (4da39d6), closes #70
- MAIR-192 Make ZAP scan every operation authenticated (#71) (5bf7454), closes #71
- MAIR-193 Run test stacks against the published dev image (#74) (23ec4b3), closes #74
- MAIR-195 Cover every API operation with k6 and ZAP (#75) (404b8b8), closes #75 #78
- MAIR-223 Protéger les routes admin et le contenu des formations dans ELearning_API (#78) (9d2f689), closes #78
- MAIR-229 Exécuter les conteneurs avec un utilisateur non root (#80) (1b5b3d9), closes #80
BREAKING CHANGE
- POST / is removed from the API and its OpenAPI contract.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
- fix: MAIR-424 Serve the spec in the integration stack too
The Postman collection checks GET /api-docs/openapi.json, which answered
404 once Swagger became opt-in: enable SWAGGER_ENABLED in
docker-compose-integration.yml like in the dev, ZAP and k6 stacks.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
- POST / is removed from the API and its OpenAPI contract.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
- fix: MAIR-424 Serve the spec in the integration stack too
The Postman collection checks GET /api-docs/openapi.json, which answered
404 once Swagger became opt-in: enable SWAGGER_ENABLED in
docker-compose-integration.yml like in the dev, ZAP and k6 stacks.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
- feat: MAIR-425 Paginate the admin catalogue and rate limit /api per user
- GET /api/v1/admin/formations/ takes limit (default 50, capped to 200)
and offset, through the pagination query now shared with
GET /api/v1/admin/users/ (admin::AdminPageQuery). - Rate limit every /api route per authenticated user with actix-governor,
inside JwtMiddleware (the API is only reached through the BFFs, so a
per-IP limit would throttle a whole BFF): 429 with Retry-After,
RATE_LIMIT_PER_SECOND (default 50) and RATE_LIMIT_BURST (default 100).
The ZAP and k6 stacks lift both limits. - Document the 429 on every /api operation and in the status table.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
- ci: MAIR-427 Resync the Dockerfiles, CI workflow and Renovate on the template
- Dockerfile: rust 1.99 like API_template, base images pinned by tag and
digest,cargo build --locked, dependencies built in their own cached
layer. - development.Dockerfile: same toolchain pinned by digest instead of
rust:latest,--lockedbuilds and cargo-watch install. - cicd.yml like the template: pull_request + push on main only, only the
CODECOV_TOKEN and N8N_WEBHOOK_SECRET secrets instead of secrets: inherit,
mairie360/CICD v4.0.2. - renovate.json: one group bumps the
uses:tag andcicd_version
together; managerFilePatterns instead of the deprecated fileMatch. - .dockerignore: keep node_modules, generated and cicd-repo out of the
build context.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com