addes folder backup attachments logging
This commit is contained in:
+29
-1
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user