""" Dependencies for the IAM module Exports: - group_model_query_dependency: group_model: Gets group model from db, if it exists. Uses group_id from query param. - group_model_body_dependency: group_model: Gets group model from db, if it exists. Uses group_id from request body. - perm_model_body_dependency: perm_model: Gets perm model from db, if it exists. Uses perm_id from request body. """ from typing import Annotated, Optional from fastapi import Depends, Query from src.database import db_dependency from src.iam.models import Group, Permission from src.iam.exceptions import GroupNotFoundException, PermNotFoundException from src.iam.schemas import GroupIDMixin, PermIDMixin def get_group_model_query( db: db_dependency, group_id: Annotated[int, Query(gt=0)] ) -> type[Group]: group_model = db.get(Group, group_id) if group_model is None: raise GroupNotFoundException(group_id) return group_model group_model_query_dependency = Annotated[type[Group], Depends(get_group_model_query)] def get_group_model_body( db: db_dependency, request_model: Optional[GroupIDMixin] = None ) -> type[Group]: group_id = getattr(request_model, "group_id", None) if group_id is None: raise GroupNotFoundException() group_model = db.get(Group, group_id) if group_model is None: raise GroupNotFoundException(group_id) return group_model group_model_body_dependency = Annotated[type[Group], Depends(get_group_model_body)] def get_perm_model_body( db: db_dependency, request_model: Optional[PermIDMixin] = None ) -> type[Permission]: perm_id = getattr(request_model, "permission_id", None) if perm_id is None: raise PermNotFoundException perm_model = db.get(Permission, perm_id) if perm_model is None: raise PermNotFoundException(perm_id) return perm_model perm_model_body_dependency = Annotated[type[Permission], Depends(get_perm_model_body)]