90 lines
2.9 KiB
Python
90 lines
2.9 KiB
Python
# Third party frameworks
|
|
from rest_framework import serializers
|
|
|
|
# Module imports
|
|
from .base import BaseSerializer
|
|
from .issue import IssueIntakeSerializer, LabelLiteSerializer, IssueDetailSerializer
|
|
from .project import ProjectLiteSerializer
|
|
from .state import StateLiteSerializer
|
|
from .user import UserLiteSerializer
|
|
from plane.db.models import Intake, IntakeIssue, Issue
|
|
|
|
|
|
class IntakeSerializer(BaseSerializer):
|
|
project_detail = ProjectLiteSerializer(source="project", read_only=True)
|
|
pending_issue_count = serializers.IntegerField(read_only=True)
|
|
|
|
class Meta:
|
|
model = Intake
|
|
fields = "__all__"
|
|
read_only_fields = ["project", "workspace"]
|
|
|
|
|
|
class IntakeIssueSerializer(BaseSerializer):
|
|
issue = IssueIntakeSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = IntakeIssue
|
|
fields = [
|
|
"id",
|
|
"status",
|
|
"duplicate_to",
|
|
"snoozed_till",
|
|
"source",
|
|
"issue",
|
|
"created_by",
|
|
]
|
|
read_only_fields = ["project", "workspace"]
|
|
|
|
def to_representation(self, instance):
|
|
# Pass the annotated fields to the Issue instance if they exist
|
|
if hasattr(instance, "label_ids"):
|
|
instance.issue.label_ids = instance.label_ids
|
|
return super().to_representation(instance)
|
|
|
|
|
|
class IntakeIssueDetailSerializer(BaseSerializer):
|
|
issue = IssueDetailSerializer(read_only=True)
|
|
duplicate_issue_detail = IssueIntakeSerializer(read_only=True, source="duplicate_to")
|
|
|
|
class Meta:
|
|
model = IntakeIssue
|
|
fields = [
|
|
"id",
|
|
"status",
|
|
"duplicate_to",
|
|
"snoozed_till",
|
|
"duplicate_issue_detail",
|
|
"source",
|
|
"issue",
|
|
]
|
|
read_only_fields = ["project", "workspace"]
|
|
|
|
def to_representation(self, instance):
|
|
# Pass the annotated fields to the Issue instance if they exist
|
|
if hasattr(instance, "assignee_ids"):
|
|
instance.issue.assignee_ids = instance.assignee_ids
|
|
if hasattr(instance, "label_ids"):
|
|
instance.issue.label_ids = instance.label_ids
|
|
|
|
return super().to_representation(instance)
|
|
|
|
|
|
class IntakeIssueLiteSerializer(BaseSerializer):
|
|
class Meta:
|
|
model = IntakeIssue
|
|
fields = ["id", "status", "duplicate_to", "snoozed_till", "source"]
|
|
read_only_fields = fields
|
|
|
|
|
|
class IssueStateIntakeSerializer(BaseSerializer):
|
|
state_detail = StateLiteSerializer(read_only=True, source="state")
|
|
project_detail = ProjectLiteSerializer(read_only=True, source="project")
|
|
label_details = LabelLiteSerializer(read_only=True, source="labels", many=True)
|
|
assignee_details = UserLiteSerializer(read_only=True, source="assignees", many=True)
|
|
sub_issues_count = serializers.IntegerField(read_only=True)
|
|
issue_intake = IntakeIssueLiteSerializer(read_only=True, many=True)
|
|
|
|
class Meta:
|
|
model = Issue
|
|
fields = "__all__"
|