Systemet til håndtering af Fælles Vinindkøb
migrations/env.py brugte config.set_main_option() til at dele databasens URL med alembic.ini — det kalder internt Pythons configparser.set(), som fortolker "%" som sin egen interpolations-syntaks og fejler på ethvert kodeord der indeholder et procenttegn (fx fra en almindelig password-generator, eller percent-encoded specialtegn i en URL). Fundet under produktionsopsætning: brugerens Postgres-kodeord indeholdt "%", hvilket crashede `alembic upgrade head` med "ValueError: invalid interpolation syntax". URL'en gemmes nu i config.attributes (en almindelig dict, ingen configparser-fortolkning involveret) i stedet, og engine'en i run_migrations_online bygges direkte med create_engine() i stedet for engine_from_config() (som ellers ville læse URL'en tilbage via configparser igen). Verificeret lokalt med både et normalt DATABASE_URL og et med et bogstaveligt "%" i kodeordet. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|---|---|---|
| admin-ui | ||
| app | ||
| migrations | ||
| scripts | ||
| .env.example | ||
| .gitignore | ||
| .python-version | ||
| alembic.ini | ||
| CLAUDE.md | ||
| INSTALL.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, og INSTALL.md for produktionsopsætning på en server.
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).