diff --git a/packages/backend/server/src/core/doc-renderer/event.ts b/packages/backend/server/src/core/doc-renderer/event.ts new file mode 100644 index 000000000..778b104f9 --- /dev/null +++ b/packages/backend/server/src/core/doc-renderer/event.ts @@ -0,0 +1,27 @@ +import { FactoryProvider } from '@nestjs/common'; + +import { Config, OnEvent } from '../../base'; +import { DocContentService } from './service'; + +class DocEventsListener { + constructor(private readonly doc: DocContentService) {} + + @OnEvent('doc.snapshot.updated') + async handleDocSnapshotUpdated({ + workspaceId, + docId, + }: Events['doc.snapshot.updated']) { + await this.doc.markDocContentCacheStale(workspaceId, docId); + } +} + +export const DocEventsListenerProvider: FactoryProvider = { + provide: DocEventsListener, + useFactory: (config: Config, doc: DocContentService) => { + if (config.flavor.renderer) { + return new DocEventsListener(doc); + } + return; + }, + inject: [Config, DocContentService], +}; diff --git a/packages/backend/server/src/core/doc-renderer/index.ts b/packages/backend/server/src/core/doc-renderer/index.ts index 51a83913a..de7c3f570 100644 --- a/packages/backend/server/src/core/doc-renderer/index.ts +++ b/packages/backend/server/src/core/doc-renderer/index.ts @@ -3,11 +3,12 @@ import { Module } from '@nestjs/common'; import { DocStorageModule } from '../doc'; import { PermissionModule } from '../permission'; import { DocRendererController } from './controller'; +import { DocEventsListenerProvider } from './event'; import { DocContentService } from './service'; @Module({ imports: [DocStorageModule, PermissionModule], - providers: [DocContentService], + providers: [DocContentService, DocEventsListenerProvider], controllers: [DocRendererController], exports: [DocContentService], }) diff --git a/packages/backend/server/src/core/doc-renderer/service.ts b/packages/backend/server/src/core/doc-renderer/service.ts index a44bb7f03..842b4d359 100644 --- a/packages/backend/server/src/core/doc-renderer/service.ts +++ b/packages/backend/server/src/core/doc-renderer/service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { applyUpdate, Doc } from 'yjs'; -import { Cache, OnEvent } from '../../base'; +import { Cache } from '../../base'; import { DocReader } from '../doc'; import { type PageDocContent, @@ -78,11 +78,7 @@ export class DocContentService { return content; } - @OnEvent('doc.snapshot.updated') - async markDocContentCacheStale({ - workspaceId, - docId, - }: Events['doc.snapshot.updated']) { + async markDocContentCacheStale(workspaceId: string, docId: string) { const key = workspaceId === docId ? `workspace:${workspaceId}:content`