def visit_movie(self, instance): try: movie_id = self.request.GET.get("id") movie = Movie.objects.get(id=movie_id) movie.visit_count = movie.visit_count + 1 movie.save() user_id = UserSerializer(self.request.user, context={ 'request': self.request }).data["id"] queryset = Movie.objects.filter(id=movie_id) comments = Comment.objects.filter( movie_id=self.request.GET.get("id")) comSerializer = CommentSerializer(comments, many=True) serializer = MovieSerializer(queryset, context={'user_id': user_id}, many=True) comSerializer.data.sort(reverse=True, key=lambda e: e['timestamp']) return Response( { "data": serializer.data, "comments": comSerializer.data[::-1][:10] }, status=status.HTTP_200_OK) except Exception as e: return Response({'error': 'Create movie error ' + e}, status=status.HTTP_400_BAD_REQUEST)
def like_movie(self, instance): try: user_id = UserSerializer(self.request.user, context={ 'request': self.request }).data["id"] data = self.request.data movie_id = data['movie_id'] stat = data['status'] try: likeExists = Likes.objects.get(movie_id=movie_id, user_id=user_id, status=stat) if likeExists: likeExists.delete() queryset = Movie.objects.filter(id=movie_id) serializer = MovieSerializer(queryset, context={'user_id': user_id}, many=True) return Response(serializer.data, status=status.HTTP_200_OK) except Exception: pass Likes.objects.create(movie_id=movie_id, user_id=user_id, status=stat) queryset = Movie.objects.filter(id=movie_id) serializer = MovieSerializer(queryset, context={'user_id': user_id}, many=True) return Response(serializer.data, status=status.HTTP_200_OK) except Exception as e: return Response({'error': 'Like movie error ' + e}, status=status.HTTP_400_BAD_REQUEST)
def get_movies_by_genre(self, instance): try: user_id = UserSerializer(self.request.user, context={ 'request': self.request }).data["id"] queryset = Movie.objects.filter( genre_id=self.request.GET.get("id")) genres = Genre.objects.filter().values() serializer = MovieSerializer(queryset, context={'user_id': user_id}, many=True) length = len(list(serializer.data)) paginator = Paginator(serializer.data, 10) page_number = self.request.GET.get("page") page_obj = paginator.page(page_number) popular = serializer.data popular.sort(reverse=True, key=lambda e: e['num_of_likes']) return Response( { "data": list(page_obj), "length": length, "genres": genres, "popular": popular[:10] }, status=status.HTTP_200_OK) except Exception as e: return Response({'error': 'Get movies error ' + e}, status=status.HTTP_400_BAD_REQUEST)
def watch_list_action(self, instance): try: data = self.request.data movie_id = data['movie_id'] user_id = UserSerializer(self.request.user, context={ 'request': self.request }).data["id"] try: dataExists = WatchList.objects.filter(movie_id=movie_id, user_id=user_id) if dataExists: dataExists.delete() return Response({ "data": False, "id": movie_id }, status=status.HTTP_200_OK) except Exception: pass WatchList.objects.create(movie_id=movie_id, user_id=user_id) return Response({ "data": True, "id": movie_id }, status=status.HTTP_200_OK) except Exception as e: return Response({'error': 'Create genre error ' + e}, status=status.HTTP_400_BAD_REQUEST)
def get_user_data(self, instance): try: return Response(UserSerializer(self.request.user, context={ 'request': self.request }).data, status=status.HTTP_200_OK) except Exception as e: return Response({'error': 'Wrong auth token' + e}, status=status.HTTP_400_BAD_REQUEST)
class CommentSerializer(serializers.ModelSerializer): user = UserSerializer(many=False, read_only=True) class Meta: model = Comment fields = ( 'user', 'content', 'movie_id', 'timestamp' )
def get_watch_list(self, instance): try: user_id = UserSerializer(self.request.user, context={ 'request': self.request }).data["id"] watch_list = WatchList.objects.filter(user_id=user_id) serializer = WatchListSerializer(watch_list, context={'user_id': user_id}, many=True) return Response(serializer.data, status=status.HTTP_200_OK) except Exception as e: return Response({'error': 'Get movies error ' + e}, status=status.HTTP_400_BAD_REQUEST)
def get_popular(self, instance): try: user_id = UserSerializer(self.request.user, context={ 'request': self.request }).data["id"] queryset = Movie.objects.all() serializer = MovieSerializer(queryset, context={'user_id': user_id}, many=True) lista = serializer.data lista.sort(reverse=True, key=lambda e: e['num_of_likes']) return Response(lista[:10], status=status.HTTP_200_OK) except Exception as e: return Response({'error': 'Get movies error ' + e}, status=status.HTTP_400_BAD_REQUEST)
def create_comment(self, instance): try: user_id = UserSerializer(self.request.user, context={ 'request': self.request }).data["id"] comment = self.request.data content = comment['content'] movie_id = comment['movie_id'] timestamp = datetime.datetime.now() Comment.objects.create(content=content, movie_id=movie_id, timestamp=timestamp, user_id=user_id) comments = Comment.objects.filter(movie_id=movie_id, user_id=user_id, timestamp=timestamp, content=content) comSerializer = CommentSerializer(comments, many=True) return Response(comSerializer.data, status=status.HTTP_200_OK) except Exception as e: return Response({'error': 'Create movie error ' + e}, status=status.HTTP_400_BAD_REQUEST)