entity-hydrate-plugin.ts 1.6 KB

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