示例#1
0
    def watched(self, request, *args, **kwargs):
        for_user = get_object_or_404(models.User, **kwargs)
        from_user = request.user
        self.check_permissions(request, 'watched', for_user)
        filters = {
            "type": request.GET.get("type", None),
            "q": request.GET.get("q", None),
        }

        self.object_list = services.get_watched_list(for_user, from_user, **filters)
        page = self.paginate_queryset(self.object_list)
        elements = page.object_list if page is not None else self.object_list

        extra_args_liked = {
            "user_watching": services.get_watched_content_for_user(request.user),
            "user_likes": services.get_liked_content_for_user(request.user),
        }

        extra_args_voted = {
            "user_watching": services.get_watched_content_for_user(request.user),
            "user_votes": services.get_voted_content_for_user(request.user),
        }

        response_data = []
        for elem in elements:
            if elem["type"] == "project":
                # projects are liked objects
                response_data.append(serializers.LikedObjectSerializer(elem, **extra_args_liked).data )
            else:
                # stories, tasks and issues are voted objects
                response_data.append(serializers.VotedObjectSerializer(elem, **extra_args_voted).data )

        return response.Ok(response_data)
示例#2
0
文件: api.py 项目: Davidx7/taiga-back
    def _build_needed_notify_policies(self):
        watched_project_ids = user_services.get_watched_content_for_user(self.request.user).get("project", [])

        projects = Project.objects.filter(
            Q(owner=self.request.user) |
            Q(memberships__user=self.request.user) |
            Q(id__in=watched_project_ids)
        ).distinct()

        for project in projects:
            services.create_notify_policy_if_not_exists(project, self.request.user, NotifyLevel.watch)
示例#3
0
    def _build_needed_notify_policies(self):
        watched_content = user_services.get_watched_content_for_user(self.request.user)
        watched_content_project_ids = watched_content.values_list("project__id", flat=True).distinct()

        projects = Project.objects.filter(
            Q(owner=self.request.user) |
            Q(memberships__user=self.request.user) |
            Q(id__in=watched_content_project_ids)
        ).distinct()

        for project in projects:
            services.create_notify_policy_if_not_exists(project, self.request.user, NotifyLevel.watch)
示例#4
0
    def get_queryset(self):
        if self.request.user.is_anonymous():
            return models.NotifyPolicy.objects.none()

        self._build_needed_notify_policies()

        # With really want to include the policies related to any content:
        # - The user is the owner of the project
        # - The user is member of the project
        # - The user is watching any object from the project
        watched_content = user_services.get_watched_content_for_user(self.request.user)
        watched_content_project_ids = watched_content.values_list("project__id", flat=True).distinct()
        return models.NotifyPolicy.objects.filter(Q(project__owner=self.request.user) |
            Q(project__memberships__user=self.request.user) |
            Q(project__id__in=watched_content_project_ids)
        ).distinct()
示例#5
0
文件: api.py 项目: Davidx7/taiga-back
    def get_queryset(self):
        if self.request.user.is_anonymous():
            return models.NotifyPolicy.objects.none()

        self._build_needed_notify_policies()

        # With really want to include the policies related to any content:
        # - The user is the owner of the project
        # - The user is member of the project
        # - The user is watching the project
        watched_project_ids = user_services.get_watched_content_for_user(self.request.user).get("project", [])

        return models.NotifyPolicy.objects.filter(user=self.request.user).filter(Q(project__owner=self.request.user) |
            Q(project__memberships__user=self.request.user) |
            Q(project__id__in=watched_project_ids)
        ).distinct()
示例#6
0
    def liked(self, request, *args, **kwargs):
        for_user = get_object_or_404(models.User, **kwargs)
        from_user = request.user
        self.check_permissions(request, 'liked', for_user)
        filters = {
            "q": request.GET.get("q", None),
        }

        self.object_list = services.get_liked_list(for_user, from_user, **filters)
        page = self.paginate_queryset(self.object_list)
        elements = page.object_list if page is not None else self.object_list

        extra_args = {
            "user_watching": services.get_watched_content_for_user(request.user),
            "user_likes": services.get_liked_content_for_user(request.user),
        }

        response_data = [serializers.LikedObjectSerializer(elem, **extra_args).data for elem in elements]

        return response.Ok(response_data)