facet.resolver.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { Mutation, Query, Resolver } from '@nestjs/graphql';
  2. import {
  3. CreateFacetValuesVariables,
  4. CreateFacetVariables,
  5. UpdateFacetValuesVariables,
  6. UpdateFacetVariables,
  7. } from 'shared/generated-types';
  8. import { PaginatedList } from 'shared/shared-types';
  9. import { DEFAULT_LANGUAGE_CODE } from '../../common/constants';
  10. import { FacetValue } from '../../entity/facet-value/facet-value.entity';
  11. import { Facet } from '../../entity/facet/facet.entity';
  12. import { I18nError } from '../../i18n/i18n-error';
  13. import { Translated } from '../../locale/locale-types';
  14. import { FacetValueService } from '../../service/facet-value.service';
  15. import { FacetService } from '../../service/facet.service';
  16. import { ApplyIdCodec } from '../common/apply-id-codec-decorator';
  17. @Resolver('Facet')
  18. export class FacetResolver {
  19. constructor(private facetService: FacetService, private facetValueService: FacetValueService) {}
  20. @Query()
  21. @ApplyIdCodec()
  22. facets(obj, args): Promise<PaginatedList<Translated<Facet>>> {
  23. return this.facetService.findAll(args.languageCode, args.options);
  24. }
  25. @Query()
  26. @ApplyIdCodec()
  27. async facet(obj, args): Promise<Translated<Facet> | undefined> {
  28. return this.facetService.findOne(args.id, args.languageCode);
  29. }
  30. @Mutation()
  31. @ApplyIdCodec()
  32. async createFacet(_, args: CreateFacetVariables): Promise<Translated<Facet>> {
  33. const { input } = args;
  34. const facet = await this.facetService.create(args.input);
  35. if (input.values && input.values.length) {
  36. for (const value of input.values) {
  37. const newValue = await this.facetValueService.create(facet, value);
  38. facet.values.push(newValue);
  39. }
  40. }
  41. return facet;
  42. }
  43. @Mutation()
  44. @ApplyIdCodec()
  45. async updateFacet(_, args: UpdateFacetVariables): Promise<Translated<Facet>> {
  46. const { input } = args;
  47. return this.facetService.update(args.input);
  48. }
  49. @Mutation()
  50. @ApplyIdCodec()
  51. async createFacetValues(_, args: CreateFacetValuesVariables): Promise<Array<Translated<FacetValue>>> {
  52. const { input } = args;
  53. const facetId = input[0].facetId;
  54. const facet = await this.facetService.findOne(facetId, DEFAULT_LANGUAGE_CODE);
  55. if (!facet) {
  56. throw new I18nError('error.entity-with-id-not-found', { entityName: 'Facet', id: facetId });
  57. }
  58. return Promise.all(input.map(facetValue => this.facetValueService.create(facet, facetValue)));
  59. }
  60. @Mutation()
  61. @ApplyIdCodec()
  62. async updateFacetValues(_, args: UpdateFacetValuesVariables): Promise<Array<Translated<FacetValue>>> {
  63. const { input } = args;
  64. return Promise.all(input.map(facetValue => this.facetValueService.update(facetValue)));
  65. }
  66. }