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