Spaces:
Sleeping
Sleeping
| from typing import Literal | |
| from app.client.futabus_client import FutabusClient | |
| class LocationService: | |
| def __init__(self, client: FutabusClient): | |
| self.client = client | |
| async def get_city_by_office( | |
| self, office_name: str, role: Literal["origin", "dest"] | |
| ) -> tuple[int | None, str | None, str | None]: | |
| """ | |
| Trích xuất thông tin tỉnh (ID, code, name) từ tên văn phòng. | |
| Args: | |
| office_name (str): Tên văn phòng cần tìm. | |
| role (Literal["origin", "dest"]): Loại văn phòng ("origin" hoặc "dest"). | |
| Returns: | |
| Tuple[int | None, str | None, str | None]: Thông tin tỉnh tương ứng (ID, code, name), | |
| hoặc toàn bộ là None nếu không tìm thấy. | |
| """ | |
| if role not in {"origin", "dest"}: | |
| raise ValueError("role must be 'origin' or 'dest'") | |
| response = await self.client.get_pickup_points( | |
| origin=office_name if role == "origin" else None, | |
| dest=office_name if role == "dest" else None, | |
| ) | |
| key = role | |
| for group in response.get(key, []): | |
| for office in group.get("group", []): | |
| if office.get("name", "").lower() == office_name.lower(): | |
| id = ( | |
| office.get("provinceId")[0] | |
| if isinstance(office.get("provinceId"), tuple) | |
| else office.get("provinceId") | |
| ) | |
| code = office.get("provinceCode") | |
| name = office.get("provinceName") | |
| return id, code, name | |
| return None, None, None | |
| async def get_office_id_by_name(self, office_name: str) -> int | None: | |
| """ | |
| Trích xuất Office ID từ tên văn phòng. | |
| Args: | |
| office_name (str): Tên văn phòng. | |
| Returns: | |
| int | None: ID văn phòng nếu tìm thấy, ngược lại None. | |
| """ | |
| response = await self.client.get_pickup_points(origin=office_name) | |
| for group in response.get("origin", []): | |
| for office in group.get("group", []): | |
| if office.get("name", "").lower() == office_name.lower(): | |
| office_id = office.get("officeId") | |
| return office_id[0] if isinstance(office_id, tuple) else office_id | |
| return None | |