""" Pydantic models for the IAM module Models follow the nomenclature of: - Sub-models: "Schema" - Mixins: "Mixin" - Models: "" ie "IAMGetGroupPermissionsResponse" """ from typing import Optional from pydantic import EmailStr, ConfigDict, Field from src.organisation.schemas import OrgIDMixin from src.schemas import CustomBaseModel from user.schemas import UserIDMixin class UserSchema(CustomBaseModel): id: int first_name: str last_name: str email: EmailStr class PermissionSchema(CustomBaseModel): model_config = ConfigDict(from_attributes=True, extra="ignore") service_name: str resource: str action: str class GroupSchema(CustomBaseModel): id: int name: str class GroupIDMixin(CustomBaseModel): group_id: int class PermIDMixin(CustomBaseModel): permission_id: int class IAMGetGroupPermissionsResponse(CustomBaseModel): permissions: list[PermissionSchema] class IAMGetGroupUsersResponse(CustomBaseModel): users : list[UserSchema] class IAMPostGroupRequest(OrgIDMixin): name: str = Field(min_length=3) class IAMPostGroupResponse(CustomBaseModel): group: GroupSchema class IAMPutGroupPermissionRequest(GroupIDMixin, PermIDMixin): pass class IAMPutGroupPermissionResponse(CustomBaseModel): group: GroupSchema permissions: list[PermissionSchema] class IAMPutGroupUserRequest(GroupIDMixin, UserIDMixin): pass class IAMPutGroupUserResponse(CustomBaseModel): group: GroupSchema users: list[UserSchema] class IAMDeleteGroupPermissionRequest(GroupIDMixin, PermIDMixin): pass class IAMDeleteGroupPermissionResponse(CustomBaseModel): group: GroupSchema permissions: list[PermissionSchema] class IAMDeleteGroupUserRequest(GroupIDMixin, UserIDMixin): pass class IAMDeleteGroupUserResponse(CustomBaseModel): group: GroupSchema users: list[UserSchema] class IAMGetPermissionsResponse(CustomBaseModel): permissions: list[PermissionSchema] class IAMPostPermissionRequest(CustomBaseModel): service_id: int resource: str action: str class IAMPostPermissionResponse(CustomBaseModel): permission: PermissionSchema 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[PermissionSchema]