from fastapi import FastAPI
import json
import os
from datetime import datetime
import uuid
app = FastAPI()
# Пути к папкам (будут смонтированы через Docker volume)
DOWNLOADS_DIR = "/data/downloads"
TASKS_DIR = "/data/tasks"
@app.get("/")
def health():
return {"status": "API работает"}
@app.post("/download")
def download_video(url: str, quality: str = "best"):
"""
Создаёт задачу для воркера
url: ссылка на видео YouTube
quality: требуемое качество (720p, 1080p, best и т.д.)
"""
# Проверяем структуру папок
if not os.path.exists(DOWNLOADS_DIR):
os.makedirs(DOWNLOADS_DIR)
if not os.path.exists(TASKS_DIR):
os.makedirs(TASKS_DIR)
# TODO: здесь будет проверка через info_checker
# А пока просто создаём task
task_id = str(uuid.uuid4())[:8]
task = {
"task_id": task_id,
"url": url,
"quality": quality,
"status": "pending",
"created_at": datetime.now().isoformat()
}
# Пишем task в JSON
task_file = os.path.join(TASKS_DIR, f"{task_id}.json")
with open(task_file, "w") as f:
json.dump(task, f, indent=2)
return {"task_id": task_id, "status": "pending"}
@app.get("/task/{task_id}")
def get_task_status(task_id: str):
"""Проверяет статус задачи"""
task_file = os.path.join(TASKS_DIR, f"{task_id}.json")
if not os.path.exists(task_file):
return {"error": "Задача не найдена"}
with open(task_file, "r") as f:
task = json.load(f)
return task
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)