48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
from typing import Any
|
||
from fastapi import APIRouter, Form, HTTPException, BackgroundTasks
|
||
from fastapi.responses import FileResponse
|
||
from ..services.license_service import generate_license_file
|
||
|
||
router: APIRouter = APIRouter()
|
||
|
||
|
||
@router.post("/generate", response_class=FileResponse)
|
||
async def generate_license(
|
||
background_tasks: BackgroundTasks,
|
||
name: str = Form(...),
|
||
version: str = Form(...)
|
||
) -> Any:
|
||
"""
|
||
Генерация лицензии Custom.mxtpro.
|
||
Параметры:
|
||
- name: str - имя пользователя
|
||
- version: str - версия формата X.Y
|
||
Возвращает:
|
||
- FileResponse: сгенерированный ZIP файл с именем Custom.mxtpro
|
||
"""
|
||
if not name.strip() or not version.strip():
|
||
raise HTTPException(
|
||
status_code=400,
|
||
detail="NAME и VERSION обязательны."
|
||
)
|
||
try:
|
||
# Создаём временный файл на сервере
|
||
filepath, temp_dir = generate_license_file(name, version)
|
||
except Exception as e:
|
||
raise HTTPException(
|
||
status_code=500,
|
||
detail=f"Ошибка генерации лицензии: {e}"
|
||
)
|
||
|
||
# Удаляем директорию (и файл внутри) после отправки пользователю
|
||
background_tasks.add_task(temp_dir.cleanup)
|
||
|
||
# Отправляем с фиксированным именем Custom.mxtpro
|
||
return FileResponse(
|
||
filepath,
|
||
media_type="application/octet-stream",
|
||
headers={
|
||
"Content-Disposition": 'attachment; filename="Custom.mxtpro"'
|
||
}
|
||
)
|