From 3626a6dc428005fbf4f28bee668664eaa5277634 Mon Sep 17 00:00:00 2001 From: Ruslan Bakiev Date: Thu, 8 Jan 2026 10:42:19 +0700 Subject: [PATCH] Add getAvailableProducts query for offers with active status --- exchange/schemas/public_schema.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/exchange/schemas/public_schema.py b/exchange/schemas/public_schema.py index fa59920..f6a83a9 100644 --- a/exchange/schemas/public_schema.py +++ b/exchange/schemas/public_schema.py @@ -38,6 +38,10 @@ class OfferType(DjangoObjectType): class PublicQuery(graphene.ObjectType): """Public schema - no authentication required""" get_products = graphene.List(Product) + get_available_products = graphene.List( + Product, + description="Get products that have active offers" + ) get_supplier_profiles = graphene.List( SupplierProfileType, country=graphene.String(), @@ -74,6 +78,27 @@ class PublicQuery(graphene.ObjectType): products_data = odoo_service.get_products() return [Product(**product) for product in products_data] + def resolve_get_available_products(self, info): + """Get only products that have active offers.""" + # Get unique product UUIDs from active offers + product_uuids = set( + Offer.objects.filter(status='active') + .values_list('product_uuid', flat=True) + .distinct() + ) + + if not product_uuids: + return [] + + # Get all products from Odoo and filter by those with offers + odoo_service = OdooService() + products_data = odoo_service.get_products() + return [ + Product(**product) + for product in products_data + if product.get('uuid') in product_uuids + ] + @staticmethod def _get_supplier_profiles_queryset(country=None, is_verified=None): queryset = SupplierProfile.objects.filter(is_active=True)