diff --git a/integration-tests/api/__tests__/batch-jobs/product/export.js b/integration-tests/api/__tests__/batch-jobs/product/export.js index 0fbc33b4b8..16c4deef58 100644 --- a/integration-tests/api/__tests__/batch-jobs/product/export.js +++ b/integration-tests/api/__tests__/batch-jobs/product/export.js @@ -133,6 +133,9 @@ describe("Batch job of product-export type", () => { expect(isFileExists).toBeTruthy() + const fileSize = (await fs.stat(exportFilePath)).size + expect(batchJob.result?.file_size).toBe(fileSize) + const data = (await fs.readFile(exportFilePath)).toString() const [, ...lines] = data.split("\r\n").filter(l => l) diff --git a/packages/medusa/src/models/batch-job.ts b/packages/medusa/src/models/batch-job.ts index 096126faee..ad5f286a54 100644 --- a/packages/medusa/src/models/batch-job.ts +++ b/packages/medusa/src/models/batch-job.ts @@ -29,6 +29,7 @@ export class BatchJob extends SoftDeletableEntity { errors?: BatchJobResultError[] stat_descriptors?: BatchJobResultStatDescriptor[] file_key?: string + file_size?: number } & Record @Column({ type: "boolean", nullable: false, default: false }) diff --git a/packages/medusa/src/strategies/batch-jobs/product/export.ts b/packages/medusa/src/strategies/batch-jobs/product/export.ts index f390ce5f0e..d197580eab 100644 --- a/packages/medusa/src/strategies/batch-jobs/product/export.ts +++ b/packages/medusa/src/strategies/batch-jobs/product/export.ts @@ -220,6 +220,7 @@ export default class ProductExportStrategy extends AbstractBatchJobStrategy< let limit = this.DEFAULT_LIMIT let advancementCount = 0 let productCount = 0 + let approximateFileSize = 0 return await this.atomicPhase_( async (transactionManager) => { @@ -235,6 +236,8 @@ export default class ProductExportStrategy extends AbstractBatchJobStrategy< }) const header = await this.buildHeader(batchJob) + + approximateFileSize += Buffer.from(header).byteLength writeStream.write(header) advancementCount = @@ -267,7 +270,10 @@ export default class ProductExportStrategy extends AbstractBatchJobStrategy< products.forEach((product: Product) => { const lines = this.buildProductVariantLines(product) - lines.forEach((line) => writeStream.write(line)) + lines.forEach((line) => { + approximateFileSize += Buffer.from(line).byteLength + writeStream.write(line) + }) }) advancementCount += products.length @@ -279,6 +285,7 @@ export default class ProductExportStrategy extends AbstractBatchJobStrategy< .update(batchJobId, { result: { file_key: fileKey, + file_size: approximateFileSize, count: productCount, advancement_count: advancementCount, progress: advancementCount / productCount,