from auth.auth_view import RegisteredAuthorizedView from projects.schemas import project_sharing_response_schema, add_team_member_request_schema, \ update_delete_team_member_request_schema from projects.services.project_team_service import ProjectTeamService from flask_apispec import marshal_with, doc, use_kwargs @doc(tags=["Project"]) class ProjectSharingView(RegisteredAuthorizedView): service = ProjectTeamService() @doc(description='Retrieve data for project sharing. Users that have access to project') @marshal_with(project_sharing_response_schema, code=200, description='Projects sharing data') @marshal_with(schema=None, code=403, description='Forbidden because of permissions.') @marshal_with(schema=None, code=401, description='User is not authenticated.') def get(self, project_id: int): self.permissions.can_view_team(project_id) return self.service.get_project_team_members_for_sharing(project_id) @doc(description='Add users to the project team') @use_kwargs(add_team_member_request_schema) @marshal_with(None, code=200, description='') @marshal_with(schema=None, code=403, description='Forbidden because of permissions.') @marshal_with(schema=None, code=401, description='User is not authenticated.') def post(self, params, project_id: int): self.permissions.can_access_project(project_id) self.permissions.can_manage_team(project_id) self.service.add_project_team_members(project_id, params) return self.no_content() @doc(description='Update user project team role') @use_kwargs(update_delete_team_member_request_schema) @marshal_with(None, code=200, description='') @marshal_with(schema=None, code=403, description='Forbidden because of permissions.') @marshal_with(schema=None, code=401, description='User is not authenticated.') def patch(self, params, project_id: int): self.permissions.can_access_project(project_id) self.permissions.can_manage_team(project_id) self.service.update_project_team_member_role(project_id, params) return self.no_content() @doc(description='Delete user project team role') @use_kwargs(update_delete_team_member_request_schema) @marshal_with(None, code=200, description='') @marshal_with(schema=None, code=403, description='Forbidden because of permissions.') @marshal_with(schema=None, code=401, description='User is not authenticated.') def delete(self, params, project_id: int): self.permissions.can_access_project(project_id) self.permissions.can_manage_team(project_id) self.service.delete_user_project_role(project_id, params) return self.no_content()