entity-hydrate-plugin.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /* eslint-disable @typescript-eslint/no-non-null-assertion */
  2. import { Args, Query, Resolver } from '@nestjs/graphql';
  3. import {
  4. Asset,
  5. Ctx,
  6. EntityHydrator,
  7. ID,
  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. class TestResolver {
  18. constructor(
  19. private productVariantService: ProductVariantService,
  20. private connection: TransactionalConnection,
  21. private entityHydrator: EntityHydrator,
  22. ) {}
  23. @Query()
  24. async hydrateTest(@Ctx() ctx: RequestContext, @Args() args: { id: ID }) {
  25. const product = await this.connection.getRepository(ctx, Product).findOne({
  26. where: { id: args.id },
  27. relations: ['featuredAsset'],
  28. });
  29. await this.entityHydrator.hydrate(ctx, product!, {
  30. relations: ['facetValues.facet', 'customFields.thumb'],
  31. });
  32. return product;
  33. }
  34. }
  35. // A plugin to explore solutions to https://github.com/vendurehq/vendure/issues/1103
  36. @VendurePlugin({
  37. imports: [PluginCommonModule],
  38. adminApiExtensions: {
  39. schema: gql`
  40. extend type Query {
  41. hydrateTest(id: ID!): JSON
  42. }
  43. `,
  44. resolvers: [TestResolver],
  45. },
  46. configuration: config => {
  47. config.customFields.Product.push({
  48. name: 'thumb',
  49. type: 'relation',
  50. entity: Asset,
  51. });
  52. return config;
  53. },
  54. })
  55. export class EntityHydratePlugin {}