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