Browse Source

feat(core): Add facetValues list query

Relates to #1404
Michael Bromley 3 năm trước cách đây
mục cha
commit
ddab719826

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

@@ -1537,6 +1537,33 @@ export type FacetValueFilterInput = {
   or?: Maybe<Array<Scalars['ID']>>;
 };
 
+export type FacetValueFilterParameter = {
+  id?: Maybe<IdOperators>;
+  createdAt?: Maybe<DateOperators>;
+  updatedAt?: Maybe<DateOperators>;
+  languageCode?: Maybe<StringOperators>;
+  name?: Maybe<StringOperators>;
+  code?: Maybe<StringOperators>;
+};
+
+export type FacetValueList = PaginatedList & {
+  items: Array<FacetValue>;
+  totalItems: Scalars['Int'];
+};
+
+export type FacetValueListOptions = {
+  /** Skips the first n results, for use in pagination */
+  skip?: Maybe<Scalars['Int']>;
+  /** Takes n results, for use in pagination */
+  take?: Maybe<Scalars['Int']>;
+  /** Specifies which properties to sort the results by */
+  sort?: Maybe<FacetValueSortParameter>;
+  /** Allows the results to be filtered */
+  filter?: Maybe<FacetValueFilterParameter>;
+  /** Specifies whether multiple "filter" arguments should be combines with a logical AND or OR operation. Defaults to AND. */
+  filterOperator?: Maybe<LogicalOperator>;
+};
+
 /**
  * Which FacetValues are present in the products returned
  * by the search, and in what quantity.
@@ -1546,6 +1573,14 @@ export type FacetValueResult = {
   count: Scalars['Int'];
 };
 
+export type FacetValueSortParameter = {
+  id?: Maybe<SortOrder>;
+  createdAt?: Maybe<SortOrder>;
+  updatedAt?: Maybe<SortOrder>;
+  name?: Maybe<SortOrder>;
+  code?: Maybe<SortOrder>;
+};
+
 export type FacetValueTranslation = {
   id: Scalars['ID'];
   createdAt: Scalars['DateTime'];
@@ -4218,6 +4253,7 @@ export type Query = {
   customer?: Maybe<Customer>;
   facets: FacetList;
   facet?: Maybe<Facet>;
+  facetValues: FacetValueList;
   globalSettings: GlobalSettings;
   job?: Maybe<Job>;
   jobs: JobList;
@@ -4350,6 +4386,11 @@ export type QueryFacetArgs = {
 };
 
 
+export type QueryFacetValuesArgs = {
+  options?: Maybe<FacetValueListOptions>;
+};
+
+
 export type QueryJobArgs = {
   jobId: Scalars['ID'];
 };

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

@@ -1586,6 +1586,34 @@ export type FacetValueFilterInput = {
   or?: Maybe<Array<Scalars['ID']>>;
 };
 
+export type FacetValueFilterParameter = {
+  id?: Maybe<IdOperators>;
+  createdAt?: Maybe<DateOperators>;
+  updatedAt?: Maybe<DateOperators>;
+  languageCode?: Maybe<StringOperators>;
+  name?: Maybe<StringOperators>;
+  code?: Maybe<StringOperators>;
+};
+
+export type FacetValueList = PaginatedList & {
+  __typename?: 'FacetValueList';
+  items: Array<FacetValue>;
+  totalItems: Scalars['Int'];
+};
+
+export type FacetValueListOptions = {
+  /** Skips the first n results, for use in pagination */
+  skip?: Maybe<Scalars['Int']>;
+  /** Takes n results, for use in pagination */
+  take?: Maybe<Scalars['Int']>;
+  /** Specifies which properties to sort the results by */
+  sort?: Maybe<FacetValueSortParameter>;
+  /** Allows the results to be filtered */
+  filter?: Maybe<FacetValueFilterParameter>;
+  /** Specifies whether multiple "filter" arguments should be combines with a logical AND or OR operation. Defaults to AND. */
+  filterOperator?: Maybe<LogicalOperator>;
+};
+
 /**
  * Which FacetValues are present in the products returned
  * by the search, and in what quantity.
@@ -1596,6 +1624,14 @@ export type FacetValueResult = {
   count: Scalars['Int'];
 };
 
+export type FacetValueSortParameter = {
+  id?: Maybe<SortOrder>;
+  createdAt?: Maybe<SortOrder>;
+  updatedAt?: Maybe<SortOrder>;
+  name?: Maybe<SortOrder>;
+  code?: Maybe<SortOrder>;
+};
+
 export type FacetValueTranslation = {
   __typename?: 'FacetValueTranslation';
   id: Scalars['ID'];
@@ -4337,6 +4373,7 @@ export type Query = {
   customer?: Maybe<Customer>;
   facets: FacetList;
   facet?: Maybe<Facet>;
+  facetValues: FacetValueList;
   globalSettings: GlobalSettings;
   job?: Maybe<Job>;
   jobs: JobList;
@@ -4469,6 +4506,11 @@ export type QueryFacetArgs = {
 };
 
 
+export type QueryFacetValuesArgs = {
+  options?: Maybe<FacetValueListOptions>;
+};
+
+
 export type QueryJobArgs = {
   jobId: Scalars['ID'];
 };

+ 65 - 24
packages/core/e2e/graphql/generated-e2e-admin-types.ts

@@ -1537,6 +1537,33 @@ export type FacetValueFilterInput = {
   or?: Maybe<Array<Scalars['ID']>>;
 };
 
+export type FacetValueFilterParameter = {
+  id?: Maybe<IdOperators>;
+  createdAt?: Maybe<DateOperators>;
+  updatedAt?: Maybe<DateOperators>;
+  languageCode?: Maybe<StringOperators>;
+  name?: Maybe<StringOperators>;
+  code?: Maybe<StringOperators>;
+};
+
+export type FacetValueList = PaginatedList & {
+  items: Array<FacetValue>;
+  totalItems: Scalars['Int'];
+};
+
+export type FacetValueListOptions = {
+  /** Skips the first n results, for use in pagination */
+  skip?: Maybe<Scalars['Int']>;
+  /** Takes n results, for use in pagination */
+  take?: Maybe<Scalars['Int']>;
+  /** Specifies which properties to sort the results by */
+  sort?: Maybe<FacetValueSortParameter>;
+  /** Allows the results to be filtered */
+  filter?: Maybe<FacetValueFilterParameter>;
+  /** Specifies whether multiple "filter" arguments should be combines with a logical AND or OR operation. Defaults to AND. */
+  filterOperator?: Maybe<LogicalOperator>;
+};
+
 /**
  * Which FacetValues are present in the products returned
  * by the search, and in what quantity.
@@ -1546,6 +1573,14 @@ export type FacetValueResult = {
   count: Scalars['Int'];
 };
 
+export type FacetValueSortParameter = {
+  id?: Maybe<SortOrder>;
+  createdAt?: Maybe<SortOrder>;
+  updatedAt?: Maybe<SortOrder>;
+  name?: Maybe<SortOrder>;
+  code?: Maybe<SortOrder>;
+};
+
 export type FacetValueTranslation = {
   id: Scalars['ID'];
   createdAt: Scalars['DateTime'];
@@ -4218,6 +4253,7 @@ export type Query = {
   customer?: Maybe<Customer>;
   facets: FacetList;
   facet?: Maybe<Facet>;
+  facetValues: FacetValueList;
   globalSettings: GlobalSettings;
   job?: Maybe<Job>;
   jobs: JobList;
@@ -4350,6 +4386,11 @@ export type QueryFacetArgs = {
 };
 
 
+export type QueryFacetValuesArgs = {
+  options?: Maybe<FacetValueListOptions>;
+};
+
+
 export type QueryJobArgs = {
   jobId: Scalars['ID'];
 };
@@ -5435,13 +5476,6 @@ export type UpdateActiveAdministratorMutationVariables = Exact<{
 
 export type UpdateActiveAdministratorMutation = { updateActiveAdministrator: AdministratorFragment };
 
-export type UpdateAdministratorMutationVariables = Exact<{
-  input: UpdateAdministratorInput;
-}>;
-
-
-export type UpdateAdministratorMutation = { updateAdministrator: AdministratorFragment };
-
 export type DeleteAdministratorMutationVariables = Exact<{
   id: Scalars['ID'];
 }>;
@@ -5511,11 +5545,6 @@ export type GetCustomerUserAuthQuery = { customer?: Maybe<(
     )> }
   )> };
 
-export type GetChannelsQueryVariables = Exact<{ [key: string]: never; }>;
-
-
-export type GetChannelsQuery = { channels: Array<Pick<Channel, 'id' | 'code' | 'token'>> };
-
 export type DeleteChannelMutationVariables = Exact<{
   id: Scalars['ID'];
 }>;
@@ -6955,6 +6984,18 @@ export type DeletePromotionMutationVariables = Exact<{
 
 export type DeletePromotionMutation = { deletePromotion: Pick<DeletionResponse, 'result'> };
 
+export type GetChannelsQueryVariables = Exact<{ [key: string]: never; }>;
+
+
+export type GetChannelsQuery = { channels: Array<Pick<Channel, 'id' | 'code' | 'token'>> };
+
+export type UpdateAdministratorMutationVariables = Exact<{
+  input: UpdateAdministratorInput;
+}>;
+
+
+export type UpdateAdministratorMutation = { updateAdministrator: AdministratorFragment };
+
 export type CancelJobMutationVariables = Exact<{
   id: Scalars['ID'];
 }>;
@@ -7691,12 +7732,6 @@ export namespace UpdateActiveAdministrator {
   export type UpdateActiveAdministrator = (NonNullable<UpdateActiveAdministratorMutation['updateActiveAdministrator']>);
 }
 
-export namespace UpdateAdministrator {
-  export type Variables = UpdateAdministratorMutationVariables;
-  export type Mutation = UpdateAdministratorMutation;
-  export type UpdateAdministrator = (NonNullable<UpdateAdministratorMutation['updateAdministrator']>);
-}
-
 export namespace DeleteAdministrator {
   export type Variables = DeleteAdministratorMutationVariables;
   export type Mutation = DeleteAdministratorMutation;
@@ -7767,12 +7802,6 @@ export namespace GetCustomerUserAuth {
   export type AuthenticationMethods = NonNullable<(NonNullable<(NonNullable<(NonNullable<GetCustomerUserAuthQuery['customer']>)['user']>)['authenticationMethods']>)[number]>;
 }
 
-export namespace GetChannels {
-  export type Variables = GetChannelsQueryVariables;
-  export type Query = GetChannelsQuery;
-  export type Channels = NonNullable<(NonNullable<GetChannelsQuery['channels']>)[number]>;
-}
-
 export namespace DeleteChannel {
   export type Variables = DeleteChannelMutationVariables;
   export type Mutation = DeleteChannelMutation;
@@ -9013,6 +9042,18 @@ export namespace DeletePromotion {
   export type DeletePromotion = (NonNullable<DeletePromotionMutation['deletePromotion']>);
 }
 
+export namespace GetChannels {
+  export type Variables = GetChannelsQueryVariables;
+  export type Query = GetChannelsQuery;
+  export type Channels = NonNullable<(NonNullable<GetChannelsQuery['channels']>)[number]>;
+}
+
+export namespace UpdateAdministrator {
+  export type Variables = UpdateAdministratorMutationVariables;
+  export type Mutation = UpdateAdministratorMutation;
+  export type UpdateAdministrator = (NonNullable<UpdateAdministratorMutation['updateAdministrator']>);
+}
+
 export namespace CancelJob {
   export type Variables = CancelJobMutationVariables;
   export type Mutation = CancelJobMutation;

+ 11 - 0
packages/core/src/api/resolvers/admin/facet.resolver.ts

@@ -13,6 +13,7 @@ import {
     Permission,
     QueryFacetArgs,
     QueryFacetsArgs,
+    QueryFacetValuesArgs,
     RemoveFacetFromChannelResult,
 } from '@vendure/common/lib/generated-types';
 import { PaginatedList } from '@vendure/common/lib/shared-types';
@@ -59,6 +60,16 @@ export class FacetResolver {
         return this.facetService.findOne(ctx, args.id, relations);
     }
 
+    @Query()
+    @Allow(Permission.ReadCatalog, Permission.ReadProduct, Permission.ReadFacet)
+    facetValues(
+        @Ctx() ctx: RequestContext,
+        @Args() args: QueryFacetValuesArgs,
+        @Relations(FacetValue) relations: RelationPaths<FacetValue>,
+    ): Promise<PaginatedList<Translated<FacetValue>>> {
+        return this.facetValueService.findAllList(ctx, args.options || undefined, relations);
+    }
+
     @Transaction()
     @Mutation()
     @Allow(Permission.CreateCatalog, Permission.CreateFacet)

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

@@ -1,6 +1,7 @@
 type Query {
     facets(options: FacetListOptions): FacetList!
     facet(id: ID!): Facet
+    facetValues(options: FacetValueListOptions): FacetValueList!
 }
 
 type Mutation {
@@ -34,6 +35,8 @@ type Mutation {
 
 # generated by generateListOptions function
 input FacetListOptions
+# generated by generateListOptions function
+input FacetValueListOptions
 
 input FacetTranslationInput {
     id: ID
@@ -88,6 +91,11 @@ input RemoveFacetsFromChannelInput {
     force: Boolean
 }
 
+type FacetValueList implements PaginatedList {
+    items: [FacetValue!]!
+    totalItems: Int!
+}
+
 type FacetInUseError implements ErrorResult {
     errorCode: ErrorCode!
     message: String!

+ 31 - 1
packages/core/src/service/services/facet-value.service.ts

@@ -7,9 +7,11 @@ import {
     LanguageCode,
     UpdateFacetValueInput,
 } from '@vendure/common/lib/generated-types';
-import { ID } from '@vendure/common/lib/shared-types';
+import { ID, PaginatedList } from '@vendure/common/lib/shared-types';
 
 import { RequestContext } from '../../api/common/request-context';
+import { RelationPaths } from '../../api/index';
+import { ListQueryOptions } from '../../common/index';
 import { Translated } from '../../common/types/locale-types';
 import { assertFound } from '../../common/utils';
 import { ConfigService } from '../../config/config.service';
@@ -21,6 +23,7 @@ import { Facet } from '../../entity/facet/facet.entity';
 import { EventBus } from '../../event-bus';
 import { FacetValueEvent } from '../../event-bus/events/facet-value-event';
 import { CustomFieldRelationService } from '../helpers/custom-field-relation/custom-field-relation.service';
+import { ListQueryBuilder } from '../helpers/list-query-builder/list-query-builder';
 import { TranslatableSaver } from '../helpers/translatable-saver/translatable-saver';
 import { TranslatorService } from '../helpers/translator/translator.service';
 import { translateDeep } from '../helpers/utils/translate-entity';
@@ -43,6 +46,7 @@ export class FacetValueService {
         private channelService: ChannelService,
         private eventBus: EventBus,
         private translator: TranslatorService,
+        private listQueryBuilder: ListQueryBuilder,
     ) {}
 
     /**
@@ -69,6 +73,32 @@ export class FacetValueService {
             );
     }
 
+    /**
+     * @description
+     * Returns a PaginatedList of FacetValues.
+     *
+     * TODO: in v2 this should replace the `findAll()` method.
+     * A separate method was created just to avoid a breaking change in v1.9.
+     */
+    findAllList(
+        ctx: RequestContext,
+        options?: ListQueryOptions<FacetValue>,
+        relations?: RelationPaths<FacetValue>,
+    ): Promise<PaginatedList<Translated<FacetValue>>> {
+        return this.listQueryBuilder
+            .build(FacetValue, options, {
+                relations: relations ?? ['facet'],
+                channelId: ctx.channelId,
+            })
+            .getManyAndCount()
+            .then(([items, totalItems]) => {
+                return {
+                    items: items.map(item => this.translator.translate(item, ctx, ['facet'])),
+                    totalItems,
+                };
+            });
+    }
+
     findOne(ctx: RequestContext, id: ID): Promise<Translated<FacetValue> | undefined> {
         return this.connection
             .getRepository(ctx, FacetValue)

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

@@ -1537,6 +1537,33 @@ export type FacetValueFilterInput = {
   or?: Maybe<Array<Scalars['ID']>>;
 };
 
+export type FacetValueFilterParameter = {
+  id?: Maybe<IdOperators>;
+  createdAt?: Maybe<DateOperators>;
+  updatedAt?: Maybe<DateOperators>;
+  languageCode?: Maybe<StringOperators>;
+  name?: Maybe<StringOperators>;
+  code?: Maybe<StringOperators>;
+};
+
+export type FacetValueList = PaginatedList & {
+  items: Array<FacetValue>;
+  totalItems: Scalars['Int'];
+};
+
+export type FacetValueListOptions = {
+  /** Skips the first n results, for use in pagination */
+  skip?: Maybe<Scalars['Int']>;
+  /** Takes n results, for use in pagination */
+  take?: Maybe<Scalars['Int']>;
+  /** Specifies which properties to sort the results by */
+  sort?: Maybe<FacetValueSortParameter>;
+  /** Allows the results to be filtered */
+  filter?: Maybe<FacetValueFilterParameter>;
+  /** Specifies whether multiple "filter" arguments should be combines with a logical AND or OR operation. Defaults to AND. */
+  filterOperator?: Maybe<LogicalOperator>;
+};
+
 /**
  * Which FacetValues are present in the products returned
  * by the search, and in what quantity.
@@ -1546,6 +1573,14 @@ export type FacetValueResult = {
   count: Scalars['Int'];
 };
 
+export type FacetValueSortParameter = {
+  id?: Maybe<SortOrder>;
+  createdAt?: Maybe<SortOrder>;
+  updatedAt?: Maybe<SortOrder>;
+  name?: Maybe<SortOrder>;
+  code?: Maybe<SortOrder>;
+};
+
 export type FacetValueTranslation = {
   id: Scalars['ID'];
   createdAt: Scalars['DateTime'];
@@ -4218,6 +4253,7 @@ export type Query = {
   customer?: Maybe<Customer>;
   facets: FacetList;
   facet?: Maybe<Facet>;
+  facetValues: FacetValueList;
   globalSettings: GlobalSettings;
   job?: Maybe<Job>;
   jobs: JobList;
@@ -4350,6 +4386,11 @@ export type QueryFacetArgs = {
 };
 
 
+export type QueryFacetValuesArgs = {
+  options?: Maybe<FacetValueListOptions>;
+};
+
+
 export type QueryJobArgs = {
   jobId: Scalars['ID'];
 };

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

@@ -1537,6 +1537,33 @@ export type FacetValueFilterInput = {
   or?: Maybe<Array<Scalars['ID']>>;
 };
 
+export type FacetValueFilterParameter = {
+  id?: Maybe<IdOperators>;
+  createdAt?: Maybe<DateOperators>;
+  updatedAt?: Maybe<DateOperators>;
+  languageCode?: Maybe<StringOperators>;
+  name?: Maybe<StringOperators>;
+  code?: Maybe<StringOperators>;
+};
+
+export type FacetValueList = PaginatedList & {
+  items: Array<FacetValue>;
+  totalItems: Scalars['Int'];
+};
+
+export type FacetValueListOptions = {
+  /** Skips the first n results, for use in pagination */
+  skip?: Maybe<Scalars['Int']>;
+  /** Takes n results, for use in pagination */
+  take?: Maybe<Scalars['Int']>;
+  /** Specifies which properties to sort the results by */
+  sort?: Maybe<FacetValueSortParameter>;
+  /** Allows the results to be filtered */
+  filter?: Maybe<FacetValueFilterParameter>;
+  /** Specifies whether multiple "filter" arguments should be combines with a logical AND or OR operation. Defaults to AND. */
+  filterOperator?: Maybe<LogicalOperator>;
+};
+
 /**
  * Which FacetValues are present in the products returned
  * by the search, and in what quantity.
@@ -1546,6 +1573,14 @@ export type FacetValueResult = {
   count: Scalars['Int'];
 };
 
+export type FacetValueSortParameter = {
+  id?: Maybe<SortOrder>;
+  createdAt?: Maybe<SortOrder>;
+  updatedAt?: Maybe<SortOrder>;
+  name?: Maybe<SortOrder>;
+  code?: Maybe<SortOrder>;
+};
+
 export type FacetValueTranslation = {
   id: Scalars['ID'];
   createdAt: Scalars['DateTime'];
@@ -4218,6 +4253,7 @@ export type Query = {
   customer?: Maybe<Customer>;
   facets: FacetList;
   facet?: Maybe<Facet>;
+  facetValues: FacetValueList;
   globalSettings: GlobalSettings;
   job?: Maybe<Job>;
   jobs: JobList;
@@ -4350,6 +4386,11 @@ export type QueryFacetArgs = {
 };
 
 
+export type QueryFacetValuesArgs = {
+  options?: Maybe<FacetValueListOptions>;
+};
+
+
 export type QueryJobArgs = {
   jobId: Scalars['ID'];
 };

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
schema-admin.json


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác