""" Pydantic models for the IAM module Models: - List: Description - Models: Description """ from typing import Optional from pydantic import EmailStr, ConfigDict from src.schemas import CustomBaseModel from src.organisation.constants import Status, ContactType from src.contact.schemas import ContactAddress 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(CustomBaseModel): name: str class IAMPostGroupResponse(CustomBaseModel): group: GroupResponse class IAMPutGroupPermissionRequest(GroupIDMixin, PermIDMixin): pass class IAMPutGroupPermissionResponse(CustomBaseModel): group: GroupResponse permissions: list[PermissionResponse] class IAMPutGroupUserRequest(GroupIDMixin): user_id: int class IAMPutGroupUserResponse(CustomBaseModel): group: GroupResponse users: list[UserResponse] class IAMDeleteGroupPermissionRequest(GroupIDMixin, PermIDMixin): pass class IAMDeleteGroupPermissionResponse(CustomBaseModel): group: GroupResponse permissions: list[PermissionResponse] class IAMDeleteGroupUserRequest(GroupIDMixin): user_id: int 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]