class ProjectMembersResource(RestResource): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.project_service = ProjectService() self.user_service = UserService() self.project_dao = CaseDAO() def put(self, project_gid): """ Add members to the given project :param project_gid: project gid :param """ try: project = self.project_service.find_project_lazy_by_gid(project_gid) except Exception: raise InvalidIdentifierException("Invalid project identifier.") if get_current_user().id != project.fk_admin: raise AuthorizationRequestException("Your are not allowed to edit given project") input_data = flask.request.json new_members_gid = input_data[ FormKeyInput.NEW_MEMBERS_GID.value] if FormKeyInput.NEW_MEMBERS_GID.value in input_data else [] new_members_id = [] for gid in new_members_gid: user = self.user_service.get_user_by_gid(gid) if user is None: raise InvalidInputException("Invalid user gid {}".format(gid)) new_members_id.append(user.id) self.project_dao.add_members_to_project(project.id, new_members_id)
class ProjectFacade: def __init__(self): self.project_service = ProjectService() self.user_service = UserService() self.project_dao = CaseDAO() @staticmethod def retrieve_logged_user_projects(logged_user_id): projects = ProjectService.retrieve_all_user_projects(user_id=logged_user_id) return [ProjectDto(project) for project in projects] def create_project(self, logged_user, project_name, project_description): self.project_service.store_project(logged_user, True, None, name=project_name, description=project_description) def get_datatypes_in_project(self, project_gid): try: project = self.project_service.find_project_lazy_by_gid(project_gid) except ProjectServiceException: raise InvalidIdentifierException() datatypes = self.project_service.get_datatypes_in_project(project.id) return [DataTypeDto(datatype) for datatype in datatypes] def get_project_operations(self, project_gid, page_number): try: project = self.project_service.find_project_lazy_by_gid(project_gid) except ProjectServiceException: raise InvalidIdentifierException() _, _, operations, pages = self.project_service.retrieve_project_full(project.id, current_page=int(page_number)) return [OperationDto(operation) for operation in operations], pages def add_members_to_project(self, current_user_id, project_gid, new_members_gid): try: project = self.project_service.find_project_lazy_by_gid(project_gid) except Exception: raise InvalidIdentifierException("Invalid project identifier.") if current_user_id != project.fk_admin: raise AuthorizationRequestException("Your are not allowed to edit given project") new_members_id = [] for gid in new_members_gid: user = self.user_service.get_user_by_gid(gid) if user is None: raise InvalidInputException("Invalid user gid {}".format(gid)) new_members_id.append(user.id) self.project_dao.add_members_to_project(project.id, new_members_id)