Guilherme Silberfarb Costa
introducao de login, logs e gestao de repositorio
385f196
from __future__ import annotations
from pathlib import Path
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse
from fastapi.staticfiles import StaticFiles
from app.api import auth, elaboracao, health, logs, pesquisa, repositorio, session, visualizacao
from app.services import auth_service
app = FastAPI(
title="MESA Frame API",
version="1.0.0",
description="Backend FastAPI para o app MESA (Elaboracao + Visualizacao)",
)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.middleware("http")
async def auth_middleware(request, call_next): # type: ignore[no-untyped-def]
path = request.url.path
if request.method.upper() == "OPTIONS":
return await call_next(request)
if path.startswith("/api"):
if path == "/api/health" or path == "/api/auth/login":
return await call_next(request)
token = auth_service.extract_token_from_request(request)
user = auth_service.get_user_by_token(token)
if user is None:
return JSONResponse(status_code=401, content={"detail": "Login obrigatorio"})
request.state.auth_user = user
request.state.auth_token = token
return await call_next(request)
app.include_router(health.router)
app.include_router(auth.router)
app.include_router(session.router)
app.include_router(elaboracao.router)
app.include_router(visualizacao.router)
app.include_router(pesquisa.router)
app.include_router(repositorio.router)
app.include_router(logs.router)
def _mount_frontend_if_exists() -> None:
frontend_dist = Path(__file__).resolve().parents[2] / "frontend" / "dist"
index_file = frontend_dist / "index.html"
if not index_file.exists():
return
# Serve the entire Vite build output so root-level files from public/
# (e.g. /logo_mesa.png) and hashed /assets files are both available.
app.mount("/", StaticFiles(directory=frontend_dist, html=True), name="frontend")
_mount_frontend_if_exists()