# 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__"