Initial commit — Bradly branding editor platform
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
from fastapi import FastAPI, Depends, HTTPException
|
||||
from pydantic import BaseModel
|
||||
import uuid
|
||||
import datetime
|
||||
|
||||
# Inicialización de la API de prueba (FastAPI)
|
||||
app = FastAPI(
|
||||
title="Design MD Render API",
|
||||
description="Motor central que expone las variables de marca para Remotion",
|
||||
version="1.0.0"
|
||||
)
|
||||
|
||||
# --- Modelos Pydantic (Validación de Esquema) ---
|
||||
class DesignMDModel(BaseModel):
|
||||
primary_color: str
|
||||
secondary_color: str
|
||||
text_color: str
|
||||
base_font: str
|
||||
logo_url: str
|
||||
frame_thickness: int
|
||||
|
||||
class RenderJobRequest(BaseModel):
|
||||
company_id: str
|
||||
raw_video_url: str
|
||||
platform_format: str # Ej: '9:16' (Reels/TikTok) o '1:1' (Facebook/IG)
|
||||
custom_text: str
|
||||
|
||||
class RenderJobResponse(BaseModel):
|
||||
job_id: str
|
||||
status: str
|
||||
estimated_time: int
|
||||
message: str
|
||||
|
||||
# --- Endpoints ---
|
||||
|
||||
@app.get("/api/companies/{company_id}/design-md", response_model=DesignMDModel)
|
||||
async def get_design_md(company_id: str):
|
||||
"""
|
||||
Simula la obtención de las directrices estrictas de marca ("Design MD")
|
||||
desde PostgreSQL. Remotion consultará este Endpoint para sus props.
|
||||
"""
|
||||
# En un entorno real, ejecutaríamos: SELECT * FROM design_md WHERE company_id = company_id
|
||||
# Simulamos la respuesta de la base de datos:
|
||||
return DesignMDModel(
|
||||
primary_color="#D946EF", # Fuchsia
|
||||
secondary_color="#1E1B4B", # Deep Indigo
|
||||
text_color="#FFFFFF",
|
||||
base_font="Inter",
|
||||
logo_url="https://upload.wikimedia.org/wikipedia/commons/a/a7/React-icon.svg",
|
||||
frame_thickness=16
|
||||
)
|
||||
|
||||
@app.post("/api/render", response_model=RenderJobResponse)
|
||||
async def request_automated_render(req: RenderJobRequest):
|
||||
"""
|
||||
Endpoint para que la UI o un webhook solicite un nuevo render.
|
||||
Aquí se enviaría un mensaje a una cola (ej. RabbitMQ, Redis, Celery)
|
||||
para que un Worker inicie la compilación de Remotion en la nube.
|
||||
"""
|
||||
job_id = str(uuid.uuid4())
|
||||
|
||||
# 1. Obtenemos el DesignMD vinculado a la compañía
|
||||
# design_md = get_design_md_from_db(req.company_id)
|
||||
|
||||
# 2. Preparamos el payload (props) para el bundle de Remotion:
|
||||
# remotion_props = {
|
||||
# "videoUrl": req.raw_video_url,
|
||||
# "designMD": design_md,
|
||||
# "textOverlay": req.custom_text
|
||||
# }
|
||||
|
||||
# 3. Enqueue Job
|
||||
# queue.push(job_id, remotion_props, req.platform_format)
|
||||
|
||||
return RenderJobResponse(
|
||||
job_id=job_id,
|
||||
status="queued",
|
||||
estimated_time=45,
|
||||
message="El trabajo ha sido enviado al motor de renderizado basado en lambdas/contenedores."
|
||||
)
|
||||
|
||||
if __name__ == "__main__":
|
||||
import uvicorn
|
||||
uvicorn.run(app, host="0.0.0.0", port=8000)
|
||||
Reference in New Issue
Block a user