refactor: tighten backend, flows, frontend, tests; push flows to Langflow

This commit is contained in:
Jonas Miederer 2026-09-28 15:58:00 +02:00
parent 6688fb08c6
commit 06ab25fb47
31 changed files with 783 additions and 358 deletions

View file

@ -15,6 +15,7 @@ from uuid import UUID
from sqlmodel import Session, func, select
from app.models import AccessRequest, MagicLinkToken, User, UserSession
from app.models.base import utcnow
from app.settings import settings
logger = logging.getLogger(__name__)
@ -60,10 +61,6 @@ class RateLimitedError(AuthError):
pass
def utcnow() -> datetime:
return datetime.now(UTC)
def normalize_email(email: str) -> str:
return email.strip().lower()
@ -92,18 +89,22 @@ def user_count(session: Session) -> int:
return session.exec(select(func.count()).select_from(User)).one()
def recent_request_count(session: Session, email: str, hours: int = 1) -> int:
def _recent_count(session: Session, model, *filters, hours: int = 1) -> int:
since = utcnow() - timedelta(hours=hours)
return session.exec(
select(func.count())
.select_from(AccessRequest)
.where(
AccessRequest.email == normalize_email(email),
AccessRequest.created_at >= since,
)
select(func.count()).select_from(model).where(*filters, model.created_at >= since)
).one()
def recent_request_count(session: Session, email: str, hours: int = 1) -> int:
return _recent_count(
session,
AccessRequest,
AccessRequest.email == normalize_email(email),
hours=hours,
)
def create_access_request(
session: Session, name: str, email: str, reason: str = ""
) -> AccessRequest:
@ -165,15 +166,7 @@ def issue_magic_token(session: Session, user: User) -> str:
def recent_token_count(session: Session, user: User, hours: int = 1) -> int:
since = utcnow() - timedelta(hours=hours)
return session.exec(
select(func.count())
.select_from(MagicLinkToken)
.where(
MagicLinkToken.user_id == user.id,
MagicLinkToken.created_at >= since,
)
).one()
return _recent_count(session, MagicLinkToken, MagicLinkToken.user_id == user.id, hours=hours)
def request_magic_link(session: Session, email: str) -> tuple[User, str]: