product-option.resolver.ts 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { Args, Mutation, Query, ResolveProperty, Resolver } from '@nestjs/graphql';
  2. import {
  3. CreateProductOptionGroupMutationArgs,
  4. Permission,
  5. ProductOptionGroupQueryArgs,
  6. ProductOptionGroupsQueryArgs,
  7. UpdateProductOptionGroupMutationArgs,
  8. } from 'shared/generated-types';
  9. import { Translated } from '../../common/types/locale-types';
  10. import { ProductOptionGroup } from '../../entity/product-option-group/product-option-group.entity';
  11. import { ProductOption } from '../../entity/product-option/product-option.entity';
  12. import { ProductOptionGroupService } from '../../service/providers/product-option-group.service';
  13. import { ProductOptionService } from '../../service/providers/product-option.service';
  14. import { Allow } from '../common/auth-guard';
  15. import { RequestContext } from '../common/request-context';
  16. import { Ctx } from '../common/request-context.decorator';
  17. @Resolver('ProductOptionGroup')
  18. export class ProductOptionResolver {
  19. constructor(
  20. private productOptionGroupService: ProductOptionGroupService,
  21. private productOptionService: ProductOptionService,
  22. ) {}
  23. @Query()
  24. @Allow(Permission.ReadCatalog)
  25. productOptionGroups(
  26. @Ctx() ctx: RequestContext,
  27. @Args() args: ProductOptionGroupsQueryArgs,
  28. ): Promise<Array<Translated<ProductOptionGroup>>> {
  29. return this.productOptionGroupService.findAll(ctx.languageCode, args.filterTerm || undefined);
  30. }
  31. @Query()
  32. @Allow(Permission.ReadCatalog)
  33. productOptionGroup(
  34. @Ctx() ctx: RequestContext,
  35. @Args() args: ProductOptionGroupQueryArgs,
  36. ): Promise<Translated<ProductOptionGroup> | undefined> {
  37. return this.productOptionGroupService.findOne(args.id, ctx.languageCode);
  38. }
  39. @ResolveProperty()
  40. @Allow(Permission.ReadCatalog)
  41. async options(optionGroup: Translated<ProductOptionGroup>): Promise<Array<Translated<ProductOption>>> {
  42. if (optionGroup.options) {
  43. return Promise.resolve(optionGroup.options);
  44. }
  45. const group = await this.productOptionGroupService.findOne(optionGroup.id, optionGroup.languageCode);
  46. return group ? group.options : [];
  47. }
  48. @Mutation()
  49. @Allow(Permission.CreateCatalog)
  50. async createProductOptionGroup(
  51. @Args() args: CreateProductOptionGroupMutationArgs,
  52. ): Promise<Translated<ProductOptionGroup>> {
  53. const { input } = args;
  54. const group = await this.productOptionGroupService.create(args.input);
  55. if (input.options && input.options.length) {
  56. for (const option of input.options) {
  57. const newOption = await this.productOptionService.create(group, option);
  58. group.options.push(newOption);
  59. }
  60. }
  61. return group;
  62. }
  63. @Mutation()
  64. @Allow(Permission.UpdateCatalog)
  65. async updateProductOptionGroup(
  66. @Args() args: UpdateProductOptionGroupMutationArgs,
  67. ): Promise<Translated<ProductOptionGroup>> {
  68. const { input } = args;
  69. return this.productOptionGroupService.update(args.input);
  70. }
  71. }