@@ -37,8 +37,6 @@ import { SubjectsService } from '@/subjects/subjects.service';
3737import { InstrumentMeasuresService } from './instrument-measures.service' ;
3838
3939import type { ChunkCompleteData , ChunkCompleteMessage , InitData , InitMessage , ParentMessage } from './thread-types' ;
40- import { DEFAULT_GROUP_NAME } from '@opendatacapture/schemas/core' ;
41- import { removeSubjectIdScope } from '@opendatacapture/subject-utils' ;
4240
4341type ExpandDataType =
4442 | {
@@ -246,13 +244,39 @@ export class InstrumentRecordsService {
246244
247245 // return results.flat();
248246
247+ const convertRecords = records . map ( ( record ) => {
248+ return {
249+ computedMeasures : record . computedMeasures ,
250+ date : record . date . toISOString ( ) ,
251+ id : record . id ,
252+ instrumentId : record . instrumentId ,
253+ session : {
254+ date : record . session . date . toISOString ( ) ,
255+ id : record . session . id ,
256+ type : record . session . type ,
257+ user : {
258+ username : record . session . user ?. username
259+ }
260+ } ,
261+ subject : {
262+ age : record . subject . dateOfBirth ? yearsPassed ( record . subject . dateOfBirth ) : null ,
263+ groupIds : record . subject . groupIds ,
264+ id : record . subject . id ,
265+ sex : record . subject . sex
266+ }
267+ } ;
268+ } ) ;
269+
249270 const numWorkers = 1 ;
250271 // Math.min(cpus().length, Math.ceil(records.length / 100)); // Use up to CPU count, chunk size 100
251- const chunkSize = Math . ceil ( records . length / numWorkers ) ;
272+
273+ const chunkSize = Math . ceil ( convertRecords . length / numWorkers ) ;
252274 const chunks = [ ] ;
253- for ( let i = 0 ; i < records . length ; i += chunkSize ) {
254- chunks . push ( records . slice ( i , i + chunkSize ) ) ;
275+
276+ for ( let i = 0 ; i < convertRecords . length ; i += chunkSize ) {
277+ chunks . push ( convertRecords . slice ( i , i + chunkSize ) ) ;
255278 }
279+
256280 const availableInstrumentArray : InitData = instruments
257281 . values ( )
258282 . toArray ( )
@@ -264,30 +288,11 @@ export class InstrumentRecordsService {
264288 } ;
265289 } ) ;
266290
267- // const initWorkerPromise = new Promise<InitialMessage>((resolve, reject) => {
268- // const initWorker = new Worker(join(__dirname, 'export-worker.ts'));
269-
270- // initWorker.postMessage({ data: availableInstrumentArray, type: 'INIT' });
271-
272- // initWorker.on('message', (message: InitialMessage) => {
273- // if (!message.success) {
274- // reject(new Error('Error in initial thread'));
275- // }
276- // resolve(message);
277- // void initWorker.terminate();
278- // });
279- // });
280-
281- // try {
282- // await initWorkerPromise;
283- // } catch (error) {
284- // console.error('Worker failed:', error);
285- // }
286-
287291 const workerPromises = chunks . map ( ( chunk ) => {
288292 return new Promise < InstrumentRecordsExport > ( ( resolve , reject ) => {
289293 const worker = new Worker ( join ( __dirname , 'export-worker.ts' ) ) ;
290294 worker . postMessage ( { data : availableInstrumentArray , type : 'INIT' } ) ;
295+
291296 worker . on ( 'message' , ( message : InitialMessage ) => {
292297 if ( message . success ) {
293298 worker . postMessage ( { data : chunk , type : 'CHUNK_COMPLETE' } ) ;
0 commit comments