Initial commit: Robot ökoszisztéma v2.0 - Stabilizált jármű és szerviz robotok

This commit is contained in:
Kincses
2026-03-04 02:03:03 +01:00
commit 250f4f4b8f
7942 changed files with 449625 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.ext.asyncio import AsyncSession
from typing import List
# --- JAVÍTÁS ITT ---
# Régi (hibás): from app.core.database import get_db
# Új (helyes):
from app.db.session import get_db
# -------------------
from app.schemas.social import ServiceProviderCreate, ServiceProviderResponse
from app.services.social_service import SocialService
router = APIRouter()
@router.post("/", response_model=ServiceProviderResponse, status_code=status.HTTP_201_CREATED)
async def create_provider(
provider: ServiceProviderCreate,
db: AsyncSession = Depends(get_db),
user_id: int = 1
):
return await SocialService.create_service_provider(db, provider, user_id)
@router.get("/", response_model=List[ServiceProviderResponse])
async def list_providers(db: AsyncSession = Depends(get_db)):
return await SocialService.get_all_providers(db)

View File

@@ -0,0 +1,39 @@
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.ext.asyncio import AsyncSession
from typing import List
from app.db.session import get_db
from app.schemas.social import ServiceProviderCreate, ServiceProviderResponse, VoteCreate
from app.models.social import ServiceProvider, Vote
from app.models.user import User
# --- JAVÍTÁS: Nem osztályt, hanem függvényeket importálunk ---
from app.services.social_service import vote_for_provider, get_leaderboard
# -------------------------------------------------------------
router = APIRouter()
# ... (itt lehetnek a create_provider stb. végpontok, azokat hagyd meg) ...
@router.post("/vote", status_code=status.HTTP_200_OK)
async def cast_vote(
vote_data: VoteCreate,
db: AsyncSession = Depends(get_db),
# Itt ideális esetben a current_user-t használnánk, de most egyszerűsítünk:
# current_user: User = Depends(get_current_user)
):
# Most a teszt kedvéért feltételezzük, hogy a vote_data-ban jön a user_id is,
# vagy fix userrel tesztelünk. A Seed script úgyis közvetlenül a service-t hívja.
# Hívjuk meg a szerviz függvényt:
result = await vote_for_provider(db, vote_data.user_id, vote_data.provider_id, vote_data.vote_value)
if "error" in result:
raise HTTPException(status_code=400, detail=result["error"])
return result
@router.get("/competitions/{competition_id}/leaderboard")
async def leaderboard(competition_id: int, db: AsyncSession = Depends(get_db)):
results = await get_leaderboard(db, competition_id)
# Formázzuk a választ
return [{"user": row.full_name, "points": row.points} for row in results]

View File

@@ -0,0 +1 @@
{"version":1,"resource":"vscode-remote://192.168.100.43:8443/home/coder/project/backend/app/api/v1/social.py","entries":[{"id":"tASB.py","timestamp":1769026181226},{"id":"70Kc.py","timestamp":1769028435827},{"id":"E63S.py","timestamp":1769035276415},{"id":"fw3n.py","timestamp":1769035874343}]}

View File

@@ -0,0 +1,72 @@
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.ext.asyncio import AsyncSession
from typing import List
from app.db.session import get_db
from app.schemas.social import ServiceProviderCreate, ServiceProviderResponse, VoteCreate, LeaderboardEntry
from app.models.social import ServiceProvider
from app.services.social_service import vote_for_provider, get_leaderboard
# Mivel még nincs teljes Auth rendszerünk a chat kontextusban,
# egyelőre egy "mock" (szimulált) user függőséget használunk teszteléshez.
# Később ezt lecseréljük a valós `get_current_user`-re.
async def get_mock_current_user():
# Visszaadjuk a "Good Guy" user ID-ját (2) a teszthez
return 2
router = APIRouter()
@router.post("/providers", response_model=ServiceProviderResponse, status_code=status.HTTP_201_CREATED)
async def create_provider(
provider: ServiceProviderCreate,
db: AsyncSession = Depends(get_db),
user_id: int = Depends(get_mock_current_user)
):
new_provider = ServiceProvider(**provider.model_dump(), added_by_user_id=user_id)
db.add(new_provider)
await db.commit()
await db.refresh(new_provider)
return new_provider
@router.get("/providers", response_model=List[ServiceProviderResponse])
async def read_providers(skip: int = 0, limit: int = 100, db: AsyncSession = Depends(get_db)):
from sqlalchemy import select
result = await db.execute(select(ServiceProvider).offset(skip).limit(limit))
return result.scalars().all()
# --- ÚJ VÉGPONTOK (A Prompt alapján) ---
@router.post("/providers/{provider_id}/vote")
async def vote(
provider_id: int,
vote_data: VoteCreate,
db: AsyncSession = Depends(get_db),
user_id: int = Depends(get_mock_current_user)
):
"""Szavazás egy szolgáltatóra. A rendszer automatikusan kezeli a hírnevet és pontokat."""
if vote_data.vote_value not in [1, -1]:
raise HTTPException(status_code=400, detail="Vote value must be 1 or -1")
result = await vote_for_provider(db, user_id, provider_id, vote_data.vote_value)
if "error" in result:
raise HTTPException(status_code=400, detail=result["error"])
return result
@router.get("/competitions/{competition_id}/leaderboard", response_model=List[LeaderboardEntry])
async def get_competition_leaderboard(competition_id: int, db: AsyncSession = Depends(get_db)):
"""Ranglista lekérése az adott versenyhez."""
results = await get_leaderboard(db, competition_id)
leaderboard_data = []
for rank, (score, full_name) in enumerate(results, start=1):
# A service UserScore objektumot és nevet ad vissza, ezt alakítjuk át
leaderboard_data.append(
LeaderboardEntry(
username=full_name or "Anonymous",
points=score.points,
rank=rank
)
)
return leaderboard_data

View File

@@ -0,0 +1,29 @@
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.ext.asyncio import AsyncSession
from typing import List
from app.core.database import get_db
from app.schemas.social import ServiceProviderCreate, ServiceProviderResponse
from app.services.social_service import SocialService
router = APIRouter()
@router.post("/", response_model=ServiceProviderResponse, status_code=status.HTTP_201_CREATED)
async def create_provider(
provider: ServiceProviderCreate,
db: AsyncSession = Depends(get_db),
# TODO: Később ezt a 'current_user' dependency-ből szedjük ki
user_id: int = 1
):
"""
Új szolgáltató beküldése.
Automatikusan 'PENDING' státuszba kerül.
"""
return await SocialService.create_service_provider(db, provider, user_id)
@router.get("/", response_model=List[ServiceProviderResponse])
async def list_providers(db: AsyncSession = Depends(get_db)):
"""
Összes szolgáltató listázása (Debug célra).
"""
return await SocialService.get_all_providers(db)