togethere.cloud/api/routers/admin_chat.py

57 lines
1.7 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: pliki z czatu adminów.
Ścieżka na dysku: {files_base_dir}/admin_chat/<uuid>.ext
Endpointy:
POST /admin_chat/upload przesyłanie pliku
GET /admin_chat/file/{filename} pobieranie/wyświetlanie pliku
DELETE /admin_chat/file/{filename} usuwanie pliku
"""
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_chat", tags=["admin_chat"])
_SUBFOLDER = "admin_chat"
@router.post("/upload", summary="Prześlij plik do czatu adminów")
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 plik z czatu adminów")
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ń plik z czatu adminów")
async def delete_file(
filename: str,
_key: str = Depends(require_api_key),
):
deleted = delete_stored_file(_SUBFOLDER, filename)
return {"success": deleted}