mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-30 13:10:47 +00:00
Merge branch 'main' into feature/generate-ventilation-audit-from-magicplan
This commit is contained in:
commit
94f8ef5458
4 changed files with 6 additions and 75 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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]: ...
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue