from pydantic import BaseModel, ConfigDict from typing import Optional, List from datetime import datetime from app.models.social import ModerationStatus, SourceType # --- Alap Sémák --- class ServiceProviderBase(BaseModel): name: str address: Optional[str] = None category: Optional[str] = None source: SourceType = SourceType.manual class ServiceProviderCreate(BaseModel): name: str address: str category: Optional[str] = None class ServiceProviderResponse(ServiceProviderBase): id: int status: ModerationStatus validation_score: int # Látni kell a pontszámot evidence_image_path: Optional[str] = None added_by_user_id: Optional[int] = None created_at: datetime model_config = ConfigDict(from_attributes=True) # --- Voting & Gamification Sémák --- class VoteCreate(BaseModel): vote_value: int # Csak a +1 vagy -1 kell, a user_id jön a tokenből, a provider_id az URL-ből class LeaderboardEntry(BaseModel): username: str points: int rank: int model_config = ConfigDict(from_attributes=True) # --- GAMIFIKÁCIÓS SÉMÁK (Amiket a log keresett) --- class BadgeSchema(BaseModel): id: int name: str description: str image_url: Optional[str] = None class Config: from_attributes = True class UserStatSchema(BaseModel): user_id: int total_points: int current_level: int rank_title: str badges: List[BadgeSchema] = [] class Config: from_attributes = True