feat: org dependencies

Org endpoints use query/body model dependencies to perform initial db lookups.

Issue #6

Org ID path params have been replaced with either query params (get endpoints) or body values.

Resolves #10

Endpoints in other modules that rely on an org model lookup have also been updated.
This commit is contained in:
Chris Milne 2026-05-27 12:21:03 +01:00
parent c6a2b301dc
commit 657f91d73d
9 changed files with 106 additions and 74 deletions

View file

@ -5,9 +5,7 @@ Endpoints:
- List: Description
- Endpoints: Description
"""
from typing import Annotated
from fastapi import APIRouter, Query, HTTPException, status
from fastapi import APIRouter, HTTPException, status
from src.database import db_dependency
from src.iam.schemas import IAMGetGroupPermissionsResponse, IAMGetGroupUsersResponse, IAMPostGroupRequest, \
@ -21,7 +19,7 @@ from src.user.exceptions import UserNotFoundException
from src.user.models import User
from src.organisation.models import Organisation as Org
from src.service.models import Service
from src.organisation.dependencies import org_model_dependency
from src.organisation.dependencies import org_model_body_dependency
from src.iam.service import service_key_dependency
from src.iam.models import Permission as Perm, GroupPermissions as GPerms, Group, UserGroups
@ -66,22 +64,22 @@ async def can_act_on_resource(valid_key: service_key_dependency, db: db_dependen
@router.get("/group/permissions", response_model=IAMGetGroupPermissionsResponse)
async def get_group_permissions(db: db_dependency, group_model: group_model_query_dependency):
async def get_group_permissions(group_model: group_model_query_dependency):
# TODO: root_user_dependency
return {"permissions": group_model.permission_rel}
@router.get("/group/users", response_model=IAMGetGroupUsersResponse)
async def get_group_users(db: db_dependency, group_model: group_model_query_dependency):
async def get_group_users(group_model: group_model_query_dependency):
# TODO: root_user_dependency
return {"users": group_model.user_rel}
@router.post("/group", response_model=IAMPostGroupResponse)
async def create_group(db: db_dependency, group_request: IAMPostGroupRequest, org_model: org_model_dependency, org_id: Annotated[int, Query(gt=0)]):
async def create_group(db: db_dependency, request_model: IAMPostGroupRequest, org_model: org_model_body_dependency):
# TODO: root_user_dependency
# TODO: get org ID from dependency instead of query (needs updated dep first)
group_model = Group(name=group_request.name, org_id=org_id)
group_model = Group(name=request_model.name, org_id=org_model.id)
db.add(group_model)
db.flush()
@ -172,7 +170,7 @@ async def delete_permission(db: db_dependency, perm_model: perm_model_body_depen
@router.get("/permissions/search", response_model=IAMGetPermissionsSearchResponse)
async def get_permissions(db: db_dependency, search: IAMGetPermissionsSearchRequest):
# TODO: super_admin_dependency
# TODO: root_user_dependency
permission_query = db.query(Perm)
if search.service_id is not None: