From 707482adc233d0e1c55534b3dfd5596002b51e15 Mon Sep 17 00:00:00 2001 From: luxferre Date: Mon, 25 May 2026 12:40:28 +0100 Subject: [PATCH] feat: condensed org get endpoints The process also added improved ORM relationships for multiple models. --- src/organisation/models.py | 5 +++++ src/organisation/router.py | 14 ++------------ src/organisation/schemas.py | 1 + 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/organisation/models.py b/src/organisation/models.py index c85844a..58be79f 100644 --- a/src/organisation/models.py +++ b/src/organisation/models.py @@ -33,6 +33,11 @@ class Organisation(Base): ) group_rel = relationship("Group", back_populates="org_rel") + root_user_rel = relationship("User", foreign_keys=[root_user_id]) + + @property + def root_user_email(self): + return self.root_user_rel.email if self.root_user_rel else None class OrgUsers(Base): diff --git a/src/organisation/router.py b/src/organisation/router.py index a62dbfc..189da5f 100644 --- a/src/organisation/router.py +++ b/src/organisation/router.py @@ -38,17 +38,14 @@ router = APIRouter( @router.get("/id/{org_id}", response_model=OrgOrgGetResponse) -async def get_org_by_id(db: db_dependency, org_id: Annotated[int, Path(gt=0)]): - org_model = (db.query(Org).filter(Org.id == org_id).first()) - if org_model is None: - raise HTTPException(status_code=404, detail="Organisation not found") - +async def get_org_by_id(db: db_dependency, org_model: org_model_dependency, org_id: Annotated[int, Path(gt=0)]): response = { "name": org_model.name, "status": org_model.status, "owner_contact": (db.query(Contact).filter(Contact.id == org_model.owner_contact_id).first()), "billing_contact": (db.query(Contact).filter(Contact.id == org_model.billing_contact_id).first()), "security_contact": (db.query(Contact).filter(Contact.id == org_model.security_contact_id).first()), + "root_user": org_model.root_user_email } return response @@ -173,13 +170,6 @@ async def get_contact(db: db_dependency, contact_type: ContactType, org_id: Anno return contact_model -@router.get("/{org_id}/root_user") -async def get_org_root_user(db: db_dependency, org_model: org_model_dependency, org_id: Annotated[int, Path(gt=0)]): - root_user = org_model.root_user_id - - return {"root_user": root_user} - - @router.patch("/{org_id}/root_user") async def update_root_user(db: db_dependency, org_model: org_model_dependency, org_id: Annotated[int, Path(gt=0)], root_user: Annotated[int, Query(gt=0)]): # TODO: Request model, ditch query diff --git a/src/organisation/schemas.py b/src/organisation/schemas.py index 68f147e..86fe8f0 100644 --- a/src/organisation/schemas.py +++ b/src/organisation/schemas.py @@ -52,6 +52,7 @@ class OrgContactGetResponse(CustomBaseModel): class OrgOrgGetResponse(CustomBaseModel): name: str status: Status + root_user: Optional[str] = None owner_contact: Optional[OrgContactGetResponse] = None billing_contact: Optional[OrgContactGetResponse] = None security_contact: Optional[OrgContactGetResponse] = None