/** * Helpers purs de l'onglet Adresse prestataire (M3 Technique, ERP-143) — miroir * SIMPLIFIE de `supplierFormRules`/`supplierEdit` (M2), reimplemente cote module * Technique (regle ABSOLUE n°1 : pas d'import inter-module). Testables sans Vue. */ import type { ProviderAddressFormDraft } from '~/modules/technique/types/providerForm' /** * Champs scalaires obligatoires non nullable cote back (NotBlank). A la creation * (POST), on OMET du payload ceux qui sont vides pour que la 422 porte la * violation NotBlank propre (sur le champ) plutot qu'une erreur de type. */ const REQUIRED_NON_NULLABLE_KEYS = ['postalCode', 'city', 'street'] as const /** * RG-3.05 (+ RG-3.09) : une adresse est « valide » pour autoriser l'ajout d'un * nouveau bloc des qu'elle porte au moins un site ET au moins une categorie. Les * scalaires (CP/ville/rue) restent valides par le back (422 inline). */ export function isProviderAddressValid(address: ProviderAddressFormDraft): boolean { return address.siteIris.length >= 1 && address.categoryIris.length >= 1 } /** * Payload de la sous-ressource addresses (groupe `provider:write:addresses`). * Relations M2M en IRI. Les scalaires requis vides sont omis a la creation (cf. * REQUIRED_NON_NULLABLE_KEYS). */ export function buildProviderAddressPayload(address: ProviderAddressFormDraft): Record { const payload: Record = { country: address.country, postalCode: address.postalCode || null, city: address.city || null, street: address.street || null, streetComplement: address.streetComplement || null, categories: [...address.categoryIris], sites: [...address.siteIris], contacts: [...address.contactIris], } for (const key of REQUIRED_NON_NULLABLE_KEYS) { const value = payload[key] if (value === null || value === undefined || value === '') { delete payload[key] } } return payload }