from dataclasses import dataclass from typing import List, Optional from db import db from models.territories import Territory @dataclass class TerritoryResponseModel: id: int name: str parentId: int def __init__(self, territory: Territory): self.id = territory.id self.name = territory.name self.parentId = territory.parent_id @dataclass class TerritoryCodeModel: code: str name: str def __init__(self, territory: Territory): self.code = territory.code self.name = territory.name @dataclass class GoogleTerritoryModel: code: str google_id: int def __init__(self, territory: Territory): self.code = territory.code self.google_id = territory.external_google_id class TerritoriesRepository: def get_all_territories(self) -> List[TerritoryResponseModel]: territories = db.session.query(Territory).order_by(Territory.parent_id.nullsfirst(), Territory.name).all() return [TerritoryResponseModel(territory) for territory in territories] def get_all_territory_codes(self) -> List[TerritoryCodeModel]: territories = db.session.query(Territory).order_by(Territory.name).all() return [TerritoryCodeModel(territory) for territory in territories] def get_google_territories(self) -> List[GoogleTerritoryModel]: territories = db.session.query(Territory).filter(Territory.external_google_id.isnot(None)).all() return [GoogleTerritoryModel(territory) for territory in territories] def get_territories_by_ids(self, territories_ids: List[int]) -> List[Territory]: return db.session.query(Territory).filter(Territory.id.in_(territories_ids)).all() def get_territory_by_id(self, territory_id: int) -> Optional[Territory]: return db.session.query(Territory).filter(Territory.id == territory_id).one_or_none()