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] : []; } }