Files
app/reports/2026-03-12.md
Simon 870d982752 chore: příprava release v1.0.0
- CLAUDE.md: přidány Gitea API credentials a UTF-8 poznámka
- .claude/settings.json: odebrán code-review plugin
- sql/migrate_encrypt_totp_secrets.php: smazán (migrace již proběhla)
- reports/: přidány pracovní reporty z 2026-03-12 a 2026-03-13
- dist: aktualizovány vendor a rate_limits

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 14:14:26 +01:00

2.6 KiB

Report 2026-03-12

Zadání

Implementovat upgrade plan P1-P7 (15 položek) - optimalizace výkonu, udržovatelnosti a UX.

Provedené změny

P1 - Quick wins

  • useDebounce hook (300ms) integrován do useListData - eliminuje API call na každý keystroke
  • DB indexy - migrace 001_add_indexes.sql (attendance, invoices, quotations, refresh_tokens, audit_log)
  • TCPDF odstraněn z composer.json (nepoužívaná závislost)
  • Vite build plugin opraven pro graceful handling bez composer v PATH

P2 - Stránkování

  • PaginationHelper.php - DRY backend pagination (parseParams + paginate)
  • Pagination.jsx - frontend komponenta (prev/next/čísla stránek/info)
  • CSS - .admin-pagination styly
  • Backend handlery refaktorovány: offers, orders, invoices, projects (default 25/stránku)
  • useListData rozšířen o page/perPage/pagination

P3 - Dekompozice velkých komponent

  • Dashboard.jsx (1346 → 378 LOC): 6 subkomponent + dashboardHelpers.js
  • OfferDetail.jsx (1061 → ~530 LOC): useOfferForm hook + OfferCustomerPicker
  • AttendanceAdmin.jsx (1036 → ~275 LOC): useAttendanceAdmin hook + AttendanceShiftTable

P4 - Backend kvalita

  • SELECT * fix - 69+ výskytů ve 22 souborech nahrazeno explicitními sloupci
    • users-handlers.php: password_hash explicitně vyloučen
  • Overdue konsolidace - přesunuto do invoices.php routeru (1x místo 3x)
  • Validator.php - validační helper (required, string, int, email, in, numeric)
  • PaginationHelper - PHPStan typy opraveny

P5 - UX polish

  • NotFound.jsx - 404 stránka místo redirectu na /
  • ErrorBoundary - CSS třídy, DEV error stack, odkaz na Dashboard
  • useFocusTrap hook - Tab cycling, auto-focus, restore focus
  • ConfirmModal - focus trap integrován

P6 - Operační viditelnost

  • audit-log.php - API endpoint s filtrováním a stránkováním
  • AuditLog.jsx - stránka s tabulkou, filtry, skeleton loading
  • Sidebar - položka "Audit log" (settings.audit permission)
  • cleanup.php - CLI script (rate limits >24h, audit log >90 dní)

P7 - FormField komponenta

  • FormField.jsx - wrapper pro label + input + error pattern (aria-invalid)
  • Vehicles.jsx migrováno jako demonstrace

Nalezené problémy

  • Composer není v PATH na tomto stroji → composer remove a composer update je třeba spustit ručně
  • DB migrace (001, 002) je třeba spustit ručně na databázi

Stav

  • ESLint: PASS (0 errors, 0 warnings)
  • PHPCS: PASS (0 errors, 0 warnings on line length)
  • Build: PASS (2155 modules, 2.63s)
  • PHPStan: PASS (0 errors)
  • Git: commitnuto a pushnuto (7 commitů)