Exemplo n.º 1
0
    def get(request):
        """
        Load all Patreon content
        """

        news = PatreonUnlockedPublication.objects.filter(
            publication__publication_type="artículo_premium")
        serialized_news = PublicationSerializer([n.publication for n in news],
                                                many=True).data

        reviews = PatreonUnlockedPublication.objects.filter(
            publication__publication_type="análisis_premium")
        serialized_reviews = PublicationSerializer(
            [r.publication for r in reviews], many=True).data

        surveys = Survey.objects.all()
        serialized_surveys = PatreonSurveySerializer(surveys, many=True).data

        images = PatreonImage.objects.all()
        serialized_images = PatreonImageSerializer(images, many=True).data

        response = {
            "news": serialized_news,
            "reviews": serialized_reviews,
            "surveys": serialized_surveys,
            "images": serialized_images
        }

        return Response(response, status=status.HTTP_200_OK)
    def get(self, request, slug):
        publication = Publication.objects.get(slug=slug)
        publication_serializer = PublicationDetailSerializer(publication,
                                                             context={
                                                                 'request':
                                                                 request
                                                             }).data

        related_amount = 3

        if settings.BITCORE_SERVER_TYPE == "pro":
            now = datetime.today()
            related_articles = Publication.objects.exclude(
                publication_date__gte=now).exclude(publication_type__in=[
                    "análisis_premium", "artículo_premium"
                ]).order_by('?')[:int(related_amount)]
        else:
            related_articles = Publication.objects.all().exclude(
                publication_type__in=["análisis_premium", "artículo_premium"
                                      ]).order_by('?')[:int(related_amount)]

        related_serializer = PublicationSerializer(related_articles,
                                                   many=True).data

        patreon_locked = PatreonUnlockedPublication.objects.filter(
            publication=publication).first()
        if patreon_locked:
            if patreon_locked.minimum_level_needed > request.user.patreon_level:
                return 1

        return Response({
            "publication": publication_serializer,
            "related": related_serializer
        })
    def get(self, request):
        offset_start = request.query_params.get('offset_start')
        offset_end = request.query_params.get('offset_end')
        search_string = request.query_params.get('search_string', None)
        tag = request.query_params.get('tag', None)

        if tag:
            tag_id = CustomTag.objects.get(slug=tag).id

            publications = Publication.objects.filter(
                Q(genre_tags=tag_id) | Q(title_tag=tag_id)
                | Q(review_platform_tags=tag_id)
                | Q(available_platform_tags=tag_id) | Q(developer_tags=tag_id)
                | Q(publisher_tags=tag_id)).exclude(publication_type__in=[
                    "análisis_premium", "artículo_premium"
                ]).distinct()

            if settings.BITCORE_SERVER_TYPE == "pro":
                now = datetime.today()
                publications = publications.exclude(publication_date__gte=now)

            publication_serializer = PublicationSerializer(
                publications[int(offset_start):int(offset_end)],
                many=True).data

        else:
            sqs = SearchQuerySet().models(Publication).autocomplete(
                title_auto=search_string)
            suggestions = [result.slug for result in sqs]

            publications = Publication.objects.filter(slug__in=suggestions)

            if settings.BITCORE_SERVER_TYPE == "pro":
                now = datetime.today()
                publications = publications.exclude(publication_date__gte=now)

            publication_serializer = PublicationSerializer(publications,
                                                           many=True).data

        total = len(publications)

        return Response({
            "publications": publication_serializer,
            "total": total
        })
    def get(self, request):
        """
        Publication view with cache
        """
        publications = Publication.objects.all().exclude(
            publication_type__in=["análisis_premium", "artículo_premium"
                                  ]).distinct()

        # TODO: articulos not being correctly filtered
        if request.query_params.get('type') == "analisis":
            publication_types = ["análisis"]
            publications = publications.filter(
                publication_type__in=publication_types)
        elif request.query_params.get('type') == "articulos":
            publication_types = ["noticia", "artículo"]
            publications = publications.filter(
                publication_type__in=publication_types)

        publication_list = publications.order_by('-publication_date')
        if settings.BITCORE_SERVER_TYPE == "pro":
            now = datetime.today()
            publication_list = publication_list.exclude(
                publication_date__gte=now)

        total = len(publication_list)

        offset_start = request.query_params.get('offset_start')
        offset_end = request.query_params.get('offset_end')

        if request.query_params.get('type') == "masonry":
            rows = reorder_as_rows(
                publication_list[int(offset_start):int(offset_end)])
            publication_list = [item for sublist in rows for item in sublist]
        elif request.query_params.get('type') == "analisis":
            publication_list = publication_list[int(offset_start
                                                    ):int(offset_end)]
        elif request.query_params.get('type') == "articulos":
            publication_list = publication_list[int(offset_start
                                                    ):int(offset_end)]

        publication_serializer = PublicationSerializer(publication_list,
                                                       many=True).data

        return Response({
            "publications": publication_serializer,
            "total": total
        })
    def get(self, request, amount):
        """
        Load related content
        """
        if settings.BITCORE_SERVER_TYPE == "pro":
            now = datetime.today()
            publications = Publication.objects.exclude(
                publication_date__gte=now).exclude(publication_type__in=[
                    "análisis_premium", "análisis_premium"
                ]).order_by('?')[:3]
        else:
            publications = Publication.objects.all().exclude(
                publication_type__in=["análisis_premium", "artículo_premium"
                                      ]).order_by('?')[:int(amount)]

        publication_serializer = PublicationSerializer(publications,
                                                       many=True).data
        return Response({"data": publication_serializer})
    def get(self, request):
        """
        Load last publications
        """
        if settings.BITCORE_SERVER_TYPE == "pro":
            now = datetime.today()
            publication = Publication.objects.exclude(
                publication_date__gte=now).exclude(publication_type__in=[
                    "análisis_premium", "artículo_premium"
                ]).order_by('-publication_date')[:6]
        else:
            publication = Publication.objects.exclude(
                publication_type__in=["análisis_premium", "artículo_premium"
                                      ]).order_by('-publication_date')[:6]

        publication_serializer = PublicationSerializer(publication,
                                                       many=True).data

        return Response({"publications": publication_serializer})
Exemplo n.º 7
0
    def post(request):
        """
        Load Patreon content unlocked by the user
        """
        user = get_object_or_404(User, username=request.user.username)
        news = PatreonUnlockedPublication.objects.filter(
            publication__publication_type="artículo_premium",
            minimum_level_needed__lte=user.patreon_level)

        serialized_news = [n.publication.slug for n in news]
        reviews = PatreonUnlockedPublication.objects.filter(
            publication__publication_type="análisis_premium",
            minimum_level_needed__lte=user.patreon_level)

        serialized_reviews = [r.publication.slug for r in reviews]

        surveys = Survey.objects.filter(
            minimum_level_needed__lte=user.patreon_level)
        serialized_surveys = [s.id for s in surveys]

        images = PatreonImage.objects.filter(
            minimum_level_needed__lte=user.patreon_level)
        serialized_images = [{
            "id": i.id,
            "thumbnail": i.thumbnail,
            "url": i.url
        } for i in images]

        unlocked = {
            "news": serialized_news,
            "reviews": serialized_reviews,
            "surveys": serialized_surveys,
            "images": serialized_images
        }

        news = PatreonUnlockedPublication.objects.filter(
            publication__publication_type="artículo_premium")
        serialized_news = PublicationSerializer([n.publication for n in news],
                                                many=True).data

        reviews = PatreonUnlockedPublication.objects.filter(
            publication__publication_type="análisis_premium")
        serialized_reviews = PublicationSerializer(
            [r.publication for r in reviews], many=True).data

        surveys = Survey.objects.all()
        serialized_surveys = PatreonSurveySerializer(surveys, many=True).data

        images = PatreonImage.objects.all()
        serialized_images = PatreonImageSerializer(images, many=True).data

        all = {
            "news": serialized_news,
            "reviews": serialized_reviews,
            "surveys": serialized_surveys,
            "images": serialized_images
        }

        response = {"all": all, "unlocked": unlocked}

        return Response(response, status=status.HTTP_200_OK)