Aller au contenu

Services métier

Les 26 classes de src/Service portent la logique métier de BCard. Elles sont toutes enregistrées automatiquement comme services Symfony (App\ en autowiring/autoconfiguration, voir config/services.yaml) et injectées dans les contrôleurs, les abonnés d'événements et les autres services qui en ont besoin. Ce document les regroupe par domaine fonctionnel ; le détail de chaque méthode se trouve dans la référence générée à partir des docblocks (voir la dernière section).


Cartes et médias

Service Rôle
BusinessCardGenerationService Crée ou met à jour les cartes de visite des employés d'une commande d'entreprise payée, gère la publication/dépublication d'une carte et ses mises à jour partielles. Voir cartes-et-qrcodes.md.
QRCodeService Génère, régénère, sert au téléchargement et supprime les QR codes des cartes (bibliothèque endroid/qr-code). Voir cartes-et-qrcodes.md.
DefaultProCardService Détermine si un abonné Pro est éligible à la carte physique offerte à sa première commande et, le cas échéant, impose ce modèle au configurateur. Ne modifie rien en base.
LogoManagementService Contrôle l'accès premium au logo et aux couleurs personnalisés d'une carte, valide et stocke le fichier de logo via UploaderService, et calcule les couleurs à afficher.
UploaderService Déplace les fichiers téléversés (CV, photos, brochures) vers leur répertoire de destination sous un nom slugifié et unique, et purge les fichiers associés à une carte lors de sa suppression.
DomPdfService Enveloppe dompdf/dompdf pour convertir du HTML en PDF ; utilisé exclusivement pour les factures de paiement (admin/PaymentController, admin/ProPaymentController), pas pour un export de carte.
CardSerializerService Convertit les entités Card du catalogue de cartes NFC en tableaux pour l'API, en ne retenant que les options de couleur et d'impression actives.
BusinessCardSerializerService Convertit les entités BusinessCardAize en tableaux pour l'API, avec un bloc employee optionnel selon le niveau de détail demandé.
BCardContactSyncService Reporte les informations d'une carte de visite sur un contact existant du carnet d'adresses partageant la même adresse e-mail, déclenché après la création d'une carte.
AIAnalysisService Envoie la photo d'une carte de visite papier à une API d'IA externe (OCR) et normalise la réponse structurée en données prêtes pour la création d'un contact.

Comptes et organisations

Service Rôle
CompanyRegistrationService Pilote le tunnel d'inscription entreprise en plusieurs étapes, en accumulant les données en session jusqu'à la finalisation transactionnelle (création de l'entreprise, de l'abonnement et du paiement, mot de passe temporaire).
EmployeeUserCreationService Provisionne un compte ROLE_EMPLOYEE pour un employé d'entreprise, avec mot de passe temporaire et code d'activation à six chiffres envoyé par e-mail, puis valide ce code à l'activation.
EmailVerificationService Génère, envoie et vérifie le code de vérification d'adresse e-mail à six chiffres utilisé à l'inscription (expiration à 15 minutes, renvoi limité à un intervalle de deux minutes).
AccountDeletionService Orchestre la suppression « RGPD » d'un compte par anonymisation : trace d'audit, anonymisation de l'utilisateur, suppression de ses cartes et contacts, anonymisation de ses commandes, puis notification par e-mail. Refuse les comptes aux rôles administratifs protégés.
RecaptchaService Porte les clés publique et secrète de Google reCAPTCHA configurées pour l'application, sans appeler lui-même l'API de vérification.

Paiements et abonnements

Service Rôle
StripeService Encapsule les appels à l'API Stripe : sessions Checkout hébergées (web) et PaymentIntent (mobile). N'écrit aucune entité locale.
PaymentService Construit en mémoire les entités Payment (sans les persister) et calcule le montant d'un abonnement entreprise à partir du plan, du cycle de facturation et du nombre d'employés.
SubscriptionService Gère le cycle de vie des abonnements : création de l'abonnement gratuit par défaut, activation après paiement, vérification des quotas de cartes et de l'accès aux fonctionnalités premium, abonnements d'entreprise.
PlanService Résout le plan applicable à un utilisateur (abonnement actif, à défaut le plan « Free »), vérifie l'accès à une fonctionnalité, calcule le quota de cartes restantes, les tarifs et remises annuelles.
PredefinedFeaturesService Référentiel en dur (self::FEATURES) des fonctionnalités proposées dans les offres commerciales, avec leur libellé, leur description et leur icône Bootstrap Icons.

Les moyens de paiement credit_card (traité en aval par StripeService), orange_money et cash_on_delivery ne sont pas équivalents en pratique : partout où orange_money est accepté en entrée de formulaire, le chemin échoue systématiquement — par une exception levée immédiatement (PaymentController), un flash d'indisponibilité suivi d'une redirection (SubscriptionController, CompanyPaymentController, admin/CompanyPaymentController, CompanyRegistrationController, ce dernier avec le message « Orange Money bientôt disponible »), ou une réponse JSON explicite (api/SubscriptionApiController). Voir paiements.md pour le détail des flux.


Messagerie

Service Rôle
MailerService Point d'entrée unique pour les e-mails transactionnels : primitives génériques (sendEmail(), sendEmailToMultiple()) et méthodes prêtes à l'emploi (réinitialisation de mot de passe, confirmation d'abonnement, cycle de vie des commandes de carte physique, notification du designer).
BusinessCardEmailService Notifie un employé par e-mail que sa carte de visite digitale est prête, avec le lien public de la carte et, s'il existe, le lien de téléchargement du QR code.

Exploitation

Service Rôle
AuditLogger Écrit les entrées du journal d'audit (AuditLog) sur les actions sensibles portant sur les comptes et les cartes de visite, en résolvant automatiquement l'acteur depuis le contexte de sécurité si non fourni.
SettingsService Donne un accès en lecture seule à l'enregistrement unique de configuration globale du site (Settings).
SeoService Construit les métadonnées SEO et Open Graph d'une page (titre, description, image, URL canonique) pour la durée d'une requête.
RefreshTokenService Gère le cycle de vie des jetons de rafraîchissement JWT de l'API : émission (un seul jeton actif par utilisateur), validation, révocation et purge des jetons expirés.

Consulter la référence détaillée

Chaque service est documenté classe par classe, méthode par méthode, dans la référence du code produite par phpDocumentor à partir des docblocks de src/.