feat: add Download Logs tab in admin panel

This commit is contained in:
mini
2026-02-18 23:24:34 +08:00
parent 27c9c87f5c
commit 4ac8cf2f66
3 changed files with 206 additions and 53 deletions

View File

@@ -78,16 +78,25 @@ async def download_logs(
user: dict = Depends(get_current_user),
db: AsyncSession = Depends(get_db),
):
query = select(DownloadLog).order_by(DownloadLog.downloaded_at.desc())
from sqlalchemy.orm import joinedload
query = (
select(DownloadLog)
.options(joinedload(DownloadLog.video))
.order_by(DownloadLog.downloaded_at.desc())
)
count_query = select(func.count(DownloadLog.id))
if video_id is not None:
query = query.where(DownloadLog.video_id == video_id)
count_query = count_query.where(DownloadLog.video_id == video_id)
total = (await db.execute(count_query)).scalar() or 0
logs = (await db.execute(query.offset((page - 1) * page_size).limit(page_size))).scalars().all()
return DownloadLogListResponse(
logs=[DownloadLogInfo.model_validate(l) for l in logs],
total=total,
page=page,
page_size=page_size,
)
items = []
for l in logs:
d = DownloadLogInfo.model_validate(l)
if l.video:
d.video_title = l.video.title or ""
d.video_platform = l.video.platform or ""
items.append(d)
return DownloadLogListResponse(logs=items, total=total, page=page, page_size=page_size)

View File

@@ -89,6 +89,8 @@ class TokenResponse(BaseModel):
class DownloadLogInfo(BaseModel):
id: int
video_id: int
video_title: str = ""
video_platform: str = ""
ip: str
user_agent: str
browser: str