up
This commit is contained in:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user