refaktorálás javításai

This commit is contained in:
Roo
2026-03-13 10:22:41 +00:00
parent 2d8d23f469
commit f53e0b53df
140 changed files with 7316 additions and 4579 deletions

View File

@@ -1,10 +1,18 @@
from fastapi import APIRouter, Depends, Form, Query, HTTPException
from fastapi import APIRouter, Depends, Form, Query, HTTPException, status
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select, and_, text
from typing import List, Optional
from app.db.session import get_db
from app.services.gamification_service import GamificationService
from app.models.service import ServiceProfile, ExpertiseTag, ServiceExpertise
from app.services.marketplace_service import (
create_verified_review,
get_service_reviews,
can_user_review_service
)
from app.schemas.social import ServiceReviewCreate, ServiceReviewResponse
from app.api.deps import get_current_user
from app.models.identity import User
router = APIRouter()
@@ -19,7 +27,7 @@ async def register_service_hunt(
""" Új szerviz-jelölt rögzítése a staging táblába jutalompontért. """
# Új szerviz-jelölt rögzítése
await db.execute(text("""
INSERT INTO data.service_staging (name, fingerprint, status, raw_data)
INSERT INTO marketplace.service_staging (name, fingerprint, status, raw_data)
VALUES (:n, :f, 'pending', jsonb_build_object('lat', :lat, 'lng', :lng))
"""), {"n": name, "f": f"{name}-{lat}-{lng}", "lat": lat, "lng": lng})
@@ -55,4 +63,76 @@ async def search_services(
result = await db.execute(query.distinct())
services = result.scalars().all()
return services
return services
# --- ⭐ VERIFIED SERVICE REVIEWS (Social 3 - #66) ---
@router.post("/{service_id}/reviews", response_model=ServiceReviewResponse, status_code=status.HTTP_201_CREATED)
async def create_service_review(
service_id: int,
review_data: ServiceReviewCreate,
current_user: User = Depends(get_current_user),
db: AsyncSession = Depends(get_db)
):
"""
Verifikált szerviz értékelés beküldése.
Csak igazolt pénzügyi tranzakció után lehetséges (transaction_id kötelező).
"""
try:
review = await create_verified_review(
db=db,
service_id=service_id,
user_id=current_user.id,
transaction_id=review_data.transaction_id,
review_data=review_data
)
return review
except ValueError as e:
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e))
except IntegrityError as e:
raise HTTPException(status_code=status.HTTP_409_CONFLICT, detail=str(e))
@router.get("/{service_id}/reviews", response_model=dict)
async def list_service_reviews(
service_id: int,
skip: int = Query(0, ge=0),
limit: int = Query(20, ge=1, le=100),
verified_only: bool = Query(True),
db: AsyncSession = Depends(get_db)
):
"""
Szerviz értékeléseinek lapozható listázása.
"""
reviews, total = await get_service_reviews(
db=db,
service_id=service_id,
skip=skip,
limit=limit,
verified_only=verified_only
)
return {
"reviews": reviews,
"total": total,
"skip": skip,
"limit": limit
}
@router.get("/{service_id}/reviews/check")
async def check_review_eligibility(
service_id: int,
current_user: User = Depends(get_current_user),
db: AsyncSession = Depends(get_db)
):
"""
Ellenőrzi, hogy a felhasználó értékelhetie a szervizt.
"""
can_review, reason = await can_user_review_service(db, current_user.id, service_id)
return {
"can_review": can_review,
"reason": reason,
"user_id": current_user.id,
"service_id": service_id
}