Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: bug fixes and improvement #3303

Merged
merged 51 commits into from
Jan 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
8ee4c98
refactor: updated preloaded function for the list view quick add
anmolsinghbhatia Jan 2, 2024
4a94bfc
fix: resolved bug in the assignee dropdown
anmolsinghbhatia Jan 2, 2024
8478ef9
chore: issue sidebar link improvement
anmolsinghbhatia Jan 2, 2024
5dc79ea
fix: resolved subscription store bug
anmolsinghbhatia Jan 2, 2024
2a79a4a
chore: updated preloaded function for the kanban layout quick add
anmolsinghbhatia Jan 3, 2024
2cd8b84
chore: resolved issues in the list filters and component
gurusainath Jan 3, 2024
563c08e
chore: filter store updated
anmolsinghbhatia Jan 3, 2024
9e0d61e
fix: issue serializer changed
NarayanBavisetti Jan 3, 2024
2303d5d
Merge branch 'develop' of github.com:makeplane/plane into chore/bug_f…
NarayanBavisetti Jan 3, 2024
5361401
Merge branch 'chore/bug_fixes_and_improvement' of github.com:makeplan…
NarayanBavisetti Jan 3, 2024
c7a5069
chore: quick add preload function updated
anmolsinghbhatia Jan 3, 2024
1cf6110
Merge branch 'chore/bug_fixes_and_improvement' of github.com:makeplan…
anmolsinghbhatia Jan 3, 2024
bb8aa3c
fix: build error
anmolsinghbhatia Jan 3, 2024
72f9b8b
fix: serializer changed
NarayanBavisetti Jan 3, 2024
600acf0
Merge branch 'chore/bug_fixes_and_improvement' of github.com:makeplan…
NarayanBavisetti Jan 3, 2024
55af5e3
fix: minor request change
NarayanBavisetti Jan 3, 2024
8fae2d3
chore: resolved build issues and updated the prepopulated data in the…
gurusainath Jan 3, 2024
2ee3234
fix: build fix and code refactor
anmolsinghbhatia Jan 3, 2024
83b1176
fix: spreadsheet layout quick add fix
anmolsinghbhatia Jan 3, 2024
d768e71
fix: issue peek overview link section updated
anmolsinghbhatia Jan 3, 2024
60be64a
fix: cycle status bug fix
anmolsinghbhatia Jan 3, 2024
5c6400a
fix: serializer changes
NarayanBavisetti Jan 3, 2024
348ac3c
Merge branch 'chore/bug_fixes_and_improvement' of github.com:makeplan…
NarayanBavisetti Jan 3, 2024
aa733a3
fix: assignee and labels listing
NarayanBavisetti Jan 3, 2024
8567f30
chore: issue modal parent_id default value updated
anmolsinghbhatia Jan 3, 2024
5ac4ea4
Merge branch 'chore/bug_fixes_and_improvement' of github.com:makeplan…
anmolsinghbhatia Jan 3, 2024
f1129b4
fix: cycle and module issue serializer change
NarayanBavisetti Jan 4, 2024
0a902eb
Merge branch 'chore/bug_fixes_and_improvement' of github.com:makeplan…
NarayanBavisetti Jan 4, 2024
c487958
fix: cycle list serializer changed
NarayanBavisetti Jan 4, 2024
9d6f12f
Merge branch 'develop' of github.com:makeplane/plane into chore/bug_f…
NarayanBavisetti Jan 4, 2024
01c4319
chore: prepopulated validation in both list and kanban for quick add …
gurusainath Jan 4, 2024
69af4b8
chore: group header validation added
anmolsinghbhatia Jan 4, 2024
4c62236
fix: issue response payload change
NarayanBavisetti Jan 4, 2024
461ca63
Merge branch 'chore/bug_fixes_and_improvement' of github.com:makeplan…
NarayanBavisetti Jan 4, 2024
aa05662
dev: make cycle and module issue create response simillar
pablohashescobar Jan 4, 2024
25174b1
chore: custom control link component added
anmolsinghbhatia Jan 4, 2024
8195703
Merge branch 'chore/bug_fixes_and_improvement' of github.com:makeplan…
anmolsinghbhatia Jan 4, 2024
036d612
dev: make issue create and update response simillar to list and retrieve
pablohashescobar Jan 4, 2024
132e037
Merge branch 'chore/bug_fixes_and_improvement' of github.com:makeplan…
pablohashescobar Jan 4, 2024
0cfcb76
fix: build error
anmolsinghbhatia Jan 4, 2024
34ffa84
Merge branch 'chore/bug_fixes_and_improvement' of github.com:makeplan…
anmolsinghbhatia Jan 4, 2024
a1f68b8
chore: control link component improvement
anmolsinghbhatia Jan 4, 2024
4313ec8
chore: globalise issue peek overview
gurusainath Jan 4, 2024
2063da3
chore: control link component improvement
anmolsinghbhatia Jan 4, 2024
76019ed
chore: made changes and optimised the issue peek overview root
gurusainath Jan 4, 2024
4098ce2
build-error: resolved build erros for issueId dependancy from issue d…
gurusainath Jan 4, 2024
59e4930
chore: peek overview link fix
anmolsinghbhatia Jan 4, 2024
88cd0e9
dev: update state nullable rule
pablohashescobar Jan 4, 2024
7f65edf
Merge branch 'chore/bug_fixes_and_improvement' of github.com:makeplan…
pablohashescobar Jan 4, 2024
d655fe8
Merge branch 'develop' of gurusainath:makeplane/plane into chore/bug_…
gurusainath Jan 4, 2024
8fed564
Merge branch 'develop' of github.com:makeplane/plane into chore/bug_f…
anmolsinghbhatia Jan 5, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading