mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
feat: filtering for cycle and module issue and updated grouper function for grouping in modules and cycles (#342)
This commit is contained in:
parent
3af3bb0fb5
commit
ec4332ea6b
@ -16,6 +16,7 @@ from plane.api.serializers import CycleSerializer, CycleIssueSerializer
|
|||||||
from plane.api.permissions import ProjectEntityPermission
|
from plane.api.permissions import ProjectEntityPermission
|
||||||
from plane.db.models import Cycle, CycleIssue, Issue
|
from plane.db.models import Cycle, CycleIssue, Issue
|
||||||
from plane.bgtasks.issue_activites_task import issue_activity
|
from plane.bgtasks.issue_activites_task import issue_activity
|
||||||
|
from plane.utils.grouper import group_results
|
||||||
|
|
||||||
|
|
||||||
class CycleViewSet(BaseViewSet):
|
class CycleViewSet(BaseViewSet):
|
||||||
@ -52,6 +53,11 @@ class CycleIssueViewSet(BaseViewSet):
|
|||||||
ProjectEntityPermission,
|
ProjectEntityPermission,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
filterset_fields = [
|
||||||
|
"issue__labels__id",
|
||||||
|
"issue__assignees__id",
|
||||||
|
]
|
||||||
|
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
serializer.save(
|
serializer.save(
|
||||||
project_id=self.kwargs.get("project_id"),
|
project_id=self.kwargs.get("project_id"),
|
||||||
@ -80,6 +86,31 @@ class CycleIssueViewSet(BaseViewSet):
|
|||||||
.distinct()
|
.distinct()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def list(self, request, slug, project_id, cycle_id):
|
||||||
|
try:
|
||||||
|
order_by = request.GET.get("order_by", "issue__created_at")
|
||||||
|
queryset = self.get_queryset().order_by(order_by)
|
||||||
|
group_by = request.GET.get("group_by", False)
|
||||||
|
|
||||||
|
cycle_issues = CycleIssueSerializer(queryset, many=True).data
|
||||||
|
|
||||||
|
if group_by:
|
||||||
|
return Response(
|
||||||
|
group_results(cycle_issues, f"issue_detail.{group_by}"),
|
||||||
|
status=status.HTTP_200_OK,
|
||||||
|
)
|
||||||
|
|
||||||
|
return Response(
|
||||||
|
cycle_issues,
|
||||||
|
status=status.HTTP_200_OK,
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
capture_exception(e)
|
||||||
|
return Response(
|
||||||
|
{"error": "Something went wrong please try again later"},
|
||||||
|
status=status.HTTP_400_BAD_REQUEST,
|
||||||
|
)
|
||||||
|
|
||||||
def create(self, request, slug, project_id, cycle_id):
|
def create(self, request, slug, project_id, cycle_id):
|
||||||
try:
|
try:
|
||||||
issues = request.data.get("issues", [])
|
issues = request.data.get("issues", [])
|
||||||
|
@ -27,6 +27,7 @@ from plane.db.models import (
|
|||||||
ModuleLink,
|
ModuleLink,
|
||||||
)
|
)
|
||||||
from plane.bgtasks.issue_activites_task import issue_activity
|
from plane.bgtasks.issue_activites_task import issue_activity
|
||||||
|
from plane.utils.grouper import group_results
|
||||||
|
|
||||||
|
|
||||||
class ModuleViewSet(BaseViewSet):
|
class ModuleViewSet(BaseViewSet):
|
||||||
@ -103,8 +104,8 @@ class ModuleIssueViewSet(BaseViewSet):
|
|||||||
model = ModuleIssue
|
model = ModuleIssue
|
||||||
|
|
||||||
filterset_fields = [
|
filterset_fields = [
|
||||||
"issue__id",
|
"issue__labels__id",
|
||||||
"workspace__id",
|
"issue__assignees__id",
|
||||||
]
|
]
|
||||||
|
|
||||||
permission_classes = [
|
permission_classes = [
|
||||||
@ -140,6 +141,31 @@ class ModuleIssueViewSet(BaseViewSet):
|
|||||||
.distinct()
|
.distinct()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def list(self, request, slug, project_id, cycle_id):
|
||||||
|
try:
|
||||||
|
order_by = request.GET.get("order_by", "issue__created_at")
|
||||||
|
queryset = self.get_queryset().order_by(order_by)
|
||||||
|
group_by = request.GET.get("group_by", False)
|
||||||
|
|
||||||
|
module_issues = ModuleIssueSerializer(queryset, many=True).data
|
||||||
|
|
||||||
|
if group_by:
|
||||||
|
return Response(
|
||||||
|
group_results(module_issues, f"issue_detail.{group_by}"),
|
||||||
|
status=status.HTTP_200_OK,
|
||||||
|
)
|
||||||
|
|
||||||
|
return Response(
|
||||||
|
module_issues,
|
||||||
|
status=status.HTTP_200_OK,
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
capture_exception(e)
|
||||||
|
return Response(
|
||||||
|
{"error": "Something went wrong please try again later"},
|
||||||
|
status=status.HTTP_400_BAD_REQUEST,
|
||||||
|
)
|
||||||
|
|
||||||
def create(self, request, slug, project_id, module_id):
|
def create(self, request, slug, project_id, module_id):
|
||||||
try:
|
try:
|
||||||
issues = request.data.get("issues", [])
|
issues = request.data.get("issues", [])
|
||||||
|
@ -1,12 +1,34 @@
|
|||||||
def group_results(results_data, group_by):
|
def resolve_keys(group_keys, value):
|
||||||
|
"""resolve keys to a key which will be used for
|
||||||
|
grouping
|
||||||
|
|
||||||
|
Args:
|
||||||
|
group_keys (string): key which will be used for grouping
|
||||||
|
value (obj): data value
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
string: the key which will be used for
|
||||||
"""
|
"""
|
||||||
Utility function to group data into a given attribute.
|
keys = group_keys.split(".")
|
||||||
Function can group attributes of string and list type.
|
for key in keys:
|
||||||
|
value = value.get(key, None)
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
def group_results(results_data, group_by):
|
||||||
|
"""group results data into certain group_by
|
||||||
|
|
||||||
|
Args:
|
||||||
|
results_data (obj): complete results data
|
||||||
|
group_by (key): string
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
obj: grouped results
|
||||||
"""
|
"""
|
||||||
response_dict = dict()
|
response_dict = dict()
|
||||||
|
|
||||||
for value in results_data:
|
for value in results_data:
|
||||||
group_attribute = value.get(group_by, None)
|
group_attribute = resolve_keys(group_by, value)
|
||||||
if isinstance(group_attribute, list):
|
if isinstance(group_attribute, list):
|
||||||
if len(group_attribute):
|
if len(group_attribute):
|
||||||
for attrib in group_attribute:
|
for attrib in group_attribute:
|
||||||
@ -28,4 +50,4 @@ def group_results(results_data, group_by):
|
|||||||
response_dict[str(group_attribute)] = []
|
response_dict[str(group_attribute)] = []
|
||||||
response_dict[str(group_attribute)].append(value)
|
response_dict[str(group_attribute)].append(value)
|
||||||
|
|
||||||
return response_dict
|
return response_dict
|
||||||
|
Loading…
Reference in New Issue
Block a user