Systemoverblik
Visuelt overblik over platformens komponenter, integrationer og dataflow. Holdes opdateret ved nye tiltag.
Arkitekturdiagram
Sidst opdateret 2026-05-30 · Zoom og pan for at navigere · Alle pile viser dataflow-retning
Beskrivelse af systemet
Kortfattet forklaring af hver komponent og dens rolle i platformen.
Platform
Streetfood Platform er en multi-tenant driftsplatform med tre frontends: Admin (intern drift), Web (kundeside) og Checkin (billetkontrol). Alle apps kommunikerer med én central Fastify API-server via HTTPS med JWT-autentificering.
OnlinePOS → Salgsdata
OnlinePOS leverer kassedata ind i systemet. En auto-fetch scheduler (hvert 15 min, konfigurerbar per afdeling) henter PosSale-rækker via /exportSales/v20/{dato}. Salg mappes til interne afdelinger via terminal-ID. Dataen bruges i dashboardets omsætningsgraf og per-afdelings overblik.
SameSystem → Vagtplaner
SameSystem leverer medarbejdernes vagtplaner og tidsregistreringer. Live-sync kører hvert 5 min (kort vindue: i dag ±1 dag) og planning-sync hvert 30 min (langt vindue: +30 dage). Data mappes via zone-navn til interne afdelinger og vises i dashboardets bemandingspanel.
Slack → Notifikationer
Slack bruges til udgående notifikationer. En scheduler checker hvert minut om medarbejdere har glemt check-ind/ud baseret på AlertScheduleConfig-regler (grace period, prime-time blackout, max daglige forsøg). Beskeder dedupliceres via NotificationLog. I dev-miljø sendes alle beskeder som DM til [email protected].
Job-køer (BullMQ + Redis)
Fire køer håndterer asynkront arbejde: sf.integrations (POS-sync, workforce-sync, prep-tid), sf.notifications (Slack-beskeder, check-in check, kanal-sync), sf.audit (revisionslog) og sf.email (transaktionsmails). Workers kører in-process i dev (WORKERS_ENABLED=true). Dead-letter køer fanger fejlede jobs.
Database (PostgreSQL / Prisma)
PostgreSQL indeholder alle data fordelt på domæner: Sales/POS, Workforce/SameSystem, Bookinger, Events/Billetter, Notifikationer, Auth, Indhold og Konfiguration. Prisma ORM bruges til alle læsninger og skrivninger. Credentials (tokens, passwords) gemmes krypteret og returneres aldrig i API-svar.
Auth-flow
Admin-login: POST /api/auth/login → bcryptjs-verificering → JWT access token (15 min) + refresh token (30 dage, bcryptjs-hashet i DB). Frontend gemmer access token i localStorage/sessionStorage afhængig af "Husk mig". AdminChrome-komponenten refresher proaktivt 2 min før udløb via scheduleProactiveRefresh().
Opdatering af dette overblik
Tilføj en ny node i INITIAL_NODES og en eller flere edges i INITIAL_EDGES i apps/admin/components/settings/system-overview-panel.tsx. Opdater den relevante SUMMARY_SECTIONS-tekst. Commit ændringen — siden er straks opdateret for alle.