Ajustes gerais: overlay visual, validação por banco e limpeza segura em homologação

This commit is contained in:
2025-07-29 14:10:14 -03:00
parent 73d51e5938
commit e9ed45ba21
3 changed files with 142 additions and 26 deletions

View File

@@ -4,9 +4,12 @@ from fastapi.templating import Jinja2Templates
from fastapi.responses import HTMLResponse, JSONResponse
from fastapi.staticfiles import StaticFiles
import os, shutil
from sqlalchemy import text
from fastapi import Depends
from fastapi.responses import StreamingResponse
from io import BytesIO
import pandas as pd
from app.models import ParametrosFormula
from sqlalchemy.future import select
from app.database import AsyncSessionLocal
from app.models import Fatura
@@ -16,6 +19,7 @@ from app.processor import (
status_arquivos,
limpar_arquivos_processados
)
from app.parametros import router as parametros_router
app = FastAPI()
templates = Jinja2Templates(directory="app/templates")
@@ -47,15 +51,25 @@ def dashboard(request: Request):
@app.get("/upload", response_class=HTMLResponse)
def upload_page(request: Request):
return templates.TemplateResponse("upload.html", {"request": request})
app_env = os.getenv("APP_ENV", "dev") # Captura variável de ambiente
return templates.TemplateResponse("upload.html", {
"request": request,
"app_env": app_env # Passa para o template
})
@app.get("/relatorios", response_class=HTMLResponse)
def relatorios_page(request: Request):
return templates.TemplateResponse("relatorios.html", {"request": request})
@app.get("/parametros", response_class=HTMLResponse)
def parametros_page(request: Request):
return templates.TemplateResponse("parametros.html", {"request": request})
async def parametros_page(request: Request):
async with AsyncSessionLocal() as session:
result = await session.execute(select(ParametrosFormula))
parametros = result.scalars().first()
return templates.TemplateResponse("parametros.html", {
"request": request,
"parametros": parametros or {}
})
@app.post("/upload-files")
async def upload_files(files: list[UploadFile] = File(...)):
@@ -144,3 +158,28 @@ async def export_excel():
media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
headers={"Content-Disposition": "attachment; filename=relatorio_faturas.xlsx"}
)
from app.parametros import router as parametros_router
app.include_router(parametros_router)
def is_homolog():
return os.getenv("APP_ENV", "dev") == "homolog"
@app.post("/limpar-faturas")
async def limpar_faturas():
app_env = os.getenv("APP_ENV", "dev")
if app_env not in ["homolog", "dev", "local"]:
return JSONResponse(status_code=403, content={"message": "Operação não permitida neste ambiente."})
async with AsyncSessionLocal() as session:
print("🧪 Limpando faturas do banco...")
await session.execute(text("DELETE FROM faturas.faturas"))
await session.commit()
upload_path = os.path.join("app", "uploads")
for nome in os.listdir(upload_path):
caminho = os.path.join(upload_path, nome)
if os.path.isfile(caminho):
os.remove(caminho)
return {"message": "Faturas e arquivos apagados com sucesso."}