This commit is contained in:
lzcode
2026-10-16 20:03:58 +08:00
parent 9962136fc8
commit ebad02ce31
19 changed files with 622 additions and 240 deletions
+39 -1
View File
@@ -101,7 +101,7 @@ async def update_video(video_id: int, req: _VideoUpdateReq,
db: AsyncSession = Depends(get_db),
admin: AdminIdentity = Depends(require_super)):
from app.models.video import Video, Series
from sqlalchemy import select
from sqlalchemy import select, func
v = await db.get(Video, video_id)
if not v:
@@ -147,6 +147,44 @@ async def update_video(video_id: int, req: _VideoUpdateReq,
return ok({"video_id": v.id})
@router.delete("/videos/{video_id}")
async def delete_video(video_id: int,
db: AsyncSession = Depends(get_db),
admin: AdminIdentity = Depends(require_super)):
"""删除视频(级联删除所有关联数据:标签/点赞/收藏/评论/观看记录/收益/举报)"""
from app.models.video import Video, VideoTag, Series
from app.models.interaction import Like, Favorite, Comment
from app.models.billing import WatchRecord
from app.models.incentive import VideoEarning
from app.models.common import Report
from sqlalchemy import select, delete
v = await db.get(Video, video_id)
if not v:
raise BizException(errors.NOT_FOUND, "视频不存在")
# 如果属于系列,先解绑(保持系列数据干净)
if v.series_id:
v.series_id = None
v.episode_no = None
await db.flush()
# 级联删除所有关联表
await db.execute(delete(VideoTag).where(VideoTag.video_id == video_id))
await db.execute(delete(Like).where(Like.video_id == video_id))
await db.execute(delete(Favorite).where(Favorite.video_id == video_id))
await db.execute(delete(Comment).where(Comment.video_id == video_id))
await db.execute(delete(WatchRecord).where(WatchRecord.video_id == video_id))
await db.execute(delete(VideoEarning).where(VideoEarning.video_id == video_id))
# 举报(target_type=1 表示视频)
await db.execute(delete(Report).where(Report.target_type == 1, Report.target_id == video_id))
# 删除视频本身
await db.delete(v)
await db.commit()
return ok({"video_id": video_id, "deleted": True})
@router.post("/videos")
async def create_video(req: schema.AdminVideoCreateReq, request: Request,
db: AsyncSession = Depends(get_db),