"""内驱力 /drive API。""" from fastapi import APIRouter, Query from app.schemas.common import Page from app.schemas.drive import CuriosityResponse, SubgoalResponse from app.services.drive import ( approve_subgoal, defer_subgoal, list_curiosities, list_subgoals, reject_subgoal, ) router = APIRouter(tags=["drive"]) @router.get( "/characters/{character_id}/curiosities", response_model=Page[CuriosityResponse], ) async def list_curiosities_endpoint( character_id: str, source: str | None = Query(default=None, description="按来源过滤(契约字典内驱力 source)"), page: int = Query(default=1, ge=1), page_size: int = Query(default=20, ge=1, le=100), ) -> Page[CuriosityResponse]: """列出某人物的好奇问题(大周天内驱力生成)。""" return await list_curiosities( character_id=character_id, source=source, page=page, page_size=page_size, ) @router.get( "/characters/{character_id}/subgoals", response_model=Page[SubgoalResponse], ) async def list_subgoals_endpoint( character_id: str, status: str | None = Query( default=None, description="按状态过滤:candidate/approved/deferred/rejected" ), page: int = Query(default=1, ge=1), page_size: int = Query(default=20, ge=1, le=100), ) -> Page[SubgoalResponse]: """列出某人物的探索性次生目标。""" return await list_subgoals( character_id=character_id, status=status, page=page, page_size=page_size, ) @router.post("/subgoals/{subgoal_id}/approve", response_model=SubgoalResponse) async def approve_subgoal_endpoint(subgoal_id: str) -> SubgoalResponse: """通过探索性次生目标(仅标记 approved,本期不自动执行)。""" return await approve_subgoal(subgoal_id) @router.post("/subgoals/{subgoal_id}/defer", response_model=SubgoalResponse) async def defer_subgoal_endpoint(subgoal_id: str) -> SubgoalResponse: """延后探索性次生目标(status → deferred)。""" return await defer_subgoal(subgoal_id) @router.post("/subgoals/{subgoal_id}/reject", response_model=SubgoalResponse) async def reject_subgoal_endpoint(subgoal_id: str) -> SubgoalResponse: """驳回探索性次生目标(status → rejected)。""" return await reject_subgoal(subgoal_id)