feat: group invitation response model
All checks were successful
ci / lint_and_test (push) Successful in 14s
All checks were successful
ci / lint_and_test (push) Successful in 14s
This commit is contained in:
parent
1a29da73c2
commit
8b89595531
2 changed files with 42 additions and 14 deletions
|
|
@ -60,7 +60,6 @@ from src.iam.dependencies import (
|
||||||
perm_model_query_dependency,
|
perm_model_query_dependency,
|
||||||
)
|
)
|
||||||
from src.iam.schemas import (
|
from src.iam.schemas import (
|
||||||
GroupSchema,
|
|
||||||
IAMCAoRRequest,
|
IAMCAoRRequest,
|
||||||
IAMGetGroupPermissionsResponse,
|
IAMGetGroupPermissionsResponse,
|
||||||
IAMGetGroupUsersResponse,
|
IAMGetGroupUsersResponse,
|
||||||
|
|
@ -80,6 +79,8 @@ from src.iam.schemas import (
|
||||||
IAMPutGroupInvitationRequest,
|
IAMPutGroupInvitationRequest,
|
||||||
IAMPutGroupInvitationAcceptRequest,
|
IAMPutGroupInvitationAcceptRequest,
|
||||||
IAMCAoRResponse,
|
IAMCAoRResponse,
|
||||||
|
IAMPutGroupInvitationAcceptResponse,
|
||||||
|
IAMPutGroupInvitationResponse,
|
||||||
)
|
)
|
||||||
from src.utils import verify_email_token
|
from src.utils import verify_email_token
|
||||||
|
|
||||||
|
|
@ -286,7 +287,7 @@ async def create_group(
|
||||||
or "UNIQUE constraint failed" in str(e.orig) # SQLite unique violation
|
or "UNIQUE constraint failed" in str(e.orig) # SQLite unique violation
|
||||||
):
|
):
|
||||||
raise ConflictException("Group with this name already exists")
|
raise ConflictException("Group with this name already exists")
|
||||||
group_response = GroupSchema(**group_model.__dict__)
|
group_response = GroupSummary(**group_model.__dict__)
|
||||||
org_response = OrgSummary(**org_model.__dict__)
|
org_response = OrgSummary(**org_model.__dict__)
|
||||||
db.commit()
|
db.commit()
|
||||||
return {"group": group_response, "organisation": org_response}
|
return {"group": group_response, "organisation": org_response}
|
||||||
|
|
@ -375,7 +376,7 @@ async def add_group_user(
|
||||||
group_model.user_rel.append(user_model)
|
group_model.user_rel.append(user_model)
|
||||||
db.flush()
|
db.flush()
|
||||||
response = IAMPutGroupUserResponse(
|
response = IAMPutGroupUserResponse(
|
||||||
group=GroupSchema(**group_model.__dict__), users=group_model.user_rel
|
group=GroupSummary(**group_model.__dict__), users=group_model.user_rel
|
||||||
)
|
)
|
||||||
db.commit()
|
db.commit()
|
||||||
return response
|
return response
|
||||||
|
|
@ -410,7 +411,7 @@ async def remove_group_permission(
|
||||||
group_model.permission_rel.remove(perm_model)
|
group_model.permission_rel.remove(perm_model)
|
||||||
db.flush()
|
db.flush()
|
||||||
response = IAMDeleteGroupPermissionResponse(
|
response = IAMDeleteGroupPermissionResponse(
|
||||||
group=GroupSchema(**group_model.__dict__),
|
group=GroupSummary(**group_model.__dict__),
|
||||||
permissions=group_model.permission_rel,
|
permissions=group_model.permission_rel,
|
||||||
)
|
)
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
@ -444,7 +445,7 @@ async def remove_group_user(
|
||||||
user_model.group_rel.remove(group_model)
|
user_model.group_rel.remove(group_model)
|
||||||
db.flush()
|
db.flush()
|
||||||
response = IAMDeleteGroupUserResponse(
|
response = IAMDeleteGroupUserResponse(
|
||||||
group=GroupSchema(**group_model.__dict__), users=group_model.user_rel
|
group=GroupSummary(**group_model.__dict__), users=group_model.user_rel
|
||||||
)
|
)
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
||||||
|
|
@ -571,6 +572,7 @@ async def post_permissions(
|
||||||
path="/group/user/invitation",
|
path="/group/user/invitation",
|
||||||
summary="Send an email invitation for non-org member to join a group",
|
summary="Send an email invitation for non-org member to join a group",
|
||||||
status_code=status.HTTP_200_OK,
|
status_code=status.HTTP_200_OK,
|
||||||
|
response_model=IAMPutGroupInvitationResponse,
|
||||||
responses={},
|
responses={},
|
||||||
)
|
)
|
||||||
async def invitation(
|
async def invitation(
|
||||||
|
|
@ -600,13 +602,20 @@ async def invitation(
|
||||||
group_name=group_name,
|
group_name=group_name,
|
||||||
)
|
)
|
||||||
|
|
||||||
return "Invitation sent"
|
response = {
|
||||||
|
"organisation": org_model,
|
||||||
|
"group": group_model,
|
||||||
|
"invited_email": user_email,
|
||||||
|
}
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
@router.put(
|
@router.put(
|
||||||
path="/group/user//invitation/accept",
|
path="/group/user//invitation/accept",
|
||||||
summary="Accept email invitation to join an org's group",
|
summary="Accept email invitation to join an org's group",
|
||||||
status_code=status.HTTP_200_OK,
|
status_code=status.HTTP_200_OK,
|
||||||
|
response_model=IAMPutGroupInvitationAcceptResponse,
|
||||||
responses={
|
responses={
|
||||||
status.HTTP_404_NOT_FOUND: {"description": "User|Org|Group not found"},
|
status.HTTP_404_NOT_FOUND: {"description": "User|Org|Group not found"},
|
||||||
status.HTTP_403_FORBIDDEN: {
|
status.HTTP_403_FORBIDDEN: {
|
||||||
|
|
@ -642,6 +651,13 @@ async def accept_invitation(
|
||||||
raise ConflictException("User already in group.")
|
raise ConflictException("User already in group.")
|
||||||
|
|
||||||
group_model.user_rel.append(user_model)
|
group_model.user_rel.append(user_model)
|
||||||
|
db.flush()
|
||||||
|
|
||||||
|
response = {
|
||||||
|
"organisation": org_model,
|
||||||
|
"user": user_model,
|
||||||
|
"group": {"details": group_model, "permissions": group_model.permission_rel},
|
||||||
|
}
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
||||||
return "Invitation accepted"
|
return response
|
||||||
|
|
|
||||||
|
|
@ -42,9 +42,9 @@ class PermissionSchema(CustomBaseModel):
|
||||||
action: str
|
action: str
|
||||||
|
|
||||||
|
|
||||||
class GroupSchema(CustomBaseModel):
|
class GroupDetails(CustomBaseModel):
|
||||||
id: int
|
details: GroupSummary
|
||||||
name: str
|
permissions: list[PermissionSchema]
|
||||||
|
|
||||||
|
|
||||||
class IAMCAoRRequest(CustomBaseModel):
|
class IAMCAoRRequest(CustomBaseModel):
|
||||||
|
|
@ -77,7 +77,7 @@ class IAMPostGroupRequest(OrgIDMixin):
|
||||||
|
|
||||||
class IAMPostGroupResponse(CustomBaseModel):
|
class IAMPostGroupResponse(CustomBaseModel):
|
||||||
organisation: OrgSummary
|
organisation: OrgSummary
|
||||||
group: GroupSchema
|
group: GroupSummary
|
||||||
|
|
||||||
|
|
||||||
class IAMPutGroupPermissionRequest(GroupIDMixin, PermIDMixin, OrgIDMixin):
|
class IAMPutGroupPermissionRequest(GroupIDMixin, PermIDMixin, OrgIDMixin):
|
||||||
|
|
@ -95,17 +95,17 @@ class IAMPutGroupUserRequest(GroupIDMixin, UserIDMixin, OrgIDMixin):
|
||||||
|
|
||||||
|
|
||||||
class IAMPutGroupUserResponse(CustomBaseModel):
|
class IAMPutGroupUserResponse(CustomBaseModel):
|
||||||
group: GroupSchema
|
group: GroupSummary
|
||||||
users: list[UserSchema]
|
users: list[UserSchema]
|
||||||
|
|
||||||
|
|
||||||
class IAMDeleteGroupPermissionResponse(CustomBaseModel):
|
class IAMDeleteGroupPermissionResponse(CustomBaseModel):
|
||||||
group: GroupSchema
|
group: GroupSummary
|
||||||
permissions: list[PermissionSchema]
|
permissions: list[PermissionSchema]
|
||||||
|
|
||||||
|
|
||||||
class IAMDeleteGroupUserResponse(CustomBaseModel):
|
class IAMDeleteGroupUserResponse(CustomBaseModel):
|
||||||
group: GroupSchema
|
group: GroupSummary
|
||||||
users: list[UserSchema]
|
users: list[UserSchema]
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -136,5 +136,17 @@ class IAMPutGroupInvitationRequest(OrgIDMixin, GroupIDMixin):
|
||||||
user_email: EmailStr
|
user_email: EmailStr
|
||||||
|
|
||||||
|
|
||||||
|
class IAMPutGroupInvitationResponse(CustomBaseModel):
|
||||||
|
organisation: OrgSummary
|
||||||
|
group: GroupSummary
|
||||||
|
invited_email: EmailStr
|
||||||
|
|
||||||
|
|
||||||
class IAMPutGroupInvitationAcceptRequest(CustomBaseModel):
|
class IAMPutGroupInvitationAcceptRequest(CustomBaseModel):
|
||||||
jwt: str
|
jwt: str
|
||||||
|
|
||||||
|
|
||||||
|
class IAMPutGroupInvitationAcceptResponse(CustomBaseModel):
|
||||||
|
organisation: OrgSummary
|
||||||
|
user: UserSummary
|
||||||
|
group: GroupDetails
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue