""" Pydantic models for the IAM module Models follow the nomenclature of: - Sub-models: "Response" - Mixins: "Mixin" - Models: "" ie "IAMGetGroupPermissionsResponse" """ from typing import Optional from pydantic import EmailStr, ConfigDict from src.organisation.schemas import OrgIDMixin from src.schemas import CustomBaseModel from user.schemas import UserIDMixin class UserResponse(CustomBaseModel): id: int first_name: str last_name: str email: EmailStr class PermissionResponse(CustomBaseModel): model_config = ConfigDict(from_attributes=True, extra="ignore") service_name: str resource: str action: str class GroupResponse(CustomBaseModel): id: int name: str class GroupIDMixin(CustomBaseModel): group_id: int class PermIDMixin(CustomBaseModel): permission_id: int class IAMGetGroupPermissionsResponse(CustomBaseModel): permissions: list[PermissionResponse] class IAMGetGroupUsersResponse(CustomBaseModel): users : list[UserResponse] class IAMPostGroupRequest(OrgIDMixin): name: str class IAMPostGroupResponse(CustomBaseModel): group: GroupResponse class IAMPutGroupPermissionRequest(GroupIDMixin, PermIDMixin): pass class IAMPutGroupPermissionResponse(CustomBaseModel): group: GroupResponse permissions: list[PermissionResponse] class IAMPutGroupUserRequest(GroupIDMixin, UserIDMixin): pass class IAMPutGroupUserResponse(CustomBaseModel): group: GroupResponse users: list[UserResponse] class IAMDeleteGroupPermissionRequest(GroupIDMixin, PermIDMixin): pass class IAMDeleteGroupPermissionResponse(CustomBaseModel): group: GroupResponse permissions: list[PermissionResponse] class IAMDeleteGroupUserRequest(GroupIDMixin, UserIDMixin): pass class IAMDeleteGroupUserResponse(CustomBaseModel): group: GroupResponse users: list[UserResponse] class IAMGetPermissionsResponse(CustomBaseModel): permissions: list[PermissionResponse] class IAMPostPermissionRequest(CustomBaseModel): service_id: int resource: str action: str class IAMPostPermissionResponse(CustomBaseModel): permission: PermissionResponse class IAMDeletePermissionRequest(PermIDMixin): pass class IAMGetPermissionsSearchRequest(CustomBaseModel): service_id: Optional[int] = None resource: Optional[str] = None action: Optional[str] = None class IAMGetPermissionsSearchResponse(CustomBaseModel): permissions: list[PermissionResponse]