7d2812cea6
POST /api/carriers/{id}/prices + PATCH/DELETE /api/carrier_prices/{id}
(security transport.carriers.manage) via CarrierPriceProcessor.
RG-4.09->4.11 : coherence de branche CLIENT/FOURNISSEUR (champs requis +
appartenance de l'adresse de livraison au client / de l'adresse d'appro au
fournisseur, sinon 422), nettoyage de la branche opposee (CHECK BDD). Champs
communs obligatoires via Assert\NotBlank + Assert\Choice.
Les contrats Shared ClientAddressInterface / SupplierAddressInterface exposent
desormais getClient() / getSupplier() (canal cross-module, regle n°1) pour la
verification d'appartenance. Colonnes enum du prix whitelistees dans le miroir
Assert\Length (deja bornees par Choice).
29 lines
1.0 KiB
PHP
29 lines
1.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Shared\Domain\Contract;
|
|
|
|
/**
|
|
* Contrat minimal d'une adresse de Client (M1 Commercial) exposable a un autre
|
|
* module sans couplage direct (regle ABSOLUE n°1). Mappe vers
|
|
* App\Module\Commercial\Domain\Entity\ClientAddress via `resolve_target_entities`.
|
|
*
|
|
* Implemente par App\Module\Commercial\Domain\Entity\ClientAddress. Utilise
|
|
* comme type-hint des relations ORM cross-module (ex: CarrierPrice.clientDeliveryAddress,
|
|
* M4). La serialisation passe par le read-group de l'entite concrete
|
|
* (client_address:read), pas par cette interface.
|
|
*/
|
|
interface ClientAddressInterface
|
|
{
|
|
public function getId(): ?int;
|
|
|
|
/**
|
|
* Client parent de l'adresse. Expose le lien inverse sans coupler au module
|
|
* Commercial : permet a un autre module de verifier l'appartenance d'une
|
|
* adresse a un client (ex: CarrierPrice, RG-4.10 — l'adresse de livraison
|
|
* doit appartenir au client choisi). Retour covariant ?Client cote entite.
|
|
*/
|
|
public function getClient(): ?ClientInterface;
|
|
}
|