CardApiController
extends AbstractController
in package
Contrôleur d'API exposant le catalogue public des modèles de cartes NFC.
Il fournit en lecture seule les cartes du catalogue non masquées (isHide = false),
avec leurs options de couleur, options d'impression, polices, images et spécifications,
telles que mises en forme par CardSerializerService. Aucun contrôle d'accès
n'est appliqué au niveau de la classe : ces points d'entrée sont destinés à alimenter
le tunnel de commande côté client.
Préfixe de route : /api/cards. Aucun rôle requis au niveau de la classe.
Attributes
- #[Route]
- '/api/cards'
- $name: 'api_cards_'
- #[Tag]
- $name: 'Cards'
- $description: 'Gestion des cartes NFC'
Table of Contents
Properties
- $cardSerializer : CardSerializerService
- $entityManager : EntityManagerInterface
- $serializer : SerializerInterface
- $validator : ValidatorInterface
Methods
- __construct() : mixed
- getTypes() : JsonResponse
- Retourne la liste dédoublonnée des types de produits présents au catalogue.
- list() : JsonResponse
- Retourne le catalogue des cartes visibles.
- show() : JsonResponse
- Retourne le détail d'une carte du catalogue.
Properties
$cardSerializer
private
CardSerializerService
$cardSerializer
$entityManager
private
EntityManagerInterface
$entityManager
$serializer
private
SerializerInterface
$serializer
$validator
private
ValidatorInterface
$validator
Methods
__construct()
public
__construct(EntityManagerInterface $entityManager, SerializerInterface $serializer, ValidatorInterface $validator, CardSerializerService $cardSerializer) : mixed
Parameters
- $entityManager : EntityManagerInterface
-
Gestionnaire d'entités Doctrine (injecté, non utilisé par les actions actuelles).
- $serializer : SerializerInterface
-
Sérialiseur Symfony (injecté, non utilisé par les actions actuelles).
- $validator : ValidatorInterface
-
Validateur Symfony (injecté, non utilisé par les actions actuelles).
- $cardSerializer : CardSerializerService
-
Service de mise en forme des cartes en tableaux JSON.
getTypes()
Retourne la liste dédoublonnée des types de produits présents au catalogue.
public
getTypes(CardRepository $cardRepository) : JsonResponse
Parcourt les cartes non masquées et agrège les valeurs distinctes et non vides
de typeProduct (dédoublonnage réalisé en PHP via in_array(), sans requête
SQL dédiée ni tri).
Attention : la route /{id} étant déclarée avant celle-ci, ce point d'entrée
peut être court-circuité par CardApiController::show() lors du routage.
Route : /api/cards/types (GET), nom api_cards_types.
Réponses : 200 systématiquement, avec un tableau (éventuellement vide) de chaînes.
Parameters
- $cardRepository : CardRepository
-
Dépôt utilisé pour charger les cartes non masquées.
Attributes
- #[Get]
- $path: '/api/cards/types'
- $description: 'Récupère la liste des types de produits uniques'
- $summary: 'Liste les types de produits disponibles'
- $tags: ['Cards']
- $responses: [new OA\Response(response: 200, description: 'Liste des types de produits', content: new OA\JsonContent(type: 'array', items: new OA\Items(type: 'string')))]
- #[Route]
- '/types'
- $name: 'types'
- $methods: ['GET']
Return values
JsonResponse —Tableau JSON de chaînes correspondant aux types de produits.
list()
Retourne le catalogue des cartes visibles.
public
list(CardRepository $cardRepository) : JsonResponse
Charge toutes les cartes dont isHide vaut false puis les sérialise via
CardSerializerService::serializeCards(). Aucun filtre, aucune pagination
et aucun tri explicite ne sont appliqués : la réponse est un tableau JSON brut.
Route : /api/cards (GET), nom api_cards_list.
Réponses : 200 systématiquement, avec la liste (éventuellement vide) des cartes.
Parameters
- $cardRepository : CardRepository
-
Dépôt utilisé pour charger les cartes non masquées.
Attributes
- #[Get]
- $path: '/api/cards'
- $description: 'Récupère la liste de toutes les cartes NFC disponibles (non cachées)'
- $summary: 'Liste toutes les cartes disponibles'
- $tags: ['Cards']
- $responses: [new OA\Response(response: 200, description: 'Liste des cartes récupérée avec succès', content: new OA\JsonContent(type: 'array', items: new OA\Items(properties: [new OA\Property(property: 'id', type: 'integer', example: 1), new OA\Property(property: 'name', type: 'string', example: 'Carte NFC Premium'), new OA\Property(property: 'price', type: 'string', example: '29.99'), new OA\Property(property: 'typeProduct', type: 'string', example: 'NFC'), new OA\Property(property: 'description', type: 'string', example: 'Carte de visite NFC premium'), new OA\Property(property: 'colorOptions', type: 'array', items: new OA\Items(properties: [new OA\Property(property: 'id', type: 'integer', example: 1), new OA\Property(property: 'label', type: 'string', example: 'Noir'), new OA\Property(property: 'hexValue', type: 'string', example: '#000000'), new OA\Property(property: 'price', type: 'string', example: '0.00')])), new OA\Property(property: 'printOptions', type: 'array', items: new OA\Items(properties: [new OA\Property(property: 'id', type: 'integer', example: 1), new OA\Property(property: 'label', type: 'string', example: 'Standard'), new OA\Property(property: 'price', type: 'string', example: '0.00'), new OA\Property(property: 'isDefault', type: 'boolean', example: true)])), new OA\Property(property: 'polices', type: 'array', items: new OA\Items(type: 'string')), new OA\Property(property: 'images', type: 'array', items: new OA\Items(type: 'string')), new OA\Property(property: 'specifications', type: 'array', items: new OA\Items(type: 'string'))])))]
- #[Route]
- ''
- $name: 'list'
- $methods: ['GET']
Return values
JsonResponse —Tableau JSON d'objets carte (id, name, price, typeProduct, description, colorOptions, printOptions, polices, images, specifications).
show()
Retourne le détail d'une carte du catalogue.
public
show(int $id, CardRepository $cardRepository) : JsonResponse
Recherche la carte par sa clé primaire. Une carte introuvable et une carte masquée
(isHide = true) sont traitées de façon identique : toutes deux renvoient une 404,
afin de ne pas divulguer l'existence des cartes retirées du catalogue.
Attention : cette route est déclarée avant /types et son paramètre {id} n'est
contraint par aucune exigence, elle capte donc aussi les segments non numériques.
Route : /api/cards/{id} (GET), nom api_cards_show.
Réponses : 200 carte trouvée et visible, 404 carte inexistante ou masquée
(corps {"error": "Carte non trouvée"}).
Parameters
- $id : int
-
Identifiant de la carte, issu du chemin.
- $cardRepository : CardRepository
-
Dépôt utilisé pour retrouver la carte.
Attributes
- #[Get]
- $path: '/api/cards/{id}'
- $description: 'Récupère les détails d\'une carte spécifique'
- $summary: 'Récupère une carte par son ID'
- $tags: ['Cards']
- $parameters: [new OA\Parameter(name: 'id', description: 'ID de la carte', in: 'path', required: true, schema: new OA\Schema(type: 'integer'))]
- $responses: [new OA\Response(response: 200, description: 'Détails de la carte', content: new OA\JsonContent(properties: [new OA\Property(property: 'id', type: 'integer', example: 1), new OA\Property(property: 'name', type: 'string', example: 'Carte NFC Premium'), new OA\Property(property: 'price', type: 'string', example: '29.99'), new OA\Property(property: 'typeProduct', type: 'string', example: 'NFC'), new OA\Property(property: 'description', type: 'string', example: 'Carte de visite NFC premium'), new OA\Property(property: 'colorOptions', type: 'array', items: new OA\Items(properties: [new OA\Property(property: 'id', type: 'integer', example: 1), new OA\Property(property: 'label', type: 'string', example: 'Noir'), new OA\Property(property: 'hexValue', type: 'string', example: '#000000'), new OA\Property(property: 'price', type: 'string', example: '0.00')])), new OA\Property(property: 'printOptions', type: 'array', items: new OA\Items(properties: [new OA\Property(property: 'id', type: 'integer', example: 1), new OA\Property(property: 'label', type: 'string', example: 'Standard'), new OA\Property(property: 'price', type: 'string', example: '0.00'), new OA\Property(property: 'isDefault', type: 'boolean', example: true)])), new OA\Property(property: 'polices', type: 'array', items: new OA\Items(type: 'string')), new OA\Property(property: 'images', type: 'array', items: new OA\Items(type: 'string')), new OA\Property(property: 'specifications', type: 'array', items: new OA\Items(type: 'string'))])), new OA\Response(response: 404, description: 'Carte non trouvée')]
- #[Route]
- '/{id}'
- $name: 'show'
- $methods: ['GET']
Return values
JsonResponse —Objet JSON décrivant la carte, ou message d'erreur.