Sfoglia il codice sorgente

feat(core): Add facetValueId filter to products/variants list queries

Michael Bromley 2 anni fa
parent
commit
00b82687b5

+ 2 - 0
packages/asset-server-plugin/e2e/graphql/generated-e2e-asset-server-plugin-types.ts

@@ -4126,6 +4126,7 @@ export type ProductFilterParameter = {
     createdAt?: InputMaybe<DateOperators>;
     description?: InputMaybe<StringOperators>;
     enabled?: InputMaybe<BooleanOperators>;
+    facetValueId?: InputMaybe<IdOperators>;
     id?: InputMaybe<IdOperators>;
     languageCode?: InputMaybe<StringOperators>;
     name?: InputMaybe<StringOperators>;
@@ -4283,6 +4284,7 @@ export type ProductVariantFilterParameter = {
     createdAt?: InputMaybe<DateOperators>;
     currencyCode?: InputMaybe<StringOperators>;
     enabled?: InputMaybe<BooleanOperators>;
+    facetValueId?: InputMaybe<IdOperators>;
     id?: InputMaybe<IdOperators>;
     languageCode?: InputMaybe<StringOperators>;
     name?: InputMaybe<StringOperators>;

+ 2 - 0
packages/common/src/generated-types.ts

@@ -4351,6 +4351,7 @@ export type ProductFilterParameter = {
   createdAt?: InputMaybe<DateOperators>;
   description?: InputMaybe<StringOperators>;
   enabled?: InputMaybe<BooleanOperators>;
+  facetValueId?: InputMaybe<IdOperators>;
   id?: InputMaybe<IdOperators>;
   languageCode?: InputMaybe<StringOperators>;
   name?: InputMaybe<StringOperators>;
@@ -4517,6 +4518,7 @@ export type ProductVariantFilterParameter = {
   createdAt?: InputMaybe<DateOperators>;
   currencyCode?: InputMaybe<StringOperators>;
   enabled?: InputMaybe<BooleanOperators>;
+  facetValueId?: InputMaybe<IdOperators>;
   id?: InputMaybe<IdOperators>;
   languageCode?: InputMaybe<StringOperators>;
   name?: InputMaybe<StringOperators>;

+ 2 - 0
packages/core/e2e/graphql/generated-e2e-admin-types.ts

@@ -4126,6 +4126,7 @@ export type ProductFilterParameter = {
     createdAt?: InputMaybe<DateOperators>;
     description?: InputMaybe<StringOperators>;
     enabled?: InputMaybe<BooleanOperators>;
+    facetValueId?: InputMaybe<IdOperators>;
     id?: InputMaybe<IdOperators>;
     languageCode?: InputMaybe<StringOperators>;
     name?: InputMaybe<StringOperators>;
@@ -4283,6 +4284,7 @@ export type ProductVariantFilterParameter = {
     createdAt?: InputMaybe<DateOperators>;
     currencyCode?: InputMaybe<StringOperators>;
     enabled?: InputMaybe<BooleanOperators>;
+    facetValueId?: InputMaybe<IdOperators>;
     id?: InputMaybe<IdOperators>;
     languageCode?: InputMaybe<StringOperators>;
     name?: InputMaybe<StringOperators>;

+ 8 - 0
packages/core/src/api/schema/admin-api/product.api.graphql

@@ -65,9 +65,17 @@ input StockMovementListOptions {
 # generated by generateListOptions function
 input ProductListOptions
 
+input ProductFilterParameter {
+    facetValueId: IDOperators
+}
+
 # generated by generateListOptions function
 input ProductVariantListOptions
 
+input ProductVariantFilterParameter {
+    facetValueId: IDOperators
+}
+
 input ProductTranslationInput {
     id: ID
     languageCode: LanguageCode!

+ 9 - 0
packages/core/src/service/services/product-variant.service.ts

@@ -6,6 +6,8 @@ import {
     DeletionResult,
     GlobalFlag,
     Permission,
+    ProductListOptions,
+    ProductVariantListOptions,
     RemoveProductVariantsFromChannelInput,
     UpdateProductVariantInput,
 } from '@vendure/common/lib/generated-types';
@@ -88,12 +90,19 @@ export class ProductVariantService {
         options?: ListQueryOptions<ProductVariant>,
     ): Promise<PaginatedList<Translated<ProductVariant>>> {
         const relations = ['featuredAsset', 'taxCategory', 'channels'];
+        const customPropertyMap: { [name: string]: string } = {};
+        const hasFacetValueIdFilter = !!(options as ProductVariantListOptions)?.filter?.facetValueId;
+        if (hasFacetValueIdFilter) {
+            relations.push('facetValues');
+            customPropertyMap.facetValueId = 'facetValues.id';
+        }
         return this.listQueryBuilder
             .build(ProductVariant, options, {
                 relations,
                 channelId: ctx.channelId,
                 where: { deletedAt: IsNull() },
                 ctx,
+                customPropertyMap,
             })
             .getManyAndCount()
             .then(async ([variants, totalItems]) => {

+ 11 - 1
packages/core/src/service/services/product.service.ts

@@ -2,8 +2,10 @@ import { Injectable } from '@nestjs/common';
 import {
     AssignProductsToChannelInput,
     CreateProductInput,
+    CustomerListOptions,
     DeletionResponse,
     DeletionResult,
+    ProductListOptions,
     RemoveOptionGroupFromProductResult,
     RemoveProductsFromChannelInput,
     UpdateProductInput,
@@ -78,12 +80,20 @@ export class ProductService {
         options?: ListQueryOptions<Product>,
         relations?: RelationPaths<Product>,
     ): Promise<PaginatedList<Translated<Product>>> {
+        const effectiveRelations = relations || this.relations;
+        const customPropertyMap: { [name: string]: string } = {};
+        const hasFacetValueIdFilter = !!(options as ProductListOptions)?.filter?.facetValueId;
+        if (hasFacetValueIdFilter) {
+            effectiveRelations.push('facetValues');
+            customPropertyMap.facetValueId = 'facetValues.id';
+        }
         return this.listQueryBuilder
             .build(Product, options, {
-                relations: relations || this.relations,
+                relations: effectiveRelations,
                 channelId: ctx.channelId,
                 where: { deletedAt: IsNull() },
                 ctx,
+                customPropertyMap,
             })
             .getManyAndCount()
             .then(async ([products, totalItems]) => {

+ 2 - 0
packages/elasticsearch-plugin/e2e/graphql/generated-e2e-elasticsearch-plugin-types.ts

@@ -4126,6 +4126,7 @@ export type ProductFilterParameter = {
     createdAt?: InputMaybe<DateOperators>;
     description?: InputMaybe<StringOperators>;
     enabled?: InputMaybe<BooleanOperators>;
+    facetValueId?: InputMaybe<IdOperators>;
     id?: InputMaybe<IdOperators>;
     languageCode?: InputMaybe<StringOperators>;
     name?: InputMaybe<StringOperators>;
@@ -4283,6 +4284,7 @@ export type ProductVariantFilterParameter = {
     createdAt?: InputMaybe<DateOperators>;
     currencyCode?: InputMaybe<StringOperators>;
     enabled?: InputMaybe<BooleanOperators>;
+    facetValueId?: InputMaybe<IdOperators>;
     id?: InputMaybe<IdOperators>;
     languageCode?: InputMaybe<StringOperators>;
     name?: InputMaybe<StringOperators>;

+ 2 - 0
packages/payments-plugin/e2e/graphql/generated-admin-types.ts

@@ -4126,6 +4126,7 @@ export type ProductFilterParameter = {
     createdAt?: InputMaybe<DateOperators>;
     description?: InputMaybe<StringOperators>;
     enabled?: InputMaybe<BooleanOperators>;
+    facetValueId?: InputMaybe<IdOperators>;
     id?: InputMaybe<IdOperators>;
     languageCode?: InputMaybe<StringOperators>;
     name?: InputMaybe<StringOperators>;
@@ -4283,6 +4284,7 @@ export type ProductVariantFilterParameter = {
     createdAt?: InputMaybe<DateOperators>;
     currencyCode?: InputMaybe<StringOperators>;
     enabled?: InputMaybe<BooleanOperators>;
+    facetValueId?: InputMaybe<IdOperators>;
     id?: InputMaybe<IdOperators>;
     languageCode?: InputMaybe<StringOperators>;
     name?: InputMaybe<StringOperators>;

File diff suppressed because it is too large
+ 0 - 0
schema-admin.json


Some files were not shown because too many files changed in this diff