jerry 3 kuukautta sitten
vanhempi
sitoutus
d2e3d2f46e
4 muutettua tiedostoa jossa 27 lisäystä ja 14 poistoa
  1. 7 6
      app/models/task.py
  2. 18 6
      app/schemas/task.py
  3. 1 1
      app/services/queue_service.py
  4. 1 1
      app/services/task_service.py

+ 7 - 6
app/models/task.py

@@ -1,4 +1,5 @@
-from sqlalchemy import Column, Integer, String, Text, TIMESTAMP, func, SmallInteger
+from datetime import datetime
+from sqlalchemy import Column, Integer, String, Text, DateTime, JSON, func, SmallInteger
 from app.core.database import Base
 
 
@@ -6,9 +7,9 @@ class Task(Base):
     __tablename__ = "task"
 
     id = Column(Integer, primary_key=True, autoincrement=True)
-    command = Column(String(255), nullable=False, comment="任务类型/命令")
-    args = Column(Text, nullable=False, comment="任务参数(JSON字符串)")
-    result = Column(Text, nullable=True, comment="任务执行结果(JSON字符串)")
+    command = Column(String(255), nullable=False)
+    args = Column(JSON, nullable=False)
+    result = Column(JSON, nullable=True)
     status = Column(SmallInteger, default=0, comment="任务状态:0待执行 1执行中 2完成 3失败")
-    create_at = Column(TIMESTAMP, server_default=func.now(), comment="创建时间")
-    update_at = Column(TIMESTAMP, server_default=func.now(), onupdate=func.now(), comment="更新时间")
+    create_at = Column(DateTime, default=datetime.utcnow)
+    update_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)

+ 18 - 6
app/schemas/task.py

@@ -1,12 +1,25 @@
-from pydantic import BaseModel
-from typing import Optional, Any
+from pydantic import BaseModel, field_validator
+from typing import Optional, Any, Dict
 from datetime import datetime
 
 
 class TaskBase(BaseModel):
     command: str
-    args: Any
+    args: Optional[Dict[str, Any]] = None
+    result: Optional[Dict[str, Any]] = None
     status: Optional[int] = 0
+    
+        
+    @field_validator("args", "result", mode="before")
+    def normalize_json_field(cls, v):
+        if v is None:
+            return None
+        if isinstance(v, str):
+            try:
+                return json.loads(v)
+            except Exception:
+                return {}
+        return v
 
 
 class TaskCreate(TaskBase):
@@ -14,13 +27,12 @@ class TaskCreate(TaskBase):
 
 
 class TaskUpdate(BaseModel):
-    result: Optional[Any] = None
-    status: Optional[int] = None
+    result: Optional[Dict[str, Any]] = None
+    status: int
 
 
 class TaskOut(TaskBase):
     id: int
-    result: Optional[Any] = None
     create_at: datetime
     update_at: datetime
 

+ 1 - 1
app/services/queue_service.py

@@ -8,7 +8,7 @@ from app.models.vas_task import VasTask
 
 class QueueService:
     
-    async def rebuild_task_queue(db: AsyncSession, task_name:str, queue_name: str):
+    async def rebuild_task_queue(db: AsyncSession, queue_name: str):
         if queue_manager.is_initialized(queue_name):
             return
         

+ 1 - 1
app/services/task_service.py

@@ -59,7 +59,7 @@ class TaskService:
     ) -> Task:
         stmt = select(Task).where(Task.id == task_id)
         db_obj = (await db.execute(stmt)).scalar_one_or_none()
-
+        old_status = db_obj.status
         if not db_obj:
             raise NotFoundError("Task not exist")