from __future__ import annotations from datetime import datetime, timedelta, timezone from uuid import UUID from sqlalchemy import select from .database import SessionLocal from .models import Bait, BaitKind, CatchReport, Fish, ModerationStatus, SourceType, Spot, Waterbody IDS = { "vyunok": UUID("10000000-0000-0000-0000-000000000001"), "kuori": UUID("10000000-0000-0000-0000-000000000002"), "pike": UUID("20000000-0000-0000-0000-000000000001"), "trout": UUID("20000000-0000-0000-0000-000000000002"), "spiker": UUID("30000000-0000-0000-0000-000000000001"), "shad": UUID("30000000-0000-0000-0000-000000000002"), "spot1": UUID("40000000-0000-0000-0000-000000000001"), "spot2": UUID("40000000-0000-0000-0000-000000000002"), } def seed() -> None: with SessionLocal.begin() as db: if db.scalar(select(Fish.id).limit(1)) is not None: return vyunok = Waterbody(id=IDS["vyunok"], slug="vyunok", name_ru="Вьюнок", unlock_level=1) kuori = Waterbody(id=IDS["kuori"], slug="kuori", name_ru="Куори", unlock_level=16) pike = Fish(id=IDS["pike"], slug="pike", name_ru="Щука", trophy_weight_g=10_000) trout = Fish(id=IDS["trout"], slug="lake-trout", name_ru="Озёрная форель", trophy_weight_g=10_000) spiker = Bait(id=IDS["spiker"], name="Spiker #2 01-015", normalized_name="spiker #2 01-015", kind=BaitKind.lure) shad = Bait(id=IDS["shad"], name="Salmon T1 Shad 12 005", normalized_name="salmon t1 shad 12 005", kind=BaitKind.lure) spot1 = Spot(id=IDS["spot1"], waterbody=vyunok, x=110, y=103, description="Кромка травы у северного берега") spot2 = Spot(id=IDS["spot2"], waterbody=kuori, x=85, y=92, description="Свальчик в глубину") db.add_all([vyunok, kuori, pike, trout, spiker, shad, spot1, spot2]) now = datetime.now(timezone.utc) for index in range(12): db.add(CatchReport( fish=pike, spot=spot1, waterbody=vyunok, bait=spiker, weight_g=2_600 + index * 480, fishing_method="spinning", retrieve_method="равномерная", retrieve_speed=22, caught_at=now - timedelta(minutes=25 + index * 47), reported_at=now - timedelta(minutes=20 + index * 47), player_name=f"DemoPlayer{index % 7 + 1}", source_type=SourceType.manual_import, source_confidence=80 + index % 3 * 5, moderation_status=ModerationStatus.approved, )) for index in range(5): db.add(CatchReport( fish=trout, spot=spot2, waterbody=kuori, bait=shad, weight_g=4_200 + index * 900, fishing_method="spinning", retrieve_method="ступенчатая", retrieve_speed=18, caught_at=now - timedelta(hours=2 + index * 4), reported_at=now - timedelta(hours=2 + index * 4), player_name=f"DemoAngler{index + 1}", source_type=SourceType.manual_import, source_confidence=85, moderation_status=ModerationStatus.approved, )) if __name__ == "__main__": seed()