mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-30 13:10:47 +00:00
MagicPlanService orchestrating fetch, match, map, persist 🟩
This commit is contained in:
parent
1a8b27453e
commit
05bd2ba3e2
1 changed files with 35 additions and 0 deletions
35
backend/magic_plan/magic_plan_service.py
Normal file
35
backend/magic_plan/magic_plan_service.py
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from datatypes.magicplan.domain.mapper import map_plan
|
||||||
|
from datatypes.magicplan.domain.models import Plan
|
||||||
|
|
||||||
|
from backend.app.db.connection import db_session
|
||||||
|
from backend.app.db.functions.magic_plan_functions import save_plan
|
||||||
|
from backend.magic_plan.address_matcher import find_matching_plan
|
||||||
|
from backend.magic_plan.magic_plan_client import MagicPlanClient
|
||||||
|
from utils.logger import setup_logger
|
||||||
|
|
||||||
|
logger = setup_logger()
|
||||||
|
|
||||||
|
|
||||||
|
class MagicPlanService:
|
||||||
|
def __init__(self, client: MagicPlanClient) -> None:
|
||||||
|
self._client = client
|
||||||
|
|
||||||
|
def run(self, address: str, uprn: Optional[str] = None) -> Plan:
|
||||||
|
if uprn is not None:
|
||||||
|
logger.info("MagicPlanService.run uprn=%s", uprn)
|
||||||
|
|
||||||
|
plans_response = self._client.get_plans()
|
||||||
|
matched = find_matching_plan(plans_response.plans, address)
|
||||||
|
|
||||||
|
if matched is None:
|
||||||
|
raise ValueError(f"No MagicPlan found for address: {address!r}")
|
||||||
|
|
||||||
|
magic_plan = self._client.get_plan(matched.id)
|
||||||
|
plan = map_plan(magic_plan)
|
||||||
|
|
||||||
|
with db_session() as session:
|
||||||
|
save_plan(session, plan)
|
||||||
|
|
||||||
|
return plan
|
||||||
Loading…
Add table
Reference in a new issue