Beispiel #1
0
 def get(self, request, *args, **kwargs):
     user = get_user_from_request(request)
     serializer = self.get_serializer(user)
     data = serializer.data
     notification = get_object_or_404(UserSubscription,
                                      user=user).email_notification
     return JsonResponse({**{'notification': notification}, **data})
Beispiel #2
0
 def put(self, request, *args, **kwargs):
     if request.content_type == 'text/plain;charset=UTF-8':
         data = json.loads(request.body.decode('utf-8'))
     else:
         data = request.data
     user = get_user_from_request(request)
     form = BookItemForm(data)
     book_id = self.kwargs['id']
     book_item = get_object_or_404(BookItem, pk=book_id)
     book = book_item.book
     if book_item.owner != user:
         return JsonResponse({'detail': 'Пользователь может редактировать только свои книги'}, status=403)
     # How to validate every field?
     # How to change field on abstr book AND in book_item?
     if data.get('title'):
         book.title = data.get('title')
     if data.get('genre'):
         book.genre = data.get('genre')
     if data.get('authors'):
         book.authors = data.get('authors')
     if data.get('status'):
         book_item.status = data.get('status')
     if data.get('isbn'):
         book_item.isbn = data.get('isbn')
     if data.get('image'):
         upload_file('books/{}/{}.jpg'.format(user.id, book_item.id), data.get('image'))
         book_item.image = MEDIA_URL + 'books/{}/{}.jpg'.format(user.id, book_item.id)
     book.save()
     book_item.save()
     return JsonResponse({})
Beispiel #3
0
 def get(self, request, *args, **kwargs):
     user = get_user_from_request(request)
     point_id = self.kwargs['id']
     point = get_object_or_404(GeoPoint, pk=point_id)
     serializer = self.get_serializer(point)
     data = serializer.data
     return Response(data)
Beispiel #4
0
 def put(self, request, *args, **kwargs):
     if request.content_type == 'text/plain;charset=UTF-8':
         data = json.loads(request.body.decode('utf-8'))
     else:
         data = request.data
     user = get_user_from_request(request)
     form = UserForm(data)
     if form.is_valid():
         user.first_name = data.get('first_name')
         user.last_name = data.get('last_name')
         user.contact = data.get('vk')
         if data.get('image'):
             user_avatar = request.data.get('image')
             upload_path = 'avatar/{}.jpg'.format(user.id)
             upload_file(upload_path, user_avatar)
             user.avatar = MEDIA_URL + upload_path
         user_notification = get_object_or_404(UserSubscription, user=user)
         if data.get('notification') is not None:
             user_notification.email_notification = data.get('notification')
             user_notification.save()
         user.save()
         serializer = self.get_serializer(user)
         data = serializer.data
         return JsonResponse({
             **{
                 'notification': user_notification.email_notification
             },
             **data
         })
     else:
         return JsonResponse(
             {'detail': 'Ошибка создания, проверьте данные'}, status=400)
Beispiel #5
0
 def put(self, request, *args, **kwargs):
     if request.content_type == 'text/plain;charset=UTF-8':
         data = json.loads(request.body.decode('utf-8'))
     else:
         data = request.data
     user = get_user_from_request(request)
     swap_id = self.kwargs['id']
     swap = get_object_or_404(Swap, pk=swap_id)
     if swap.book.owner == user and swap.status == Swap.CONSIDERED:
         if data['status'] == Swap.REJECTED:
             swap.status = data['status']
             swap.updated_at = timezone.localtime()
             swap.save()
             swap.book.status = BookItem.AVAILABLE
             swap.book.save()
             if swap.reader.email and swap.reader.email != '' and swap.reader.email.find(
                     '@false.ru') == -1:
                 task = reject_swap.delay(swap.reader.email)
                 task.get()
         elif data['status'] == Swap.ACCEPTED:
             swap.book.status = BookItem.READING
             swap.book.save()
             swap.status = data['status']
             swap.updated_at = timezone.localtime()
             swap.save()
             if swap.reader.email and swap.reader.email != '' and swap.reader.email.find(
                     '@false.ru') == -1:
                 task = confirm_swap.delay(swap.reader.email)
                 task.get()
         return JsonResponse({})
     elif swap.reader == user and swap.status == Swap.CONSIDERED and data[
             'status'] == Swap.CANCELED:
         swap.status = data['status']
         swap.book.status = BookItem.AVAILABLE
         swap.book.save()
         swap.updated_at = timezone.localtime()
         swap.save()
         return JsonResponse({})
     elif swap.book.owner == user and swap.status == Swap.READING and data[
             'status'] == Swap.RETURNED:
         swap.status = data['status']
         swap.book.status = BookItem.AVAILABLE
         swap.book.save()
         swap.updated_at = timezone.localtime()
         swap.save()
         swap.book.owner.books_given = swap.book.owner.books_given + 1
         swap.book.owner.save()
         swap.reader.books_taken = swap.reader.books_taken + 1
         swap.reader.save()
         return JsonResponse({})
     if swap.reader == user and swap.status == Swap.ACCEPTED and data[
             'status'] == Swap.READING:
         swap.status = data['status']
         swap.updated_at = timezone.localtime()
         swap.save()
         return JsonResponse({})
     return JsonResponse({'detail': 'Изменение запрещено'}, status=403)
Beispiel #6
0
 def get(self, request, *args, **kwargs):
     user = get_user_from_request(request)
     points = GeoPoint.objects.filter(user=user)
     if len(points) == 0:
         data = []
         return Response(data)
     else:
         serializer = self.get_serializer(points, many=True)
         data = serializer.data
         return Response(data)
Beispiel #7
0
 def get(self, request, *args, **kwargs):
     owner = get_user_from_request(request)
     books = BookItem.objects.filter(owner=owner)
     data = []
     for book in books:
         serializer = self.get_serializer(book)
         book_data = serializer.data
         book_data['image'] = book.image
         data.append(book_data)
     return Response(data)
Beispiel #8
0
 def delete(self, request, *args, **kwargs):
     user = get_user_from_request(request)
     swap_id = self.kwargs['id']
     swap = get_object_or_404(Swap, pk=swap_id)
     if swap.reader == user and swap.status == Swap.CONSIDERED:
         swap.delete()
         return JsonResponse({})
     else:
         return JsonResponse({'detail': 'Невозможно удалить заявку'},
                             status=403)
Beispiel #9
0
 def delete(self, request, *args, **kwargs):
     user = get_user_from_request(request)
     wishlist_id = self.kwargs['id']
     wishlist = get_object_or_404(Wishlist, pk=wishlist_id)
     if wishlist.user != user:
         return JsonResponse(
             {'detail': 'Пользователь может удалять только свои книги'},
             status=403)
     else:
         wishlist.delete()
         return JsonResponse({})
Beispiel #10
0
 def delete(self, request, *args, **kwargs):
     user = get_user_from_request(request)
     point_id = self.kwargs['id']
     point = get_object_or_404(GeoPoint, pk=point_id)
     if point.user != user:
         return JsonResponse(
             {'detail': 'Пользователь может удалять только свои точки'},
             status=403)
     else:
         point.delete()
         return JsonResponse({})
Beispiel #11
0
 def post(self, request, *args, **kwargs):
     if request.content_type == 'text/plain;charset=UTF-8':
         data = json.loads(request.body.decode('utf-8'))
     else:
         data = request.data
     user = get_user_from_request(request)
     book = get_object_or_404(Book, id=data['id'])
     if len(Wishlist.objects.filter(user=user, book=book)) == 0:
         Wishlist.objects.create(user=user, book=book)
     else:
         return JsonResponse({'detail': 'Книга уже есть в вашем вишлисте'},
                             status=409)
     id = Wishlist.objects.get(user=user, book=book).id
     return JsonResponse({'id': id}, status=200)
Beispiel #12
0
 def delete(self, request, *args, **kwargs):
     user = get_user_from_request(request)
     book_id = self.kwargs['id']
     book = get_object_or_404(BookItem, pk=book_id)
     if book.owner != user:
         return JsonResponse({'detail': 'Пользователь может удалять только свои книги'}, status=403)
     else:
         abstract_book = get_object_or_404(BookItem, pk=book_id).book
         get_object_or_404(BookItem, pk=book_id).delete()
         if len(BookItem.objects.filter(book=abstract_book)) == 0:
             abstract_book.delete()
         if book.image:
             delete_file('books/{}/{}.jpg'.format(user.id, book_id))
         return JsonResponse({})
Beispiel #13
0
 def post(self, request, *args, **kwargs):
     if request.content_type == 'text/plain;charset=UTF-8':
         data = json.loads(request.body.decode('utf-8'))
     else:
         data = request.data
     user = get_user_from_request(request)
     name = data['name']
     latitude = data['latitude']
     longitude = data['longitude']
     point = GeoPoint.objects.create(name=name,
                                     latitude=latitude,
                                     longitude=longitude,
                                     user=user)
     serializer = self.get_serializer(point)
     data = serializer.data
     return Response(data)
Beispiel #14
0
 def get(self, request, *args, **kwargs):
     swap_id = self.kwargs['id']
     swap = get_object_or_404(Swap, pk=swap_id)
     user = get_user_from_request(request)
     if (swap.reader != user) and (swap.book.owner != user):
         return JsonResponse({'detail': 'Заявка недоступна для просмотра'},
                             status=403)
     data = {}
     data['id'] = swap.id
     data['book'] = swap.book.book.title
     data['authors'] = swap.book.book.authors
     data['genre'] = swap.book.book.genre
     data['owner'] = '{} {}'.format(swap.book.owner.first_name,
                                    swap.book.owner.last_name)
     data['date'] = swap.updated_at.strftime('%d.%m.%Y')
     data['image'] = swap.book.image
     return JsonResponse(data)
Beispiel #15
0
    def get(self, request, *args, **kwargs):
        user = get_user_from_request(request)
        book_id = self.kwargs['id']
        book = get_object_or_404(Book, pk=book_id)
        book_items = BookItem.objects.filter(book=book).exclude(owner=user)
        serializer = self.get_serializer(book)
        serializer_items = BookItemSerializerList(book_items, many=True)
        book_items_list = serializer_items.data
        if request.GET.get('longitude'):
            longitude = float(request.GET.get('longitude')) #todo  проверка
        else:
            longitude = None
        if request.GET.get('latitude'):
            latitude = float(request.GET.get('latitude'))
        else:
            latitude = None
        if latitude is not None and longitude is not None:
            geo = True
        else:
            geo = False
        for book_item in book_items_list:
            geo_points = GeoPoint.objects.filter(user=book_item['owner']['id'])
            if len(geo_points):
                points = []
                for p in geo_points:
                    if geo:
                        distance = haversine(longitude, latitude, p.longitude, p.latitude)
                    else:
                        distance = None
                    points.append({'distance': distance, 'longitude': p.longitude, 'latitude': p.latitude})
                if geo:
                    points.sort(key=lambda x: x['distance'])
                    book_item['point'] = points[0]
                else:
                    book_item['point'] = points
                book_item['geolocationNotNull'] = True
            else:
                book_item['geolocationNotNull'] = False
                book_item['point'] = {}

        if len(Wishlist.objects.filter(book=book, user=user)) == 0:
            wishlist = {'added': False, 'id': None}
        else:
            wishlist = {'added': True, 'id': Wishlist.objects.get(book=book, user=user).id}
        return Response({**serializer.data,**{'wishlist': wishlist}, **{'book_items': book_items_list, 'image': book.image}})
Beispiel #16
0
 def post(self, request, *args, **kwargs):
     if request.content_type == 'text/plain;charset=UTF-8':
         data = json.loads(request.body.decode('utf-8'))
     else:
         data = request.data
     author = get_user_from_request(request)
     form = ComplaintUserForm(data)
     if form.is_valid():
         content = data.get('content')
         user = get_object_or_404(User, id=data.get('user'))
         comment = data.get('comment')
         ComplaintUser.objects.create(author=author,
                                                  status=ComplaintBook.NEW,
                                                  content=content,
                                                  user=user,
                                                  comment=comment)
         return JsonResponse({})
     else:
         return JsonResponse({'detail': 'Ошибка создания, проверьте данные'}, status=400)
Beispiel #17
0
 def get(self, request, *args, **kwargs):
     user = get_user_from_request(request)
     wishlist = Wishlist.objects.filter(user=user)
     data_list = []
     for wish in wishlist:
         data = {}
         serializer = self.get_serializer(wish.book)
         book = serializer.data
         data['book'] = book
         book_items = BookItem.objects.filter(book=wish.book)
         image = book_items[0].image
         data['image'] = image
         data['created_at'] = wish.created_at.strftime('%d.%m.%Y')
         data['id'] = wish.id
         if len(
                 BookItem.objects.filter(book=wish.book,
                                         status=BookItem.AVAILABLE)) != 0:
             data['available'] = True
         else:
             data['available'] = False
         data_list.append(data)
     return Response(data_list)
Beispiel #18
0
 def post(self, request, *args, **kwargs):
     if request.content_type == 'text/plain;charset=UTF-8':
         data = json.loads(request.body.decode('utf-8'))
     else:
         data = request.data
     user = get_user_from_request(request)
     # todo: validation throuth forms
     title = data['title']
     authors = data['authors']
     genre = data['genre']
     existing_books = Book.objects.filter(title__contains=title, authors__contains=authors)
     if existing_books:
         book = existing_books[0]
     else:
         book = Book(title=title, authors=authors, genre=genre)
         book.save()
     book_item = BookItem.objects.create(book=book, owner=user)
     if data.get('image'):
         path = 'books/{}/{}.jpg'.format(user.id, book_item.id)
         if data.get('image').find('data:image') != -1:
             image = data['image']
             upload_file(path, image)
             book_item.image = MEDIA_URL + path
             if not book.image:
                 book.image = MEDIA_URL + path
                 book.save()
             book_item.save()
         else:
             book_item.image = data['image']
             if not book.image:
                 book.image = MEDIA_URL + path
                 book.save()
             book_item.save()
     if data.get('isbn'):
         book_item.isbn = data['isbn']
         book_item.save()
     serializer = self.get_serializer(book_item)
     return Response(serializer.data)
Beispiel #19
0
    def post(self, request, *args, **kwargs):
        if request.content_type == 'text/plain;charset=UTF-8':
            data = json.loads(request.body.decode('utf-8'))
        else:
            data = request.data
        bookitem = get_object_or_404(BookItem, pk=data["book_id"])
        if bookitem.status == BookItem.AVAILABLE:
            user = get_user_from_request(request)
            Swap.objects.create(book=bookitem,
                                reader=user,
                                status=Swap.CONSIDERED)
            bookitem.status = BookItem.READING
            bookitem.save()
            if bookitem.owner.email and bookitem.owner.email != '' and bookitem.owner.email.find(
                    '@false.ru') == -1:
                task = add_swap.delay(bookitem.owner.email)
                task.get()

            return JsonResponse({})
        elif bookitem.status == BookItem.NOT_AVAILABLE:
            return JsonResponse({'detail': 'Книга недоступна'}, status=403)
        else:
            return JsonResponse(
                {'detail': 'Книга читается другим пользователем'}, status=403)
Beispiel #20
0
 def get(self, request, *args, **kwargs):
     user = get_user_from_request(request)
     swaps_reader = Swap.objects.filter(reader=user)
     swaps_owner = Swap.objects.filter(book__owner=user)
     data_owner = []
     data_reader = []
     # todo check times DB hitting and optimize with select_related
     for swap in swaps_owner:
         data = {}
         if swap.reader.email.find('@false.ru') == -1:
             email = swap.reader.email
         else:
             email = ''
         data['id'] = swap.id
         data['book'] = {
             'title': swap.book.book.title,
             'id': swap.book.book.id,
             'status': swap.book.status
         }
         data['authors'] = swap.book.book.authors
         data['genre'] = swap.book.book.genre
         data['status'] = swap.status
         data['reader'] = {
             'name':
             '{} {}'.format(swap.reader.first_name, swap.reader.last_name),
             'id':
             swap.reader.id,
             'vk':
             swap.reader.contact,
             'email':
             email
         }
         data['date'] = swap.updated_at.strftime('%d.%m.%Y')
         data['image'] = swap.book.image
         data_owner.append(data)
     for swap in swaps_reader:
         data = {}
         if swap.book.owner.email.find('@false.ru') == -1:
             email = swap.book.owner.email
         else:
             email = ''
         data['id'] = swap.id
         data['book'] = {
             'title': swap.book.book.title,
             'id': swap.book.book.id,
             'status': swap.book.status
         }
         data['authors'] = swap.book.book.authors
         data['genre'] = swap.book.book.genre
         data['status'] = swap.status
         data['owner'] = {
             'name':
             '{} {}'.format(swap.book.owner.first_name,
                            swap.book.owner.last_name),
             'id':
             swap.book.owner.id,
             'vk':
             swap.book.owner.contact,
             'email':
             email
         }
         data['date'] = swap.updated_at.strftime('%d.%m.%Y')
         data['image'] = swap.book.image
         data_reader.append(data)
     return JsonResponse({'owner': data_owner, 'reader': data_reader})