BCard - Documentation technique

BusinessCardGenerationService
in package

Service pour la génération automatique des cartes de visite d'employés après une commande d'entreprise réussie

Il parcourt les lignes d'une commande payée pour créer ou mettre à jour la BusinessCardAize de chaque employé, calcule leur hash public, délègue la fabrication du QR Code à QRCodeService, puis gère le cycle de vie brouillon / publication, la publication déclenchant l'envoi de l'e-mail via BusinessCardEmailService. Les écritures sont réalisées via Doctrine, la génération pour une commande étant encadrée par une transaction.

Table of Contents

Properties

$businessCardRepository  : BusinessCardAizeRepository
$emailService  : BusinessCardEmailService
$employeeRepository  : EmployeeRepository
$entityManager  : EntityManagerInterface
$logger  : LoggerInterface
$qrCodeService  : QRCodeService
$requestStack  : RequestStack

Methods

__construct()  : mixed
findEligibleEmployeesWithoutCards()  : array<int, Employee>
Trouve les employés éligibles pour la création de cartes (avec commandes validées)
generateBusinessCardsForOrder()  : BusinessCardAize>, errors: list}
Génère automatiquement les cartes de visite pour tous les employés d'une commande après un paiement réussi
getEmployeesWithoutBusinessCard()  : array<int, Employee>
Retourne la liste des employés d'une commande qui n'ont pas encore de carte de visite
hasEmployeesWithoutBusinessCard()  : bool
Vérifie si une commande contient des employés sans carte de visite
publishBusinessCard()  : bool
Publie une carte de visite et envoie l'email à l'employé
setAsDraft()  : bool
Remet une carte en brouillon
updateBusinessCard()  : BusinessCardAize
Met à jour une carte de visite existante avec de nouvelles informations
createBusinessCardForEmployee()  : BusinessCardAize
Crée ou met à jour une carte de visite pour un employé

Properties

Methods

__construct()

public __construct(EntityManagerInterface $entityManager, BusinessCardAizeRepository $businessCardRepository, EmployeeRepository $employeeRepository, QRCodeService $qrCodeService, LoggerInterface $logger, BusinessCardEmailService $emailService, RequestStack $requestStack) : mixed
Parameters
$entityManager : EntityManagerInterface

Transactions, persistance et flush des cartes.

$businessCardRepository : BusinessCardAizeRepository

Accès au dépôt des cartes de visite.

$employeeRepository : EmployeeRepository

Contrôle des commandes validées et recherche des employés éligibles.

$qrCodeService : QRCodeService

Génération du fichier QR Code de la carte.

$logger : LoggerInterface

Journalisation du déroulement et des erreurs.

$emailService : BusinessCardEmailService

Envoi de l'e-mail de mise à disposition à la publication.

$requestStack : RequestStack

Détermination de l'URL de base encodée dans le QR Code.

findEligibleEmployeesWithoutCards()

Trouve les employés éligibles pour la création de cartes (avec commandes validées)

public findEligibleEmployeesWithoutCards(User $company) : array<int, Employee>

Simple délégation à EmployeeRepository::findWithValidatedOrderButNoBusinessCard(). Lecture seule, sans effet de bord.

Parameters
$company : User

Compte gestionnaire de l'entreprise servant de filtre à la requête.

Return values
array<int, Employee>

Employés disposant d'une commande validée mais sans carte de visite.

generateBusinessCardsForOrder()

Génère automatiquement les cartes de visite pour tous les employés d'une commande après un paiement réussi

public generateBusinessCardsForOrder(Order $order) : BusinessCardAize>, errors: list}

Ouvre une transaction et itère sur les lignes de la commande : les lignes sans employé sont ignorées avec un avertissement. Pour chaque employé, la carte est créée ou mise à jour via BusinessCardGenerationService::createBusinessCardForEmployee() ; une erreur sur un employé est capturée, journalisée et accumulée dans le tableau errors sans interrompre le traitement des suivants. La transaction est ensuite validée.

Effets de bord : transaction Doctrine, persistance et flush des cartes, génération de fichiers QR Code, journalisation.

Parameters
$order : Order

Commande payée dont les lignes portent les employés à équiper.

Tags
throws
Exception

Si une erreur survient hors du traitement d'un employé : la transaction est alors annulée et l'exception relancée.

Return values
BusinessCardAize>, errors: list}

Cartes créées ou mises à jour et liste des échecs individuels.

getEmployeesWithoutBusinessCard()

Retourne la liste des employés d'une commande qui n'ont pas encore de carte de visite

public getEmployeesWithoutBusinessCard(Order $order) : array<int, Employee>

Accumule les employés des lignes de commande dépourvus de carte. Un même employé présent sur plusieurs lignes peut donc apparaître plusieurs fois. Lecture seule, sans effet de bord.

Parameters
$order : Order

Commande à inspecter.

Return values
array<int, Employee>

Employés sans carte de visite, dans l'ordre des lignes de commande.

hasEmployeesWithoutBusinessCard()

Vérifie si une commande contient des employés sans carte de visite

public hasEmployeesWithoutBusinessCard(Order $order) : bool

Parcourt les lignes de la commande et retourne true dès qu'une ligne porte un employé ne possédant pas encore de carte. Lecture seule, sans effet de bord.

Parameters
$order : Order

Commande à inspecter.

Return values
bool

true si au moins un employé de la commande n'a pas de carte de visite.

publishBusinessCard()

Publie une carte de visite et envoie l'email à l'employé

public publishBusinessCard(BusinessCardAize $businessCard) : bool

Refuse la publication (retour false) si la carte est déjà publiée, ou si elle n'a pas d'employé rattaché ou que celui-ci n'a aucune commande validée. Sinon, appelle BusinessCardAize::publish(), flushe, puis déclenche BusinessCardEmailService::sendBusinessCardEmail(). Un échec d'envoi n'annule pas la publication : il est seulement journalisé en warning et la méthode retourne quand même true. Un second flush() est effectué en cas de succès de l'envoi pour enregistrer la date d'envoi de l'e-mail.

Effets de bord : écriture en base, envoi d'e-mail, journalisation.

Parameters
$businessCard : BusinessCardAize

Carte à publier.

Return values
bool

true si la carte a été publiée (même si l'e-mail a échoué), false si une précondition n'est pas remplie ou si une exception a été capturée.

setAsDraft()

Remet une carte en brouillon

public setAsDraft(BusinessCardAize $businessCard) : bool

Appelle BusinessCardAize::setAsDraft() puis flushe. Aucun e-mail n'est envoyé et aucune précondition n'est vérifiée. Toute exception est capturée et journalisée en error.

Effet de bord : flush() de l'EntityManager, journalisation.

Parameters
$businessCard : BusinessCardAize

Carte à dépublier.

Return values
bool

true en cas de succès, false si une exception a été capturée.

updateBusinessCard()

Met à jour une carte de visite existante avec de nouvelles informations

public updateBusinessCard(BusinessCardAize $businessCard, array<string, mixed> $data) : BusinessCardAize

Applique une mise à jour partielle : seules les clés présentes dans $data sont recopiées (test isset, une valeur null explicite est donc ignorée). Les autres champs de la carte restent inchangés. Les modifications sont immédiatement flushées.

Effet de bord : flush() de l'EntityManager.

Parameters
$businessCard : BusinessCardAize

Carte à modifier (entité managée).

$data : array<string, mixed>

Champs acceptés : firstName, lastName, email, phoneNumber, jobTitle, website, address, linkedin, twitter, facebook, instagram, bio, additionalInfo.

Return values
BusinessCardAize

La même instance de carte, mise à jour.

createBusinessCardForEmployee()

Crée ou met à jour une carte de visite pour un employé

private createBusinessCardForEmployee(Employee $employee, OrderItem $orderItem) : BusinessCardAize

Exige d'abord que l'employé possède une commande validée (EmployeeRepository::hasValidatedOrder()), faute de quoi une exception est levée. Réutilise la carte existante de l'employé si elle existe, sinon en instancie une nouvelle au statut BusinessCardAize::STATUS_DRAFT avec la date de création courante. Dans les deux cas, la carte est rattachée au compte User dont l'e-mail correspond à celui de l'employé, s'il en existe un. Les informations d'identité, de contact, de poste et d'entreprise sont recopiées depuis l'employé, et la carte du catalogue commandée est associée depuis la ligne de commande.

La carte est ensuite persistée et flushée pour obtenir un identifiant ; si son hash public est absent, il est calculé par hash_hmac('sha256', id, APP_SECRET) puis flushé. Le QR Code est enfin généré par QRCodeService::generateQRCodeByHash() sur la base de l'URL de la requête courante suffixée par /bcard (repli sur https://card.binn.pro/bcard hors contexte HTTP). Une erreur de génération du QR Code est capturée et seulement journalisée en warning : la carte reste créée, sans chemin de QR Code.

Effets de bord : plusieurs flush(), écriture d'un fichier QR Code, journalisation.

Parameters
$employee : Employee

Employé bénéficiaire de la carte.

$orderItem : OrderItem

Ligne de commande fournissant le modèle de carte associé.

Tags
throws
Exception

Si l'employé n'a aucune commande validée.

Return values
BusinessCardAize

Carte créée ou mise à jour, déjà persistée.


        
On this page

Search results