default-purge-rules.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /* eslint-disable @typescript-eslint/no-floating-promises */
  2. import {
  3. CollectionEvent,
  4. CollectionModificationEvent,
  5. Logger,
  6. ProductChannelEvent,
  7. ProductEvent,
  8. ProductVariantChannelEvent,
  9. ProductVariantEvent,
  10. StockMovementEvent,
  11. TaxRateEvent,
  12. } from '@vendure/core';
  13. import { loggerCtx } from './constants';
  14. import { PurgeRule } from './purge-rule';
  15. export const purgeProductsOnProductEvent = new PurgeRule({
  16. eventType: ProductEvent,
  17. handler: ({ events, stellateService }) => {
  18. const products = events.map(e => e.product);
  19. stellateService.purgeProducts(products);
  20. stellateService.purgeSearchResults(products);
  21. },
  22. });
  23. export const purgeProductVariantsOnProductVariantEvent = new PurgeRule({
  24. eventType: ProductVariantEvent,
  25. handler: ({ events, stellateService }) => {
  26. const variants = events.map(e => e.variants).flat();
  27. stellateService.purgeProductVariants(variants);
  28. stellateService.purgeSearchResults(variants);
  29. },
  30. });
  31. export const purgeProductsOnChannelEvent = new PurgeRule({
  32. eventType: ProductChannelEvent,
  33. handler: ({ events, stellateService }) => {
  34. const products = events.map(e => e.product);
  35. stellateService.purgeProducts(products);
  36. stellateService.purgeSearchResults(products);
  37. },
  38. });
  39. export const purgeProductVariantsOnChannelEvent = new PurgeRule({
  40. eventType: ProductVariantChannelEvent,
  41. handler: ({ events, stellateService }) => {
  42. const variants = events.map(e => e.productVariant);
  43. stellateService.purgeProductVariants(variants);
  44. stellateService.purgeSearchResults(variants);
  45. },
  46. });
  47. export const purgeProductVariantsOnStockMovementEvent = new PurgeRule({
  48. eventType: StockMovementEvent,
  49. handler: ({ events, stellateService }) => {
  50. const variants = events.map(e => e.stockMovements.map(m => m.productVariant)).flat();
  51. stellateService.purgeProductVariants(variants);
  52. stellateService.purgeSearchResults(variants);
  53. },
  54. });
  55. export const purgeCollectionsOnCollectionModificationEvent = new PurgeRule({
  56. eventType: CollectionModificationEvent,
  57. handler: ({ events, stellateService }) => {
  58. const collectionsToPurge = events.filter(e => e.productVariantIds.length).map(e => e.collection);
  59. Logger.debug(
  60. `purgeCollectionsOnCollectionModificationEvent, collectionsToPurge: ${collectionsToPurge
  61. .map(c => c.id)
  62. .join(', ')}`,
  63. loggerCtx,
  64. );
  65. if (collectionsToPurge.length) {
  66. stellateService.purgeCollections(collectionsToPurge);
  67. stellateService.purgeSearchResponseCacheIdentifiers(collectionsToPurge);
  68. }
  69. },
  70. });
  71. export const purgeCollectionsOnCollectionEvent = new PurgeRule({
  72. eventType: CollectionEvent,
  73. handler: ({ events, stellateService }) => {
  74. const collections = events.map(e => e.entity);
  75. stellateService.purgeCollections(collections);
  76. },
  77. });
  78. export const purgeAllOnTaxRateEvent = new PurgeRule({
  79. eventType: TaxRateEvent,
  80. handler: ({ stellateService }) => {
  81. stellateService.purgeAllOfType('ProductVariant');
  82. stellateService.purgeAllOfType('Product');
  83. stellateService.purgeAllOfType('SearchResponse');
  84. },
  85. });
  86. export const defaultPurgeRules = [
  87. purgeAllOnTaxRateEvent,
  88. purgeCollectionsOnCollectionEvent,
  89. purgeCollectionsOnCollectionModificationEvent,
  90. purgeProductsOnChannelEvent,
  91. purgeProductsOnProductEvent,
  92. purgeProductVariantsOnChannelEvent,
  93. purgeProductVariantsOnProductVariantEvent,
  94. purgeProductVariantsOnStockMovementEvent,
  95. ];