oss_log_repo.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from __future__ import annotations
  2. from sqlalchemy import distinct, select
  3. from supply_infra.db.models.oss_log import OssLog
  4. from supply_infra.db.repositories.base import BaseRepository
  5. class OssLogRepository(BaseRepository[OssLog]):
  6. model = OssLog
  7. def create(
  8. self,
  9. *,
  10. log_name: str,
  11. agent_name: str | None,
  12. oss_path: str,
  13. ) -> OssLog:
  14. entity = OssLog(
  15. log_name=log_name,
  16. agent_name=agent_name,
  17. oss_path=oss_path,
  18. is_delete=0,
  19. )
  20. return self.add(entity)
  21. def list_by_agent_name(self, agent_name: str) -> list[OssLog]:
  22. """按 agent_name 查未删除记录,create_time 倒序。"""
  23. stmt = (
  24. select(OssLog)
  25. .where(
  26. OssLog.agent_name == agent_name,
  27. OssLog.is_delete == 0,
  28. )
  29. .order_by(OssLog.create_time.desc(), OssLog.id.desc())
  30. )
  31. return list(self.session.scalars(stmt).all())
  32. def list_all(self) -> list[OssLog]:
  33. """查询全部未删除记录,create_time 倒序。"""
  34. stmt = (
  35. select(OssLog)
  36. .where(OssLog.is_delete == 0)
  37. .order_by(OssLog.create_time.desc(), OssLog.id.desc())
  38. )
  39. return list(self.session.scalars(stmt).all())
  40. def list_agent_names(self) -> list[str]:
  41. """返回有日志记录的 Agent 名称。"""
  42. stmt = (
  43. select(distinct(OssLog.agent_name))
  44. .where(
  45. OssLog.is_delete == 0,
  46. OssLog.agent_name.is_not(None),
  47. OssLog.agent_name != "",
  48. )
  49. .order_by(OssLog.agent_name)
  50. )
  51. return [name for name in self.session.scalars(stmt).all() if name]