Initial commit - Migrated to Dev environment
This commit is contained in:
72
code-server-config/data/User/History/-26d8d76b/fw3n.py
Executable file
72
code-server-config/data/User/History/-26d8d76b/fw3n.py
Executable 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
|
||||
Reference in New Issue
Block a user