From 59251ea089b32142ad3fcedd65dbb18e93fd2071 Mon Sep 17 00:00:00 2001 From: Cizz22 Date: Mon, 16 Dec 2024 15:41:18 +0700 Subject: [PATCH] fix scope equipment scope --- src/scope_equipment/model.py | 20 +++++++++++++++++--- src/scope_equipment/schema.py | 3 ++- src/scope_equipment/service.py | 30 +++++++++++++++--------------- 3 files changed, 34 insertions(+), 19 deletions(-) diff --git a/src/scope_equipment/model.py b/src/scope_equipment/model.py index 89c68b8..26a70cd 100644 --- a/src/scope_equipment/model.py +++ b/src/scope_equipment/model.py @@ -12,9 +12,23 @@ class ScopeEquipment(Base, DefaultMixin): assetnum = Column(String, nullable=True) scope_id = Column(UUID(as_uuid=True), ForeignKey( + 'oh_scope.id'), nullable=True) + current_scope_id = Column(UUID(as_uuid=True), ForeignKey( 'oh_scope.id'), nullable=False) - scope = relationship("Scope", backref="scope_equipments", lazy="raise") + parent_scope = relationship( + "Scope", + foreign_keys=[scope_id], + backref="equipments", + lazy="raise" + ) + current_scope = relationship( + "Scope", + foreign_keys=[current_scope_id], + backref="overhaul_equipments", + lazy="raise" + ) + master_equipment = relationship( "MasterEquipment", lazy="raise", @@ -23,8 +37,8 @@ class ScopeEquipment(Base, DefaultMixin): ) work_orders = relationship("MasterWorkOrder", lazy="selectin", primaryjoin="and_(ScopeEquipment.assetnum == foreign(MasterWorkOrder.assetnum))") - - @hybrid_property + + @ hybrid_property def total_cost(self): return sum(wo.total_cost_max for wo in self.work_orders if wo.total_cost_max) diff --git a/src/scope_equipment/schema.py b/src/scope_equipment/schema.py index 06359ac..bb6d914 100644 --- a/src/scope_equipment/schema.py +++ b/src/scope_equipment/schema.py @@ -29,7 +29,8 @@ class ScopeEquipmentUpdate(ScopeEquipmentBase): class ScopeEquipmentRead(ScopeEquipmentBase): id: UUID assetnum: str - scope: ScopeRead + parent_scope: ScopeRead + current_scope: ScopeRead master_equipment: MasterEquipmentBase total_cost: float diff --git a/src/scope_equipment/service.py b/src/scope_equipment/service.py index c66489b..a823617 100644 --- a/src/scope_equipment/service.py +++ b/src/scope_equipment/service.py @@ -34,14 +34,14 @@ async def get_by_assetnum(*, db_session: DbSession, assetnum: str): async def get_all(*, db_session: DbSession, common, scope_name: str = None, exclude: bool = False): """Returns all documents.""" query = Select(ScopeEquipment).options(selectinload( - ScopeEquipment.scope), selectinload(ScopeEquipment.master_equipment)) + ScopeEquipment.parent_scope), selectinload(ScopeEquipment.current_scope), selectinload(ScopeEquipment.master_equipment)) query = query.order_by(desc(ScopeEquipment.created_at)) if scope_name: scope = await get_scope_by_name_service(db_session=db_session, scope_name=scope_name) - query = query.filter(ScopeEquipment.scope_id == scope.id) if not exclude else query.filter( - ScopeEquipment.scope_id != scope.id) + query = query.filter(ScopeEquipment.current_scope_id == scope.id) if not exclude else query.filter( + ScopeEquipment.current_scope_id != scope.id) results = await search_filter_sort_paginate(model=query, **common) return results @@ -65,13 +65,13 @@ async def create(*, db_session: DbSession, scope_equipment_in: ScopeEquipmentCre for assetnum in assetnums: stmt = insert(ScopeEquipment).values( assetnum=assetnum, - scope_id=scope.id + current_scope_id=scope.id ) stmt = stmt.on_conflict_do_update( index_elements=["assetnum"], set_={ - "scope_id": scope.id + "current_scope_id": scope.id } ) @@ -106,8 +106,9 @@ async def delete(*, db_session: DbSession, scope_equipment_id: str): query = Select(ScopeEquipment).filter( ScopeEquipment.id == scope_equipment_id) + scope_equipment = await db_session.execute(query) - scope_equipment = scope_equipment.scalars().one_or_none() + scope_equipment: ScopeEquipment = scope_equipment.scalars().one_or_none() if not scope_equipment: raise HTTPException( @@ -115,8 +116,10 @@ async def delete(*, db_session: DbSession, scope_equipment_id: str): detail="A data with this id does not exist.", ) - scope_equipment.scope_id = None - + if not scope_equipment.scope_id: + await db_session.delete(scope_equipment) + else: + scope_equipment.current_scope_id = scope_equipment.scope_id await db_session.commit() @@ -127,7 +130,7 @@ async def get_by_scope_name(*, db_session: DbSession, scope_name: Union[str, lis query = Select(ScopeEquipment) if scope: - query = query.filter(ScopeEquipment.scope_id == scope.id) + query = query.filter(ScopeEquipment.current_scope_id == scope.id) result = await db_session.execute(query) return result.scalars().all() @@ -139,10 +142,10 @@ async def get_exculed_scope_name(*, db_session: DbSession, scope_name: Union[str query = Select(ScopeEquipment) if scope: - query = query.filter(ScopeEquipment.scope_id != scope.id) + query = query.filter(ScopeEquipment.current_scope_id != scope.id) else: - query = query.filter(ScopeEquipment.scope_id != None) + query = query.filter(ScopeEquipment.current_scope_id != None) result = await db_session.execute(query) return result.scalars().all() @@ -158,11 +161,8 @@ async def get_all_master_equipment(*, db_session: DbSession, exclude: Optional[s if scope: query = query.filter( - not_(ScopeEquipment.scope_id == scope.id) | ( - ScopeEquipment.scope_id.is_(None)) + not_(ScopeEquipment.current_scope_id == scope.id) ) - else: - query = query.filter(ScopeEquipment.scope_id.is_(None)) results = await search_filter_sort_paginate(model=query, **common) return results