Systemet til håndtering af Fælles Vinindkøb
Deler 11b op i tre dele under afklaring (runder/vinliste og
mail-skabeloner/annoncering er egne skærme). Denne del bygger den
delte infrastruktur alle senere admin-skærme skal bruge:
- api.ts: autentificeret fetch-wrapper + elevate()/decodeJwtExpiry().
- AuthContext.tsx: session overlever nu en sideopdatering (GET
/auth/me ved appstart). Holder en eksplicit "eleveret
session"-tilstand — react-router-dom + Layout (navbar) +
ParticipantsPage (liste/opret/redigér/hård-sletning).
- Ny GET /routes (minimal, kun læsning, org-scoped) — UI'et skal
kende rutens id for at oprette deltagere; ikke en rute-
indstillings-skærm (den er bevidst udskudt).
To fund fra brugertest, begge rettet:
1. "Slet permanent" krævede kun et klik + en browser-confirm(), og
elevered sig selv usynligt i baggrunden ved hvert klik — det
underminerede hele pointen med en bevidst elevations-handling.
Elevation er nu en synlig, separat handling ("Forhøj
rettigheder"-knap i navbaren); destruktive knapper vises kun mens
en eleveret session er aktiv (udløber automatisk efter ~5 min).
2. GET /participants uden et eksplicit limit ramte API'ets default på
100 — med 308 rigtige deltagere (sorteret efter stigende id)
kunne hverken alle deltagere eller nyoprettede deltagere ses.
ParticipantsPage sender nu limit=500 (API'ets maksimum).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
||
|---|---|---|
| admin-ui | ||
| app | ||
| migrations | ||
| scripts | ||
| .env.example | ||
| .gitignore | ||
| .python-version | ||
| alembic.ini | ||
| CLAUDE.md | ||
| pyproject.toml | ||
| README.md | ||
| uv.lock | ||
Vinindkøb v2
Admin-backend til fælles vinindkøb (FastAPI + SQLModel + PostgreSQL + Alembic). Se CLAUDE.md for projektplan og datamodel.
Kom i gang
uv sync
cp .env.example .env # udfyld DATABASE_URL med din egen Postgres-instans
uv run alembic upgrade head
uv run fastapi dev app/main.py
GET /health bekræfter at appen kan nå databasen.
Admin-UI (React)
Serveres af samme app på et dedikeret domæne (ADMIN_DOMAIN, default
admin.localhost) — se CLAUDE.md's "Admin-UI-arkitektur". Skal bygges
før admin-domænet virker (API'et og den offentlige side kører fint
uden):
cd admin-ui
npm install
npm run build # skriver til ../app/admin_dist
Til udvikling af selve admin-UI'et: npm run dev i admin-ui/
(Vites egen dev-server, proxier API-kald til 127.0.0.1:8001).