- Anmeldung über Argon2id und JWT in httpOnly-Cookies, Refresh mit echter Rotation über die neue Tabelle refresh_token - AuthProvider-Protokoll als Vorbereitung für OIDC, Administrator-Anlage beim Erststart mit erzwungenem Passwortwechsel - CRUD für Konten, Kategorien (zweistufiger Baum), Firmen, Recurrences, Preisversionen, Buchungen, Budgets, Vorlagen und Sparziele - Fälligkeiten mit Overlay-Logik: abrufen, bestätigen, auslassen, zurücksetzen - Kontosalden zum Stichtag, Monatsübersicht mit Plan-Ist-Vergleich - SECRET_KEY jetzt mindestens 32 Zeichen; Platzhalter in Produktion abgelehnt - 61 neue Integrationstests, insgesamt 148 grün Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014e7t8UpmoVNMtWivY5LiSH
56 lines
1.1 KiB
Python
56 lines
1.1 KiB
Python
"""SQLAlchemy-Modelle. Import hier hält Alembics Autogenerate vollständig."""
|
|
|
|
from app.db.base import Base
|
|
from app.models.core import Account, AppUser, Category, LogoAsset, Merchant, RefreshToken
|
|
from app.models.enums import (
|
|
AccountType,
|
|
BusinessDayShift,
|
|
EntryKind,
|
|
LogoSource,
|
|
LogoStatus,
|
|
NotificationChannel,
|
|
NotificationStatus,
|
|
NotificationType,
|
|
OccurrenceStatus,
|
|
)
|
|
from app.models.finance import (
|
|
AmountVersion,
|
|
Budget,
|
|
BudgetTemplate,
|
|
Occurrence,
|
|
Recurrence,
|
|
ReserveLedger,
|
|
SavingsGoal,
|
|
Transaction,
|
|
)
|
|
from app.models.notification import NotificationLog, NotificationRule
|
|
|
|
__all__ = [
|
|
"Account",
|
|
"AccountType",
|
|
"AmountVersion",
|
|
"AppUser",
|
|
"Base",
|
|
"Budget",
|
|
"BudgetTemplate",
|
|
"BusinessDayShift",
|
|
"Category",
|
|
"EntryKind",
|
|
"LogoAsset",
|
|
"LogoSource",
|
|
"LogoStatus",
|
|
"Merchant",
|
|
"NotificationChannel",
|
|
"NotificationLog",
|
|
"NotificationRule",
|
|
"NotificationStatus",
|
|
"NotificationType",
|
|
"Occurrence",
|
|
"OccurrenceStatus",
|
|
"Recurrence",
|
|
"RefreshToken",
|
|
"ReserveLedger",
|
|
"SavingsGoal",
|
|
"Transaction",
|
|
]
|