Admin

Arkitekturdiagram

Sidst opdateret 2026-05-30 · Zoom og pan for at navigere · Alle pile viser dataflow-retning

Mini Map
FrontendsAPI ServerDatabaseQueue / WorkersInbound integrationerOutbound (Slack)Outbound (AI)

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.