Przeglądaj źródła

refactor(core): Remove Decode decorator from all resolvers

Michael Bromley 6 lat temu
rodzic
commit
b81a03b72d

+ 1 - 0
packages/core/e2e/entity-id-strategy.e2e-spec.ts

@@ -204,6 +204,7 @@ describe('EntityIdStrategy', () => {
                 }
             }
         `);
+
         expect(products).toEqual({
             items: [
                 {

+ 0 - 1
packages/core/src/api/decorators/allow.decorator.ts

@@ -1,5 +1,4 @@
 import { SetMetadata } from '@nestjs/common';
-
 import { Permission } from '@vendure/common/lib/generated-types';
 
 export const PERMISSIONS_METADATA_KEY = '__permissions__';

+ 0 - 19
packages/core/src/api/decorators/decode.decorator.ts

@@ -1,19 +0,0 @@
-import { SetMetadata } from '@nestjs/common';
-
-export const DECODE_METADATA_KEY = '__decode__';
-
-/**
- * Attatches metadata to the resolver defining which keys are ids which need to be decoded.
- * By default, all keys named "id" will be implicitly decoded, but some operations have ID arguments
- * which are not named "id", e.g. assignRoleToAdministrator, where there are 2 ID arguments passed.
- *
- * @example
- * ```
- *  @Query()
- *  @Decode('administratorId', 'roleId')
- *  assignRoleToAdministrator(@Args() args) {
- *      // ...
- *  }
- * ```
- */
-export const Decode = (...transformKeys: string[]) => SetMetadata(DECODE_METADATA_KEY, transformKeys);

+ 3 - 7
packages/core/src/api/resolvers/admin/administrator.resolver.ts

@@ -1,19 +1,17 @@
 import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
 import {
-    AdministratorList,
-    QueryAdministratorArgs,
-    QueryAdministratorsArgs,
     MutationAssignRoleToAdministratorArgs,
     MutationCreateAdministratorArgs,
-    Permission,
     MutationUpdateAdministratorArgs,
+    Permission,
+    QueryAdministratorArgs,
+    QueryAdministratorsArgs,
 } from '@vendure/common/lib/generated-types';
 import { PaginatedList } from '@vendure/common/lib/shared-types';
 
 import { Administrator } from '../../../entity/administrator/administrator.entity';
 import { AdministratorService } from '../../../service/services/administrator.service';
 import { Allow } from '../../decorators/allow.decorator';
-import { Decode } from '../../decorators/decode.decorator';
 
 @Resolver('Administrator')
 export class AdministratorResolver {
@@ -33,7 +31,6 @@ export class AdministratorResolver {
 
     @Mutation()
     @Allow(Permission.CreateAdministrator)
-    @Decode('roleIds')
     createAdministrator(@Args() args: MutationCreateAdministratorArgs): Promise<Administrator> {
         const { input } = args;
         return this.administratorService.create(input);
@@ -48,7 +45,6 @@ export class AdministratorResolver {
 
     @Mutation()
     @Allow(Permission.UpdateAdministrator)
-    @Decode('administratorId', 'roleId')
     assignRoleToAdministrator(@Args() args: MutationAssignRoleToAdministratorArgs): Promise<Administrator> {
         return this.administratorService.assignRole(args.administratorId, args.roleId);
     }

+ 2 - 5
packages/core/src/api/resolvers/admin/channel.resolver.ts

@@ -1,16 +1,15 @@
 import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
 import {
-    QueryChannelArgs,
     MutationCreateChannelArgs,
-    Permission,
     MutationUpdateChannelArgs,
+    Permission,
+    QueryChannelArgs,
 } from '@vendure/common/lib/generated-types';
 
 import { Channel } from '../../../entity/channel/channel.entity';
 import { ChannelService } from '../../../service/services/channel.service';
 import { RequestContext } from '../../common/request-context';
 import { Allow } from '../../decorators/allow.decorator';
-import { Decode } from '../../decorators/decode.decorator';
 import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('Channel')
@@ -37,14 +36,12 @@ export class ChannelResolver {
 
     @Mutation()
     @Allow(Permission.SuperAdmin)
-    @Decode('defaultTaxZoneId', 'defaultShippingZoneId')
     async createChannel(@Args() args: MutationCreateChannelArgs): Promise<Channel> {
         return this.channelService.create(args.input);
     }
 
     @Mutation()
     @Allow(Permission.SuperAdmin)
-    @Decode('defaultTaxZoneId', 'defaultShippingZoneId')
     async updateChannel(@Args() args: MutationUpdateChannelArgs): Promise<Channel> {
         return this.channelService.update(args.input);
     }

+ 1 - 5
packages/core/src/api/resolvers/admin/collection.resolver.ts

@@ -19,7 +19,6 @@ import { FacetValueService } from '../../../service/services/facet-value.service
 import { IdCodecService } from '../../common/id-codec.service';
 import { RequestContext } from '../../common/request-context';
 import { Allow } from '../../decorators/allow.decorator';
-import { Decode } from '../../decorators/decode.decorator';
 import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver()
@@ -62,7 +61,6 @@ export class CollectionResolver {
 
     @Mutation()
     @Allow(Permission.CreateCatalog)
-    @Decode('assetIds', 'featuredAssetId', 'parentId')
     async createCollection(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationCreateCollectionArgs,
@@ -74,7 +72,6 @@ export class CollectionResolver {
 
     @Mutation()
     @Allow(Permission.UpdateCatalog)
-    @Decode('assetIds', 'featuredAssetId')
     async updateCollection(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationUpdateCollectionArgs,
@@ -86,7 +83,6 @@ export class CollectionResolver {
 
     @Mutation()
     @Allow(Permission.UpdateCatalog)
-    @Decode('collectionId', 'parentId')
     async moveCollection(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationMoveCollectionArgs,
@@ -112,5 +108,5 @@ export class CollectionResolver {
             this.idCodecService.encodeConfigurableOperation(collection.filters);
         }
         return collection;
-    }
+    };
 }

+ 2 - 6
packages/core/src/api/resolvers/admin/customer-group.resolver.ts

@@ -2,17 +2,16 @@ import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
 import {
     MutationAddCustomersToGroupArgs,
     MutationCreateCustomerGroupArgs,
-    QueryCustomerGroupArgs,
-    Permission,
     MutationRemoveCustomersFromGroupArgs,
     MutationUpdateCustomerGroupArgs,
+    Permission,
+    QueryCustomerGroupArgs,
 } from '@vendure/common/lib/generated-types';
 
 import { CustomerGroup } from '../../../entity/customer-group/customer-group.entity';
 import { CustomerGroupService } from '../../../service/services/customer-group.service';
 import { RequestContext } from '../../common/request-context';
 import { Allow } from '../../decorators/allow.decorator';
-import { Decode } from '../../decorators/decode.decorator';
 import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('CustomerGroup')
@@ -36,7 +35,6 @@ export class CustomerGroupResolver {
 
     @Mutation()
     @Allow(Permission.CreateCustomer)
-    @Decode('customerIds')
     async createCustomerGroup(@Args() args: MutationCreateCustomerGroupArgs): Promise<CustomerGroup> {
         return this.customerGroupService.create(args.input);
     }
@@ -49,14 +47,12 @@ export class CustomerGroupResolver {
 
     @Mutation()
     @Allow(Permission.UpdateCustomer)
-    @Decode('customerGroupId', 'customerIds')
     async addCustomersToGroup(@Args() args: MutationAddCustomersToGroupArgs): Promise<CustomerGroup> {
         return this.customerGroupService.addCustomersToGroup(args);
     }
 
     @Mutation()
     @Allow(Permission.UpdateCustomer)
-    @Decode('customerGroupId', 'customerIds')
     async removeCustomersFromGroup(
         @Args() args: MutationRemoveCustomersFromGroupArgs,
     ): Promise<CustomerGroup> {

+ 0 - 2
packages/core/src/api/resolvers/admin/customer.resolver.ts

@@ -19,7 +19,6 @@ import { CustomerService } from '../../../service/services/customer.service';
 import { OrderService } from '../../../service/services/order.service';
 import { RequestContext } from '../../common/request-context';
 import { Allow } from '../../decorators/allow.decorator';
-import { Decode } from '../../decorators/decode.decorator';
 import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver()
@@ -54,7 +53,6 @@ export class CustomerResolver {
 
     @Mutation()
     @Allow(Permission.CreateCustomer)
-    @Decode('customerId')
     async createCustomerAddress(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationCreateCustomerAddressArgs,

+ 4 - 7
packages/core/src/api/resolvers/admin/facet.resolver.ts

@@ -1,15 +1,15 @@
 import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
 import {
+    DeletionResponse,
     MutationCreateFacetArgs,
     MutationCreateFacetValuesArgs,
     MutationDeleteFacetArgs,
     MutationDeleteFacetValuesArgs,
-    DeletionResponse,
-    QueryFacetArgs,
-    QueryFacetsArgs,
-    Permission,
     MutationUpdateFacetArgs,
     MutationUpdateFacetValuesArgs,
+    Permission,
+    QueryFacetArgs,
+    QueryFacetsArgs,
 } from '@vendure/common/lib/generated-types';
 import { PaginatedList } from '@vendure/common/lib/shared-types';
 
@@ -22,7 +22,6 @@ import { FacetValueService } from '../../../service/services/facet-value.service
 import { FacetService } from '../../../service/services/facet.service';
 import { RequestContext } from '../../common/request-context';
 import { Allow } from '../../decorators/allow.decorator';
-import { Decode } from '../../decorators/decode.decorator';
 import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('Facet')
@@ -80,7 +79,6 @@ export class FacetResolver {
 
     @Mutation()
     @Allow(Permission.CreateCatalog)
-    @Decode('facetId')
     async createFacetValues(
         @Args() args: MutationCreateFacetValuesArgs,
     ): Promise<Array<Translated<FacetValue>>> {
@@ -104,7 +102,6 @@ export class FacetResolver {
 
     @Mutation()
     @Allow(Permission.DeleteCatalog)
-    @Decode('ids')
     async deleteFacetValues(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationDeleteFacetValuesArgs,

+ 0 - 4
packages/core/src/api/resolvers/admin/order.resolver.ts

@@ -17,7 +17,6 @@ import { OrderService } from '../../../service/services/order.service';
 import { ShippingMethodService } from '../../../service/services/shipping-method.service';
 import { RequestContext } from '../../common/request-context';
 import { Allow } from '../../decorators/allow.decorator';
-import { Decode } from '../../decorators/decode.decorator';
 import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver()
@@ -43,21 +42,18 @@ export class OrderResolver {
     }
 
     @Mutation()
-    @Decode('orderLineId')
     @Allow(Permission.UpdateOrder)
     async fulfillOrder(@Ctx() ctx: RequestContext, @Args() args: MutationFulfillOrderArgs) {
         return this.orderService.createFulfillment(ctx, args.input);
     }
 
     @Mutation()
-    @Decode('orderLineId')
     @Allow(Permission.UpdateOrder)
     async cancelOrder(@Ctx() ctx: RequestContext, @Args() args: MutationCancelOrderArgs) {
         return this.orderService.cancelOrder(ctx, args.input);
     }
 
     @Mutation()
-    @Decode('orderLineId', 'paymentId')
     @Allow(Permission.UpdateOrder)
     async refundOrder(@Ctx() ctx: RequestContext, @Args() args: MutationRefundOrderArgs) {
         return this.orderService.refundOrder(ctx, args.input);

+ 0 - 3
packages/core/src/api/resolvers/admin/product-option.resolver.ts

@@ -16,7 +16,6 @@ import { ProductOptionGroupService } from '../../../service/services/product-opt
 import { ProductOptionService } from '../../../service/services/product-option.service';
 import { RequestContext } from '../../common/request-context';
 import { Allow } from '../../decorators/allow.decorator';
-import { Decode } from '../../decorators/decode.decorator';
 import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver()
@@ -74,7 +73,6 @@ export class ProductOptionResolver {
 
     @Mutation()
     @Allow(Permission.CreateCatalog)
-    @Decode('productOptionGroupId')
     async createProductOption(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationCreateProductOptionArgs,
@@ -85,7 +83,6 @@ export class ProductOptionResolver {
 
     @Mutation()
     @Allow(Permission.UpdateCatalog)
-    @Decode('productOptionGroupId')
     async updateProductOption(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationUpdateProductOptionArgs,

+ 0 - 7
packages/core/src/api/resolvers/admin/product.resolver.ts

@@ -24,7 +24,6 @@ import { ProductVariantService } from '../../../service/services/product-variant
 import { ProductService } from '../../../service/services/product.service';
 import { RequestContext } from '../../common/request-context';
 import { Allow } from '../../decorators/allow.decorator';
-import { Decode } from '../../decorators/decode.decorator';
 import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver()
@@ -65,7 +64,6 @@ export class ProductResolver {
 
     @Mutation()
     @Allow(Permission.CreateCatalog)
-    @Decode('assetIds', 'featuredAssetId', 'facetValueIds')
     async createProduct(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationCreateProductArgs,
@@ -76,7 +74,6 @@ export class ProductResolver {
 
     @Mutation()
     @Allow(Permission.UpdateCatalog)
-    @Decode('assetIds', 'featuredAssetId', 'facetValueIds')
     async updateProduct(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationUpdateProductArgs,
@@ -96,7 +93,6 @@ export class ProductResolver {
 
     @Mutation()
     @Allow(Permission.UpdateCatalog)
-    @Decode('productId', 'optionGroupId')
     async addOptionGroupToProduct(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationAddOptionGroupToProductArgs,
@@ -107,7 +103,6 @@ export class ProductResolver {
 
     @Mutation()
     @Allow(Permission.UpdateCatalog)
-    @Decode('productId', 'optionGroupId')
     async removeOptionGroupFromProduct(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationRemoveOptionGroupFromProductArgs,
@@ -118,7 +113,6 @@ export class ProductResolver {
 
     @Mutation()
     @Allow(Permission.UpdateCatalog)
-    @Decode('taxCategoryId', 'facetValueIds', 'featuredAssetId', 'assetIds', 'optionIds')
     async createProductVariants(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationCreateProductVariantsArgs,
@@ -129,7 +123,6 @@ export class ProductResolver {
 
     @Mutation()
     @Allow(Permission.UpdateCatalog)
-    @Decode('taxCategoryId', 'facetValueIds', 'featuredAssetId', 'assetIds')
     async updateProductVariants(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationUpdateProductVariantsArgs,

+ 1 - 4
packages/core/src/api/resolvers/admin/tax-rate.resolver.ts

@@ -1,10 +1,10 @@
 import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
 import {
     MutationCreateTaxRateArgs,
+    MutationUpdateTaxRateArgs,
     Permission,
     QueryTaxRateArgs,
     QueryTaxRatesArgs,
-    MutationUpdateTaxRateArgs,
 } from '@vendure/common/lib/generated-types';
 import { PaginatedList } from '@vendure/common/lib/shared-types';
 
@@ -12,7 +12,6 @@ import { TaxRate } from '../../../entity/tax-rate/tax-rate.entity';
 import { TaxRateService } from '../../../service/services/tax-rate.service';
 import { RequestContext } from '../../common/request-context';
 import { Allow } from '../../decorators/allow.decorator';
-import { Decode } from '../../decorators/decode.decorator';
 import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('TaxRate')
@@ -33,7 +32,6 @@ export class TaxRateResolver {
 
     @Mutation()
     @Allow(Permission.CreateSettings)
-    @Decode('categoryId', 'zoneId', 'customerGroupId')
     async createTaxRate(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationCreateTaxRateArgs,
@@ -43,7 +41,6 @@ export class TaxRateResolver {
 
     @Mutation()
     @Allow(Permission.UpdateSettings)
-    @Decode('categoryId', 'zoneId', 'customerGroupId')
     async updateTaxRate(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationUpdateTaxRateArgs,

+ 2 - 6
packages/core/src/api/resolvers/admin/zone.resolver.ts

@@ -1,12 +1,12 @@
 import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
 import {
+    DeletionResponse,
     MutationAddMembersToZoneArgs,
     MutationCreateZoneArgs,
     MutationDeleteZoneArgs,
-    DeletionResponse,
-    Permission,
     MutationRemoveMembersFromZoneArgs,
     MutationUpdateZoneArgs,
+    Permission,
     QueryZoneArgs,
 } from '@vendure/common/lib/generated-types';
 
@@ -14,7 +14,6 @@ import { Zone } from '../../../entity/zone/zone.entity';
 import { ZoneService } from '../../../service/services/zone.service';
 import { RequestContext } from '../../common/request-context';
 import { Allow } from '../../decorators/allow.decorator';
-import { Decode } from '../../decorators/decode.decorator';
 import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('Zone')
@@ -35,7 +34,6 @@ export class ZoneResolver {
 
     @Mutation()
     @Allow(Permission.CreateSettings)
-    @Decode('memberIds')
     async createZone(@Ctx() ctx: RequestContext, @Args() args: MutationCreateZoneArgs): Promise<Zone> {
         return this.zoneService.create(ctx, args.input);
     }
@@ -57,7 +55,6 @@ export class ZoneResolver {
 
     @Mutation()
     @Allow(Permission.UpdateSettings)
-    @Decode('zoneId', 'memberIds')
     async addMembersToZone(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationAddMembersToZoneArgs,
@@ -67,7 +64,6 @@ export class ZoneResolver {
 
     @Mutation()
     @Allow(Permission.UpdateSettings)
-    @Decode('zoneId', 'memberIds')
     async removeMembersFromZone(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationRemoveMembersFromZoneArgs,

+ 18 - 8
packages/core/src/api/resolvers/shop/shop-order.resolver.ts

@@ -28,7 +28,6 @@ import { CustomerService } from '../../../service/services/customer.service';
 import { OrderService } from '../../../service/services/order.service';
 import { RequestContext } from '../../common/request-context';
 import { Allow } from '../../decorators/allow.decorator';
-import { Decode } from '../../decorators/decode.decorator';
 import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver()
@@ -150,7 +149,6 @@ export class ShopOrderResolver {
 
     @Mutation()
     @Allow(Permission.Owner)
-    @Decode('shippingMethodId')
     async setOrderShippingMethod(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationSetOrderShippingMethodArgs,
@@ -187,29 +185,38 @@ export class ShopOrderResolver {
 
     @Mutation()
     @Allow(Permission.UpdateOrder, Permission.Owner)
-    @Decode('productVariantId')
     async addItemToOrder(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationAddItemToOrderArgs,
     ): Promise<Order> {
         const order = await this.getOrderFromContext(ctx, true);
-        return this.orderService.addItemToOrder(ctx, order.id, args.productVariantId, args.quantity, (args as any).customFields);
+        return this.orderService.addItemToOrder(
+            ctx,
+            order.id,
+            args.productVariantId,
+            args.quantity,
+            (args as any).customFields,
+        );
     }
 
     @Mutation()
     @Allow(Permission.UpdateOrder, Permission.Owner)
-    @Decode('orderLineId')
     async adjustOrderLine(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationAdjustOrderLineArgs,
     ): Promise<Order> {
         const order = await this.getOrderFromContext(ctx, true);
-        return this.orderService.adjustOrderLine(ctx, order.id, args.orderLineId, args.quantity, (args as any).customFields);
+        return this.orderService.adjustOrderLine(
+            ctx,
+            order.id,
+            args.orderLineId,
+            args.quantity,
+            (args as any).customFields,
+        );
     }
 
     @Mutation()
     @Allow(Permission.UpdateOrder, Permission.Owner)
-    @Decode('orderLineId')
     async removeOrderLine(
         @Ctx() ctx: RequestContext,
         @Args() args: MutationRemoveOrderLineArgs,
@@ -227,7 +234,10 @@ export class ShopOrderResolver {
                 const order = await this.orderService.addPaymentToOrder(ctx, sessionOrder.id, args.input);
                 if (order.active === false) {
                     if (order.customer) {
-                        const addresses = await this.customerService.findAddressesByCustomerId(ctx, order.customer.id);
+                        const addresses = await this.customerService.findAddressesByCustomerId(
+                            ctx,
+                            order.customer.id,
+                        );
                         // If the Customer has no addresses yet, use the shipping address data
                         // to populate the initial default Address.
                         if (addresses.length === 0) {

+ 7 - 4
packages/core/src/plugin/default-search-plugin/fulltext-search.resolver.ts

@@ -1,8 +1,13 @@
 import { Args, Mutation, Parent, Query, ResolveProperty, Resolver } from '@nestjs/graphql';
-import { JobInfo, Permission, QuerySearchArgs, SearchInput, SearchResponse } from '@vendure/common/lib/generated-types';
+import {
+    JobInfo,
+    Permission,
+    QuerySearchArgs,
+    SearchInput,
+    SearchResponse,
+} from '@vendure/common/lib/generated-types';
 import { Omit } from '@vendure/common/lib/omit';
 
-import { Decode } from '../../api';
 import { RequestContext } from '../../api/common/request-context';
 import { Allow } from '../../api/decorators/allow.decorator';
 import { Ctx } from '../../api/decorators/request-context.decorator';
@@ -17,7 +22,6 @@ export class ShopFulltextSearchResolver implements Omit<BaseSearchResolver, 'rei
 
     @Query()
     @Allow(Permission.Public)
-    @Decode('facetValueIds', 'collectionId')
     async search(
         @Ctx() ctx: RequestContext,
         @Args() args: QuerySearchArgs,
@@ -44,7 +48,6 @@ export class AdminFulltextSearchResolver implements BaseSearchResolver {
 
     @Query()
     @Allow(Permission.ReadCatalog)
-    @Decode('facetValueIds', 'collectionId')
     async search(
         @Ctx() ctx: RequestContext,
         @Args() args: QuerySearchArgs,