- ActorProfileResolver : service unique partage par AbstractAuditSubscriber, EntityVersionService et ModelTypeCategoryConversionService (3 implementations dupliquees+divergentes) - corrige un bug latent : EntityVersionService restoraitsans le fallback Security::getUser, loggant actor=null hors session - machine-clone : clonage des contextFieldValues integre dans cloneComponentLinks/clonePieceLinks, supprime cloneContextFieldValues et son find() en boucle - helpers extraits : serializeProductSlots (EntityVersionService), updateModelTypeCategory (ModelTypeCategoryConversionService) - supprime collectCollectionUpdate() vide + ses appels (AbstractAuditSubscriber) - useMachineDetailData : retire debug ref couplee a isEditMode, componentTypeLabelMap/pieceTypeLabelMap jamais consommes, double assignation machine.productLinks - PieceItem : retire l'init pieceData dans onMounted (deja couvert par reactive() et le watcher) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
42 lines
1.0 KiB
PHP
42 lines
1.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Service;
|
|
|
|
use App\Entity\Profile;
|
|
use Symfony\Bundle\SecurityBundle\Security;
|
|
use Symfony\Component\HttpFoundation\RequestStack;
|
|
use Symfony\Component\HttpFoundation\Session\SessionInterface;
|
|
use Throwable;
|
|
|
|
final class ActorProfileResolver
|
|
{
|
|
public function __construct(
|
|
private readonly RequestStack $requestStack,
|
|
private readonly Security $security,
|
|
) {}
|
|
|
|
public function resolve(): ?string
|
|
{
|
|
try {
|
|
$session = $this->requestStack->getSession();
|
|
if ($session instanceof SessionInterface) {
|
|
$profileId = $session->get('profileId');
|
|
if ($profileId) {
|
|
return (string) $profileId;
|
|
}
|
|
}
|
|
} catch (Throwable) {
|
|
// No session available (CLI context, etc.)
|
|
}
|
|
|
|
$user = $this->security->getUser();
|
|
if ($user instanceof Profile) {
|
|
return $user->getId();
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|