39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import List, Optional
|
|
|
|
from src.bot.analysis.city_analysis_service import CityAnalysisService
|
|
|
|
|
|
@dataclass
|
|
class CityResolveResult:
|
|
ok: bool
|
|
city_name: Optional[str] = None
|
|
supported_cities: List[str] | None = None
|
|
|
|
|
|
@dataclass
|
|
class CityReportResult:
|
|
ok: bool
|
|
report: Optional[str] = None
|
|
error: Optional[str] = None
|
|
|
|
|
|
class CityCommandService:
|
|
def __init__(self, analysis: CityAnalysisService):
|
|
self.analysis = analysis
|
|
|
|
def resolve_city(self, city_input: str) -> CityResolveResult:
|
|
city_name, supported = self.analysis.resolve_city(city_input)
|
|
if not city_name:
|
|
return CityResolveResult(ok=False, supported_cities=supported)
|
|
return CityResolveResult(ok=True, city_name=city_name, supported_cities=supported)
|
|
|
|
def build_report(self, city_name: str, city_query_cost: int) -> CityReportResult:
|
|
try:
|
|
report = self.analysis.build_city_report(city_name, city_query_cost)
|
|
return CityReportResult(ok=True, report=report)
|
|
except Exception as exc:
|
|
return CityReportResult(ok=False, error=str(exc))
|