hydration-test-plugin.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /* tslint:disable:no-non-null-assertion */
  2. import { Args, Query, Resolver } from '@nestjs/graphql';
  3. import {
  4. Ctx,
  5. EntityHydrator,
  6. ID,
  7. OrderService,
  8. PluginCommonModule,
  9. Product,
  10. ProductVariantService,
  11. RequestContext,
  12. TransactionalConnection,
  13. VendurePlugin,
  14. } from '@vendure/core';
  15. import gql from 'graphql-tag';
  16. @Resolver()
  17. export class TestAdminPluginResolver {
  18. constructor(
  19. private connection: TransactionalConnection,
  20. private orderService: OrderService,
  21. private productVariantService: ProductVariantService,
  22. private entityHydrator: EntityHydrator,
  23. ) {}
  24. @Query()
  25. async hydrateProduct(@Ctx() ctx: RequestContext, @Args() args: { id: ID }) {
  26. const product = await this.connection.getRepository(ctx, Product).findOne(args.id, {
  27. relations: ['facetValues'],
  28. });
  29. // tslint:disable-next-line:no-non-null-assertion
  30. await this.entityHydrator.hydrate(ctx, product!, {
  31. relations: [
  32. 'variants.options',
  33. 'variants.product',
  34. 'assets.product',
  35. 'facetValues.facet',
  36. 'featuredAsset',
  37. 'variants.stockMovements',
  38. ],
  39. applyProductVariantPrices: true,
  40. });
  41. return product;
  42. }
  43. // Test case for https://github.com/vendure-ecommerce/vendure/issues/1153
  44. @Query()
  45. async hydrateProductAsset(@Ctx() ctx: RequestContext, @Args() args: { id: ID }) {
  46. const product = await this.connection.getRepository(ctx, Product).findOne(args.id);
  47. // tslint:disable-next-line:no-non-null-assertion
  48. await this.entityHydrator.hydrate(ctx, product!, {
  49. relations: ['assets'],
  50. });
  51. return product;
  52. }
  53. // Test case for https://github.com/vendure-ecommerce/vendure/issues/1161
  54. @Query()
  55. async hydrateProductVariant(@Ctx() ctx: RequestContext, @Args() args: { id: ID }) {
  56. const [variant] = await this.productVariantService.findByIds(ctx, [args.id]);
  57. await this.entityHydrator.hydrate(ctx, variant, {
  58. relations: ['product.facetValues.facet'],
  59. });
  60. return variant;
  61. }
  62. // Test case for https://github.com/vendure-ecommerce/vendure/issues/1172
  63. @Query()
  64. async hydrateOrder(@Ctx() ctx: RequestContext, @Args() args: { id: ID }) {
  65. const order = await this.orderService.findOne(ctx, args.id);
  66. await this.entityHydrator.hydrate(ctx, order!, {
  67. relations: ['payments'],
  68. });
  69. return order;
  70. }
  71. // Test case for https://github.com/vendure-ecommerce/vendure/issues/1229
  72. @Query()
  73. async hydrateOrderReturnQuantities(@Ctx() ctx: RequestContext, @Args() args: { id: ID }) {
  74. const order = await this.orderService.findOne(ctx, args.id);
  75. await this.entityHydrator.hydrate(ctx, order!, {
  76. relations: [
  77. 'lines',
  78. 'lines.productVariant',
  79. 'lines.productVariant.product',
  80. 'lines.productVariant.product.assets',
  81. ],
  82. });
  83. return order?.lines.map(line => line.quantity);
  84. }
  85. }
  86. @VendurePlugin({
  87. imports: [PluginCommonModule],
  88. adminApiExtensions: {
  89. resolvers: [TestAdminPluginResolver],
  90. schema: gql`
  91. extend type Query {
  92. hydrateProduct(id: ID!): JSON
  93. hydrateProductAsset(id: ID!): JSON
  94. hydrateProductVariant(id: ID!): JSON
  95. hydrateOrder(id: ID!): JSON
  96. hydrateOrderReturnQuantities(id: ID!): JSON
  97. }
  98. `,
  99. },
  100. })
  101. export class HydrationTestPlugin {}