pieces->find($id); if (!$piece) { return new JsonResponse( ['message' => 'Pièce introuvable.'], Response::HTTP_NOT_FOUND, ); } $logs = $this->auditLogs->findEntityHistory('piece', $id, 200); $actorIds = array_values(array_unique(array_filter(array_map( static fn ($log) => $log->getActorProfileId(), $logs, )))); $actorMap = []; if ([] !== $actorIds) { $profiles = $this->profiles->findBy(['id' => $actorIds]); foreach ($profiles as $profile) { $label = trim(sprintf('%s %s', $profile->getFirstName(), $profile->getLastName())); if ('' === $label) { $label = $profile->getEmail() ?? $profile->getId(); } $actorMap[$profile->getId()] = $label; } } $items = array_map( static function ($log) use ($actorMap) { $actorId = $log->getActorProfileId(); return [ 'id' => $log->getId(), 'action' => $log->getAction(), 'createdAt' => $log->getCreatedAt()->format(DateTimeInterface::ATOM), 'actor' => $actorId ? [ 'id' => $actorId, 'label' => $actorMap[$actorId] ?? $actorId, ] : null, 'diff' => $log->getDiff(), 'snapshot' => $log->getSnapshot(), ]; }, $logs, ); return new JsonResponse([ 'items' => array_values($items), 'total' => count($items), ]); } }