* dev: improve performance for cycle apis * dev: reduce module endpoints and create a new endpoint for getting issues by list * dev: remove unwanted fields from module * dev: update module endpoints * dev: optimize cycle endpoints * change module and cycle types * dev: module optimizations * dev: fix the issues check * dev: fix issues endpoint * dev: update module detail serializer * modify adding issues to modules and cycles * dev: update cycle issues * fix module links * dev: optimize issue list endpoint * fix: removing issues from the module when removing module_id from issue peekoverview * fix: updated the tooltip and ui for cycle select (#3718) * fix: updated the tooltip and ui for module select (#3716) --------- Co-authored-by: rahulramesha <rahulramesham@gmail.com> Co-authored-by: gurusainath <gurusainath007@gmail.com>
117 lines
3.1 KiB
Python
117 lines
3.1 KiB
Python
# Third party imports
|
|
from rest_framework import serializers
|
|
|
|
# Module imports
|
|
from .base import BaseSerializer
|
|
from .issue import IssueStateSerializer
|
|
from plane.db.models import (
|
|
Cycle,
|
|
CycleIssue,
|
|
CycleFavorite,
|
|
CycleUserProperties,
|
|
)
|
|
|
|
class CycleWriteSerializer(BaseSerializer):
|
|
def validate(self, data):
|
|
if (
|
|
data.get("start_date", None) is not None
|
|
and data.get("end_date", None) is not None
|
|
and data.get("start_date", None) > data.get("end_date", None)
|
|
):
|
|
raise serializers.ValidationError(
|
|
"Start date cannot exceed end date"
|
|
)
|
|
return data
|
|
|
|
class Meta:
|
|
model = Cycle
|
|
fields = "__all__"
|
|
read_only_fields = [
|
|
"workspace",
|
|
"project",
|
|
"owned_by",
|
|
]
|
|
|
|
|
|
class CycleSerializer(BaseSerializer):
|
|
# favorite
|
|
is_favorite = serializers.BooleanField(read_only=True)
|
|
total_issues = serializers.IntegerField(read_only=True)
|
|
# state group wise distribution
|
|
cancelled_issues = serializers.IntegerField(read_only=True)
|
|
completed_issues = serializers.IntegerField(read_only=True)
|
|
started_issues = serializers.IntegerField(read_only=True)
|
|
unstarted_issues = serializers.IntegerField(read_only=True)
|
|
backlog_issues = serializers.IntegerField(read_only=True)
|
|
|
|
# active | draft | upcoming | completed
|
|
status = serializers.CharField(read_only=True)
|
|
|
|
|
|
class Meta:
|
|
model = Cycle
|
|
fields = [
|
|
# necessary fields
|
|
"id",
|
|
"workspace_id",
|
|
"project_id",
|
|
# model fields
|
|
"name",
|
|
"description",
|
|
"start_date",
|
|
"end_date",
|
|
"owned_by_id",
|
|
"view_props",
|
|
"sort_order",
|
|
"external_source",
|
|
"external_id",
|
|
"progress_snapshot",
|
|
# meta fields
|
|
"is_favorite",
|
|
"total_issues",
|
|
"cancelled_issues",
|
|
"completed_issues",
|
|
"started_issues",
|
|
"unstarted_issues",
|
|
"backlog_issues",
|
|
"status",
|
|
]
|
|
read_only_fields = fields
|
|
|
|
|
|
class CycleIssueSerializer(BaseSerializer):
|
|
issue_detail = IssueStateSerializer(read_only=True, source="issue")
|
|
sub_issues_count = serializers.IntegerField(read_only=True)
|
|
|
|
class Meta:
|
|
model = CycleIssue
|
|
fields = "__all__"
|
|
read_only_fields = [
|
|
"workspace",
|
|
"project",
|
|
"cycle",
|
|
]
|
|
|
|
|
|
class CycleFavoriteSerializer(BaseSerializer):
|
|
cycle_detail = CycleSerializer(source="cycle", read_only=True)
|
|
|
|
class Meta:
|
|
model = CycleFavorite
|
|
fields = "__all__"
|
|
read_only_fields = [
|
|
"workspace",
|
|
"project",
|
|
"user",
|
|
]
|
|
|
|
|
|
class CycleUserPropertiesSerializer(BaseSerializer):
|
|
class Meta:
|
|
model = CycleUserProperties
|
|
fields = "__all__"
|
|
read_only_fields = [
|
|
"workspace",
|
|
"project",
|
|
"cycle" "user",
|
|
]
|