feat: 添加章节管理功能以支持清除回忆

- 在数据库模型中新增 is_active 字段,用于标记章节是否启用。
- 添加数据库迁移脚本以更新现有章节,确保默认值为 TRUE。
- 更新章节相关的 API 以仅返回 active 章节,并实现清除章节的功能。
- 在 Android 客户端中实现清除章节的确认弹窗和相应的 API 调用,提升用户体验。
This commit is contained in:
penghanyuan
2026-02-14 10:57:51 +01:00
parent df91719a2f
commit 39736a2ae2
8 changed files with 180 additions and 20 deletions

View File

@@ -112,9 +112,12 @@ async def export_pdf(
if book.user_id != current_user.id:
raise HTTPException(status_code=403, detail="无权导出此回忆录")
# 获取所有章节
# 获取所有 active 章节
from database.models import Chapter
stmt = select(Chapter).where(Chapter.user_id == current_user.id).order_by(Chapter.order_index)
stmt = select(Chapter).where(
Chapter.user_id == current_user.id,
Chapter.is_active == True
).order_by(Chapter.order_index)
result = await db.execute(stmt)
chapters = result.scalars().all()

View File

@@ -21,8 +21,11 @@ async def get_chapters(
is_new: Optional[bool] = Query(None, description="仅返回未读章节"),
db: AsyncSession = Depends(get_async_db)
):
"""获取用户所有章节(需要认证)"""
stmt = select(ChapterModel).where(ChapterModel.user_id == current_user.id)
"""获取用户所有章节(需要认证,仅返回 active 章节"""
stmt = select(ChapterModel).where(
ChapterModel.user_id == current_user.id,
ChapterModel.is_active == True
)
if is_new is True:
stmt = stmt.where(ChapterModel.is_new == True)
stmt = stmt.order_by(ChapterModel.order_index)
@@ -75,6 +78,28 @@ async def get_chapter(
}
@router.delete("/{chapter_id}")
async def disable_chapter(
chapter_id: str,
current_user: UserModel = Depends(get_current_user),
db: AsyncSession = Depends(get_async_db)
):
"""清除章节(将章节标记为 disabled需要认证只能操作自己的章节"""
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="无权操作此章节")
# 将章节标记为 disabled不物理删除
chapter.is_active = False
await db.commit()
return {"status": "ok", "message": "章节已清除"}
@router.post("/{chapter_id}/regenerate")
async def regenerate_chapter(
chapter_id: str,