Explorar el Código

feat(server): Create Facet list resolver

Michael Bromley hace 7 años
padre
commit
9ef69b0ccf

+ 1 - 0
.prettierignore

@@ -0,0 +1 @@
+gql-generated-types.ts

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 358 - 358
admin-ui/src/app/data/types/gql-generated-types.ts


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
schema.json


+ 30 - 0
server/src/api/facet/facet.api.graphql

@@ -0,0 +1,30 @@
+type Query {
+    facets(languageCode: LanguageCode, options: FacetListOptions): FacetList!
+}
+
+type FacetList implements PaginatedList {
+    items: [Facet!]!
+    totalItems: Int!
+}
+
+input FacetListOptions {
+    take: Int
+    skip: Int
+    sort: FacetSortParameter
+    filter: FacetFilterParameter
+}
+
+input FacetSortParameter {
+    id: SortOrder
+    createdAt: SortOrder
+    updatedAt: SortOrder
+    name: SortOrder
+    code: SortOrder
+}
+
+input FacetFilterParameter {
+    name: StringOperators
+    code: StringOperators
+    createdAt: DateOperators
+    updatedAt: DateOperators
+}

+ 20 - 0
server/src/api/facet/facet.resolver.ts

@@ -0,0 +1,20 @@
+import { Query, Resolver } from '@nestjs/graphql';
+
+import { PaginatedList } from '../../../../shared/shared-types';
+import { Facet } from '../../entity/facet/facet.entity';
+import { Translated } from '../../locale/locale-types';
+import { ConfigService } from '../../service/config.service';
+import { FacetService } from '../../service/facet.service';
+
+@Resolver('Facet')
+export class FacetResolver {
+    constructor(private facetService: FacetService) {}
+
+    /**
+     * Exposes a subset of the VendureConfig which may be of use to clients.
+     */
+    @Query()
+    facets(obj, args): Promise<PaginatedList<Translated<Facet>>> {
+        return this.facetService.findAll(args.languageCode, args.options);
+    }
+}

+ 4 - 0
server/src/app.module.ts

@@ -11,6 +11,7 @@ import { AdministratorResolver } from './api/administrator/administrator.resolve
 import { AuthController } from './api/auth/auth.controller';
 import { ConfigResolver } from './api/config/config.resolver';
 import { CustomerResolver } from './api/customer/customer.resolver';
+import { FacetResolver } from './api/facet/facet.resolver';
 import { ProductOptionResolver } from './api/product-option/product-option.resolver';
 import { ProductResolver } from './api/product/product.resolver';
 import { AuthService } from './auth/auth.service';
@@ -24,6 +25,7 @@ import { TranslationUpdaterService } from './locale/translation-updater.service'
 import { AdministratorService } from './service/administrator.service';
 import { ConfigService } from './service/config.service';
 import { CustomerService } from './service/customer.service';
+import { FacetService } from './service/facet.service';
 import { ProductOptionGroupService } from './service/product-option-group.service';
 import { ProductOptionService } from './service/product-option.service';
 import { ProductVariantService } from './service/product-variant.service';
@@ -38,6 +40,8 @@ import { ProductService } from './service/product.service';
         AuthService,
         ConfigResolver,
         ConfigService,
+        FacetResolver,
+        FacetService,
         JwtStrategy,
         I18nService,
         PasswordService,

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

@@ -3,7 +3,8 @@ type FacetValue implements Node {
     createdAt: DateTime!
     updatedAt: DateTime!
     languageCode: LanguageCode
-    name: String
+    name: String!
+    code: String!
     translations: [FacetValueTranslation!]!
 }
 
@@ -22,5 +23,6 @@ input FacetValueTranslationInput {
 }
 
 input CreateFacetValueInput {
+    code: String!
     translations: [FacetValueTranslationInput!]!
 }

+ 3 - 0
server/src/entity/facet/facet.graphql

@@ -4,6 +4,7 @@ type Facet implements Node {
     updatedAt: DateTime!
     languageCode: LanguageCode!
     name: String!
+    code: String!
     values: [FacetValue!]!
     translations: [FacetTranslation!]!
 }
@@ -23,11 +24,13 @@ input FacetTranslationInput {
 }
 
 input CreateFacetInput {
+    code: String!
     translations: [FacetTranslationInput!]!
     options: [CreateProductOptionInput!]!
 }
 
 input UpdateFacetInput {
     id: ID!
+    code: String!
     translations: [FacetTranslationInput!]!
 }

+ 34 - 0
server/src/service/facet.service.ts

@@ -0,0 +1,34 @@
+import { Injectable } from '@nestjs/common';
+import { InjectConnection } from '@nestjs/typeorm';
+import { Connection } from 'typeorm';
+
+import { PaginatedList } from '../../../shared/shared-types';
+import { buildListQuery } from '../common/build-list-query';
+import { ListQueryOptions } from '../common/common-types';
+import { Facet } from '../entity/facet/facet.entity';
+import { LanguageCode } from '../locale/language-code';
+import { Translated } from '../locale/locale-types';
+import { translateDeep } from '../locale/translate-entity';
+import { TranslationUpdaterService } from '../locale/translation-updater.service';
+
+@Injectable()
+export class FacetService {
+    constructor(
+        @InjectConnection() private connection: Connection,
+        private translationUpdaterService: TranslationUpdaterService,
+    ) {}
+
+    findAll(lang: LanguageCode, options: ListQueryOptions<Facet>): Promise<PaginatedList<Translated<Facet>>> {
+        const relations = ['values'];
+
+        return buildListQuery(this.connection, Facet, options, relations)
+            .getManyAndCount()
+            .then(([products, totalItems]) => {
+                const items = products.map(product => translateDeep(product, lang, ['values']));
+                return {
+                    items,
+                    totalItems,
+                };
+            });
+    }
+}

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio