hydration-test-plugin.ts 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. }
  72. @VendurePlugin({
  73. imports: [PluginCommonModule],
  74. adminApiExtensions: {
  75. resolvers: [TestAdminPluginResolver],
  76. schema: gql`
  77. extend type Query {
  78. hydrateProduct(id: ID!): JSON
  79. hydrateProductAsset(id: ID!): JSON
  80. hydrateProductVariant(id: ID!): JSON
  81. hydrateOrder(id: ID!): JSON
  82. }
  83. `,
  84. },
  85. })
  86. export class HydrationTestPlugin {}