Files
pedidosClientes/app/main.py
2025-12-05 11:27:16 -03:00

70 lines
1.7 KiB
Python

"""
Aplicación principal FastAPI
"""
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.responses import HTMLResponse
from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager
import logging
from app.config import settings
from app.prisma_client import connect_db, disconnect_db
from app.api.routes import api_router
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@asynccontextmanager
async def lifespan(app: FastAPI):
"""Lifecycle events"""
# Startup
logger.info("Iniciando aplicación...")
await connect_db()
yield
# Shutdown
logger.info("Cerrando aplicación...")
await disconnect_db()
app = FastAPI(
title=settings.PROJECT_NAME,
version=settings.VERSION,
lifespan=lifespan
)
# CORS - Permitir todas las origenes en desarrollo
# En producción, especificar los dominios permitidos
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # En producción cambiar a dominios específicos
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Static files (solo para media, el frontend se sirve por separado)
app.mount("/media", StaticFiles(directory=str(settings.MEDIA_DIR)), name="media")
# API Routes
app.include_router(api_router, prefix="/api")
@app.get("/")
async def root():
"""API Root - Redirige a documentación"""
return {
"message": "Sistema de Gestión de Pedidos API",
"version": settings.VERSION,
"docs": "/docs",
"frontend": "El frontend debe ejecutarse por separado en http://localhost:3000 o similar"
}
@app.get("/health")
async def health():
"""Health check"""
return {"status": "ok"}