0052eab1fe
Modèle et API CRUD du module Tournées (M6.3, scope réduit V0.2 : pas de
rapport de visite, donc TourStop sans report_id ni check-in).
- Entités Tour (table tour) + TourStop (table tour_stop) : #[Auditable],
Timestampable/Blamable, enum TourStatus (draft|planned|in_progress|done),
soft delete sur Tour.
- API Platform : GET/POST/GET/PATCH/DELETE /api/tours (DELETE = soft delete),
sous-ressource POST /api/tours/{tourId}/stops + PATCH/DELETE /api/tour_stops/{id}.
- RG-6.01 : tournée personnelle (TourProvider filtre owner ; admin/Bureau
voient tout). RG-6.03 : adresse appartient au Tiers (TourStopProcessor +
TierAddressResolver DBAL, sans import inter-module). RG-6.07 : pas d'unicité
tier_id. RG-6.12 : cohérence custom/Tiers (Assert\Callback).
- Migration racine : tables + COMMENT ON COLUMN FR + index unique
(tour_id, position) + FK CASCADE ; mirror dans ColumnCommentsCatalog.
- i18n audit (fieldsales_tour / _tourstop), mappings Doctrine + API Platform.
- Tests fonctionnels : owner, RG-6.03/6.07/6.12, pagination, unicité position,
soft delete, RBAC (17 tests).
Co-Authored-By: Matthieu <mtholot19@gmail.com>
41 lines
2.1 KiB
YAML
41 lines
2.1 KiB
YAML
api_platform:
|
|
title: Starseed API
|
|
version: 1.0.0
|
|
# Scan du module Core pour decouvrir les classes ApiResource et ApiFilter.
|
|
# Ajouter un chemin par module lors de l'ajout d'entites ApiResource dans d'autres modules.
|
|
# Sans ces paths, le compile pass d'API Platform ne declare pas les
|
|
# services de filtres annotes (les filtres etaient silencieusement
|
|
# ignores sur Permission — cf. ticket #344).
|
|
mapping:
|
|
paths:
|
|
- '%kernel.project_dir%/src/Module/Core/Domain/Entity'
|
|
# Resources virtuelles (sans entite Doctrine) declarees via #[ApiResource]
|
|
# en dehors de Domain/Entity : AuditLogResource, etc.
|
|
- '%kernel.project_dir%/src/Module/Core/Infrastructure/ApiPlatform/Resource'
|
|
# Module FieldSales (M6) : entites ApiResource Tour / TourStop.
|
|
- '%kernel.project_dir%/src/Module/FieldSales/Domain/Entity'
|
|
formats:
|
|
jsonld: ['application/ld+json']
|
|
json: ['application/json']
|
|
patch_formats:
|
|
json: ['application/merge-patch+json']
|
|
defaults:
|
|
stateless: true
|
|
cache_headers:
|
|
vary: ['Content-Type', 'Authorization', 'Origin']
|
|
# === Pagination Hydra (regle projet : toute collection DOIT etre paginee) ===
|
|
# Standard datatable : 10 items par defaut, choix client 10 / 25 / 50.
|
|
# Borne dure cote serveur a 50 pour prevenir tout `?itemsPerPage=999999`
|
|
# (attaque memoire / deep-fetch). Le client peut neanmoins desactiver la
|
|
# pagination via `?pagination=false` pour alimenter un <select> ou autre
|
|
# vue "tout-en-un" — c'est l'echappatoire prevue pour les ressources
|
|
# servant a la fois de datatable et de source de select (Role,
|
|
# Permission, Site, CategoryType). Override par ressource possible via
|
|
# `paginationItemsPerPage` / `paginationMaximumItemsPerPage` /
|
|
# `paginationEnabled` sur l'attribut #[ApiResource] ou sur une operation.
|
|
pagination_enabled: true
|
|
pagination_items_per_page: 10
|
|
pagination_maximum_items_per_page: 50
|
|
pagination_client_items_per_page: true
|
|
pagination_client_enabled: true
|