def get_user_trainings_by_id(session_id, user_id): user = get_user_by_args(session_id=session_id) if user is None: trainings = Training.objects.all().filter(created_by=user_id, is_public=True) return TrainingListSerializer(trainings, many=True).data if user['user_id'] == user_id: trainings = Training.objects.all().filter(created_by=user_id) return TrainingListSerializer(trainings, many=True).data
def create_training(request): request_body = request.data if 'session_id' not in request.query_params: raise BadRequestException("No session id provided") session_id = request.query_params['session_id'] training = request_body series = training.pop('series') user = get_user_by_args(session_id=session_id) if user is None: raise UnauthorizedException(f'invalid session id: {session_id}') training['created_by'] = user['user_id'] created_training = create_new_training(training) if created_training is None: raise InternalServerException('Error during saving training') calories = 0 for _series in series: _series['training_id'] = created_training['training_id'] exercises = _series.pop('exercises') created_series = create_new_series(_series) if created_series is None: raise InternalServerException('Error during saving series') for exercise in exercises: exercise['series_id'] = created_series['series_id'] created_exercise = create_new_exercise(exercise) if created_exercise is None: raise InternalServerException('Error during saving exercises') calories += created_exercise['exercise_calories'] * created_series[ 'iteration'] if update_training(created_training['training_id'], training_calories=calories) is None: raise InternalServerException("Error during saving training") stored_training = get_training_by_args( training_id=created_training['training_id']) return Response({"training": stored_training}, status.HTTP_200_OK)
def update_training_by_id(request, training_id): request_body = dict(request.data) query_params = request.query_params if 'session_id' not in query_params: raise UnauthorizedException("You need to be logged") user = get_user_by_args(session_id=query_params['session_id']) if user is None: raise UnauthorizedException("Invalid session id") if update_training(training_id, **request_body) is None: raise InternalServerException("Cannot update training")
def delete_training_by_id(request, training_id): query_params = request.query_params if 'session_id' not in query_params: raise UnauthorizedException("You need to be logged") user = get_user_by_args(session_id=query_params['session_id']) if user is None: raise UnauthorizedException("Invalid session id") if delete_training(training_id) is None: raise NotFoundException('Training with given id does not exist') return Response(training_id, status.HTTP_200_OK)
def create_raw_training(request): request_body = dict(request.data) query_params = request.query_params if 'session_id' not in query_params: raise UnauthorizedException("You need to be logged") user = get_user_by_args(session_id=query_params['session_id']) if user is None: raise UnauthorizedException("Invalid session id") request_body['created_by'] = user['user_id'] created_training = create_new_training(request_body) if created_training is None: raise BadRequestException('Cannot create training') return Response(created_training, status.HTTP_200_OK)
def get_all_trainings_by_session_id(session_id=None, **kwargs): user = get_user_by_args(session_id=session_id) if session_id is None or user is None: trainings = Training.objects.all().filter(is_public=True) return TrainingListSerializer(filter_trainings_by_args( trainings, **kwargs), many=True).data trainings = Training.objects.all().filter( Q(is_public=True) | Q(created_by=user['user_id'])) filtered_trainings = filter_trainings_by_args(trainings, **kwargs) if kwargs['training_type'] == '': return TrainingListSerializer(filtered_trainings, many=True).data else: return TrainingListSerializer(filtered_trainings.filter( Q(training_type=kwargs['training_type'])), many=True).data
def get_training_by_id(request, training_id): training = get_training_by_args(training_id=training_id) query_params = request.query_params if training is None: raise NotFoundException("There is no training with given id") if not training['is_public'] and 'session_id' not in query_params: raise UnauthorizedException( "You don`t have permission to read this resource(no session_id passed)" ) user = get_user_by_args(session_id=request.query_params['session_id'] ) if 'session_id' in request.query_params else None if not training['is_public'] and user is None: raise UnauthorizedException( "You don`t have permission to read this resource") if not training['is_public'] and user['user_id'] != training['created_by']: raise ForbiddenException( "You don`t have permission to read this resource") return Response(training, status.HTTP_200_OK)