mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
get_plan_by_uploaded_file_id returns None when plan is absent 🟩
This commit is contained in:
parent
84a0b4dfde
commit
f05d5e557b
1 changed files with 81 additions and 2 deletions
|
|
@ -4,7 +4,7 @@ from sqlalchemy import delete, select
|
|||
from sqlalchemy.dialects.postgresql import insert as pg_insert
|
||||
from sqlmodel import Session, col
|
||||
|
||||
from datatypes.magicplan.domain.models import Floor, Plan
|
||||
from datatypes.magicplan.domain.models import Door, Floor, Plan, Room, Window
|
||||
from backend.app.db.models.magic_plan import (
|
||||
MagicPlanDoorModel,
|
||||
MagicPlanFloorModel,
|
||||
|
|
@ -17,7 +17,86 @@ from backend.app.db.models.magic_plan import (
|
|||
def get_plan_by_uploaded_file_id(
|
||||
session: Session, uploaded_file_id: int
|
||||
) -> Optional[Plan]:
|
||||
raise NotImplementedError
|
||||
plan_row = session.execute(
|
||||
select(MagicPlanPlanModel).where(
|
||||
col(MagicPlanPlanModel.uploaded_file_id) == uploaded_file_id
|
||||
)
|
||||
).scalar_one_or_none()
|
||||
|
||||
if plan_row is None:
|
||||
return None
|
||||
|
||||
floor_rows = list(
|
||||
session.execute(
|
||||
select(MagicPlanFloorModel)
|
||||
.where(col(MagicPlanFloorModel.magic_plan_plan_id) == plan_row.id)
|
||||
.order_by(col(MagicPlanFloorModel.level))
|
||||
).scalars()
|
||||
)
|
||||
|
||||
return Plan(
|
||||
uid=plan_row.magic_plan_uid if plan_row.magic_plan_uid is not None else "",
|
||||
name=plan_row.name,
|
||||
address=plan_row.address,
|
||||
postcode=plan_row.postcode,
|
||||
floors=[_to_floor(session, f) for f in floor_rows],
|
||||
)
|
||||
|
||||
|
||||
def _to_floor(session: Session, row: MagicPlanFloorModel) -> Floor:
|
||||
room_rows = list(
|
||||
session.execute(
|
||||
select(MagicPlanRoomModel).where(
|
||||
col(MagicPlanRoomModel.magic_plan_floor_id) == row.id
|
||||
)
|
||||
).scalars()
|
||||
)
|
||||
return Floor(
|
||||
level=row.level,
|
||||
name=None,
|
||||
rooms=[_to_room(session, r) for r in room_rows],
|
||||
)
|
||||
|
||||
|
||||
def _to_room(session: Session, row: MagicPlanRoomModel) -> Room:
|
||||
window_rows = list(
|
||||
session.execute(
|
||||
select(MagicPlanWindowModel)
|
||||
.where(col(MagicPlanWindowModel.magic_plan_room_id) == row.id)
|
||||
.order_by(
|
||||
col(MagicPlanWindowModel.magic_plan_room_id),
|
||||
col(MagicPlanWindowModel.id),
|
||||
)
|
||||
).scalars()
|
||||
)
|
||||
door_rows = list(
|
||||
session.execute(
|
||||
select(MagicPlanDoorModel).where(
|
||||
col(MagicPlanDoorModel.magic_plan_room_id) == row.id
|
||||
)
|
||||
).scalars()
|
||||
)
|
||||
return Room(
|
||||
name=row.name if row.name is not None else "",
|
||||
width_m=row.width_m if row.width_m is not None else 0.0,
|
||||
length_m=row.length_m if row.length_m is not None else 0.0,
|
||||
area_m2=row.area_m2 if row.area_m2 is not None else 0.0,
|
||||
windows=[_to_window(w) for w in window_rows],
|
||||
doors=[_to_door(d) for d in door_rows],
|
||||
)
|
||||
|
||||
|
||||
def _to_window(row: MagicPlanWindowModel) -> Window:
|
||||
return Window(
|
||||
width_m=row.width_m if row.width_m is not None else 0.0,
|
||||
height_m=row.height_m if row.height_m is not None else 0.0,
|
||||
area_m2=row.area_m2 if row.area_m2 is not None else 0.0,
|
||||
opening_type=row.opening_type if row.opening_type is not None else "",
|
||||
)
|
||||
|
||||
|
||||
def _to_door(row: MagicPlanDoorModel) -> Door:
|
||||
return Door(width_mm=row.width_mm if row.width_mm is not None else 0.0)
|
||||
|
||||
|
||||
def save_plan(session: Session, plan: Plan, uploaded_file_id: int) -> None:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue