task_service.py 1.4 KB

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