Skip to content

Adresse postale (privée)

Adresse postale stockée dans la table user_address (clé primaire = user_id, donc 0 ou 1 adresse par utilisateur). Données strictement privées : aucun endpoint public ni paramétré ne les expose ; seules les 3 routes ci-dessous, toutes derrière l’AuthenticationMiddleware, opèrent — et toujours sur l’utilisateur authentifié, jamais sur un id transmis dans l’URL.

Champs exposés aujourd’hui (les colonnes city_id et region du schéma sont délibérément ignorées en attendant la fonctionnalité d’autocomplétion ville) :

AttributTypeMaxNotes
unitNumberstring | null10Appartement / étage / lot.
streetNumberstring | null10Numéro de voie.
addressLine1string | null150Ligne principale (rue, voie).
addressLine2string | null150Complément (bâtiment, résidence).
postalCodestring | null10Code postal.
updatedAtstring | nullISO 8601, null tant qu’aucun update n’a eu lieu.
createdAtstring | nullISO 8601, null si l’utilisateur n’a jamais rempli son adresse.

Sémantique des mutations :

  • PATCH est strictement partiel : un champ absent n’est pas touché.
  • Un champ explicitement null (ou chaîne vide après trim) efface la colonne (= NULL en base).
  • DELETE retire la ligne entière (retour à “aucune adresse”). Idempotent.

Validation : tout-ou-rien. La moindre erreur sur un champ rejette le PATCH complet en 422 (mirror de PATCH /users/me/settings).


  • Auth : requise (Bearer)
  • Action : GetMyAddressAction
  • Réponse 200 OK — forme stable même quand aucune ligne n’existe (tous les champs sont alors null) :
{
"jsonapi": { "version": "1.1" },
"data": {
"type": "userAddresses",
"id": "<userUuid>",
"attributes": {
"unitNumber": "3A",
"streetNumber": "12",
"addressLine1": "rue de Rivoli",
"addressLine2": null,
"postalCode": "75001",
"updatedAt": "2026-06-07T12:34:56+00:00",
"createdAt": "2026-06-07T10:00:00+00:00"
}
}
}

Crée la ligne si elle n’existe pas encore (upsert implicite via ON DUPLICATE KEY UPDATE).

{ "addressLine1": "12 rue de Rivoli", "postalCode": "75001" }
  • Effacer un champ : envoyer null ou "" :
{ "addressLine2": null }
  • Erreurs 422 (par champ, avec meta.code) :
    • address.unknownField — clé hors whitelist
    • address.expectedStringOrNull — valeur non scalaire (number, array, bool…)
    • address.tooLong — dépasse la longueur maxi de la colonne
  • Erreur 400 : corps non-JSON ou non-objet.
  • Réponse 200 OK : snapshot complet post-update + meta.appliedKeys (clés camelCase effectivement écrites).

  • Auth : requise (Bearer)
  • Action : DeleteMyAddressAction
  • Idempotent : 204 même si l’utilisateur n’avait pas d’adresse.
  • Réponse 204 No Content (corps vide).