Skip to content

Commit

Permalink
chore: bug fixes and improvement (#3303)
Browse files Browse the repository at this point in the history
* refactor: updated preloaded function for the list view quick add

* fix: resolved bug in the assignee dropdown

* chore: issue sidebar link improvement

* fix: resolved subscription store bug

* chore: updated preloaded function for the kanban layout quick add

* chore: resolved issues in the list filters and component

* chore: filter store updated

* fix: issue serializer changed

* chore: quick add preload function updated

* fix: build error

* fix: serializer changed

* fix: minor request change

* chore: resolved build issues and updated the prepopulated data in the quick add issue.

* fix: build fix and code refactor

* fix: spreadsheet layout quick add fix

* fix: issue peek overview link section updated

* fix: cycle status bug fix

* fix: serializer changes

* fix: assignee and labels listing

* chore: issue modal parent_id default value updated

* fix: cycle and module issue serializer change

* fix: cycle list serializer changed

* chore: prepopulated validation in both list and kanban for quick add and group header add issues

* chore: group header validation added

* fix: issue response payload change

* dev: make cycle and module issue create response simillar

* chore: custom control link component added

* dev: make issue create and update response simillar to list and retrieve

* fix: build error

* chore: control link component improvement

* chore: globalise issue peek overview

* chore: control link component improvement

* chore: made changes and optimised the issue peek overview root

* build-error: resolved build erros for issueId dependancy from issue detail store

* chore: peek overview link fix

* dev: update state nullable rule

---------

Co-authored-by: gurusainath <gurusainath007@gmail.com>
Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
Co-authored-by: pablohashescobar <nikhilschacko@gmail.com>
  • Loading branch information
4 people authored and sriramveeraghanta committed Jan 22, 2024
1 parent 266f14d commit efd3ebf
Show file tree
Hide file tree
Showing 65 changed files with 629 additions and 1,564 deletions.
35 changes: 18 additions & 17 deletions apiserver/plane/app/serializers/issue.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
CommentReaction,
IssueVote,
IssueRelation,
State,
Project,
)


Expand Down Expand Up @@ -69,19 +71,16 @@ class Meta:
##TODO: Find a better way to write this serializer
## Find a better approach to save manytomany?
class IssueCreateSerializer(BaseSerializer):
state_detail = StateSerializer(read_only=True, source="state")
created_by_detail = UserLiteSerializer(read_only=True, source="created_by")
project_detail = ProjectLiteSerializer(read_only=True, source="project")
workspace_detail = WorkspaceLiteSerializer(read_only=True, source="workspace")

assignees = serializers.ListField(
child=serializers.PrimaryKeyRelatedField(queryset=User.objects.all()),
# ids
state_id = serializers.PrimaryKeyRelatedField(source="state", queryset=State.objects.all(), required=False, allow_null=True)
parent_id = serializers.PrimaryKeyRelatedField(source='parent', queryset=Issue.objects.all(), required=False, allow_null=True)
label_ids = serializers.ListField(
child=serializers.PrimaryKeyRelatedField(queryset=Label.objects.all()),
write_only=True,
required=False,
)

labels = serializers.ListField(
child=serializers.PrimaryKeyRelatedField(queryset=Label.objects.all()),
assignee_ids = serializers.ListField(
child=serializers.PrimaryKeyRelatedField(queryset=User.objects.all()),
write_only=True,
required=False,
)
Expand All @@ -100,8 +99,10 @@ class Meta:

def to_representation(self, instance):
data = super().to_representation(instance)
data['assignees'] = [str(assignee.id) for assignee in instance.assignees.all()]
data['labels'] = [str(label.id) for label in instance.labels.all()]
assignee_ids = self.initial_data.get('assignee_ids')
data['assignee_ids'] = assignee_ids if assignee_ids else []
label_ids = self.initial_data.get('label_ids')
data['label_ids'] = label_ids if label_ids else []
return data

def validate(self, data):
Expand All @@ -114,8 +115,8 @@ def validate(self, data):
return data

def create(self, validated_data):
assignees = validated_data.pop("assignees", None)
labels = validated_data.pop("labels", None)
assignees = validated_data.pop("assignee_ids", None)
labels = validated_data.pop("label_ids", None)

project_id = self.context["project_id"]
workspace_id = self.context["workspace_id"]
Expand Down Expand Up @@ -173,8 +174,8 @@ def create(self, validated_data):
return issue

def update(self, instance, validated_data):
assignees = validated_data.pop("assignees", None)
labels = validated_data.pop("labels", None)
assignees = validated_data.pop("assignee_ids", None)
labels = validated_data.pop("labels_ids", None)

# Related models
project_id = instance.project_id
Expand Down Expand Up @@ -544,7 +545,7 @@ class IssueSerializer(DynamicBaseSerializer):
attachment_count = serializers.IntegerField(read_only=True)
link_count = serializers.IntegerField(read_only=True)

# is
# is_subscribed
is_subscribed = serializers.BooleanField(read_only=True)

class Meta:
Expand Down
4 changes: 2 additions & 2 deletions apiserver/plane/app/views/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ def handle_exception(self, exc):
response = super().handle_exception(exc)
return response
except Exception as e:
print(e) if settings.DEBUG else print("Server Error")
if isinstance(e, IntegrityError):
return Response(
{"error": "The payload is not valid"},
Expand All @@ -124,8 +125,7 @@ def handle_exception(self, exc):
{"error": f"key {e} does not exist"},
status=status.HTTP_400_BAD_REQUEST,
)

print(e) if settings.DEBUG else print("Server Error")

capture_exception(e)
return Response({"error": "Something went wrong please try again later"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

Expand Down
20 changes: 17 additions & 3 deletions apiserver/plane/app/views/cycle.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
CycleSerializer,
CycleIssueSerializer,
CycleFavoriteSerializer,
IssueSerializer,
IssueStateSerializer,
CycleWriteSerializer,
CycleUserPropertiesSerializer,
Expand All @@ -46,9 +47,9 @@
IssueAttachment,
Label,
CycleUserProperties,
IssueSubscriber,
)
from plane.bgtasks.issue_activites_task import issue_activity
from plane.utils.grouper import group_results
from plane.utils.issue_filters import issue_filters
from plane.utils.analytics_plot import burndown_plot

Expand Down Expand Up @@ -322,6 +323,8 @@ def create(self, request, slug, project_id):
project_id=project_id,
owned_by=request.user,
)
cycle = self.get_queryset().filter(pk=serializer.data["id"]).first()
serializer = CycleSerializer(cycle)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
else:
Expand Down Expand Up @@ -548,6 +551,8 @@ def list(self, request, slug, project_id, cycle_id):
.prefetch_related("labels")
.order_by(order_by)
.filter(**filters)
.annotate(cycle_id=F("issue_cycle__cycle_id"))
.annotate(module_id=F("issue_module__module_id"))
.annotate(
link_count=IssueLink.objects.filter(issue=OuterRef("id"))
.order_by()
Expand All @@ -560,8 +565,15 @@ def list(self, request, slug, project_id, cycle_id):
.annotate(count=Func(F("id"), function="Count"))
.values("count")
)
.annotate(
is_subscribed=Exists(
IssueSubscriber.objects.filter(
subscriber=self.request.user, issue_id=OuterRef("id")
)
)
)
)
serializer = IssueStateSerializer(
serializer = IssueSerializer(
issues, many=True, fields=fields if fields else None
)
return Response(serializer.data, status=status.HTTP_200_OK)
Expand Down Expand Up @@ -652,8 +664,10 @@ def create(self, request, slug, project_id, cycle_id):
)

# Return all Cycle Issues
issues = self.get_queryset().values_list("issue_id", flat=True)

return Response(
CycleIssueSerializer(self.get_queryset(), many=True).data,
IssueSerializer(Issue.objects.filter(pk__in=issues), many=True).data,
status=status.HTTP_200_OK,
)

Expand Down
54 changes: 14 additions & 40 deletions apiserver/plane/app/views/issue.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@
# Module imports
from . import BaseViewSet, BaseAPIView, WebhookMixin
from plane.app.serializers import (
IssueCreateSerializer,
IssueActivitySerializer,
IssueCommentSerializer,
IssuePropertySerializer,
IssueSerializer,
IssueCreateSerializer,
LabelSerializer,
IssueFlatSerializer,
IssueLinkSerializer,
Expand Down Expand Up @@ -110,12 +110,7 @@ def get_serializer_class(self):

def get_queryset(self):
return (
Issue.issue_objects.annotate(
sub_issues_count=Issue.issue_objects.filter(parent=OuterRef("id"))
.order_by()
.annotate(count=Func(F("id"), function="Count"))
.values("count")
)
Issue.issue_objects
.filter(project_id=self.kwargs.get("project_id"))
.filter(workspace__slug=self.kwargs.get("slug"))
.select_related("project")
Expand Down Expand Up @@ -143,13 +138,11 @@ def get_queryset(self):
.order_by()
.annotate(count=Func(F("id"), function="Count"))
.values("count")
)
.annotate(
is_subscribed=Exists(
IssueSubscriber.objects.filter(
subscriber=self.request.user, issue_id=OuterRef("id")
)
)
).annotate(
sub_issues_count=Issue.issue_objects.filter(parent=OuterRef("id"))
.order_by()
.annotate(count=Func(F("id"), function="Count"))
.values("count")
)
).distinct()

Expand Down Expand Up @@ -251,16 +244,13 @@ def create(self, request, slug, project_id):
current_instance=None,
epoch=int(timezone.now().timestamp()),
)
issue = self.get_queryset().filter(pk=serializer.data["id"]).first()
serializer = IssueSerializer(issue)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

def retrieve(self, request, slug, project_id, pk=None):
issue = Issue.issue_objects.annotate(
sub_issues_count=Issue.issue_objects.filter(parent=OuterRef("id"))
.order_by()
.annotate(count=Func(F("id"), function="Count"))
.values("count")
).get(workspace__slug=slug, project_id=project_id, pk=pk)
issue = self.get_queryset().filter(pk=pk).first()
return Response(
IssueSerializer(issue, fields=self.fields, expand=self.expand).data,
status=status.HTTP_200_OK,
Expand All @@ -284,7 +274,8 @@ def partial_update(self, request, slug, project_id, pk=None):
current_instance=current_instance,
epoch=int(timezone.now().timestamp()),
)
return Response(serializer.data, status=status.HTTP_200_OK)
issue = self.get_queryset().filter(pk=pk).first()
return Response(IssueSerializer(issue).data, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

def destroy(self, request, slug, project_id, pk=None):
Expand Down Expand Up @@ -719,13 +710,6 @@ def get(self, request, slug, project_id, issue_id):
.annotate(count=Func(F("id"), function="Count"))
.values("count")
)
.annotate(
is_subscribed=Exists(
IssueSubscriber.objects.filter(
subscriber=self.request.user, issue_id=OuterRef("id")
)
)
)
.prefetch_related(
Prefetch(
"issue_reactions",
Expand Down Expand Up @@ -1080,7 +1064,7 @@ def list(self, request, slug, project_id):
else issue_queryset.filter(parent__isnull=True)
)

issues = IssueLiteSerializer(
issues = IssueSerializer(
issue_queryset, many=True, fields=fields if fields else None
).data
return Response(issues, status=status.HTTP_200_OK)
Expand Down Expand Up @@ -1163,16 +1147,6 @@ def list(self, request, slug, project_id, issue_id):
project_id=project_id,
is_active=True,
)
.annotate(
is_subscribed=Exists(
IssueSubscriber.objects.filter(
workspace__slug=slug,
project_id=project_id,
issue_id=issue_id,
subscriber=OuterRef("member"),
)
)
)
.select_related("member")
)
serializer = ProjectMemberLiteSerializer(members, many=True)
Expand Down Expand Up @@ -1613,7 +1587,7 @@ def list(self, request, slug, project_id):
else:
issue_queryset = issue_queryset.order_by(order_by_param)

issues = IssueLiteSerializer(
issues = IssueSerializer(
issue_queryset, many=True, fields=fields if fields else None
).data
return Response(issues, status=status.HTTP_200_OK)
Expand Down
18 changes: 15 additions & 3 deletions apiserver/plane/app/views/module.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
ModuleIssueSerializer,
ModuleLinkSerializer,
ModuleFavoriteSerializer,
IssueStateSerializer,
IssueSerializer,
ModuleUserPropertiesSerializer,
)
from plane.app.permissions import ProjectEntityPermission, ProjectLitePermission
Expand All @@ -33,6 +33,7 @@
ModuleFavorite,
IssueLink,
IssueAttachment,
IssueSubscriber,
ModuleUserProperties,
)
from plane.bgtasks.issue_activites_task import issue_activity
Expand Down Expand Up @@ -353,6 +354,8 @@ def list(self, request, slug, project_id, module_id):
.prefetch_related("labels")
.order_by(order_by)
.filter(**filters)
.annotate(cycle_id=F("issue_cycle__cycle_id"))
.annotate(module_id=F("issue_module__module_id"))
.annotate(
link_count=IssueLink.objects.filter(issue=OuterRef("id"))
.order_by()
Expand All @@ -365,8 +368,15 @@ def list(self, request, slug, project_id, module_id):
.annotate(count=Func(F("id"), function="Count"))
.values("count")
)
.annotate(
is_subscribed=Exists(
IssueSubscriber.objects.filter(
subscriber=self.request.user, issue_id=OuterRef("id")
)
)
)
)
serializer = IssueStateSerializer(
serializer = IssueSerializer(
issues, many=True, fields=fields if fields else None
)
return Response(serializer.data, status=status.HTTP_200_OK)
Expand Down Expand Up @@ -447,8 +457,10 @@ def create(self, request, slug, project_id, module_id):
epoch=int(timezone.now().timestamp()),
)

issues = self.get_queryset().values_list("issue_id", flat=True)

return Response(
ModuleIssueSerializer(self.get_queryset(), many=True).data,
IssueSerializer(Issue.objects.filter(pk__in=issues), many=True).data,
status=status.HTTP_200_OK,
)

Expand Down
18 changes: 16 additions & 2 deletions apiserver/plane/app/views/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
from plane.app.serializers import (
GlobalViewSerializer,
IssueViewSerializer,
IssueLiteSerializer,
IssueSerializer,
IssueViewFavoriteSerializer,
)
from plane.app.permissions import (
Expand All @@ -42,6 +42,7 @@
IssueReaction,
IssueLink,
IssueAttachment,
IssueSubscriber,
)
from plane.utils.issue_filters import issue_filters
from plane.utils.grouper import group_results
Expand Down Expand Up @@ -127,6 +128,19 @@ def list(self, request, slug):
.annotate(count=Func(F("id"), function="Count"))
.values("count")
)
.annotate(
sub_issues_count=Issue.issue_objects.filter(parent=OuterRef("id"))
.order_by()
.annotate(count=Func(F("id"), function="Count"))
.values("count")
)
.annotate(
is_subscribed=Exists(
IssueSubscriber.objects.filter(
subscriber=self.request.user, issue_id=OuterRef("id")
)
)
)
)

# Priority Ordering
Expand Down Expand Up @@ -185,7 +199,7 @@ def list(self, request, slug):
else:
issue_queryset = issue_queryset.order_by(order_by_param)

serializer = IssueLiteSerializer(
serializer = IssueSerializer(
issue_queryset, many=True, fields=fields if fields else None
)
return Response(serializer.data, status=status.HTTP_200_OK)
Expand Down
Loading

0 comments on commit efd3ebf

Please sign in to comment.