53 lines
1.8 KiB
Python
Executable File
53 lines
1.8 KiB
Python
Executable File
from fastapi import FastAPI
|
|
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
|
|
from sqlalchemy.orm import sessionmaker
|
|
from sqlalchemy import text
|
|
import os
|
|
from dotenv import load_dotenv
|
|
|
|
# Betöltjük a környezeti változókat
|
|
load_dotenv()
|
|
|
|
app = FastAPI(title="Service Finder API")
|
|
|
|
# --- A FIX ---
|
|
# Kiolvassuk a címet
|
|
raw_url = os.getenv("DATABASE_URL")
|
|
|
|
# Ha nincs beállítva, adunk egy vészhelyzeti alapértelmezettet
|
|
if not raw_url:
|
|
print("⚠️ FIGYELEM: Nincs DATABASE_URL, alapértelmezett használata!")
|
|
# Itt a konténer belső nevét (postgres-db) használjuk
|
|
raw_url = "postgresql://admin:MiskociA74@postgres-db:5432/service_finder"
|
|
|
|
# A LÉNYEG: Ha hiányzik az '+asyncpg', hozzáadjuk!
|
|
if "asyncpg" not in raw_url:
|
|
DATABASE_URL = raw_url.replace("postgresql://", "postgresql+asyncpg://")
|
|
print(f"🔧 URL javítva erre: {DATABASE_URL}")
|
|
else:
|
|
DATABASE_URL = raw_url
|
|
|
|
# Motor indítása a javított URL-lel
|
|
engine = create_async_engine(DATABASE_URL)
|
|
AsyncSessionLocal = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
|
|
|
|
@app.get("/")
|
|
async def root():
|
|
return {"message": "Service Finder API működik! 🚀"}
|
|
|
|
@app.get("/vehicles")
|
|
async def get_vehicles():
|
|
async with AsyncSessionLocal() as session:
|
|
try:
|
|
query = text("""
|
|
SELECT m.name as brand, vm.model_name, vm.category
|
|
FROM ref.vehicle_models vm
|
|
JOIN ref.vehicle_makes m ON vm.make_id = m.id
|
|
ORDER BY m.name, vm.model_name
|
|
""")
|
|
result = await session.execute(query)
|
|
vehicles = result.fetchall()
|
|
return [{"brand": r.brand, "model": r.model_name, "category": r.category} for r in vehicles]
|
|
except Exception as e:
|
|
return {"error": str(e)}
|