示例#1
0
def selected_book(request):
    """
    Returns data for selected book.
    """
    validate_api_secret_key(request.data.get('app_key'))
    request_serializer = SelectedBookRequest(data=request.data)

    if request_serializer.is_valid():
        user = get_object_or_404(TheUser, auth_token=request.data.get('user_token'))
        book_id = request.data.get('book_id')

        rel_objects = Book.get_related_objects_selected_book(request.user, book_id, request.data.get('user_token'))

        if rel_objects['book'].private_book and rel_objects['book'].who_added != user:
            return Response({}, status=404)

        book_rating = rel_objects['avg_book_rating']['rating__avg']
        book_rating_count = rel_objects['book_rating_count']
        comments = [CommentSerializer(comment).data for comment in rel_objects['comments']]

        return Response({'detail': 'success',
                         'data': {'book': BookSerializer(rel_objects['book']).data,
                                  'is_added_book': bool(rel_objects['added_book']),
                                  'user_reading_count': AddedBook.get_count_added(book_id),
                                  'book_rating': book_rating if book_rating else 0,
                                  'book_rated_count': book_rating_count if book_rating_count else 0,
                                  'comments': comments}},
                        status=status.HTTP_200_OK)
    else:
        return invalid_data_response(request_serializer)