102 lines
3.2 KiB
Python
Executable File
102 lines
3.2 KiB
Python
Executable File
# /opt/docker/dev/service_finder/backend/app/main.py
|
||
import os
|
||
import logging
|
||
from contextlib import asynccontextmanager
|
||
from datetime import datetime, timezone # Szükséges a health check-hez
|
||
from fastapi import FastAPI
|
||
from fastapi.middleware.cors import CORSMiddleware
|
||
from fastapi.staticfiles import StaticFiles
|
||
from starlette.middleware.sessions import SessionMiddleware
|
||
|
||
from app.api.v1.api import api_router
|
||
from app.core.config import settings
|
||
from app.database import AsyncSessionLocal
|
||
from app.services.translation_service import translation_service
|
||
from app.core.scheduler import scheduler_lifespan
|
||
|
||
# --- LOGGING KONFIGURÁCIÓ ---
|
||
logging.basicConfig(level=logging.INFO)
|
||
logger = logging.getLogger("Sentinel-Main")
|
||
|
||
# --- LIFESPAN (Startup/Shutdown események) ---
|
||
@asynccontextmanager
|
||
async def lifespan(app: FastAPI):
|
||
"""
|
||
A rendszer 'ébredési' folyamata.
|
||
Hiba esetén ENG alapértelmezésre vált a rendszer.
|
||
"""
|
||
logger.info("🛰️ Sentinel Master System ébredése...")
|
||
|
||
# 1. Nyelvi Cache betöltése az adatbázisból
|
||
async with AsyncSessionLocal() as db:
|
||
try:
|
||
await translation_service.load_cache(db)
|
||
logger.info("🌍 i18n fordítási kulcsok aktiválva.")
|
||
except Exception as e:
|
||
# Itt a kért ERROR log: jelezzük a hibát, de a rendszer ENG fallback-el megy tovább
|
||
logger.error(f"❌ i18n hiba az induláskor: {e}. Rendszer alapértelmezett (ENG) módra vált.")
|
||
|
||
# Statikus könyvtárak ellenőrzése
|
||
os.makedirs(settings.STATIC_DIR, exist_ok=True)
|
||
os.makedirs(os.path.join(settings.STATIC_DIR, "previews"), exist_ok=True)
|
||
|
||
# 2. Scheduler indítása
|
||
async with scheduler_lifespan(app):
|
||
logger.info("⏰ Cron‑job ütemező aktiválva.")
|
||
|
||
yield
|
||
|
||
logger.info("💤 Sentinel Master System leállítása...")
|
||
|
||
# --- APP INICIALIZÁLÁS ---
|
||
app = FastAPI(
|
||
title="Service Finder Master API",
|
||
description="Sentinel Traffic Ecosystem, Asset Vault & AI Evidence Processing",
|
||
version="2.0.1",
|
||
openapi_url=f"{settings.API_V1_STR}/openapi.json",
|
||
docs_url="/docs",
|
||
lifespan=lifespan
|
||
)
|
||
|
||
# --- MIDDLEWARES ---
|
||
app.add_middleware(
|
||
SessionMiddleware,
|
||
secret_key=settings.SECRET_KEY
|
||
)
|
||
|
||
app.add_middleware(
|
||
CORSMiddleware,
|
||
allow_origins=[str(origin) for origin in settings.BACKEND_CORS_ORIGINS],
|
||
allow_credentials=True,
|
||
allow_methods=["*"],
|
||
allow_headers=["*"],
|
||
)
|
||
|
||
# --- STATIKUS FÁJLOK ---
|
||
app.mount("/static", StaticFiles(directory=settings.STATIC_DIR), name="static")
|
||
|
||
# --- ROUTER BEKÖTÉSE ---
|
||
app.include_router(api_router, prefix=settings.API_V1_STR)
|
||
|
||
# --- ALAPVETŐ RENDSZER VÉGPONTOK ---
|
||
|
||
@app.get("/", tags=["System"])
|
||
async def root():
|
||
return {
|
||
"status": "online",
|
||
"system": "Service Finder Master",
|
||
"version": "2.0.1",
|
||
"environment": "Production" if not settings.DEBUG_MODE else "Development"
|
||
}
|
||
|
||
@app.get("/health", tags=["System"])
|
||
async def health_check():
|
||
"""
|
||
Monitoring végpont.
|
||
JAVÍTVA: A settings.get_now_utc_iso() hiba kiiktatva, standard datetime-ra cserélve.
|
||
"""
|
||
return {
|
||
"status": "ok",
|
||
"timestamp": datetime.now(timezone.utc).isoformat(),
|
||
"database": "connected"
|
||
} |