| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
- import {
- AddOptionGroupToProductMutationArgs,
- CreateProductMutationArgs,
- DeleteProductMutationArgs,
- DeletionResponse,
- GenerateVariantsForProductMutationArgs,
- Permission,
- ProductQueryArgs,
- ProductsQueryArgs,
- RemoveOptionGroupFromProductMutationArgs,
- UpdateProductMutationArgs,
- UpdateProductVariantsMutationArgs,
- } from '../../../../../shared/generated-types';
- import { PaginatedList } from '../../../../../shared/shared-types';
- import { Translated } from '../../../common/types/locale-types';
- import { assertFound } from '../../../common/utils';
- import { ProductVariant } from '../../../entity/product-variant/product-variant.entity';
- import { Product } from '../../../entity/product/product.entity';
- import { FacetValueService } from '../../../service/services/facet-value.service';
- import { ProductVariantService } from '../../../service/services/product-variant.service';
- 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()
- export class ProductResolver {
- constructor(
- private productService: ProductService,
- private productVariantService: ProductVariantService,
- private facetValueService: FacetValueService,
- ) {}
- @Query()
- @Allow(Permission.ReadCatalog)
- async products(
- @Ctx() ctx: RequestContext,
- @Args() args: ProductsQueryArgs,
- ): Promise<PaginatedList<Translated<Product>>> {
- return this.productService.findAll(ctx, args.options || undefined);
- }
- @Query()
- @Allow(Permission.ReadCatalog)
- async product(
- @Ctx() ctx: RequestContext,
- @Args() args: ProductQueryArgs,
- ): Promise<Translated<Product> | undefined> {
- return this.productService.findOne(ctx, args.id);
- }
- @Mutation()
- @Allow(Permission.CreateCatalog)
- @Decode('assetIds', 'featuredAssetId', 'facetValueIds')
- async createProduct(
- @Ctx() ctx: RequestContext,
- @Args() args: CreateProductMutationArgs,
- ): Promise<Translated<Product>> {
- const { input } = args;
- return this.productService.create(ctx, input);
- }
- @Mutation()
- @Allow(Permission.UpdateCatalog)
- @Decode('assetIds', 'featuredAssetId', 'facetValueIds')
- async updateProduct(
- @Ctx() ctx: RequestContext,
- @Args() args: UpdateProductMutationArgs,
- ): Promise<Translated<Product>> {
- const { input } = args;
- return this.productService.update(ctx, input);
- }
- @Mutation()
- @Allow(Permission.DeleteCatalog)
- async deleteProduct(
- @Ctx() ctx: RequestContext,
- @Args() args: DeleteProductMutationArgs,
- ): Promise<DeletionResponse> {
- return this.productService.softDelete(ctx, args.id);
- }
- @Mutation()
- @Allow(Permission.UpdateCatalog)
- @Decode('productId', 'optionGroupId')
- async addOptionGroupToProduct(
- @Ctx() ctx: RequestContext,
- @Args() args: AddOptionGroupToProductMutationArgs,
- ): Promise<Translated<Product>> {
- const { productId, optionGroupId } = args;
- return this.productService.addOptionGroupToProduct(ctx, productId, optionGroupId);
- }
- @Mutation()
- @Allow(Permission.UpdateCatalog)
- @Decode('productId', 'optionGroupId')
- async removeOptionGroupFromProduct(
- @Ctx() ctx: RequestContext,
- @Args() args: RemoveOptionGroupFromProductMutationArgs,
- ): Promise<Translated<Product>> {
- const { productId, optionGroupId } = args;
- return this.productService.removeOptionGroupFromProduct(ctx, productId, optionGroupId);
- }
- @Mutation()
- @Allow(Permission.CreateCatalog)
- @Decode('productId', 'defaultTaxCategoryId')
- async generateVariantsForProduct(
- @Ctx() ctx: RequestContext,
- @Args() args: GenerateVariantsForProductMutationArgs,
- ): Promise<Translated<Product>> {
- const { productId, defaultTaxCategoryId, defaultPrice, defaultSku } = args;
- await this.productVariantService.generateVariantsForProduct(
- ctx,
- productId,
- defaultTaxCategoryId,
- defaultPrice,
- defaultSku,
- );
- return assertFound(this.productService.findOne(ctx, productId));
- }
- @Mutation()
- @Allow(Permission.UpdateCatalog)
- @Decode('taxCategoryId', 'facetValueIds', 'featuredAssetId', 'assetIds')
- async updateProductVariants(
- @Ctx() ctx: RequestContext,
- @Args() args: UpdateProductVariantsMutationArgs,
- ): Promise<Array<Translated<ProductVariant>>> {
- const { input } = args;
- return Promise.all(input.map(variant => this.productVariantService.update(ctx, variant)));
- }
- }
|