bathrooms

This commit is contained in:
Jun-te Kim 2025-06-26 15:36:05 +00:00
parent 7f204e328c
commit 95cc1821c7
4 changed files with 241 additions and 14 deletions

View file

@ -149,4 +149,50 @@ class Hallway(BaseModel, table=True):
room_info_id: Optional[uuid.UUID] = Field(foreign_key="roominfo.id")
room_info: Optional[RoomInfo] = Relationship()
class LivingRoom(BaseModel, table=True):
room_info_id: Optional[uuid.UUID] = Field(foreign_key="roominfo.id")
room_info: Optional[RoomInfo] = Relationship()
class DiningRoom(BaseModel, table=True):
is_there_a_dining_room: bool
room_info_id: Optional[uuid.UUID] = Field(foreign_key="roominfo.id")
room_info: Optional[RoomInfo] = Relationship()
class Kitchen(BaseModel, table=True):
room_info_id: Optional[uuid.UUID] = Field(foreign_key="roominfo.id")
room_info: Optional[RoomInfo] = Relationship()
is_there_a_cooker_hood_present_in_the_room: bool
class Utility(BaseModel, table=True):
is_there_a_utility_room: bool
room_info_id: Optional[uuid.UUID] = Field(foreign_key="roominfo.id")
room_info: Optional[RoomInfo] = Relationship()
class WC(BaseModel, table=True):
is_there_a_seperated_wc: bool
room_info_id: Optional[uuid.UUID] = Field(foreign_key="roominfo.id")
room_info: Optional[RoomInfo] = Relationship()
class Landing(BaseModel, table=True):
is_there_a_landing: bool
room_info_id: Optional[uuid.UUID] = Field(foreign_key="roominfo.id")
room_info: Optional[RoomInfo] = Relationship()
class LoftSpace(BaseModel, table=True):
is_the_main_loft_space_accessible: str
is_there_more_than_one_loft_space: bool
class RoomInRoof(BaseModel, table=True):
is_there_a_room_in_roof: bool
room_info_id: Optional[uuid.UUID] = Field(foreign_key="roominfo.id")
room_info: Optional[RoomInfo] = Relationship()
class Bedroom(BaseModel, table=True):
double_or_single_bedroom: str
room_info_id: Optional[uuid.UUID] = Field(foreign_key="roominfo.id")
room_info: Optional[RoomInfo] = Relationship()
class Bathroom(BaseModel, table=True):
is_this_an_ensuite_bathroom: bool
room_info_id: Optional[uuid.UUID] = Field(foreign_key="roominfo.id")
room_info: Optional[RoomInfo] = Relationship()

View file

@ -30,7 +30,17 @@ from etl.models.conditionReport import (
Hallway,
VentilationInfo,
WindowsInfo,
RoomInfo
RoomInfo,
LivingRoom,
DiningRoom,
Kitchen,
Utility,
WC,
Landing,
LoftSpace,
RoomInRoof,
Bedroom,
Bathroom
)
from etl.models.topLevel import(
@ -115,6 +125,177 @@ class surveyedDataProcessor():
def load_rooms_from_condition_report(self, db_session):
self.load_hallway_from_condition_report(db_session)
self.load_living_room_from_condition_report(db_session)
self.load_dining_room_from_condition_report(db_session)
self.load_kitchen_from_condition_report(db_session)
self.load_utility_room_from_condition_report(db_session)
self.load_wash_chamber_from_condition_report(db_session)
self.load_landing_from_condition_report(db_session)
self.load_loft_space_from_condition_report(db_session)
self.load_room_in_roof_from_condition_report(db_session)
self.load_bedrooms_from_condition_report(db_session)
self.load_bathrooms_from_condition_report(db_session)
def load_bathrooms_from_condition_report(self, db_session):
bathroom_ids = []
for i, bathrooms in enumerate(self.condition_report.master_obj.rooms.bathrooms):
room_info = self.load_room_info_from_condition_report(
db_session,
self.condition_report.master_obj.rooms.bathrooms[i]
)
bathroom = self.upsert_record(
db_session=db_session,
model_class=Bathroom,
data_dict=bathrooms.model_dump(),
additional_fields={
"room_info_id": room_info.id,
}
)
bathroom_ids.append(bathroom.id)
return bathroom_ids
def load_bedrooms_from_condition_report(self, db_session):
bedroom_ids = []
for i, bedrooms in enumerate(self.condition_report.master_obj.rooms.bedrooms):
room_info = self.load_room_info_from_condition_report(
db_session,
bedrooms
)
bedroom = self.upsert_record(
db_session=db_session,
model_class=Bedroom,
data_dict=bedrooms.model_dump(),
additional_fields={
"room_info_id": room_info.id,
}
)
bedroom_ids.append(bedroom.id)
return bedroom_ids
def load_room_in_roof_from_condition_report(self, db_session):
room_info = None
if self.condition_report.master_obj.rooms.room_in_roof.is_there_a_room_in_roof:
room_info = self.load_room_info_from_condition_report(
db_session,
self.condition_report.master_obj.rooms.room_in_roof,
)
return self.get_attribute_and_load(
self.condition_report.master_obj.rooms,
"room_in_roof",
RoomInRoof,
db_session,
additional_fields={
"room_info_id": room_info.id if room_info else None,
}
)
def load_landing_from_condition_report(self, db_session):
room_info = None
if self.condition_report.master_obj.rooms.landing.is_there_a_landing:
room_info = self.load_room_info_from_condition_report(
db_session,
self.condition_report.master_obj.rooms.landing,
)
return self.get_attribute_and_load(
self.condition_report.master_obj.rooms,
"landing",
Landing,
db_session,
additional_fields={
"room_info_id": room_info.id if room_info else None,
}
)
def load_loft_space_from_condition_report(self, db_session):
return self.get_attribute_and_load(
self.condition_report.master_obj.rooms,
"loft_space",
LoftSpace,
db_session,
)
def load_wash_chamber_from_condition_report(self, db_session):
room_info = None
if self.condition_report.master_obj.rooms.wash_chamber.is_there_a_seperated_wc:
room_info = self.load_room_info_from_condition_report(
db_session,
self.condition_report.master_obj.rooms.wash_chamber,
)
return self.get_attribute_and_load(
self.condition_report.master_obj.rooms,
"wash_chamber",
WC,
db_session,
additional_fields={
"room_info_id": room_info.id if room_info else None,
}
)
def load_utility_room_from_condition_report(self, db_session):
room_info = None
if self.condition_report.master_obj.rooms.utility.is_there_a_utility_room:
room_info = self.load_room_info_from_condition_report(
db_session,
self.condition_report.master_obj.rooms.utility
)
return self.get_attribute_and_load(
self.condition_report.master_obj.rooms,
"utility",
Utility,
db_session,
additional_fields={
"room_info_id": room_info.id if room_info else None,
}
)
def load_kitchen_from_condition_report(self, db_session):
room_info = self.load_room_info_from_condition_report(
db_session,
self.condition_report.master_obj.rooms.kitchen,
)
return self.get_attribute_and_load(
self.condition_report.master_obj.rooms,
"kitchen",
pydanticModel=Kitchen,
db_session=db_session,
additional_fields={
"room_info_id": room_info.id if room_info else None,
}
)
def load_dining_room_from_condition_report(self, db_session):
room_info = None
if self.condition_report.master_obj.rooms.dining_room.is_there_a_dining_room:
room_info = self.load_room_info_from_condition_report(
db_session,
self.condition_report.master_obj.rooms.dining_room
)
return self.get_attribute_and_load(
self.condition_report.master_obj.rooms,
"dining_room",
pydanticModel=DiningRoom,
db_session=db_session,
additional_fields={
"room_info_id": room_info.id if room_info else None,
}
)
def load_living_room_from_condition_report(self, db_session):
room_info = self.load_room_info_from_condition_report(
db_session,
self.condition_report.master_obj.rooms.living_room,
)
return self.get_attribute_and_load(
self.condition_report.master_obj.rooms,
"living_room",
pydanticModel=LivingRoom,
db_session=db_session,
additional_fields={
"room_info_id": room_info.id if room_info else None,
}
)
def load_hallway_from_condition_report(self, db_session):
room_info = None

View file

@ -153,17 +153,17 @@ class RoomInRoof(BaseModel):
room_info: Optional[RoomInfo]
class Rooms(BaseModel):
hallway: Hallway
living_room: LivingRoom
dining_room: DiningRoom
kitchen: Kitchen
utility: Utility
wash_chamber: WC
landing: Landing
bedrooms: List[Bedroom]
bathrooms: List[Bathroom]
loft_space: LoftSpace
room_in_roof: RoomInRoof
hallway: Hallway #loaded
living_room: LivingRoom # loaded
dining_room: DiningRoom # loaded
kitchen: Kitchen # loaded
utility: Utility # loaded
wash_chamber: WC # loaded
landing: Landing # loadded
loft_space: LoftSpace #loaded
room_in_roof: RoomInRoof # loaded
bedrooms: List[Bedroom] # loaded
bathrooms: List[Bathroom] # loaded
class GeneralConditionHeatingSystem(BaseModel):
is_the_heating_system_in_working_order: bool

View file

@ -1,4 +1,4 @@
#poetry run alembic revision --autogenerate -m "add column in ventilation info"
#poetry run alembic revision --autogenerate -m "add utility"
poetry run alembic upgrade head