예제 #1
0
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
예제 #2
0
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)
예제 #3
0
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")
예제 #4
0
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)
예제 #5
0
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)
예제 #6
0
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
예제 #7
0
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)