Skip to content

Commit 41c2ab7

Browse files
committed
feat: add a convert records map to make records transferrable
1 parent eb9214d commit 41c2ab7

1 file changed

Lines changed: 30 additions & 25 deletions

File tree

apps/api/src/instrument-records/instrument-records.service.ts

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@ import { SubjectsService } from '@/subjects/subjects.service';
3737
import { InstrumentMeasuresService } from './instrument-measures.service';
3838

3939
import 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

4341
type 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

Comments
 (0)