feat: dedup downloads by (url, format_id) index, reuse existing files
This commit is contained in:
@@ -50,6 +50,19 @@ async def _do_download(task_id: str, url: str, format_id: str):
|
||||
|
||||
@router.post("/download", response_model=DownloadResponse)
|
||||
async def start_download(req: DownloadRequest, background_tasks: BackgroundTasks, db: AsyncSession = Depends(get_db)):
|
||||
# Dedup: reuse existing completed download if file still on disk
|
||||
existing = (await db.execute(
|
||||
select(Video).where(
|
||||
Video.url == req.url,
|
||||
Video.format_id == req.format_id,
|
||||
Video.status == "done",
|
||||
).order_by(Video.created_at.desc()).limit(1)
|
||||
)).scalar_one_or_none()
|
||||
|
||||
if existing and os.path.exists(existing.file_path):
|
||||
logger.info(f"Reusing existing download task_id={existing.task_id} for url={req.url} format={req.format_id}")
|
||||
return DownloadResponse(task_id=existing.task_id, status="done")
|
||||
|
||||
task_id = str(uuid.uuid4())[:8]
|
||||
video = Video(task_id=task_id, url=req.url, quality=req.quality, format_id=req.format_id, status="pending")
|
||||
db.add(video)
|
||||
|
||||
Reference in New Issue
Block a user