mirror of
https://github.com/makeplane/plane
synced 2025-08-07 19:59:33 +00:00
[WEB-4442] fix: removed the deleted labels from webhook payload (#7337)
* chore: removed the deleted label from payload * chore: optimised the query * chore: optimised the logic * chore: defined function for prefetch
This commit is contained in:
committed by
GitHub
parent
d5eb374217
commit
a75ae71ff0
@@ -448,10 +448,30 @@ class LabelLiteSerializer(BaseSerializer):
|
||||
class IssueExpandSerializer(BaseSerializer):
|
||||
cycle = CycleLiteSerializer(source="issue_cycle.cycle", read_only=True)
|
||||
module = ModuleLiteSerializer(source="issue_module.module", read_only=True)
|
||||
labels = LabelLiteSerializer(read_only=True, many=True)
|
||||
assignees = UserLiteSerializer(read_only=True, many=True)
|
||||
|
||||
labels = serializers.SerializerMethodField()
|
||||
assignees = serializers.SerializerMethodField()
|
||||
state = StateLiteSerializer(read_only=True)
|
||||
|
||||
|
||||
def get_labels(self, obj):
|
||||
expand = self.context.get("expand", [])
|
||||
if "labels" in expand:
|
||||
# Use prefetched data
|
||||
return LabelLiteSerializer(
|
||||
[il.label for il in obj.label_issue.all()], many=True
|
||||
).data
|
||||
return [il.label_id for il in obj.label_issue.all()]
|
||||
|
||||
def get_assignees(self, obj):
|
||||
expand = self.context.get("expand", [])
|
||||
if "assignees" in expand:
|
||||
return UserLiteSerializer(
|
||||
[ia.assignee for ia in obj.issue_assignee.all()], many=True
|
||||
).data
|
||||
return [ia.assignee_id for ia in obj.issue_assignee.all()]
|
||||
|
||||
|
||||
class Meta:
|
||||
model = Issue
|
||||
fields = "__all__"
|
||||
|
||||
@@ -12,6 +12,7 @@ from celery import shared_task
|
||||
|
||||
# Django imports
|
||||
from django.conf import settings
|
||||
from django.db.models import Prefetch
|
||||
from django.core.mail import EmailMultiAlternatives, get_connection
|
||||
from django.core.serializers.json import DjangoJSONEncoder
|
||||
from django.template.loader import render_to_string
|
||||
@@ -42,6 +43,8 @@ from plane.db.models import (
|
||||
Webhook,
|
||||
WebhookLog,
|
||||
IntakeIssue,
|
||||
IssueLabel,
|
||||
IssueAssignee,
|
||||
)
|
||||
from plane.license.utils.instance_value import get_email_configuration
|
||||
from plane.utils.exception_logger import log_exception
|
||||
@@ -74,6 +77,15 @@ MODEL_MAPPER = {
|
||||
logger = logging.getLogger("plane.worker")
|
||||
|
||||
|
||||
def get_issue_prefetches():
|
||||
return [
|
||||
Prefetch("label_issue", queryset=IssueLabel.objects.select_related("label")),
|
||||
Prefetch(
|
||||
"issue_assignee", queryset=IssueAssignee.objects.select_related("assignee")
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
def get_model_data(
|
||||
event: str, event_id: Union[str, List[str]], many: bool = False
|
||||
) -> Dict[str, Any]:
|
||||
@@ -103,10 +115,27 @@ def get_model_data(
|
||||
queryset = model.objects.get(pk=event_id)
|
||||
|
||||
serializer = SERIALIZER_MAPPER.get(event)
|
||||
|
||||
if serializer is None:
|
||||
raise ValueError(f"Serializer not found for event: {event}")
|
||||
|
||||
return serializer(queryset, many=many).data
|
||||
issue_prefetches = get_issue_prefetches()
|
||||
if event == "issue":
|
||||
if many:
|
||||
queryset = queryset.prefetch_related(*issue_prefetches)
|
||||
else:
|
||||
issue_id = queryset.id
|
||||
queryset = (
|
||||
model.objects.filter(pk=issue_id)
|
||||
.prefetch_related(*issue_prefetches)
|
||||
.first()
|
||||
)
|
||||
|
||||
return serializer(
|
||||
queryset, many=many, context={"expand": ["labels", "assignees"]}
|
||||
).data
|
||||
else:
|
||||
return serializer(queryset, many=many).data
|
||||
except ObjectDoesNotExist:
|
||||
raise ObjectDoesNotExist(f"No {event} found with id: {event_id}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user