From 4367a8a0fb1642834bbdafea18b5dfd7b0315b10 Mon Sep 17 00:00:00 2001 From: swve Date: Wed, 28 Aug 2024 18:20:55 +0200 Subject: [PATCH] fix: add specific org admin endpoint --- apps/api/src/routers/orgs.py | 17 +++++++++++ apps/api/src/services/orgs/orgs.py | 48 ++++++++++++++++++++++++++---- 2 files changed, 60 insertions(+), 5 deletions(-) diff --git a/apps/api/src/routers/orgs.py b/apps/api/src/routers/orgs.py index 6bb8ed6d..748b5fa6 100644 --- a/apps/api/src/routers/orgs.py +++ b/apps/api/src/routers/orgs.py @@ -34,6 +34,7 @@ from src.services.orgs.orgs import ( get_organization, get_organization_by_slug, get_orgs_by_user, + get_orgs_by_user_admin, update_org, update_org_logo, update_org_signup_mechanism, @@ -329,6 +330,22 @@ async def api_user_orgs( ) +@router.get("/user_admin/page/{page}/limit/{limit}") +async def api_user_orgs_admin( + request: Request, + page: int, + limit: int, + current_user: PublicUser = Depends(get_current_user), + db_session: Session = Depends(get_db_session), +) -> List[OrganizationRead]: + """ + Get orgs by page and limit by current user + """ + return await get_orgs_by_user_admin( + request, db_session, str(current_user.id), page, limit + ) + + @router.put("/{org_id}") async def api_update_org( request: Request, diff --git a/apps/api/src/services/orgs/orgs.py b/apps/api/src/services/orgs/orgs.py index 57e6e73a..4bc9c758 100644 --- a/apps/api/src/services/orgs/orgs.py +++ b/apps/api/src/services/orgs/orgs.py @@ -179,10 +179,7 @@ async def create_org( collaboration=CollaborationOrgConfig(enabled=True, limit=0), api=APIOrgConfig(enabled=True, limit=0), ), - cloud=OrgCloudConfig( - plan='free', - custom_domain=False - ) + cloud=OrgCloudConfig(plan="free", custom_domain=False), ) org_config = json.loads(org_config.json()) @@ -463,7 +460,7 @@ async def delete_org( return {"detail": "Organization deleted"} -async def get_orgs_by_user( +async def get_orgs_by_user_admin( request: Request, db_session: Session, user_id: str, @@ -507,6 +504,47 @@ async def get_orgs_by_user( return orgsWithConfig +async def get_orgs_by_user( + request: Request, + db_session: Session, + user_id: str, + page: int = 1, + limit: int = 10, +) -> list[OrganizationRead]: + + statement = ( + select(Organization) + .join(UserOrganization) + .where(UserOrganization.user_id == user_id) + .offset((page - 1) * limit) + .limit(limit) + ) + + # Get organizations where the user is an admin + result = db_session.exec(statement) + orgs = result.all() + + orgsWithConfig = [] + + for org in orgs: + + # Get org config + statement = select(OrganizationConfig).where( + OrganizationConfig.org_id == org.id + ) + result = db_session.exec(statement) + + org_config = result.first() + + config = OrganizationConfig.model_validate(org_config) if org_config else {} + + org = OrganizationRead(**org.model_dump(), config=config) + + orgsWithConfig.append(org) + + return orgsWithConfig + + # Config related async def update_org_signup_mechanism( request: Request,