from fastapi import APIRouter, Depends, Query from sqlalchemy.orm import Session from app.database import get_db from app.models.db_models import FilterLog router = APIRouter(prefix="/api/logs", tags=["logs"]) @router.get("/") def get_logs( account_id: int | None = None, level: str | None = None, search: str | None = None, search_subject: str | None = None, search_from: str | None = None, search_rule: str | None = None, search_message: str | None = None, search_details: str | None = None, search_folder: str | None = None, limit: int = Query(default=100, le=500), offset: int = 0, db: Session = Depends(get_db), ): query = db.query(FilterLog).order_by(FilterLog.created_at.desc()) if account_id: query = query.filter(FilterLog.account_id == account_id) if level: query = query.filter(FilterLog.level == level) # Einfache Suche (ODER über alle Felder) if search: term = f"%{search}%" query = query.filter( FilterLog.message.ilike(term) | FilterLog.mail_subject.ilike(term) | FilterLog.mail_from.ilike(term) | FilterLog.rule_name.ilike(term) | FilterLog.details.ilike(term) | FilterLog.folder.ilike(term) ) # Erweiterte Suche (UND pro Feld) if search_subject: query = query.filter(FilterLog.mail_subject.ilike(f"%{search_subject}%")) if search_from: query = query.filter(FilterLog.mail_from.ilike(f"%{search_from}%")) if search_rule: query = query.filter(FilterLog.rule_name.ilike(f"%{search_rule}%")) if search_message: query = query.filter(FilterLog.message.ilike(f"%{search_message}%")) if search_details: query = query.filter(FilterLog.details.ilike(f"%{search_details}%")) if search_folder: query = query.filter(FilterLog.folder.ilike(f"%{search_folder}%")) total = query.count() logs = query.offset(offset).limit(limit).all() return { "total": total, "logs": [ { "id": log.id, "account_id": log.account_id, "account_name": log.account_name, "level": log.level.value if log.level else "info", "message": log.message, "rule_name": log.rule_name, "action_type": log.action_type, "mail_uid": log.mail_uid, "mail_subject": log.mail_subject, "mail_from": log.mail_from, "folder": log.folder, "details": log.details, "created_at": log.created_at.isoformat() if log.created_at else None, } for log in logs ], } @router.delete("/") def clear_logs(account_id: int | None = None, db: Session = Depends(get_db)): query = db.query(FilterLog) if account_id: query = query.filter(FilterLog.account_id == account_id) count = query.delete() db.commit() return {"deleted": count}