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ń.

Więcej artykułów

Naprawa OCR cron, dropdown statusu, animacje tabeli zleceń

Naprawa crona OCR, dropdown statusu z ustawieniami, logika Przetwarzanie AI → in Planing, animacje pulsacji wierszy i wykrzykniki brakujących danych.

Czytaj więcej

Akordeonowy widok korespondencji email i poprawki WorkDesk

Nowy wątkowy widok emaili z animowanymi akordeonami, podgląd treści wiadomości, poprawki WorkDesk i Biblioteki danych.

Czytaj więcej