Ejemplo n.º 1
0
    def put(self, request):
        validator = BroadcastValidator(data=request.data, partial=True)
        if not validator.is_valid():
            return self.respond(validator.errors, status=400)

        result = validator.validated_data

        queryset = Broadcast.objects.filter(is_active=True)

        ids = request.GET.getlist("id")
        if ids:
            queryset = queryset.filter(id__in=ids)

        if result.get("hasSeen"):
            if not request.user.is_authenticated():
                return self.respond(status=401)

            if ids:
                unseen_queryset = queryset
            else:
                unseen_queryset = queryset.exclude(id__in=queryset.filter(
                    broadcastseen__user=request.user).values("id"))

            for broadcast in unseen_queryset:
                try:
                    with transaction.atomic():
                        BroadcastSeen.objects.create(broadcast=broadcast,
                                                     user=request.user)
                except IntegrityError:
                    pass

        return self.respond(result)
Ejemplo n.º 2
0
    def put(self, request):
        validator = BroadcastValidator(data=request.DATA, partial=True)
        if not validator.is_valid():
            return self.respond(validator.errors, status=400)

        result = validator.object

        queryset = Broadcast.objects.filter(
            is_active=True,
        )

        ids = request.GET.getlist('id')
        if ids:
            queryset = queryset.filter(
                id__in=ids,
            )

        if result.get('hasSeen'):
            if not request.user.is_authenticated():
                return self.respond(status=401)

            if ids:
                unseen_queryset = queryset
            else:
                unseen_queryset = queryset.exclude(
                    id__in=queryset.filter(
                        broadcastseen__user=request.user,
                    ).values('id')
                )

            for broadcast in unseen_queryset:
                try:
                    with transaction.atomic():
                        BroadcastSeen.objects.create(
                            broadcast=broadcast,
                            user=request.user,
                        )
                except IntegrityError:
                    pass

        return self.respond(result)