neue Archivfunktion und Optimierung an Artikelbearbeitung

This commit is contained in:
2026-08-09 18:24:04 +02:00
parent dd51532533
commit b80e2d5a6c
23 changed files with 1185 additions and 77 deletions

View File

@@ -12,6 +12,7 @@ verhindert, dass eine Liste durch Löschen des letzten Mitglieds
verwaist, die Mitgliedschaft macht Abfragen einheitlich.
"""
from datetime import timedelta
from typing import Annotated
from fastapi import Depends, HTTPException, status
@@ -20,6 +21,7 @@ from sqlalchemy.orm import Session
from app.deps import DbSession, VerifiedUser
from app.models import ListMember, ShoppingList
from app.security import utcnow
ROLE_RANK = {"viewer": 1, "editor": 2, "owner": 3}
@@ -60,6 +62,17 @@ def _access(db: Session, list_id: str, user_id: str, minimum: str) -> ShoppingLi
status.HTTP_403_FORBIDDEN,
f"Für diese Aktion ist mindestens die Rolle '{minimum}' erforderlich.",
)
# Grundlage der automatischen Archivierung. Höchstens stündlich
# schreiben - jeder Zugriff wäre unnötige Last, und für eine Frist
# von Monaten genügt diese Auflösung bei Weitem.
now = utcnow()
if membership.last_opened_at is None or now - membership.last_opened_at > timedelta(
hours=1
):
membership.last_opened_at = now
db.commit()
return lst