Files
life-echo/api/routers/chapters.py

86 lines
2.6 KiB
Python
Raw Normal View History

2026-01-07 11:56:40 +08:00
"""
章节相关 API 路由
"""
from typing import List, Optional
2026-01-07 11:56:40 +08:00
from fastapi import APIRouter, Depends, HTTPException, Query
2026-01-07 11:56:40 +08:00
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from database import get_async_db
from database.models import Chapter as ChapterModel
from database.models import User as UserModel
from middleware.auth import get_current_user
2026-01-07 11:56:40 +08:00
router = APIRouter(prefix="/api/chapters", tags=["chapters"])
@router.get("", response_model=List[dict])
async def get_chapters(
current_user: UserModel = Depends(get_current_user),
2026-01-07 11:56:40 +08:00
db: AsyncSession = Depends(get_async_db)
):
"""获取用户所有章节(需要认证)"""
stmt = select(ChapterModel).where(ChapterModel.user_id == current_user.id).order_by(ChapterModel.order_index)
2026-01-07 11:56:40 +08:00
result = await db.execute(stmt)
chapters = result.scalars().all()
return [
{
"id": ch.id,
"title": ch.title,
"content": ch.content,
"order_index": ch.order_index,
"status": ch.status,
"category": ch.category,
"images": ch.images or []
}
for ch in chapters
]
@router.get("/{chapter_id}", response_model=dict)
async def get_chapter(
chapter_id: str,
current_user: UserModel = Depends(get_current_user),
2026-01-07 11:56:40 +08:00
db: AsyncSession = Depends(get_async_db)
):
"""获取章节详情(需要认证,只能访问自己的章节)"""
2026-01-07 11:56:40 +08:00
chapter = await db.get(ChapterModel, chapter_id)
if not chapter:
raise HTTPException(status_code=404, detail="Chapter not found")
# 验证用户权限
if chapter.user_id != current_user.id:
raise HTTPException(status_code=403, detail="无权访问此章节")
2026-01-07 11:56:40 +08:00
return {
"id": chapter.id,
"title": chapter.title,
"content": chapter.content,
"order_index": chapter.order_index,
"status": chapter.status,
"category": chapter.category,
"images": chapter.images or []
}
@router.post("/{chapter_id}/regenerate")
async def regenerate_chapter(
chapter_id: str,
current_user: UserModel = Depends(get_current_user),
2026-01-07 11:56:40 +08:00
db: AsyncSession = Depends(get_async_db)
):
"""重新整理章节(需要认证,只能操作自己的章节)"""
chapter = await db.get(ChapterModel, chapter_id)
if not chapter:
raise HTTPException(status_code=404, detail="Chapter not found")
# 验证用户权限
if chapter.user_id != current_user.id:
raise HTTPException(status_code=403, detail="无权操作此章节")
2026-01-07 11:56:40 +08:00
# TODO: 实现重新整理逻辑
return {"status": "ok", "message": "Chapter regeneration triggered"}