fix(time-tracking) : return empty collection instead of 404 for active timer endpoint

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-11 00:00:33 +01:00
parent 1efa0fa9ca
commit c886506791
3 changed files with 10 additions and 6 deletions

View File

@@ -24,8 +24,9 @@ export function useTimeEntryService() {
async function getActive(): Promise<TimeEntry | null> {
try {
const result = await api.get<TimeEntry | null>('/time_entries/active', {}, { toast: false })
return result ?? null
const data = await api.get<HydraCollection<TimeEntry>>('/time_entries/active', {}, { toast: false })
const members = extractHydraMembers(data)
return members[0] ?? null
} catch {
return null
}

View File

@@ -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')"),

View File

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