No description
Find a file
2026-08-20 09:45:54 +02:00
.intellipest feat(api): implement tracer bullet for employees and OpenAPI specification 2026-08-12 15:45:29 +02:00
bootstrap feat(console): add ListClients command and related presenters 2026-08-18 12:50:55 +02:00
config fix(quality): resolve PHP_CodeSniffer warnings and errors 2026-08-18 18:25:04 +02:00
database feat(console): add CreateClient command and enforce unique slug for ApiClient 2026-08-18 17:31:29 +02:00
documentation docs: update OpenAPI specification and Bruno collection 2026-08-18 12:09:32 +02:00
public fix(robots): update disallow rule for web crawlers 2026-08-12 17:42:02 +02:00
resources docs(README): update API description and architecture details 2026-08-12 17:00:48 +02:00
routes feat(presentation): implement HMAC authentication middleware, security providers and feature tests 2026-08-18 12:03:32 +02:00
src fix(shared): prevent cross-type equality in EntityId::equals (LSP) 2026-08-20 09:45:54 +02:00
storage feat(api): implement tracer bullet for employees and OpenAPI specification 2026-08-12 15:45:29 +02:00
tests fix(shared): prevent cross-type equality in EntityId::equals (LSP) 2026-08-20 09:45:54 +02:00
.editorconfig feat(api): implement tracer bullet for employees and OpenAPI specification 2026-08-12 15:45:29 +02:00
.env.example feat(infra): add ApiClient Eloquent model, repository adapter, security services, migrations, seeders and tests 2026-08-18 12:03:29 +02:00
.env.testing feat(infra): add ApiClient Eloquent model, repository adapter, security services, migrations, seeders and tests 2026-08-18 12:03:29 +02:00
.gitattributes feat(api): implement tracer bullet for employees and OpenAPI specification 2026-08-12 15:45:29 +02:00
.gitignore chore(composer): update test coverage command to output HTML report 2026-08-13 13:14:42 +02:00
.gitlab-ci.yml ci: add test coverage command to composer scripts 2026-08-13 10:10:15 +02:00
artisan feat(api): implement tracer bullet for employees and OpenAPI specification 2026-08-12 15:45:29 +02:00
composer.json build: require php ^8.5 and remove league/uri dependency 2026-08-17 09:32:49 +02:00
composer.lock build: require php ^8.5 and remove league/uri dependency 2026-08-17 09:32:49 +02:00
phpcs.xml feat(api): implement tracer bullet for employees and OpenAPI specification 2026-08-12 15:45:29 +02:00
phpstan.neon chore(dependencies): update dependencies and add phpstan extension 2026-08-12 16:40:32 +02:00
phpunit.xml chore(config): update phpunit configuration for better error handling 2026-08-14 10:43:09 +02:00
pint.json feat(api): implement tracer bullet for employees and OpenAPI specification 2026-08-12 15:45:29 +02:00
README.md docs(README): update table of contents and link paths 2026-08-13 16:23:19 +02:00
rector.php feat(api): implement tracer bullet for employees and OpenAPI specification 2026-08-12 15:45:29 +02:00

Arcadia API

Arcadia API est une application construite en respectant les principes de la Clean Architecture et du Domain-Driven Design (DDD).

Sommaire


Architecture

Arcadia API Architecture

L'application est découpée en couches strictes respectant la règle de dépendance vers l'intérieur :

  1. Domain : Le coeur métier de l'application utilisant un language commun. Ne dépend de rien d'autre (Shared autorisé). Contient les Entités, Value Objects, et les interfaces (Ports) pour interagir avec le monde extérieur.
  2. Application : Les Use Cases. Orchestre la logique métier en utilisant le Domaine. Ne dépend d'aucune infrastructure ou framework (sauf Shared).
  3. Presentation : Les points d'entrée de l'application (API Controllers, Presenters). Formate les données pour l'extérieur et gère les requêtes HTTP ou une interface cli.
  4. Infra : L'implémentation technique (Eloquent, base de données, réseau, etc.). Implémente les interfaces définies par le Domaine.
  5. Shared : Le socle technique commun (interfaces DDD de base, Value Objects génériques comme Pagination).

Principes d'implémentation

  • API Read-only : Pour l'instant, l'API ne fait qu'exposer des données. Nous utilisons donc le pattern Directory (lecture seule) plutôt que Repository (lecture/écriture) dans nos Ports de Domaine.
  • Pattern Presenter : Les Use Cases (dans Application) retournent un Output agnostique. La couche Presentation utilise ensuite des Presenters spécifiques (ex: API) pour transformer cet Output en une vue exploitable par l'interface finale (JSON).
  • Validation : La validation stricte du format (ex: HTTP) est gérée dans la couche Presentation (via les FormRequest). La validation des règles métier est garantie au coeur du Domain par les Value Objects, qui lèvent des exceptions de type InvalidArgumentException traduites en HTTP 422 par le gestionnaire d'erreurs global.

Gestion des Exceptions

Consulter le document documentation/Exceptions.md pour la matrice complète de correspondance entre le type d'exception (DomainException, ValidationException, NotFoundException, ConflictException) et les codes HTTP RFC 7807 (400, 404, 409, 422, 429, 500).

Tests & Assurance Qualité

Consulter le document documentation/Tests.md pour la stratégie de test en pyramide (Unit, Integration, Feature, Arch) et les commandes d'exécution avec couverture de code.