oper_log.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. """操作日志 CRUD"""
  2. import uuid
  3. from typing import List, Optional, Tuple
  4. from sqlalchemy.orm import Session
  5. from app.models.system import OperLog
  6. def create_oper_log(
  7. db: Session,
  8. *,
  9. module: str,
  10. action: str,
  11. user_id: Optional[str] = None,
  12. username: Optional[str] = None,
  13. detail: Optional[str] = None,
  14. ip: Optional[str] = None,
  15. ) -> OperLog:
  16. row = OperLog(
  17. id=str(uuid.uuid4()),
  18. user_id=user_id,
  19. username=username,
  20. module=module,
  21. action=action,
  22. detail=detail,
  23. ip=ip,
  24. )
  25. db.add(row)
  26. db.commit()
  27. db.refresh(row)
  28. return row
  29. def list_oper_logs(
  30. db: Session,
  31. *,
  32. username: Optional[str] = None,
  33. keyword: Optional[str] = None,
  34. page: int = 1,
  35. page_size: int = 10,
  36. ) -> Tuple[List[OperLog], int]:
  37. q = db.query(OperLog)
  38. if username:
  39. q = q.filter(OperLog.username.like(f"%{username}%"))
  40. if keyword:
  41. q = q.filter(OperLog.detail.like(f"%{keyword}%"))
  42. q = q.order_by(OperLog.create_time.desc())
  43. total = q.count()
  44. items = q.offset((page - 1) * page_size).limit(page_size).all()
  45. return items, total