From c886506791537d7fea4703c9809b739e6b55e242 Mon Sep 17 00:00:00 2001 From: matthieu Date: Wed, 11 Mar 2026 00:00:33 +0100 Subject: [PATCH] fix(time-tracking) : return empty collection instead of 404 for active timer endpoint Co-Authored-By: Claude Opus 4.6 --- frontend/services/time-entries.ts | 5 +++-- src/Entity/TimeEntry.php | 3 ++- src/State/ActiveTimeEntryProvider.php | 8 +++++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/frontend/services/time-entries.ts b/frontend/services/time-entries.ts index a37d766..bc7fde9 100644 --- a/frontend/services/time-entries.ts +++ b/frontend/services/time-entries.ts @@ -24,8 +24,9 @@ export function useTimeEntryService() { async function getActive(): Promise { try { - const result = await api.get('/time_entries/active', {}, { toast: false }) - return result ?? null + const data = await api.get>('/time_entries/active', {}, { toast: false }) + const members = extractHydraMembers(data) + return members[0] ?? null } catch { return null } diff --git a/src/Entity/TimeEntry.php b/src/Entity/TimeEntry.php index 49c1e3a..0d12806 100644 --- a/src/Entity/TimeEntry.php +++ b/src/Entity/TimeEntry.php @@ -25,11 +25,12 @@ use Symfony\Component\Serializer\Attribute\Groups; #[ApiResource( operations: [ new GetCollection(), - new Get( + new GetCollection( name: 'active_time_entry', uriTemplate: '/time_entries/active', provider: ActiveTimeEntryProvider::class, description: 'Get the active timer for the current user', + paginationEnabled: false, ), new Get(), new Post(security: "is_granted('ROLE_USER')"), diff --git a/src/State/ActiveTimeEntryProvider.php b/src/State/ActiveTimeEntryProvider.php index 87b0cf4..f366ec7 100644 --- a/src/State/ActiveTimeEntryProvider.php +++ b/src/State/ActiveTimeEntryProvider.php @@ -20,14 +20,16 @@ final readonly class ActiveTimeEntryProvider implements ProviderInterface private TimeEntryRepository $timeEntryRepository, ) {} - public function provide(Operation $operation, array $uriVariables = [], array $context = []): ?TimeEntry + public function provide(Operation $operation, array $uriVariables = [], array $context = []): array { $user = $this->security->getUser(); if (!$user) { - return null; + return []; } - return $this->timeEntryRepository->findActiveByUser($user); + $entry = $this->timeEntryRepository->findActiveByUser($user); + + return $entry ? [$entry] : []; } }