Pārlūkot izejas kodu

feat(server): Expose Facet relation on FacetValue type

Michael Bromley 7 gadi atpakaļ
vecāks
revīzija
3147cdf170

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
schema.json


+ 24 - 0
server/e2e/__snapshots__/product.e2e-spec.ts.snap

@@ -60,16 +60,28 @@ exports[`Product resolver product mutation variants applyFacetValuesToProductVar
 Array [
   Object {
     "code": "Harris_LLC",
+    "facet": Object {
+      "id": "T_1",
+      "name": "Brand",
+    },
     "id": "T_1",
     "name": "Harris LLC",
   },
   Object {
     "code": "Heathcote_-_Goyette",
+    "facet": Object {
+      "id": "T_1",
+      "name": "Brand",
+    },
     "id": "T_3",
     "name": "Heathcote - Goyette",
   },
   Object {
     "code": "Fisher,_Sporer_and_Bailey",
+    "facet": Object {
+      "id": "T_1",
+      "name": "Brand",
+    },
     "id": "T_5",
     "name": "Fisher, Sporer and Bailey",
   },
@@ -80,16 +92,28 @@ exports[`Product resolver product mutation variants applyFacetValuesToProductVar
 Array [
   Object {
     "code": "Harris_LLC",
+    "facet": Object {
+      "id": "T_1",
+      "name": "Brand",
+    },
     "id": "T_1",
     "name": "Harris LLC",
   },
   Object {
     "code": "Heathcote_-_Goyette",
+    "facet": Object {
+      "id": "T_1",
+      "name": "Brand",
+    },
     "id": "T_3",
     "name": "Heathcote - Goyette",
   },
   Object {
     "code": "Fisher,_Sporer_and_Bailey",
+    "facet": Object {
+      "id": "T_1",
+      "name": "Brand",
+    },
     "id": "T_5",
     "name": "Fisher, Sporer and Bailey",
   },

+ 2 - 1
server/src/entity/facet-value/facet-value.graphql

@@ -2,7 +2,8 @@ type FacetValue implements Node {
     id: ID!
     createdAt: DateTime!
     updatedAt: DateTime!
-    languageCode: LanguageCode
+    languageCode: LanguageCode!
+    facet: Facet!
     name: String!
     code: String!
     translations: [FacetValueTranslation!]!

+ 1 - 0
server/src/entity/product-variant/product-variant.graphql

@@ -40,6 +40,7 @@ input CreateProductVariantInput {
 input UpdateProductVariantInput {
     id: ID!
     translations: [ProductVariantTranslationInput!]
+    facetValueIds: [ID!]
     sku: String
     taxCategoryId: ID
     price: Int

+ 1 - 1
server/src/service/services/facet-value.service.ts

@@ -43,7 +43,7 @@ export class FacetValueService {
     }
 
     findByIds(ids: ID[]): Promise<FacetValue[]> {
-        return this.connection.getRepository(FacetValue).findByIds(ids);
+        return this.connection.getRepository(FacetValue).findByIds(ids, { relations: ['facet'] });
     }
 
     async create(

+ 7 - 5
server/src/service/services/facet.service.ts

@@ -27,13 +27,15 @@ export class FacetService {
         lang: LanguageCode,
         options?: ListQueryOptions<Facet>,
     ): Promise<PaginatedList<Translated<Facet>>> {
-        const relations = ['values'];
+        const relations = ['values', 'values.facet'];
 
         return this.listQueryBuilder
-            .build(Facet, options, relations)
+            .build(Facet, options, { relations })
             .getManyAndCount()
             .then(([facets, totalItems]) => {
-                const items = facets.map(facet => translateDeep(facet, lang, ['values']));
+                const items = facets.map(facet =>
+                    translateDeep(facet, lang, ['values', ['values', 'facet']]),
+                );
                 return {
                     items,
                     totalItems,
@@ -42,11 +44,11 @@ export class FacetService {
     }
 
     findOne(facetId: ID, lang: LanguageCode): Promise<Translated<Facet> | undefined> {
-        const relations = ['values'];
+        const relations = ['values', 'values.facet'];
 
         return this.connection.manager
             .findOne(Facet, facetId, { relations })
-            .then(facet => facet && translateDeep(facet, lang, ['values']));
+            .then(facet => facet && translateDeep(facet, lang, ['values', ['values', 'facet']]));
     }
 
     async create(input: CreateFacetInput): Promise<Translated<Facet>> {

+ 15 - 4
server/src/service/services/product-variant.service.ts

@@ -19,6 +19,7 @@ import { TaxCalculator } from '../helpers/tax-calculator/tax-calculator';
 import { TranslatableSaver } from '../helpers/translatable-saver/translatable-saver';
 import { translateDeep } from '../helpers/utils/translate-entity';
 
+import { FacetValueService } from './facet-value.service';
 import { TaxCategoryService } from './tax-category.service';
 import { TaxRateService } from './tax-rate.service';
 
@@ -27,6 +28,7 @@ export class ProductVariantService {
     constructor(
         @InjectConnection() private connection: Connection,
         private taxCategoryService: TaxCategoryService,
+        private facetValueService: FacetValueService,
         private taxRateService: TaxRateService,
         private taxCalculator: TaxCalculator,
         private translatableSaver: TranslatableSaver,
@@ -51,12 +53,16 @@ export class ProductVariantService {
                 where: {
                     product: { id: productId } as any,
                 },
-                relations: ['options', 'facetValues', 'taxCategory'],
+                relations: ['options', 'facetValues', 'facetValues.facet', 'taxCategory'],
             })
             .then(variants =>
                 variants.map(variant => {
                     const variantWithPrices = this.applyChannelPriceAndTax(variant, ctx);
-                    return translateDeep(variantWithPrices, ctx.languageCode, ['options', 'facetValues']);
+                    return translateDeep(variantWithPrices, ctx.languageCode, [
+                        'options',
+                        'facetValues',
+                        ['facetValues', 'facet'],
+                    ]);
                 }),
             );
     }
@@ -99,6 +105,9 @@ export class ProductVariantService {
                         updatedVariant.taxCategory = taxCategory;
                     }
                 }
+                if (input.facetValueIds) {
+                    updatedVariant.facetValues = await this.facetValueService.findByIds(input.facetValueIds);
+                }
             },
             typeOrmSubscriberData: {
                 channelId: ctx.channelId,
@@ -107,12 +116,13 @@ export class ProductVariantService {
         });
         const variant = await assertFound(
             this.connection.manager.getRepository(ProductVariant).findOne(input.id, {
-                relations: ['options', 'facetValues', 'taxCategory'],
+                relations: ['options', 'facetValues', 'facetValues.facet', 'taxCategory'],
             }),
         );
         return translateDeep(this.applyChannelPriceAndTax(variant, ctx), DEFAULT_LANGUAGE_CODE, [
             'options',
             'facetValues',
+            ['facetValues', 'facet'],
         ]);
     }
 
@@ -167,7 +177,7 @@ export class ProductVariantService {
         facetValues: FacetValue[],
     ): Promise<Array<Translated<ProductVariant>>> {
         const variants = await this.connection.getRepository(ProductVariant).findByIds(productVariantIds, {
-            relations: ['options', 'facetValues', 'taxCategory'],
+            relations: ['options', 'facetValues', 'facetValues.facet', 'taxCategory'],
         });
 
         const notFoundIds = productVariantIds.filter(id => !variants.find(v => idsAreEqual(v.id, id)));
@@ -187,6 +197,7 @@ export class ProductVariantService {
             translateDeep(this.applyChannelPriceAndTax(v, ctx), DEFAULT_LANGUAGE_CODE, [
                 'options',
                 'facetValues',
+                ['facetValues', 'facet'],
             ]),
         );
     }

+ 22 - 4
shared/generated-types.ts

@@ -262,7 +262,8 @@ export interface FacetValue extends Node {
     id: string;
     createdAt: DateTime;
     updatedAt: DateTime;
-    languageCode?: LanguageCode | null;
+    languageCode: LanguageCode;
+    facet: Facet;
     name: string;
     code: string;
     translations: FacetValueTranslation[];
@@ -1267,6 +1268,7 @@ export interface UpdateProductInput {
 export interface UpdateProductVariantInput {
     id: string;
     translations?: ProductVariantTranslationInput[] | null;
+    facetValueIds?: string[] | null;
     sku?: string | null;
     taxCategoryId?: string | null;
     price?: number | null;
@@ -2869,7 +2871,8 @@ export namespace FacetValueResolvers {
         id?: IdResolver<string, any, Context>;
         createdAt?: CreatedAtResolver<DateTime, any, Context>;
         updatedAt?: UpdatedAtResolver<DateTime, any, Context>;
-        languageCode?: LanguageCodeResolver<LanguageCode | null, any, Context>;
+        languageCode?: LanguageCodeResolver<LanguageCode, any, Context>;
+        facet?: FacetResolver<Facet, any, Context>;
         name?: NameResolver<string, any, Context>;
         code?: CodeResolver<string, any, Context>;
         translations?: TranslationsResolver<FacetValueTranslation[], any, Context>;
@@ -2879,11 +2882,12 @@ export namespace FacetValueResolvers {
     export type IdResolver<R = string, Parent = any, Context = any> = Resolver<R, Parent, Context>;
     export type CreatedAtResolver<R = DateTime, Parent = any, Context = any> = Resolver<R, Parent, Context>;
     export type UpdatedAtResolver<R = DateTime, Parent = any, Context = any> = Resolver<R, Parent, Context>;
-    export type LanguageCodeResolver<R = LanguageCode | null, Parent = any, Context = any> = Resolver<
+    export type LanguageCodeResolver<R = LanguageCode, Parent = any, Context = any> = Resolver<
         R,
         Parent,
         Context
     >;
+    export type FacetResolver<R = Facet, Parent = any, Context = any> = Resolver<R, Parent, Context>;
     export type NameResolver<R = string, Parent = any, Context = any> = Resolver<R, Parent, Context>;
     export type CodeResolver<R = string, Parent = any, Context = any> = Resolver<R, Parent, Context>;
     export type TranslationsResolver<R = FacetValueTranslation[], Parent = any, Context = any> = Resolver<
@@ -6030,10 +6034,11 @@ export namespace FacetValue {
     export type Fragment = {
         __typename?: 'FacetValue';
         id: string;
-        languageCode?: LanguageCode | null;
+        languageCode: LanguageCode;
         code: string;
         name: string;
         translations: Translations[];
+        facet: Facet;
     };
 
     export type Translations = {
@@ -6042,6 +6047,12 @@ export namespace FacetValue {
         languageCode: LanguageCode;
         name: string;
     };
+
+    export type Facet = {
+        __typename?: 'Facet';
+        id: string;
+        name: string;
+    };
 }
 
 export namespace FacetWithValues {
@@ -6249,6 +6260,13 @@ export namespace ProductVariant {
         id: string;
         code: string;
         name: string;
+        facet: Facet;
+    };
+
+    export type Facet = {
+        __typename?: 'Facet';
+        id: string;
+        name: string;
     };
 
     export type Translations = {

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels