Working the search getting all optionally
parent
98f33e1a5b
commit
2dc604a396
|
@ -16,6 +16,7 @@ class SearchViewSet(viewsets.ViewSet):
|
|||
def list(self, request, **kwargs):
|
||||
project_model = get_model("projects", "Project")
|
||||
text = request.QUERY_PARAMS.get('text', "")
|
||||
get_all = request.QUERY_PARAMS.get('get_all', False)
|
||||
project_id = request.QUERY_PARAMS.get('project', None)
|
||||
|
||||
try:
|
||||
|
@ -24,10 +25,10 @@ class SearchViewSet(viewsets.ViewSet):
|
|||
raise excp.PermissionDenied({"detail": "Wrong project id"})
|
||||
|
||||
result = {
|
||||
"userstories": self._search_user_stories(project, text),
|
||||
"tasks": self._search_tasks(project, text),
|
||||
"issues": self._search_issues(project, text),
|
||||
"wikipages": self._search_wiki_pages(project, text)
|
||||
"userstories": self._search_user_stories(project, text, get_all),
|
||||
"tasks": self._search_tasks(project, text, get_all),
|
||||
"issues": self._search_issues(project, text, get_all),
|
||||
"wikipages": self._search_wiki_pages(project, text, get_all)
|
||||
}
|
||||
|
||||
result["count"] = sum(map(lambda x: len(x), result.values()))
|
||||
|
@ -40,50 +41,62 @@ class SearchViewSet(viewsets.ViewSet):
|
|||
|
||||
return own_projects.get(pk=project_id)
|
||||
|
||||
def _search_user_stories(self, project, text):
|
||||
def _search_user_stories(self, project, text, get_all):
|
||||
where_clause = ("to_tsvector(userstories_userstory.subject || "
|
||||
"userstories_userstory.description) @@ plainto_tsquery(%s)")
|
||||
|
||||
model_cls = get_model("userstories", "UserStory")
|
||||
queryset = (model_cls.objects
|
||||
.extra(where=[where_clause], params=[text])
|
||||
.filter(project_id=project.pk)[:50])
|
||||
if get_all != "false" and text == '':
|
||||
queryset = model_cls.objects.filter(project_id=project.pk)
|
||||
else:
|
||||
queryset = (model_cls.objects
|
||||
.extra(where=[where_clause], params=[text])
|
||||
.filter(project_id=project.pk)[:50])
|
||||
|
||||
serializer = UserStorySerializer(queryset, many=True)
|
||||
return serializer.data
|
||||
|
||||
def _search_tasks(self, project, text):
|
||||
def _search_tasks(self, project, text, get_all):
|
||||
where_clause = ("to_tsvector(tasks_task.subject || tasks_task.description) "
|
||||
"@@ plainto_tsquery(%s)")
|
||||
|
||||
model_cls = get_model("tasks", "Task")
|
||||
queryset = (model_cls.objects
|
||||
.extra(where=[where_clause], params=[text])
|
||||
.filter(project_id=project.pk)[:50])
|
||||
if get_all != "false" and text == '':
|
||||
queryset = model_cls.objects.filter(project_id=project.pk)
|
||||
else:
|
||||
queryset = (model_cls.objects
|
||||
.extra(where=[where_clause], params=[text])
|
||||
.filter(project_id=project.pk)[:50])
|
||||
|
||||
serializer = TaskSerializer(queryset, many=True)
|
||||
return serializer.data
|
||||
|
||||
def _search_issues(self, project, text):
|
||||
def _search_issues(self, project, text, get_all):
|
||||
where_clause = ("to_tsvector(issues_issue.subject || issues_issue.description) "
|
||||
"@@ plainto_tsquery(%s)")
|
||||
|
||||
model_cls = get_model("issues", "Issue")
|
||||
queryset = (model_cls.objects
|
||||
.extra(where=[where_clause], params=[text])
|
||||
.filter(project_id=project.pk)[:50])
|
||||
if get_all != "false" and text == '':
|
||||
queryset = model_cls.objects.filter(project_id=project.pk)
|
||||
else:
|
||||
queryset = (model_cls.objects
|
||||
.extra(where=[where_clause], params=[text])
|
||||
.filter(project_id=project.pk)[:50])
|
||||
|
||||
serializer = IssueSerializer(queryset, many=True)
|
||||
return serializer.data
|
||||
|
||||
def _search_wiki_pages(self, project, text):
|
||||
def _search_wiki_pages(self, project, text, get_all):
|
||||
where_clause = ("to_tsvector(wiki_wikipage.slug || wiki_wikipage.content) "
|
||||
"@@ plainto_tsquery(%s)")
|
||||
|
||||
model_cls = get_model("wiki", "WikiPage")
|
||||
queryset = (model_cls.objects
|
||||
.extra(where=[where_clause], params=[text])
|
||||
.filter(project_id=project.pk)[:50])
|
||||
if get_all != "false" and text == '':
|
||||
queryset = model_cls.objects.filter(project_id=project.pk)
|
||||
else:
|
||||
queryset = (model_cls.objects
|
||||
.extra(where=[where_clause], params=[text])
|
||||
.filter(project_id=project.pk)[:50])
|
||||
|
||||
serializer = WikiPageSerializer(queryset, many=True)
|
||||
return serializer.data
|
||||
|
|
Loading…
Reference in New Issue