diff --git a/applications/magic_plan/handler.py b/applications/magic_plan/handler.py index 13bb59c4..cf861908 100644 --- a/applications/magic_plan/handler.py +++ b/applications/magic_plan/handler.py @@ -1,21 +1,21 @@ import os +import boto3 from typing import Any, Optional -import boto3 - +from applications.magic_plan.magic_plan_trigger_request import MagicPlanTriggerRequest from infrastructure.magic_plan.config import MagicPlanConfig from infrastructure.magic_plan.magic_plan_client import MagicPlanClient from infrastructure.s3.s3_client import S3Client from orchestration.magic_plan_orchestrator import MagicPlanOrchestrator -from applications.magic_plan.magic_plan_trigger_request import MagicPlanTriggerRequest from domain.magicplan.models import Plan -from utilities.aws_lambda.subtask_handler import subtask_handler +from domain.tasks.tasks import Source +from utilities.aws_lambda.task_handler import task_handler from utilities.logger import setup_logger logger = setup_logger() -@subtask_handler() +@task_handler(task_source="magic_plan", source=Source.HUBSPOT_DEAL) def handler(body: dict[str, Any], context: Any) -> Optional[str]: config = MagicPlanConfig.from_env(os.environ) payload = MagicPlanTriggerRequest.model_validate(body) diff --git a/repositories/magic_plan/magic_plan_postgres_repository.py b/repositories/magic_plan/magic_plan_postgres_repository.py index f8ff123c..1cd77a32 100644 --- a/repositories/magic_plan/magic_plan_postgres_repository.py +++ b/repositories/magic_plan/magic_plan_postgres_repository.py @@ -6,15 +6,7 @@ from sqlalchemy import delete, select from sqlalchemy.dialects.postgresql import insert as pg_insert from sqlmodel import Session, col -from domain.magicplan.models import ( - Door, - DoorVentilation, - Floor, - Plan, - Room, - Window, - WindowVentilation, -) +from domain.magicplan.models import Floor, Plan from infrastructure.postgres.magic_plan_tables import ( MagicPlanDoorModel, MagicPlanDoorVentilationModel, diff --git a/repositories/magic_plan/magic_plan_repository.py b/repositories/magic_plan/magic_plan_repository.py index 0e26cfdf..e404fad1 100644 --- a/repositories/magic_plan/magic_plan_repository.py +++ b/repositories/magic_plan/magic_plan_repository.py @@ -1,7 +1,6 @@ from __future__ import annotations from abc import ABC, abstractmethod -from typing import Optional from domain.magicplan.models import Plan @@ -17,6 +16,3 @@ class MagicPlanRepository(ABC): @abstractmethod def save(self, plan: Plan, uploaded_file_id: int) -> None: ... - - @abstractmethod - def get_plan_by_uploaded_file_id(self, uploaded_file_id: int) -> Optional[Plan]: ... diff --git a/tests/repositories/magic_plan/test_magic_plan_postgres_repository.py b/tests/repositories/magic_plan/test_magic_plan_postgres_repository.py index c064feee..4aaca0bf 100644 --- a/tests/repositories/magic_plan/test_magic_plan_postgres_repository.py +++ b/tests/repositories/magic_plan/test_magic_plan_postgres_repository.py @@ -91,63 +91,6 @@ def test_save_writes_ventilation_rows(db_engine: Engine) -> None: assert len(session.exec(select(MagicPlanDoorVentilationModel)).all()) == 1 -def test_get_plan_by_uploaded_file_id_returns_plan(db_engine: Engine) -> None: - # Arrange - plan = _plan() - - with Session(db_engine) as session: - MagicPlanPostgresRepository(session).save(plan, uploaded_file_id=42) - session.commit() - - # Act - with Session(db_engine) as session: - result = MagicPlanPostgresRepository(session).get_plan_by_uploaded_file_id(42) - - # Assert — full aggregate reconstructed; floor.name is not persisted (accepted data gap) - assert result is not None - assert result.uid == plan.uid - assert result.name == plan.name - assert result.address == plan.address - assert result.postcode == plan.postcode - assert len(result.floors) == 1 - result_floor = result.floors[0] - assert result_floor.level == plan.floors[0].level - assert result_floor.name is None # floor.name is not persisted per PRD - assert len(result_floor.rooms) == 1 - result_room = result_floor.rooms[0] - source_room = plan.floors[0].rooms[0] - assert result_room.name == source_room.name - assert result_room.width_m == source_room.width_m - assert result_room.length_m == source_room.length_m - assert result_room.area_m2 == source_room.area_m2 - assert len(result_room.windows) == 1 - result_window = result_room.windows[0] - source_window = source_room.windows[0] - assert result_window.width_m == source_window.width_m - assert result_window.height_m == source_window.height_m - assert result_window.area_m2 == source_window.area_m2 - assert result_window.ventilation is not None - assert result_window.ventilation == source_window.ventilation - assert len(result_room.doors) == 1 - result_door = result_room.doors[0] - source_door = source_room.doors[0] - assert result_door.width_mm == source_door.width_mm - assert result_door.height_mm == source_door.height_mm - assert result_door.ventilation is not None - assert result_door.ventilation == source_door.ventilation - - -def test_get_plan_by_uploaded_file_id_returns_none_when_not_found(db_engine: Engine) -> None: - # Arrange — nothing saved for uploaded_file_id=999 - - # Act - with Session(db_engine) as session: - result = MagicPlanPostgresRepository(session).get_plan_by_uploaded_file_id(999) - - # Assert - assert result is None - - def test_save_is_idempotent(db_engine: Engine) -> None: # Arrange plan = _plan()