added messgage bundel not all at one, added sepearte memory at every filter
This commit is contained in:
+8
-14
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user