togethere.cloud/api/routers/admin_tasks.py

57 lines
1.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Router: załączniki zadań admina (admin tasks).
Ścieżka na dysku: {files_base_dir}/admin_tasks/<uuid>.ext
Endpointy:
POST /admin_tasks/upload przesyłanie załącznika
GET /admin_tasks/file/{filename} pobieranie załącznika
DELETE /admin_tasks/file/{filename} usuwanie załącznika
"""
from __future__ import annotations
import mimetypes
from fastapi import APIRouter, Depends, UploadFile, File
from fastapi.responses import FileResponse
from ..auth import require_api_key
from ..storage import save_file, get_stored_file_path, delete_stored_file
router = APIRouter(prefix="/admin_tasks", tags=["admin_tasks"])
_SUBFOLDER = "admin_tasks"
@router.post("/upload", summary="Prześlij załącznik zadania")
async def upload_file(
file: UploadFile = File(...),
_key: str = Depends(require_api_key),
):
result = await save_file(file, _SUBFOLDER)
return {"success": True, "data": result}
@router.get("/file/{filename}", summary="Pobierz załącznik zadania")
async def serve_file(
filename: str,
inline: int = 0,
_key: str = Depends(require_api_key),
):
file_path = get_stored_file_path(_SUBFOLDER, filename)
mime = mimetypes.guess_type(str(file_path))[0] or "application/octet-stream"
disposition = "inline" if inline else "attachment"
return FileResponse(
path=str(file_path),
media_type=mime,
headers={"Content-Disposition": f'{disposition}; filename="{filename}"'},
)
@router.delete("/file/{filename}", summary="Usuń załącznik zadania")
async def delete_file(
filename: str,
_key: str = Depends(require_api_key),
):
deleted = delete_stored_file(_SUBFOLDER, filename)
return {"success": deleted}