from __future__ import annotations from datetime import datetime from uuid import UUID from pydantic import BaseModel, ConfigDict class FishOut(BaseModel): model_config = ConfigDict(from_attributes=True) id: UUID slug: str name_ru: str trophy_weight_g: int | None class WaterbodyOut(BaseModel): model_config = ConfigDict(from_attributes=True) id: UUID slug: str name_ru: str unlock_level: int | None class BaitOut(BaseModel): model_config = ConfigDict(from_attributes=True) id: UUID name: str normalized_name: str kind: str class ActivityOut(BaseModel): spot_id: UUID waterbody_slug: str waterbody: str fish_slug: str fish: str x: int y: int best_bait: str | None catches: int unique_players: int average_weight_g: int max_weight_g: int last_confirmed_at: datetime activity_score: int confidence_score: int explanation: str class CatchOut(BaseModel): id: UUID fish: str weight_g: int bait: str | None player_name: str | None caught_at: datetime | None reported_at: datetime retrieve_method: str | None retrieve_speed: int | None class SpotOut(BaseModel): id: UUID waterbody_slug: str waterbody: str x: int y: int description: str | None catches_24h: int catches_3d: int catches_7d: int top_baits: list[str] class OfficialRecordOut(BaseModel): id: UUID fish: str weight_g: int waterbody: str bait: str | None player_name: str | None record_date: datetime | None category: str | None region: str | None source_url: str | None class ImportRunOut(BaseModel): model_config = ConfigDict(from_attributes=True) id: UUID started_at: datetime finished_at: datetime | None status: str source_url: str rows_seen: int rows_created: int rows_updated: int error_summary: str | None