ScanController
extends AbstractController
in package
Scan de cartes de visite et création de contacts.
Deux modes de scan sont pris en charge :
- RG1 : carte papier photographiée, analysée par IA pour en extraire les coordonnées ;
- RG2 : QR code d'une carte BCard, résolu par hash public (ou identifiant numérique legacy).
Dans les deux cas, un Contact est créé pour l'utilisateur connecté, après contrôle d'unicité sur l'adresse e-mail.
Préfixe de route : /scan. Authentification requise (IS_AUTHENTICATED).
Attributes
- #[IsGranted]
- 'IS_AUTHENTICATED'
- #[Route]
- '/scan'
Table of Contents
Properties
- $aiAnalysisService : AIAnalysisService
- $businessCardAizeRepository : BusinessCardAizeRepository
- $contactRepository : ContactRepository
- $entityManager : EntityManagerInterface
- $logger : LoggerInterface
- $uploaderService : UploaderService
Methods
- __construct() : mixed
- handlePaperCardScan() : Response
- Analyse la photo d'une carte de visite papier et enregistre le contact extrait.
- scanCard() : Response
- Affiche le formulaire de scan et aiguille le traitement selon le type de scan.
- extractBCardIdFromData() : int|null
- Extrait l'identifiant BCard des données de formulaire.
- handleBCardScan() : Response
- Importe un contact à partir du QR code d'une carte BCard.
Properties
$aiAnalysisService read-only
private
AIAnalysisService
$aiAnalysisService
$businessCardAizeRepository read-only
private
BusinessCardAizeRepository
$businessCardAizeRepository
$contactRepository read-only
private
ContactRepository
$contactRepository
$entityManager read-only
private
EntityManagerInterface
$entityManager
$logger read-only
private
LoggerInterface
$logger
$uploaderService read-only
private
UploaderService
$uploaderService
Methods
__construct()
public
__construct(EntityManagerInterface $entityManager, UploaderService $uploaderService, ContactRepository $contactRepository, BusinessCardAizeRepository $businessCardAizeRepository, AIAnalysisService $aiAnalysisService, LoggerInterface $logger) : mixed
Parameters
- $entityManager : EntityManagerInterface
-
Gestionnaire d'entités Doctrine.
- $uploaderService : UploaderService
-
Upload et stockage des photos de carte.
- $contactRepository : ContactRepository
-
Accès aux contacts de l'utilisateur.
- $businessCardAizeRepository : BusinessCardAizeRepository
-
Accès aux cartes BCard.
- $aiAnalysisService : AIAnalysisService
-
Analyse IA des cartes papier.
- $logger : LoggerInterface
-
Journalisation des erreurs d'analyse.
handlePaperCardScan()
Analyse la photo d'une carte de visite papier et enregistre le contact extrait.
public
handlePaperCardScan(Request $request) : Response
La photo est soumise à l'IA (AIAnalysisService), les coordonnées extraites sont contrôlées contre les contacts existants (unicité de l'e-mail), puis le contact est persisté avec la photo uploadée. Les champs absents sont remplis avec « Non spécifié » ; l'adresse, la ville, le code postal, le pays et le site web sont concaténés dans la note du contact.
Route : /scan/card/paper-scan (POST), nom app_card_paper_scan.
Parameters
- $request : Request
-
Requête contenant le fichier
photo.
Attributes
- #[Route]
- '/card/paper-scan'
- $name: 'app_card_paper_scan'
- $methods: ['POST']
Return values
Response —Réponse JSON : success, message, éventuellement messageType
et redirect_url. Statut 400 si la photo est absente, invalide,
illisible par l'IA, ou si le contact existe déjà.
scanCard()
Affiche le formulaire de scan et aiguille le traitement selon le type de scan.
public
scanCard(Request $request) : Response
En GET, rend la page de scan. En POST, délègue à self::handlePaperCardScan()
pour une carte papier (scan_type = paper) ou à handleBCardScan() pour un
QR code BCard (scan_type = bcard).
Route : /scan/card (GET, POST), nom app_scan_card.
Parameters
- $request : Request
-
Requête contenant
scan_type,activity_sector,country,noteetbcard_identifier.
Attributes
- #[Route]
- '/card'
- $name: 'app_scan_card'
- $methods: ['GET', 'POST']
Return values
Response —Réponse JSON pour un scan papier, redirection pour un scan BCard, ou page HTML de scan sinon.
extractBCardIdFromData()
Extrait l'identifiant BCard des données de formulaire.
private
extractBCardIdFromData(array<string, mixed> $data) : int|null
La méthode extractBCardIdFromData n'est plus utilisée directement, l'extraction se fait maintenant via handleBCardScan qui gère Hash et ID.
Parameters
- $data : array<string, mixed>
-
Données du formulaire de scan.
Return values
int|null —Toujours null : l'implémentation a été vidée.
handleBCardScan()
Importe un contact à partir du QR code d'une carte BCard.
private
handleBCardScan(array<string, mixed> $data) : Response
L'identifiant est résolu d'abord par publicHash, puis — en repli et uniquement
s'il est numérique et de longueur inférieure à 20 — par identifiant primaire
(compatibilité avec les anciens QR codes). Le contact n'est créé que si son
e-mail n'est pas déjà présent dans le réseau de l'utilisateur.
Parameters
- $data : array<string, mixed>
-
Données du formulaire :
bcard_identifier,activity_sector,country.
Return values
Response —Redirection vers la liste des contacts en cas de succès, vers la page de scan sinon (message flash d'erreur).