Fix: paginacja Supabase + automatyczny zapis danych o 23:50
Filip Borkowski, Backend/Frontend/Fullstack Engineer
Problem: brak danych za wtorek, środę i czwartek
Panel czas pracy kierowców wyświetlał dane tylko za poniedziałek — reszta tygodnia pokazywała myślniki. Przyczyna była nieoczywista: Supabase PostgREST domyślnie zwraca maksymalnie 1000 wierszy, niezależnie od wartości .limit() w kodzie.
Poniedziałek miał ponad 2500 rekordów w bazie — więc endpoint zwracał dokładnie 1000 rekordów (sam poniedziałek), a wtorek–czwartek nigdy nie trafiały do odpowiedzi.
Rozwiązanie: paginacja pętlą
Zamiast jednego zapytania z limitem, endpoint /api/gbox/history teraz pobiera dane stronicami po 1000 rekordów w pętli, łącząc je w jedną odpowiedź:
const PAGE_SIZE = 1000
let allData = []
let offset = 0
while (true) {
const { data } = await supabase
.from('driver_working_time')
.select('...')
.range(offset, offset + PAGE_SIZE - 1)
if (!data?.length) break
allData = allData.concat(data)
if (data.length < PAGE_SIZE) break
offset += PAGE_SIZE
}
Po naprawie endpoint zwraca ponad 10 000 rekordów obejmujących cały tydzień.
Automatyczny zapis danych o 23:50
Dodano cron job wywoływany przez Vercel każdego dnia o 23:50 czasu warszawskiego. Endpoint /api/cron/daily-persist pobiera dane GBOX z całego bieżącego dnia i zapisuje je do Supabase operacją upsert (idempotentną — bezpieczną do wielokrotnego wywołania).
Dane historyczne od 1 marca 2026 są już w bazie i nie wymagają ponownego pobierania. Cron synchronizuje wyłącznie bieżący dzień.