11import { Injectable , Logger } from '@nestjs/common' ;
22import { Job } from 'bullmq' ;
3+ import { InjectRepository } from '@nestjs/typeorm' ;
4+ import { Repository } from 'typeorm' ;
35import { DataExportPayload , ReportGeneratePayload , JobResult } from '../job.types' ;
46import { JobLogService } from './job-log.service' ;
7+ import { DataExport , DataExportStatus } from '../../users/entities/data-export.entity' ;
58
69/**
710 * Data Export Processor
@@ -11,7 +14,11 @@ import { JobLogService } from './job-log.service';
1114export class DataExportProcessor {
1215 private readonly logger = new Logger ( DataExportProcessor . name ) ;
1316
14- constructor ( private readonly jobLogService : JobLogService ) { }
17+ constructor (
18+ private readonly jobLogService : JobLogService ,
19+ @InjectRepository ( DataExport )
20+ private readonly dataExportRepo : Repository < DataExport > ,
21+ ) { }
1522
1623 /**
1724 * Process data export job
@@ -52,7 +59,7 @@ export class DataExportProcessor {
5259
5360 // Simulate file generation
5461 const fileName = `export-${ exportType } -${ Date . now ( ) } .${ this . getFileExtension ( format ) } ` ;
55- const downloadUrl = `https://storage.example.com/exports/${ fileName } ` ;
62+ const downloadUrl = `${ process . env . EXPORT_STORAGE_BASE_URL || ' https://storage.example.com/exports' } /${ fileName } ` ;
5663
5764 await job . updateProgress ( 75 ) ;
5865
@@ -75,6 +82,21 @@ export class DataExportProcessor {
7582 duration : Date . now ( ) - job . timestamp ,
7683 } ;
7784
85+ // Update DB record if present
86+ if ( job . data && ( job . data as any ) . exportId ) {
87+ try {
88+ await this . dataExportRepo . update ( ( job . data as any ) . exportId , {
89+ status : DataExportStatus . COMPLETED ,
90+ fileName,
91+ downloadUrl,
92+ recordCount : result . data . recordCount ,
93+ exportedAt : result . data . exportedAt ,
94+ } as any ) ;
95+ } catch ( err ) {
96+ this . logger . error ( 'Failed to update data export record' , err ?. stack || err ) ;
97+ }
98+ }
99+
78100 this . logger . log ( `Data export completed: ${ fileName } ` ) ;
79101 return result ;
80102 } catch ( error ) {
@@ -83,6 +105,17 @@ export class DataExportProcessor {
83105 error . stack ,
84106 ) ;
85107
108+ // mark DB record as failed if exportId provided
109+ if ( ( job . data as any ) ?. exportId ) {
110+ try {
111+ await this . dataExportRepo . update ( ( job . data as any ) . exportId , {
112+ status : DataExportStatus . FAILED ,
113+ } as any ) ;
114+ } catch ( err ) {
115+ this . logger . error ( 'Failed to mark export record failed' , err ?. stack || err ) ;
116+ }
117+ }
118+
86119 throw error ;
87120 }
88121 }
0 commit comments