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})
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({})
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)
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)
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)
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)
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)
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)
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({})
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({})
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)
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({})
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)
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)
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}})
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)
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)
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)
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)
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})