# -*- coding: utf-8 -*- """ 小程序任务路由 —— 任务列表、置顶、放弃、取消放弃。 端点清单: - GET /api/xcx/tasks — 获取活跃任务列表 - POST /api/xcx/tasks/{id}/pin — 置顶任务 - POST /api/xcx/tasks/{id}/unpin — 取消置顶 - POST /api/xcx/tasks/{id}/abandon — 放弃任务 - POST /api/xcx/tasks/{id}/cancel-abandon — 取消放弃 所有端点均需 JWT(approved 状态)。 """ from __future__ import annotations from fastapi import APIRouter, Depends from app.auth.dependencies import CurrentUser from app.middleware.permission import require_approved from app.schemas.xcx_tasks import AbandonRequest, TaskListItem from app.services import task_manager router = APIRouter(prefix="/api/xcx/tasks", tags=["小程序任务"]) @router.get("", response_model=list[TaskListItem]) async def get_tasks( user: CurrentUser = Depends(require_approved()), ): """获取当前助教的活跃任务列表。""" return await task_manager.get_task_list(user.user_id, user.site_id) @router.post("/{task_id}/pin") async def pin_task( task_id: int, user: CurrentUser = Depends(require_approved()), ): """置顶任务。""" return await task_manager.pin_task(task_id, user.user_id, user.site_id) @router.post("/{task_id}/unpin") async def unpin_task( task_id: int, user: CurrentUser = Depends(require_approved()), ): """取消置顶。""" return await task_manager.unpin_task(task_id, user.user_id, user.site_id) @router.post("/{task_id}/abandon") async def abandon_task( task_id: int, body: AbandonRequest, user: CurrentUser = Depends(require_approved()), ): """放弃任务(需填写原因)。""" return await task_manager.abandon_task( task_id, user.user_id, user.site_id, body.reason ) @router.post("/{task_id}/cancel-abandon") async def cancel_abandon( task_id: int, user: CurrentUser = Depends(require_approved()), ): """取消放弃,恢复为活跃状态。""" return await task_manager.cancel_abandon(task_id, user.user_id, user.site_id)