mirror of
https://github.com/DrizzleTime/Foxel.git
synced 2026-05-11 18:10:10 +08:00
45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
from typing import Annotated
|
|
|
|
from fastapi import APIRouter, Depends, Request
|
|
|
|
from api.response import success
|
|
from domain.audit import AuditAction, audit
|
|
from domain.auth import User, get_current_active_user
|
|
from domain.permission import require_path_permission
|
|
from domain.permission.types import PathAction
|
|
from .service import OfflineDownloadService
|
|
from .types import OfflineDownloadCreate
|
|
|
|
CurrentUser = Annotated[User, Depends(get_current_active_user)]
|
|
|
|
router = APIRouter(
|
|
prefix="/api/offline-downloads",
|
|
tags=["OfflineDownloads"],
|
|
)
|
|
|
|
|
|
@router.post("/")
|
|
@audit(
|
|
action=AuditAction.CREATE,
|
|
description="创建离线下载任务",
|
|
body_fields=["url", "dest_dir", "filename"],
|
|
)
|
|
@require_path_permission(PathAction.WRITE, "payload.dest_dir")
|
|
async def create_offline_download(request: Request, payload: OfflineDownloadCreate, current_user: CurrentUser):
|
|
data = await OfflineDownloadService.create_download(payload, current_user)
|
|
return success(data)
|
|
|
|
|
|
@router.get("/")
|
|
@audit(action=AuditAction.READ, description="获取离线下载列表")
|
|
async def list_offline_downloads(request: Request, current_user: CurrentUser):
|
|
data = OfflineDownloadService.list_downloads()
|
|
return success(data)
|
|
|
|
|
|
@router.get("/{task_id}")
|
|
@audit(action=AuditAction.READ, description="获取离线下载详情")
|
|
async def get_offline_download(task_id: str, request: Request, current_user: CurrentUser):
|
|
data = OfflineDownloadService.get_download(task_id)
|
|
return success(data)
|