addes folder backup attachments logging

This commit is contained in:
2026-03-19 15:31:36 +01:00
parent 61c4384111
commit d148248682
29 changed files with 2298 additions and 115 deletions
+29 -1
View File
@@ -1,10 +1,26 @@
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
import logging
from app.database import get_db
from app.models.db_models import Account, FilterAction, FilterCondition, FilterRule
from app.models.db_models import Account, FilterAction, FilterCondition, FilterRule, ProcessedMail
from app.schemas.schemas import FilterRuleCreate, FilterRuleResponse, FilterRuleUpdate
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."""
count = (
db.query(ProcessedMail)
.filter(ProcessedMail.account_id == account_id, ProcessedMail.folder == folder)
.delete()
)
if count:
logger.info("Filter geändert: %d verarbeitete Mails in '%s' zurückgesetzt (Account %d)", count, folder, account_id)
return count
router = APIRouter(prefix="/api/filters", tags=["filters"])
@@ -54,6 +70,9 @@ 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)
db.commit()
db.refresh(rule)
return rule
@@ -65,6 +84,7 @@ 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
@@ -88,6 +108,12 @@ 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)
db.commit()
db.refresh(rule)
return rule
@@ -98,6 +124,8 @@ 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)
db.delete(rule)
db.commit()