collection-entity.resolver.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { Args, Parent, ResolveProperty, Resolver } from '@nestjs/graphql';
  2. import { CollectionBreadcrumb, ProductVariantListOptions } from '@vendure/common/lib/generated-types';
  3. import { PaginatedList } from '@vendure/common/lib/shared-types';
  4. import { ListQueryOptions } from '../../../common/types/common-types';
  5. import { Translated } from '../../../common/types/locale-types';
  6. import { Asset, Collection, Product, ProductVariant } from '../../../entity';
  7. import { AssetService } from '../../../service/services/asset.service';
  8. import { CollectionService } from '../../../service/services/collection.service';
  9. import { ProductVariantService } from '../../../service/services/product-variant.service';
  10. import { ApiType } from '../../common/get-api-type';
  11. import { RequestContext } from '../../common/request-context';
  12. import { Api } from '../../decorators/api.decorator';
  13. import { Ctx } from '../../decorators/request-context.decorator';
  14. @Resolver('Collection')
  15. export class CollectionEntityResolver {
  16. constructor(
  17. private productVariantService: ProductVariantService,
  18. private collectionService: CollectionService,
  19. private assetService: AssetService,
  20. ) {}
  21. @ResolveProperty()
  22. async productVariants(
  23. @Ctx() ctx: RequestContext,
  24. @Parent() collection: Collection,
  25. @Args() args: { options: ProductVariantListOptions },
  26. @Api() apiType: ApiType,
  27. ): Promise<PaginatedList<Translated<ProductVariant>>> {
  28. let options: ListQueryOptions<Product> = args.options;
  29. if (apiType === 'shop') {
  30. options = {
  31. ...args.options,
  32. filter: {
  33. ...(args.options ? args.options.filter : {}),
  34. enabled: { eq: true },
  35. },
  36. };
  37. }
  38. return this.productVariantService.getVariantsByCollectionId(ctx, collection.id, options);
  39. }
  40. @ResolveProperty()
  41. async breadcrumbs(
  42. @Ctx() ctx: RequestContext,
  43. @Parent() collection: Collection,
  44. ): Promise<CollectionBreadcrumb[]> {
  45. return this.collectionService.getBreadcrumbs(ctx, collection) as any;
  46. }
  47. @ResolveProperty()
  48. async parent(@Ctx() ctx: RequestContext, @Parent() collection: Collection): Promise<Collection> {
  49. if (collection.parent) {
  50. return collection.parent;
  51. }
  52. return this.collectionService.getParent(ctx, collection.id) as any;
  53. }
  54. @ResolveProperty()
  55. async children(@Ctx() ctx: RequestContext, @Parent() collection: Collection): Promise<Collection[]> {
  56. if (collection.children) {
  57. return collection.children;
  58. }
  59. return this.collectionService.getChildren(ctx, collection.id) as any;
  60. }
  61. @ResolveProperty()
  62. async featuredAsset(@Ctx() ctx: RequestContext, @Parent() collection: Collection): Promise<Asset | undefined> {
  63. if (collection.featuredAsset) {
  64. return collection.featuredAsset;
  65. }
  66. return this.assetService.getFeaturedAsset(collection);
  67. }
  68. }