task_service.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import json
  2. from sqlalchemy.orm import Session
  3. from typing import List, Optional
  4. from app.core.biz_exception import NotFoundError, PermissionDeniedError, BizLogicError
  5. from app.models.task import Task
  6. from app.schemas.task import TaskCreate, TaskUpdate
  7. class TaskService:
  8. @staticmethod
  9. def create(db: Session, obj_in: TaskCreate) -> Task:
  10. db_obj = Task(
  11. command=obj_in.command,
  12. args=obj_in.args,
  13. status=obj_in.status or 0,
  14. )
  15. db.add(db_obj)
  16. db.commit()
  17. db.refresh(db_obj)
  18. return db_obj
  19. @staticmethod
  20. def get_by_id(db: Session, task_id: int) -> Optional[Task]:
  21. obj = db.query(Task).filter(Task.id == task_id).first()
  22. if not obj:
  23. raise NotFoundError("Task not exist")
  24. return obj
  25. @staticmethod
  26. def update(db: Session, task_id: int, obj_in: TaskUpdate) -> Optional[Task]:
  27. db_obj = db.query(Task).filter(Task.id == task_id).first()
  28. if not db_obj:
  29. raise NotFoundError("Task not exist")
  30. if obj_in.result is not None:
  31. db_obj.result = obj_in.result
  32. if obj_in.status is not None:
  33. db_obj.status = obj_in.status
  34. db.add(db_obj)
  35. db.commit()
  36. db.refresh(db_obj)
  37. return db_obj
  38. @staticmethod
  39. def get_pending(db: Session, command: str, page: int, size: int) -> List[Task]:
  40. offset = page * size
  41. return (
  42. db.query(Task)
  43. .filter(Task.command == command, Task.status == 0)
  44. .order_by(Task.create_at.asc())
  45. .offset(offset)
  46. .limit(size)
  47. .all()
  48. )