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