Aller au contenu principal

Utilisateurs

Profil (GET /user/profile)

Objet le plus complet du domaine utilisateur — c'est celui que consomme la page Profil :

{
id: number;
username: string;
first_name: string;
last_name: string;
job: string;
location: string;
phone: string;
phone_verified: string;
email: string;
email_verified: string;
avatar: string;
role: string;
email_verified_at: string;
is_active: string;
last_login: string;
time_zone: string;
created_at: string;
updated_at: string;
// Champs KYC / propriétaire (voir "Devenir propriétaire" ci-dessous)
user_type: string;
company_name: string;
country_region: string;
id_type: string;
id_number: string;
id_expiry_date: string;
id_photo_path: string;
place_type: string;
place_details: string;
address: string;
city: string;
state: string;
postal_code: string;
country: string;
latitude: string;
longitude: string;
}
Types dupliqués

Le code contient trois variantes de l'objet utilisateur (Account, User, ProfileResponse) qui décrivent globalement les mêmes champs mais avec des types différents pour les mêmes clés : is_active est tantôt boolean, tantôt number (0/1), tantôt string ("0"/"1") selon la variante ; email_verified est tantôt number tantôt string. Il existe même deux définitions incompatibles nommées ProfileResponse dans le code (l'une plate comme ci-dessus, l'autre enveloppant { user: Account }) — celle réellement utilisée par l'appel GET /user/profile est la version plate. Ne présumez pas du type d'un champ booléen sans vérifier la réponse réelle.

Mise à jour (PUT /user/update)

Envoyée en multipart/form-data ; tous les champs sont optionnels (seuls les champs fournis sont transmis) :

{
user_id?: number; // admin/support uniquement : id de l'utilisateur ciblé
is_active?: boolean; // admin/support uniquement : activer/désactiver le compte ciblé
username?: string;
first_name?: string;
last_name?: string;
location?: string;
email?: string;
avatar?: File; // jpeg/jpg/png/gif uniquement
phone?: string;
password?: string;
password_confirmation?: string;
// + les champs KYC listés ci-dessus (user_type, id_type, address, etc.)
}

Les booléens sont sérialisés en chaînes "1"/"0" dans le FormData. Le fichier avatar est validé côté client (type MIME, nom de fichier assaini) avant l'envoi.

Devenir propriétaire (POST /user/become-owner)

Formulaire de vérification d'identité (KYC), envoyé en multipart/form-data :

{
user_type: "individual" | "company";
country_region: string;
id_type: "identity_card" | "passport" | "driver_licence";
id_number: string;
id_expiry_date: string;
id_reco_path: File; // recto pièce d'identité — image ou PDF, 5 Mo max
id_verso_path: File; // verso pièce d'identité — mêmes contraintes
place_type: string;
place_details: string;
address: string;
city: string;
state: string;
postal_code: string;
country: string;
longitude: number;
latitude: number;
company_document?: File; // requis si user_type === "company"
}
Bug potentiel

Le schéma de validation exige company_document lorsque user_type vaut "company", mais la fonction d'envoi réelle n'ajoute jamais ce champ au FormData transmis à l'API — une inscription "entreprise" ne transmet donc pas le document malgré la validation qui l'exige côté formulaire. À vérifier/corriger côté produit.

Modération des demandes propriétaire (support)

EndpointUsage
GET /user/owner-requestsListe des demandes en attente
POST /user/{id}/approve-ownerApprouver une demande
POST /user/{id}/reject-ownerRejeter une demande
POST /user/accept-owner-request/{id}Variante d'acceptation, renvoie la demande complète
GET /user/owner-request-statusStatut de la demande de l'utilisateur connecté (chaîne simple)

Autres endpoints

EndpointUsage
GET /user/list, GET /user/{id}Liste et détail
GET /user/search-userRecherche
GET /user/individuals, GET /user/companiesFiltrage par type de compte
GET /user/{userId}/statsStatistiques d'un utilisateur
DELETE /user/deleteSuppression d'un compte
POST /user/admin-support/assignAssignation automatique d'un agent support