Gestion des modèles & transfos API (Transformers)

Gestion des modèles & transfos API (Transformers)

Contrôlez précisément ce que votre API renvoie et choisissez les relations à inclure

Transformez les objets métier en réponses JSON claires, sécurisées et prêtes pour le front — avec contrôle fin des relations (auteur, client, moyens de paiement, contenus, etc.).

Cette fonctionnalité (les “Transformers”) génère la représentation API des objets (factures, devis, personnes, organisations, paiements, coordonnées bancaires, soldes, etc.). Elle vous permet d’obtenir un JSON standardisé, d’inclure uniquement les relations dont vous avez besoin et de garantir que les champs sensibles restent masqués. Pour les documents commerciaux, le contrat de transformation (SalesDocumentContract) expose désormais available_recipients_emails : ce champ est inclus dans le payload SalesDocument et contient la liste des adresses e‑mail autorisées à recevoir le document. Notez également que les valeurs énumérées pour le type de document et le régime TVA sont désormais définies dans app/Enums/SalesDocumentBillingType et app/Enums/SalesDocumentVatRegime ; le trait HasTypeAndRegimeAttributes a été ajusté pour exposer les attributs billing_type et vat_regime dans le payload des documents. Le modèle SalesDocumentModel a par ailleurs été enrichi : des attributs optionnels supplémentaires et des inclusions complémentaires peuvent maintenant être exposés par les transformers — consultez le schéma Swagger pour la liste exacte et à jour des champs disponibles.

Important : le TransformController des contacts (personnes/contacts) a été modifié récemment. La structure des payloads Contact/Person a été réorganisée et de nouveaux includes dédiés sont maintenant disponibles (ex. primary_contact, contact_methods, emails, phones, addresses, tags, relationships). Certains anciens includes ont été consolidés ou renommés — vérifiez le schéma Swagger (resources/swagger.yaml) pour la liste exacte et les chemins d’inclusion à utiliser dans vos requêtes.

De plus, le modèle SalesLine a été modifié : les lignes de document peuvent maintenant exposer des montants en devise étrangère via de nouveaux champs (par exemple unit_price_currency, net_amount_currency, vat_amount_currency, gross_amount_currency), ainsi que des métadonnées currency_code et exchange_rate. Selon le transformer, un groupe dédié currency_amounts peut également être fourni. Pour obtenir ces champs, incluez la relation content (ou content.currency_amounts lorsque le transformer le propose).

Capacités clés

Représentations dédiées

Transformers spécialisés pour factures, devis, personnes, organisations, paiements, détails bancaires, soldes… Chaque ressource a une structure claire pensée pour le front.

Includes contrôlables

Demandez les relations précises (ex : author, customer, bank_detail, downpayments) et recevez les objets liés intégrés dans le JSON.

Fallback générique (TrivialTransformer)

Si aucune transformation dédiée n’existe, une transformation générique fournit un tableau lisible et cohérent.

Serializer standardisé

Collections et items sont sérialisés de façon uniforme pour faciliter le traitement côté client.

Masquage des champs sensibles

Seuls les champs autorisés sont exposés ; les données sensibles (ex : tokens, numéros complets non destinés) sont masquées.

Contrôle de performance

Limitez les includes pour éviter d’alourdir la réponse : inclure beaucoup de relations augmente la taille et le temps de traitement.

Inclusions multiples

Vous pouvez combiner plusieurs includes (ex : include=author,customer,bank_detail,available_recipients_emails) pour obtenir un payload riche et prêt à l’affichage.

Adapté aux collections

Fonctionne aussi bien pour un item unique que pour des listes/collections paginées.

Sécurité par conception

Les règles d’exposition respectent la sécurité métier : seuls les champs souhaités et permis sont renvoyés.

How to use it

Étapes pour récupérer une ressource transformée

1

Étape 1 — Choisir la ressource à récupérer

Dans votre interface API ou client HTTP (ex. Postman, Insomnia, ou l’outil intégré), sélectionnez la ressource souhaitée : facture, devis, personne, organisation, paiement, détail bancaire, etc. Ex : « Facture n°123 » ou la liste des factures.

2

Étape 2 — Décider des relations à inclure

Identifiez les relations dont vous avez besoin pour l’affichage : author (auteur), customer (client), bank_detail (coordonnées bancaires), downpayments (acomptes), content (lignes/positions). Pour les ressources de type personne/contact, notez que la structure a changé : vous pouvez maintenant demander des includes dédiés tels que primary_contact, contact_methods (regroupant emails et phones), emails, phones, addresses, tags ou relationships selon vos besoins. Un nouveau champ exposé par le contrat des documents commerciaux (SalesDocumentContract) est available_recipients_emails — il fait partie du payload SalesDocument et renvoie la liste d’adresses e‑mail autorisées à recevoir le document (utile pour les envois/partages côté front). Notez également que le modèle SalesDocumentModel peut exposer des attributs additionnels optionnels (métadonnées, liens de partage, compteurs, etc.) ; pour connaître la liste complète et à jour des champs/inclusions disponibles, consultez le schéma Swagger (resources/swagger.yaml).

Important : les lignes (content) peuvent désormais inclure des champs multi‑devise : unit_price_currency, net_amount_currency, vat_amount_currency, gross_amount_currency, ainsi que currency_code et exchange_rate. Selon le transformer, ces champs peuvent être exposés directement ou regroupés sous currency_amounts.

3

Étape 3 — Construire la requête avec les includes

Dans le client API, ajoutez l’option d’include avec la liste souhaitée. Exemple concret : inclure author et customer pour afficher qui a créé la facture et les informations client. Pour les contacts, utilisez les nouveaux chemins d’inclusion si besoin (ex. include=customer.primary_contact,customer.contact_methods ou include=customer.addresses). Vous pouvez aussi inclure available_recipients_emails pour récupérer la liste d’adresses e‑mail autorisées à recevoir le document. (Astuce : n’ajoutez que ce dont vous avez besoin.)

Pour récupérer les montants en devise étrangère sur chaque ligne, demandez la relation content (ou content.currency_amounts si le transformer le propose).

4

Étape 4 — Envoyer la requête et vérifier la réponse

Envoyez la requête. Vous recevrez un JSON standardisé contenant :

  • l’objet principal (ex. invoice) transformé,
  • les blocs inclus (ex. author, customer, bank_detail, available_recipients_emails) présents sous des clés dédiées. Vérifiez que les champs sensibles ne sont pas présents et que les données nécessaires sont là. Pour les documents commerciaux, le payload contient également les champs billing_type et vat_regime ; leurs valeurs sont normalisées via les enums définis dans app/Enums/SalesDocumentBillingType et app/Enums/SalesDocumentVatRegime. Notez que des attributs additionnels optionnels peuvent également apparaître dans le payload selon la configuration du transformer — référez‑vous au Swagger pour le schéma exact.
5

Étape 5 — Utiliser le JSON côté front

Consommez le JSON pour afficher la vue : titre, totaux, état, contact client, coordonnées bancaires, liste des acomptes, etc. Les relations incluses évitent des appels supplémentaires.

6

Étape 6 — Réduire la charge si nécessaire

Si la réponse est lourde ou lente, réduisez les includes (enlever les relations non critiques), ou demandez seulement la liste sans contenu détaillé. Pour des listes (pagination), limitez les includes aux données essentielles.

7

Étape 7 — Cas de secours : transformation générique

Si aucune transformation dédiée n’existe pour une ressource, le système utilise une transformation générique qui renvoie un tableau lisible et exploitable par le front.

Bonnes pratiques

Demandez uniquement les relations nécessaires pour l’affichage instantané. Par exemple, pour une liste de factures vous pouvez demander seulement customer et totals ; pour la page détail, ajoutez bank_detail, downpayments et éventuellement available_recipients_emails si vous devez afficher ou utiliser les adresses de réception. Pour afficher les montants en devise étrangère des lignes, incluez content (ou content.currency_amounts si disponible). Pour les vues impliquant des contacts, préférez les includes ciblés (ex. customer.primary_contact, customer.contact_methods, customer.addresses) pour éviter des objets trop volumineux. Cela améliore la rapidité et réduit la quantité de données transférées.

Limites & règles importantes

Les Transformers n’exposent que les champs autorisés : les champs sensibles sont masqués par sécurité. De plus, inclure trop de relations dans une même requête peut alourdir fortement la réponse (temps de traitement et taille). Limitez les includes depuis le front et chargez des relations additionnelles uniquement si l’utilisateur les demande.

Exemple de payload : SalesDocument

Voici un exemple simplifié d’un payload SalesDocument tel qu’il peut être renvoyé par les transformers. Selon la version du modèle et les includes demandés, des attributs optionnels supplémentaires peuvent apparaître (métadonnées, liens, compteurs, etc.) — pour le schéma complet et à jour, consultez resources/swagger.yaml.

{ “id”: 123, “number”: “INV-2026-0001”, “title”: “Facture client”, “status”: “issued”, “date”: “2026-04-01”, “due_date”: “2026-04-30”, “totals”: { “net”: 1000.00, “vat”: 200.00, “gross”: 1200.00 }, “billing_type”: “invoice”, // valeur normalisée via SalesDocumentBillingType “vat_regime”: “standard”, // valeur normalisée via SalesDocumentVatRegime “available_recipients_emails”: [ “[email protected]”, “[email protected]” ], “author”: { “id”: 5, “name”: “Alice Dupont”, “email”: “[email protected]” }, “customer”: { “id”: 42, “name”: “Acme SA”, “primary_contact”: { “id”: 7, “first_name”: “Jean”, “last_name”: “Martin”, “email”: “[email protected]” }, “contact_methods”: { “emails”: [ “[email protected]”, “[email protected]” ], “phones”: [ “+33123456789” ] }, “addresses”: { “billing”: { “line1”: “1 Rue Exemple”, “postal_code”: “75001”, “city”: “Paris”, “country”: “FR” } } }, “bank_detail”: { “iban”: “FR76XXXXXXXXXXXX”, “bic”: “AGRIFRPP” }, “content”: [ { “description”: “Service A”, “quantity”: 1, “unit_price”: 1000.00, “unit_price_currency”: 1200.00, // montant en devise étrangère (si demandé) “total_currency”: 1200.00, // total ligne en devise étrangère “currency_code”: “USD”, // code devise de la ligne “exchange_rate”: 1.20 // taux de conversion appliqué } ], “extras”: { “internal_note”: “Préférer envoi par e‑mail”, “attachments_count”: 2 } }

(Le bloc “extras” illustre des attributs additionnels optionnels — leur présence et leur structure sont dépendantes du transformer et du schéma courant.)

FAQ

Frequently Asked Questions

Besoin d’aide ?

Si vous avez des cas d’usage spécifiques (ex : includes complexes pour des vues personnalisées), contactez l’équipe pour optimiser les transformers et éviter des réponses trop lourdes. ::>:

Sinao

Le logiciel de comptabilité simple et puissant. Prenez la main sur vos finances, votre trésorerie et documents pour piloter votre entreprise.

Powered by DeployIt

© 2026 Sinao