| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import { Args, Mutation, Query, ResolveProperty, Resolver } from '@nestjs/graphql';
- import {
- CreateProductOptionGroupMutationArgs,
- Permission,
- ProductOptionGroupQueryArgs,
- ProductOptionGroupsQueryArgs,
- UpdateProductOptionGroupMutationArgs,
- } from 'shared/generated-types';
- import { Translated } from '../../common/types/locale-types';
- import { ProductOptionGroup } from '../../entity/product-option-group/product-option-group.entity';
- import { ProductOption } from '../../entity/product-option/product-option.entity';
- import { ProductOptionGroupService } from '../../service/providers/product-option-group.service';
- import { ProductOptionService } from '../../service/providers/product-option.service';
- import { Allow } from '../common/auth-guard';
- import { RequestContext } from '../common/request-context';
- import { Ctx } from '../common/request-context.decorator';
- @Resolver('ProductOptionGroup')
- export class ProductOptionResolver {
- constructor(
- private productOptionGroupService: ProductOptionGroupService,
- private productOptionService: ProductOptionService,
- ) {}
- @Query()
- @Allow(Permission.ReadCatalog)
- productOptionGroups(
- @Ctx() ctx: RequestContext,
- @Args() args: ProductOptionGroupsQueryArgs,
- ): Promise<Array<Translated<ProductOptionGroup>>> {
- return this.productOptionGroupService.findAll(ctx.languageCode, args.filterTerm || undefined);
- }
- @Query()
- @Allow(Permission.ReadCatalog)
- productOptionGroup(
- @Ctx() ctx: RequestContext,
- @Args() args: ProductOptionGroupQueryArgs,
- ): Promise<Translated<ProductOptionGroup> | undefined> {
- return this.productOptionGroupService.findOne(args.id, ctx.languageCode);
- }
- @ResolveProperty()
- @Allow(Permission.ReadCatalog)
- async options(optionGroup: Translated<ProductOptionGroup>): Promise<Array<Translated<ProductOption>>> {
- if (optionGroup.options) {
- return Promise.resolve(optionGroup.options);
- }
- const group = await this.productOptionGroupService.findOne(optionGroup.id, optionGroup.languageCode);
- return group ? group.options : [];
- }
- @Mutation()
- @Allow(Permission.CreateCatalog)
- async createProductOptionGroup(
- @Args() args: CreateProductOptionGroupMutationArgs,
- ): Promise<Translated<ProductOptionGroup>> {
- const { input } = args;
- const group = await this.productOptionGroupService.create(args.input);
- if (input.options && input.options.length) {
- for (const option of input.options) {
- const newOption = await this.productOptionService.create(group, option);
- group.options.push(newOption);
- }
- }
- return group;
- }
- @Mutation()
- @Allow(Permission.UpdateCatalog)
- async updateProductOptionGroup(
- @Args() args: UpdateProductOptionGroupMutationArgs,
- ): Promise<Translated<ProductOptionGroup>> {
- const { input } = args;
- return this.productOptionGroupService.update(args.input);
- }
- }
|