From 79714750fa3d25ff48d0d58580e211fe4c5fba19 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Thu, 18 Sep 2025 14:44:52 +0300 Subject: [PATCH] Features: 1) Update `resolve_feedback` method to retrieve `Feedback` object based on `order_product`; 2) Enhance `do_feedback` method to handle existing feedback with better validation and support for returning feedback deletion count. Fixes: 1) Fix handling of feedback deletion to return actual delete count rather than `None`. Extra: 1) Refactor `do_feedback` method for clarity and improved logic flow; 2) Minor updates to error messages for consistency and accuracy. --- core/graphene/object_types.py | 2 +- core/models.py | 25 ++++++++++++++++--------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/core/graphene/object_types.py b/core/graphene/object_types.py index 87e59750..8204b332 100644 --- a/core/graphene/object_types.py +++ b/core/graphene/object_types.py @@ -416,7 +416,7 @@ class OrderProductType(DjangoObjectType): description = _("order products") def resolve_feedback(self: OrderProduct, _info): - return self.feedback + return Feedback.objects.get(order_product=self) def resolve_attributes(self, _info): return camelize(self.attributes) diff --git a/core/models.py b/core/models.py index 009adfd4..2b8c0349 100644 --- a/core/models.py +++ b/core/models.py @@ -1944,19 +1944,26 @@ class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # t return self.download.url return "" - def do_feedback(self, rating=10, comment="", action="add") -> Optional["Feedback"]: + def do_feedback(self, rating=10, comment="", action="add") -> Optional["Feedback"] | int: if not self.order: raise ValueError(_("order product must have an order")) if action not in ["add", "remove"]: raise ValueError(_(f"wrong action specified for feedback: {action}")) - if action == "remove" and self.feedback: - self.feedback.delete() - return None - if action == "add" and not self.feedback: - if self.order.status not in ["MOMENTAL", "PENDING", "FAILED"]: - return Feedback.objects.create(rating=rating, comment=comment, order_product=self) - else: - raise ValueError(_("you cannot feedback an order which is not received")) + + feedback_qs = Feedback.objects.filter(order_product=self) + feedback_exists = feedback_qs.exists() + + if action == "remove": + if feedback_exists: + return feedback_qs.delete()[0] + + if action == "add": + if not feedback_exists: + if self.order.status not in ["MOMENTAL", "PENDING", "FAILED"]: + return Feedback.objects.create(rating=rating, comment=comment, order_product=self) + else: + raise ValueError(_("you cannot feedback an order which is not received")) + return None