Build Dockerized MVP scaffold and records importer

This commit is contained in:
ik
2026-09-02 20:29:02 +07:00
parent a6f91a1329
commit d3a45248ef
39 changed files with 6638 additions and 13 deletions
+100
View File
@@ -0,0 +1,100 @@
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