From 4defb38ff5fc521ce7a90781fd3cc83efb349ccf Mon Sep 17 00:00:00 2001 From: Alexander Onnikov Date: Thu, 4 Jan 2024 19:35:45 +0700 Subject: [PATCH] UBERF-4831 Fix duplicate issue descriptions (#4305) Signed-off-by: Alexander Onnikov --- server/collaborator/src/extensions/storage.ts | 10 +++++++++- server/collaborator/src/storage/adapter.ts | 3 +-- server/collaborator/src/storage/minio.ts | 3 +-- server/collaborator/src/storage/mongodb.ts | 3 +-- server/collaborator/src/storage/platform.ts | 3 +-- server/collaborator/src/storage/router.ts | 3 +-- 6 files changed, 14 insertions(+), 11 deletions(-) diff --git a/server/collaborator/src/extensions/storage.ts b/server/collaborator/src/extensions/storage.ts index 9d6c542921..f756411d4a 100644 --- a/server/collaborator/src/extensions/storage.ts +++ b/server/collaborator/src/extensions/storage.ts @@ -102,7 +102,15 @@ export class StorageExtension implements Extension { if (initialContentId !== undefined && initialContentId.length > 0) { console.log('load document initial content', initialContentId) try { - return await adapter.loadDocument(initialContentId, context) + const ydoc = await adapter.loadDocument(initialContentId, context) + + // if document was loaded from the initial content we need to save + // it to ensure the next time we load ydoc document + if (ydoc !== undefined) { + await adapter.saveDocument(documentId, ydoc, context) + } + + return ydoc } catch (err) { console.error('failed to load document', initialContentId, err) } diff --git a/server/collaborator/src/storage/adapter.ts b/server/collaborator/src/storage/adapter.ts index 1de5433aec..a3bf7d0f1c 100644 --- a/server/collaborator/src/storage/adapter.ts +++ b/server/collaborator/src/storage/adapter.ts @@ -13,13 +13,12 @@ // limitations under the License. // -import { Document } from '@hocuspocus/server' import { Doc as YDoc } from 'yjs' import { Context } from '../context' export interface StorageAdapter { loadDocument: (documentId: string, context: Context) => Promise - saveDocument: (documentId: string, document: Document, context: Context) => Promise + saveDocument: (documentId: string, document: YDoc, context: Context) => Promise } export type StorageAdapters = Record diff --git a/server/collaborator/src/storage/minio.ts b/server/collaborator/src/storage/minio.ts index 31e80f67f1..dea37337df 100644 --- a/server/collaborator/src/storage/minio.ts +++ b/server/collaborator/src/storage/minio.ts @@ -16,7 +16,6 @@ import attachment, { Attachment } from '@hcengineering/attachment' import { MeasureContext, Ref } from '@hcengineering/core' import { MinioService } from '@hcengineering/minio' -import { Document } from '@hocuspocus/server' import { Doc as YDoc, applyUpdate, encodeStateAsUpdate } from 'yjs' import { Context } from '../context' @@ -69,7 +68,7 @@ export class MinioStorageAdapter implements StorageAdapter { }) } - async saveDocument (documentId: string, document: Document, context: Context): Promise { + async saveDocument (documentId: string, document: YDoc, context: Context): Promise { const { decodedToken, token } = context await this.ctx.with('save-document', {}, async (ctx) => { diff --git a/server/collaborator/src/storage/mongodb.ts b/server/collaborator/src/storage/mongodb.ts index 7b4b7aadb5..e2fa8ff9f0 100644 --- a/server/collaborator/src/storage/mongodb.ts +++ b/server/collaborator/src/storage/mongodb.ts @@ -14,7 +14,6 @@ // import { MeasureContext, toWorkspaceString } from '@hcengineering/core' -import { Document } from '@hocuspocus/server' import { Transformer } from '@hocuspocus/transformer' import { MongoClient } from 'mongodb' import { Doc as YDoc } from 'yjs' @@ -72,7 +71,7 @@ export class MongodbStorageAdapter implements StorageAdapter { }) } - async saveDocument (_documentId: string, _document: Document, _context: Context): Promise { + async saveDocument (_documentId: string, _document: YDoc, _context: Context): Promise { // do nothing, not supported } } diff --git a/server/collaborator/src/storage/platform.ts b/server/collaborator/src/storage/platform.ts index d01c60a743..da2107d5ea 100644 --- a/server/collaborator/src/storage/platform.ts +++ b/server/collaborator/src/storage/platform.ts @@ -14,7 +14,6 @@ // import { Class, Doc, MeasureContext, Ref } from '@hcengineering/core' -import { Document } from '@hocuspocus/server' import { Transformer } from '@hocuspocus/transformer' import { Doc as YDoc } from 'yjs' @@ -82,7 +81,7 @@ export class PlatformStorageAdapter implements StorageAdapter { }) } - async saveDocument (documentId: string, document: Document, context: Context): Promise { + async saveDocument (documentId: string, document: YDoc, context: Context): Promise { const { decodedToken, token } = context const { objectId, objectClass, objectAttr } = parseDocumentId(documentId) diff --git a/server/collaborator/src/storage/router.ts b/server/collaborator/src/storage/router.ts index 9a4dc5d8ad..4268557601 100644 --- a/server/collaborator/src/storage/router.ts +++ b/server/collaborator/src/storage/router.ts @@ -13,7 +13,6 @@ // limitations under the License. // -import { Document } from '@hocuspocus/server' import { Doc as YDoc } from 'yjs' import { Context } from '../context' @@ -45,7 +44,7 @@ export class RouterStorageAdapter implements StorageAdapter { return await adapter?.loadDocument?.(documentName, context) } - async saveDocument (documentId: string, document: Document, context: Context): Promise { + async saveDocument (documentId: string, document: YDoc, context: Context): Promise { const { schema, documentName } = parseDocumentName(documentId) const adapter = this.getStorageAdapter(schema) await adapter?.saveDocument?.(documentName, document, context)