feat: Projektfundament mit Datenmodell, Migrationen und Seed

- Repo-Struktur für Backend, Frontend, Dokumentation und Gitea-Workflows
- FastAPI-Skeleton mit pydantic-settings und RFC-7807-artigem Fehlerformat
- Vollständiges Datenmodell (15 Tabellen) als SQLAlchemy-2.0-Modelle
- Alembic gegen die Async-Engine inklusive Erstmigration
- Idempotenter Seed für den deutschen Kategoriebaum und Standardregeln
- Endpunkte /api/health und /api/version
- pytest-Infrastruktur mit transaktionsisolierten Fixtures

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014e7t8UpmoVNMtWivY5LiSH
This commit is contained in:
moneyfy
2026-09-09 13:12:08 +02:00
co-authored by Claude Opus 5
commit 0b06775be3
40 changed files with 2236 additions and 0 deletions
+72
View File
@@ -0,0 +1,72 @@
# =============================================================================
# moneyfy Beispielkonfiguration
# Kopieren nach `.env` und anpassen. Niemals echte Secrets committen.
# =============================================================================
# --- Allgemein ---------------------------------------------------------------
ENVIRONMENT=production # development | production | test
DEBUG=false
TIMEZONE=Europe/Berlin # Durchgängige Zeitzone der Anwendung
HOLIDAY_REGION=DE-NW # Feiertagsregion für Werktagsverschiebungen
DEFAULT_CURRENCY=EUR
# Öffentliche Basis-URL, u. a. für Links in Benachrichtigungen
PUBLIC_BASE_URL=https://moneyfy.menzel.center
# Image-Tag, den docker-compose zieht (main, 0.1.0, latest, sha-abc1234)
TAG=latest
# --- Datenbank ---------------------------------------------------------------
POSTGRES_DB=moneyfy
POSTGRES_USER=moneyfy
POSTGRES_PASSWORD=bitte-aendern
# Vom Backend genutzte DSN. `postgresql://` wird automatisch auf asyncpg umgestellt.
DATABASE_URL=postgresql+asyncpg://moneyfy:bitte-aendern@moneyfy-db:5432/moneyfy
# --- Sicherheit --------------------------------------------------------------
# Signaturschlüssel für JWTs. Erzeugen mit: openssl rand -hex 32
SECRET_KEY=bitte-aendern
ACCESS_TOKEN_TTL_MINUTES=30
REFRESH_TOKEN_TTL_DAYS=14
COOKIE_SECURE=true # Hinter HTTPS-Proxy true, für lokales HTTP false
COOKIE_DOMAIN=
# Wird beim ersten Start angelegt (danach mit erzwungenem Passwortwechsel).
MONEYFY_ADMIN_USER=admin
MONEYFY_ADMIN_PASSWORD=bitte-aendern
# --- OIDC (vorbereitet, noch nicht implementiert) ----------------------------
OIDC_ENABLED=false
OIDC_ISSUER=
OIDC_CLIENT_ID=
OIDC_CLIENT_SECRET=
OIDC_SCOPES=openid profile email
# --- Logo-Service ------------------------------------------------------------
# Verzeichnis für den lokalen Logo-Cache (im Container auf das Volume gemountet).
LOGO_STORAGE_DIR=/data/logos
# Optionale Provider. Ohne Key wird der jeweilige Adapter übersprungen.
LOGODEV_API_KEY=
BRANDFETCH_API_KEY=
LOGO_HTTP_TIMEOUT_SECONDS=5
LOGO_HTTP_RETRIES=2
LOGO_MAX_UPLOAD_BYTES=1048576
# --- Benachrichtigungen ------------------------------------------------------
NOTIFICATIONS_ENABLED=true
SCHEDULER_ENABLED=true
NOTIFICATION_HOUR=7 # Täglicher Lauf um 07:00 Europe/Berlin
NOTIFICATION_MINUTE=0
SMTP_HOST=
SMTP_PORT=587
SMTP_USER=
SMTP_PASSWORD=
SMTP_FROM=moneyfy@example.com
SMTP_USE_TLS=true # STARTTLS
SMTP_USE_SSL=false # Implizites TLS (Port 465)
# Komma-separierte Apprise-URLs, z. B. ntfy://host/topic,discord://...
APPRISE_URLS=
# --- CORS --------------------------------------------------------------------
# Nur für getrennte Frontend-Entwicklung nötig, z. B. http://localhost:5173
CORS_ORIGINS=