BCard - Documentation technique

UserApiController extends AbstractController
in package

Contrôleur d'API dédié au compte utilisateur.

Il couvre la consultation et la mise à jour du profil de l'utilisateur authentifié (informations d'identité, coordonnées, photo de profil), la suppression définitive du compte via AccountDeletionService, ainsi que l'activation administrateur des comptes entreprise. L'authentification s'effectue par jeton JWT (bearerAuth) ; chaque action porte son propre contrôle d'accès.

Préfixe de route : /api/users. Aucun rôle exigé au niveau de la classe.

Attributes
#[Route]
'/api/users'
$name: 'api_users_'
#[Tag]
$name: 'Users'
$description: 'Gestion des utilisateurs'

Table of Contents

Properties

$accountDeletionService  : AccountDeletionService
$entityManager  : EntityManagerInterface
$logger  : LoggerInterface
$uploaderService  : UploaderService

Methods

__construct()  : mixed
activateBusiness()  : JsonResponse
Active le compte d'un utilisateur entreprise (action d'administration).
deleteAccount()  : JsonResponse
Supprime définitivement le compte de l'utilisateur authentifié.
getProfile()  : JsonResponse
Retourne le profil de l'utilisateur authentifié.
updateProfile()  : JsonResponse
Met à jour le profil de l'utilisateur authentifié.

Properties

Methods

__construct()

public __construct(EntityManagerInterface $entityManager, UploaderService $uploaderService, AccountDeletionService $accountDeletionService, LoggerInterface $logger) : mixed
Parameters
$entityManager : EntityManagerInterface

Gestionnaire d'entités Doctrine, utilisé pour persister l'activation des comptes entreprise.

$uploaderService : UploaderService

Service d'upload utilisé pour stocker la photo de profil.

$accountDeletionService : AccountDeletionService

Service encapsulant la suppression et l'anonymisation d'un compte.

$logger : LoggerInterface

Journalisation des échecs de suppression de compte.

activateBusiness()

Active le compte d'un utilisateur entreprise (action d'administration).

public activateBusiness(int $id, UserRepository $userRepository) : JsonResponse

Recherche l'utilisateur ciblé, refuse l'opération s'il n'est rattaché à aucune entreprise (getCompany() vide), puis positionne son indicateur activated à true et persiste la modification. L'appel est idempotent : réactiver un compte déjà actif renvoie le même message de succès.

Route : /api/users/business/activate/{id} (POST), nom api_users_activate_business. Requiert ROLE_ADMIN.

Réponses : 200 compte activé, 400 utilisateur sans entreprise rattachée, 404 utilisateur inexistant, 403 appelant sans ROLE_ADMIN, 401 requête non authentifiée.

Parameters
$id : int

Identifiant de l'utilisateur entreprise à activer.

$userRepository : UserRepository

Dépôt utilisé pour retrouver l'utilisateur.

Attributes
#[IsGranted]
'ROLE_ADMIN'
#[Post]
$path: '/api/users/business/activate/{id}'
$description: 'Permet à un administrateur d\'activer un compte entreprise'
$summary: 'Active un compte entreprise'
$security: [['bearerAuth' => []]]
$tags: ['Users']
$parameters: [new OA\Parameter(name: 'id', description: 'ID de l\'utilisateur entreprise à activer', in: 'path', required: true, schema: new OA\Schema(type: 'integer'))]
$responses: [new OA\Response(response: 200, description: 'Compte entreprise activé avec succès', content: new OA\JsonContent(properties: [new OA\Property(property: 'message', type: 'string', example: 'Compte entreprise activé avec succès')])), new OA\Response(response: 404, description: 'Utilisateur non trouvé'), new OA\Response(response: 403, description: 'Accès refusé - Administrateur requis')]
#[Route]
'/business/activate/{id}'
$name: 'activate_business'
$methods: ['POST']
Return values
JsonResponse

Message de confirmation ou message d'erreur sous la clé error.

deleteAccount()

Supprime définitivement le compte de l'utilisateur authentifié.

public deleteAccount() : JsonResponse

Délègue l'intégralité du traitement à AccountDeletionService::deleteAccount(), qui supprime le compte et anonymise les données historiques associées. Toute exception levée est interceptée, journalisée (message, ligne, fichier) puis convertie en réponse 500 : aucune erreur technique n'est exposée à l'appelant. L'opération est irréversible.

Route : /api/users/profile (DELETE), nom api_users_delete_account. Requiert IS_AUTHENTICATED_FULLY.

Réponses : 200 suppression effectuée, 401 requête non authentifiée, 500 échec de la suppression (exception interceptée et journalisée).

Attributes
#[Delete]
$path: '/api/users/profile'
$description: "Supprime définitivement le compte de l'utilisateur connecté. Cette action est irréversible et anonymise les données historiques."
$summary: "Supprimer mon compte"
$security: [['bearerAuth' => []]]
$tags: ['Users']
$responses: [new OA\Response(response: 200, description: 'Compte supprimé avec succès', content: new OA\JsonContent(properties: [new OA\Property(property: 'message', type: 'string', example: 'Votre compte a été supprimé avec succès')])), new OA\Response(response: 401, description: 'Non authentifié'), new OA\Response(response: 500, description: 'Erreur interne lors de la suppression')]
#[IsGranted]
'IS_AUTHENTICATED_FULLY'
#[Route]
'/profile'
$name: 'delete_account'
$methods: ['DELETE']
Return values
JsonResponse

Message de confirmation, ou {"error": …} en cas d'échec.

getProfile()

Retourne le profil de l'utilisateur authentifié.

public getProfile() : JsonResponse

Construit manuellement la charge utile à partir de l'utilisateur porté par le jeton : aucun groupe de sérialisation n'est employé. Le champ roles est renvoyé bien qu'il ne figure pas dans le schéma OpenApi déclaré sur la méthode.

Route : /api/users/profile (GET), nom api_users_profile. Requiert IS_AUTHENTICATED_FULLY.

Réponses : 200 profil renvoyé, 401 requête non authentifiée (jeton absent ou invalide).

Attributes
#[Get]
$path: '/api/users/profile'
$description: 'Récupère les informations du profil de l\'utilisateur actuellement connecté'
$summary: 'Récupère le profil de l\'utilisateur connecté'
$security: [['bearerAuth' => []]]
$tags: ['Users']
$responses: [new OA\Response(response: 200, description: 'Profil utilisateur récupéré avec succès', content: new OA\JsonContent(properties: [new OA\Property(property: 'id', type: 'integer', example: 1), new OA\Property(property: 'email', type: 'string', example: 'user@example.com'), new OA\Property(property: 'name', type: 'string', example: 'John Doe'), new OA\Property(property: 'phone_number', type: 'string', example: '+33123456789'), new OA\Property(property: 'isActivated', type: 'boolean', example: true), new OA\Property(property: 'position', type: 'string', example: 'Directeur'), new OA\Property(property: 'website', type: 'string', example: 'https://example.com'), new OA\Property(property: 'profil_img', type: 'string', example: 'profile.jpg')])), new OA\Response(response: 401, description: 'Non authentifié')]
#[IsGranted]
'IS_AUTHENTICATED_FULLY'
#[Route]
'/profile'
$name: 'profile'
$methods: ['GET']
Return values
JsonResponse

Objet JSON {id, email, name, phone_number, isActivated, position, website, profil_img, roles}.

updateProfile()

Met à jour le profil de l'utilisateur authentifié.

public updateProfile(Request $request, UserRepository $userRepository, ValidatorInterface $validator, EntityManagerInterface $entityManager) : JsonResponse

Fusionne les paramètres de formulaire (multipart/form-data, ce qui autorise le tunnel _method) avec un éventuel corps JSON, puis applique champ par champ les clés name, phone_number, position et website — seules les clés réellement présentes sont écrites, une chaîne vide écrase donc la valeur existante. L'email, s'il est fourni et non vide, est nettoyé, validé par la contrainte Email puis vérifié en unicité contre les autres comptes avant affectation. Un fichier profil_img déclenche la suppression physique de l'ancienne image dans le répertoire profile_user_directory puis l'upload de la nouvelle via UploaderService::uploadFile(). L'entité est enfin validée globalement avant flush().

Route : /api/users/profile (POST), nom api_users_update_profile. Requiert IS_AUTHENTICATED_FULLY.

Corps attendu (multipart ou JSON, toutes les clés optionnelles) : {"name": "string — nom affiché", "phone_number": "string — téléphone", "position": "string — fonction", "website": "string — URL du site", "email": "string — nouvel email, validé et unique", "profil_img": "file — image de profil (multipart uniquement)"}

Réponses : 200 profil enregistré, 400 email invalide ({"error": …}), 400 email déjà utilisé par un autre compte ({"error": …}), 400 violations de contraintes sur l'entité ({"errors": [...]}), 401 requête non authentifiée.

Parameters
$request : Request

Requête HTTP portant les champs de formulaire, le JSON et le fichier.

$userRepository : UserRepository

Dépôt utilisé pour contrôler l'unicité de l'email.

$validator : ValidatorInterface

Validateur appliqué à l'email puis à l'entité complète.

$entityManager : EntityManagerInterface

Gestionnaire d'entités utilisé pour le flush() final.

Attributes
#[IsGranted]
'IS_AUTHENTICATED_FULLY'
#[Post]
$path: '/api/users/profile'
$description: "Met à jour le profil."
$summary: "Met à jour le profil de l'utilisateur"
$security: [['bearerAuth' => []]]
$requestBody: new OA\RequestBody(required: true, content: new OA\MediaType(mediaType: 'multipart/form-data', schema: new OA\Schema(properties: [new OA\Property(property: 'name', type: 'string', example: 'Naruto Uzumaki'), new OA\Property(property: 'phone_number', type: 'string', example: '+33612345678'), new OA\Property(property: 'position', type: 'string', example: 'Hokage'), new OA\Property(property: 'website', type: 'string', example: 'https://konoha.jp'), new OA\Property(property: 'email', type: 'string', format: 'email', example: 'naruto@gmail.com'), new OA\Property(property: 'profil_img', type: 'string', format: 'binary'), new OA\Property(property: '_method', type: 'string', example: 'PUT')])))
$tags: ['Users']
$responses: [new OA\Response(response: 200, description: 'Profil mis à jour avec succès'), new OA\Response(response: 400, description: 'Données invalides ou email déjà utilisé'), new OA\Response(response: 401, description: 'Non authentifié')]
#[Route]
'/profile'
$name: 'update_profile'
$methods: ['POST']
Return values
JsonResponse

Message de confirmation et sous-objet user (id, email, name, profil_img), ou erreurs de validation.


        
On this page

Search results