From 0bfdd3812d029e1d6dd2a02feedd35a07e6d55f3 Mon Sep 17 00:00:00 2001 From: Ly Tuan Kiet Date: Wed, 27 Nov 2024 07:50:51 +0700 Subject: [PATCH] Enhance DocumentSchema and MinioService for improved error handling and functionality. Update page index validation to check for undefined or null values. Introduce total page count retrieval in DocumentSchema and adjust senderId handling. Refactor MinioService to correctly read and parse document pages, ensuring robust object management. This update improves clarity and reliability in document synchronization processes. --- src/Document/document.schema.ts | 11 ++++++----- src/Minio/minio.service.ts | 21 ++++++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/Document/document.schema.ts b/src/Document/document.schema.ts index f24e489..4e883a0 100644 --- a/src/Document/document.schema.ts +++ b/src/Document/document.schema.ts @@ -159,14 +159,16 @@ export class DocumentSchema extends PothosSchema { if (ctx.isSubscription) throw new Error('Not allowed') if (!ctx.http?.me?.id) throw new Error('User not found') if (!args.documentId) throw new Error('Document id not found') - if (!args.pageIndex) throw new Error('Page index not found') + if (args.pageIndex === undefined || args.pageIndex === null) throw new Error('Page index not found') const delta = await this.minio.getDocumentPage(args.documentId, args.pageIndex) if (!delta) throw new Error('Delta not found') + const totalPage = await this.minio.countDocumentPages(args.documentId) return { documentId: args.documentId, pageIndex: args.pageIndex, delta, - senderId: 'server', + totalPage, + senderId: ctx.http?.me?.id, eventType: DocumentEvent.CLIENT_REQUEST_SYNC, } }, @@ -265,8 +267,7 @@ export class DocumentSchema extends PothosSchema { const senderId = ctx.http?.me?.id if (!args.data.documentId) throw new Error('Document id not found') if (!senderId) throw new Error('User not found') - if (!args.data.pageIndex) throw new Error('Page index not found') - + if (args.data.pageIndex === undefined || args.data.pageIndex === null) throw new Error('Page index not found') // save delta to minio const delta = args.data.delta if (!delta) throw new Error('Delta not found') @@ -275,7 +276,7 @@ export class DocumentSchema extends PothosSchema { return { ...args.data, totalPage, - senderId, + senderId: 'server', eventType: DocumentEvent.SERVER_REQUEST_SYNC, } }, diff --git a/src/Minio/minio.service.ts b/src/Minio/minio.service.ts index 19fab96..de9d80b 100644 --- a/src/Minio/minio.service.ts +++ b/src/Minio/minio.service.ts @@ -94,20 +94,27 @@ export class MinioService { ) } async getDocumentPage(id: string, page: number) { - const delta = (await this.minioClient.getObject( + const delta = await this.minioClient.getObject( this.configService.get('BUCKET_NAME') ?? 'epess', `documents/${id}/${page}`, - )) as unknown as Delta - return delta + ) + const buffer = await delta.read() + return JSON.parse(buffer.toString()) } async countDocumentPages(id: string): Promise { return new Promise((resolve, reject) => { - const stream = this.minioClient.listObjects(this.configService.get('BUCKET_NAME') ?? 'epess', `documents/${id}`) + const stream = this.minioClient.listObjects(this.configService.get('BUCKET_NAME') ?? 'epess', `documents/${id}/`) const items: BucketItem[] = [] - stream.on('data', (item) => items.push(item)) - stream.on('end', () => resolve(items.length)) - stream.on('error', (err) => reject(err)) + stream.on('data', (item) => { + items.push(item) + }) + stream.on('end', () => { + resolve(items.length) + }) + stream.on('error', (err) => { + reject(err) + }) }) } // export document to docx format by get all pages and convert to docx