This commit is contained in:
+8
-1
@@ -468,7 +468,12 @@ async def create_task(
|
||||
)
|
||||
if parent is None:
|
||||
raise HTTPException(status_code=400, detail="父任务必须是同一清单的顶层任务")
|
||||
data = payload.model_dump()
|
||||
if payload.rrule:
|
||||
if not payload.due_at:
|
||||
raise HTTPException(status_code=422, detail="重复任务需要截止时间")
|
||||
from .mvp import parse_rrule
|
||||
parse_rrule(payload.rrule)
|
||||
data = payload.model_dump(exclude={"rrule"})
|
||||
parent_filter = Task.parent_id == payload.parent_id if payload.parent_id else Task.parent_id.is_(None)
|
||||
max_position = await db.scalar(select(func.max(Task.position)).where(
|
||||
Task.user_id == user.id,
|
||||
@@ -479,6 +484,8 @@ async def create_task(
|
||||
task = Task(user_id=user.id, position=(max_position if max_position is not None else -1) + 1, **data)
|
||||
db.add(task)
|
||||
await db.flush()
|
||||
if payload.rrule:
|
||||
db.add(RecurrenceTemplate(user_id=user.id, task_id=task.id, rrule=payload.rrule.upper(), starts_at=task.due_at))
|
||||
audit(db, user.id, "create", "task", task.id)
|
||||
await db.commit()
|
||||
await db.refresh(task)
|
||||
|
||||
@@ -77,6 +77,7 @@ class TaskCreate(BaseModel):
|
||||
priority: int = Field(default=0, ge=0, le=3)
|
||||
due_at: datetime | None = None
|
||||
parent_id: UUID | None = None
|
||||
rrule: str | None = Field(default=None, min_length=5, max_length=1000)
|
||||
|
||||
|
||||
class TaskUpdate(BaseModel):
|
||||
|
||||
Reference in New Issue
Block a user