""" 回忆录状态 API """ from fastapi import APIRouter, Depends from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from database import get_async_db from database.models import Book as BookModel from database.models import Chapter as ChapterModel from database.models import User as UserModel from middleware.auth import get_current_user from services.memoir_state_service import get_or_create_state router = APIRouter(prefix="/api/memoir-state", tags=["memoir-state"]) @router.get("") async def get_memoir_state( current_user: UserModel = Depends(get_current_user), db: AsyncSession = Depends(get_async_db), ): """获取当前用户回忆录状态""" state = await get_or_create_state(current_user.id, db) return state.model_dump() @router.get("/next-question") async def get_next_question_context( current_user: UserModel = Depends(get_current_user), db: AsyncSession = Depends(get_async_db), ): """获取下一步问题的上下文(当前阶段与空 slot)""" state = await get_or_create_state(current_user.id, db) return { "current_stage": state.current_stage, "empty_slots": state.empty_slots_for_current_stage(), "covered_stages": state.covered_stages, } @router.post("/mark-read") async def mark_memoir_read( current_user: UserModel = Depends(get_current_user), db: AsyncSession = Depends(get_async_db), ): """标记回忆录更新已读""" stmt = select(ChapterModel).where(ChapterModel.user_id == current_user.id, ChapterModel.is_new == True) result = await db.execute(stmt) chapters = result.scalars().all() for chapter in chapters: chapter.is_new = False stmt_book = select(BookModel).where(BookModel.user_id == current_user.id).order_by(BookModel.updated_at.desc()) result_book = await db.execute(stmt_book) book = result_book.scalar_one_or_none() if book: book.has_update = False await db.commit() return {"status": "ok"}