From 17a2b01894446dfea8ed26d28faac8e589e91d68 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Thu, 18 Sep 2025 14:26:56 +0300 Subject: [PATCH] Features: 1) Add `feedback` field to `OrderProduct` type; 2) Introduce resolution logic for `feedback` in `OrderProduct`; 3) Extend allowed statuses for feedback creation to include `FAILED`; Fixes: 1) Reorder imports in `core/utils` and `core/utils/seo_builders` sections; 2) Correct misplaced `Boolean` import in `object_types.py`; Extra: 1) Update GraphQL schema descriptions for new and existing fields; 2) Minor reformatting of imports for consistency. --- core/graphene/object_types.py | 15 ++++++++++----- core/models.py | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/core/graphene/object_types.py b/core/graphene/object_types.py index d0e60f40..87e59750 100644 --- a/core/graphene/object_types.py +++ b/core/graphene/object_types.py @@ -7,6 +7,7 @@ from django.db.models.functions import Length from django.utils.translation import gettext_lazy as _ from graphene import ( UUID, + Boolean, Field, Float, InputObjectType, @@ -16,7 +17,6 @@ from graphene import ( ObjectType, String, relay, - Boolean, ) from graphene.types.generic import GenericScalar from graphene_django import DjangoObjectType @@ -44,15 +44,15 @@ from core.models import ( Vendor, Wishlist, ) -from core.utils import graphene_current_lang, graphene_abs +from core.utils import graphene_abs, graphene_current_lang from core.utils.seo_builders import ( - org_schema, - breadcrumb_schema, brand_schema, - website_schema, + breadcrumb_schema, category_schema, item_list_schema, + org_schema, product_schema, + website_schema, ) from payments.graphene.object_types import TransactionType from payments.models import Transaction @@ -397,6 +397,7 @@ class OrderProductType(DjangoObjectType): attributes = GenericScalar(description=_("attributes")) notifications = GenericScalar(description=_("notifications")) download_url = String(description=_("download url for this order product if applicable")) + feedback = Field(lambda: FeedbackType, description=_("feedback")) class Meta: model = OrderProduct @@ -409,10 +410,14 @@ class OrderProductType(DjangoObjectType): "comments", "attributes", "notifications", + "feedback", ) filter_fields = ["uuid"] description = _("order products") + def resolve_feedback(self: OrderProduct, _info): + return self.feedback + def resolve_attributes(self, _info): return camelize(self.attributes) diff --git a/core/models.py b/core/models.py index bead06ec..009adfd4 100644 --- a/core/models.py +++ b/core/models.py @@ -1953,7 +1953,7 @@ class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): # t self.feedback.delete() return None if action == "add" and not self.feedback: - if self.order.status not in ["MOMENTAL", "PENDING"]: + 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"))