added messgage bundel not all at one, added sepearte memory at every filter

This commit is contained in:
2026-03-19 16:05:25 +01:00
parent d148248682
commit 076733fb53
5 changed files with 179 additions and 103 deletions
+8 -14
View File
@@ -10,15 +10,15 @@ from app.schemas.schemas import FilterRuleCreate, FilterRuleResponse, FilterRule
logger = logging.getLogger(__name__)
def _reset_processed_for_folder(db: Session, account_id: int, folder: str) -> int:
"""Reset processed mails for a specific account/folder so they get re-evaluated."""
def _reset_processed_for_rule(db: Session, rule_id: int) -> int:
"""Reset processed mails for a specific rule so they get re-evaluated."""
count = (
db.query(ProcessedMail)
.filter(ProcessedMail.account_id == account_id, ProcessedMail.folder == folder)
.filter(ProcessedMail.rule_id == rule_id)
.delete()
)
if count:
logger.info("Filter geändert: %d verarbeitete Mails in '%s' zurückgesetzt (Account %d)", count, folder, account_id)
logger.info("Filter geändert: %d verarbeitete Mails für Regel %d zurückgesetzt", count, rule_id)
return count
router = APIRouter(prefix="/api/filters", tags=["filters"])
@@ -70,8 +70,7 @@ def create_filter(data: FilterRuleCreate, db: Session = Depends(get_db)):
action = FilterAction(rule_id=rule.id, **action_data.model_dump())
db.add(action)
# Neue Regel → Ordner zurücksetzen damit bestehende Mails geprüft werden
_reset_processed_for_folder(db, data.account_id, data.source_folder)
# Neue Regel → hat noch keinen processed-Status, wird automatisch alle Mails prüfen
db.commit()
db.refresh(rule)
@@ -84,7 +83,6 @@ def update_filter(rule_id: int, data: FilterRuleUpdate, db: Session = Depends(ge
if not rule:
raise HTTPException(404, "Filterregel nicht gefunden")
old_folder = rule.source_folder
update_data = data.model_dump(exclude_unset=True)
# Update conditions if provided
@@ -108,11 +106,8 @@ def update_filter(rule_id: int, data: FilterRuleUpdate, db: Session = Depends(ge
for key, value in update_data.items():
setattr(rule, key, value)
# Regel geändert → betroffene Ordner zurücksetzen
_reset_processed_for_folder(db, rule.account_id, old_folder)
new_folder = rule.source_folder
if new_folder != old_folder:
_reset_processed_for_folder(db, rule.account_id, new_folder)
# Regel geändert → nur diese Regel zurücksetzen
_reset_processed_for_rule(db, rule.id)
db.commit()
db.refresh(rule)
@@ -124,8 +119,7 @@ def delete_filter(rule_id: int, db: Session = Depends(get_db)):
rule = db.get(FilterRule, rule_id)
if not rule:
raise HTTPException(404, "Filterregel nicht gefunden")
# Ordner zurücksetzen — andere Regeln könnten jetzt anders greifen
_reset_processed_for_folder(db, rule.account_id, rule.source_folder)
# processed-Einträge werden per CASCADE gelöscht
db.delete(rule)
db.commit()