24 lines
1.1 KiB
Python
Executable File
24 lines
1.1 KiB
Python
Executable File
# backend/app/api/v1/endpoints/search.py
|
|
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from sqlalchemy import text
|
|
from app.db.session import get_db
|
|
from app.api.deps import get_current_user
|
|
from app.models.organization import Organization # JAVÍTVA
|
|
|
|
router = APIRouter()
|
|
|
|
@router.get("/match")
|
|
async def match_service(lat: float, lng: float, radius: int = 20, db: AsyncSession = Depends(get_db), current_user = Depends(get_current_user)):
|
|
# PostGIS alapú keresés a data.branches táblában (a régi locations helyett)
|
|
query = text("""
|
|
SELECT o.id, o.name, b.city,
|
|
ST_Distance(b.location, ST_SetSRID(ST_MakePoint(:lng, :lat), 4326)::geography) / 1000 as distance
|
|
FROM data.organizations o
|
|
JOIN data.branches b ON o.id = b.organization_id
|
|
WHERE o.is_active = True AND b.is_active = True
|
|
AND ST_DWithin(b.location, ST_SetSRID(ST_MakePoint(:lng, :lat), 4326)::geography, :r * 1000)
|
|
ORDER BY distance ASC
|
|
""")
|
|
result = await db.execute(query, {"lat": lat, "lng": lng, "r": radius})
|
|
return {"results": [dict(row._mapping) for row in result.fetchall()]} |