prettier fix
This commit is contained in:
@@ -1,11 +1,19 @@
|
||||
import { SupabaseClient } from '@supabase/supabase-js';
|
||||
|
||||
import { Database } from '@kit/supabase/database';
|
||||
import { toArray } from '@kit/shared/utils';
|
||||
import type { UuringuVastus } from '@kit/shared/types/medipost-analysis';
|
||||
import { toArray } from '@kit/shared/utils';
|
||||
import { Database } from '@kit/supabase/database';
|
||||
|
||||
import type { AnalysisResultsQuery, AnalysisResultDetailsElement, AnalysisResultDetailsMapped, AnalysisResultLevel, AnalysisResultsDetailsElementNested, AnalysisStatus, UserAnalysis } from '../types/analysis-results';
|
||||
import type { AnalysisOrder } from '../types/analysis-orders';
|
||||
import type {
|
||||
AnalysisResultDetailsElement,
|
||||
AnalysisResultDetailsMapped,
|
||||
AnalysisResultLevel,
|
||||
AnalysisResultsDetailsElementNested,
|
||||
AnalysisResultsQuery,
|
||||
AnalysisStatus,
|
||||
UserAnalysis,
|
||||
} from '../types/analysis-results';
|
||||
|
||||
/**
|
||||
* Class representing an API for interacting with user accounts.
|
||||
@@ -13,7 +21,7 @@ import type { AnalysisOrder } from '../types/analysis-orders';
|
||||
* @param {SupabaseClient<Database>} client - The Supabase client instance.
|
||||
*/
|
||||
class UserAnalysesApi {
|
||||
constructor(private readonly client: SupabaseClient<Database>) { }
|
||||
constructor(private readonly client: SupabaseClient<Database>) {}
|
||||
|
||||
async getAnalysisOrder({
|
||||
medusaOrderId,
|
||||
@@ -25,7 +33,7 @@ class UserAnalysesApi {
|
||||
const query = this.client
|
||||
.schema('medreport')
|
||||
.from('analysis_orders')
|
||||
.select('*')
|
||||
.select('*');
|
||||
if (medusaOrderId) {
|
||||
query.eq('medusa_order_id', medusaOrderId);
|
||||
} else if (analysisOrderId) {
|
||||
@@ -36,7 +44,9 @@ class UserAnalysesApi {
|
||||
|
||||
const { data: order, error } = await query.single();
|
||||
if (error) {
|
||||
throw new Error(`Failed to get order by medusaOrderId=${medusaOrderId} or analysisOrderId=${analysisOrderId}, message=${error.message}, data=${JSON.stringify(order)}`);
|
||||
throw new Error(
|
||||
`Failed to get order by medusaOrderId=${medusaOrderId} or analysisOrderId=${analysisOrderId}, message=${error.message}, data=${JSON.stringify(order)}`,
|
||||
);
|
||||
}
|
||||
return order as AnalysisOrder;
|
||||
}
|
||||
@@ -47,28 +57,43 @@ class UserAnalysesApi {
|
||||
const analysisOrder = await this.getAnalysisOrder({ analysisOrderId });
|
||||
const orderedAnalysisElementIds = analysisOrder.analysis_element_ids ?? [];
|
||||
if (orderedAnalysisElementIds.length === 0) {
|
||||
console.error('No ordered analysis element ids found for analysis order id=', analysisOrderId);
|
||||
console.error(
|
||||
'No ordered analysis element ids found for analysis order id=',
|
||||
analysisOrderId,
|
||||
);
|
||||
return null;
|
||||
}
|
||||
const orderedAnalysisElements = await this.getOrderedAnalysisElements({ analysisOrderId, orderedAnalysisElementIds });
|
||||
const orderedAnalysisElements = await this.getOrderedAnalysisElements({
|
||||
analysisOrderId,
|
||||
orderedAnalysisElementIds,
|
||||
});
|
||||
|
||||
const orderedAnalysisElementOriginalIds = orderedAnalysisElements.map(({ analysis_id_original }) => analysis_id_original);
|
||||
const orderedAnalysisElementOriginalIds = orderedAnalysisElements.map(
|
||||
({ analysis_id_original }) => analysis_id_original,
|
||||
);
|
||||
if (orderedAnalysisElementOriginalIds.length === 0) {
|
||||
console.error('No ordered analysis element original ids found for analysis order id=', analysisOrderId);
|
||||
console.error(
|
||||
'No ordered analysis element original ids found for analysis order id=',
|
||||
analysisOrderId,
|
||||
);
|
||||
return null;
|
||||
}
|
||||
|
||||
const responseWithElements = await this.getAnalysisResponseWithElements({ analysisOrderId });
|
||||
const responseWithElements = await this.getAnalysisResponseWithElements({
|
||||
analysisOrderId,
|
||||
});
|
||||
if (!responseWithElements) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const mappedOrderedAnalysisElements = await this.getMappedOrderedAnalysisElements({
|
||||
analysisResponseElements: responseWithElements.elements,
|
||||
orderedAnalysisElements,
|
||||
});
|
||||
const mappedOrderedAnalysisElements =
|
||||
await this.getMappedOrderedAnalysisElements({
|
||||
analysisResponseElements: responseWithElements.elements,
|
||||
orderedAnalysisElements,
|
||||
});
|
||||
|
||||
const feedback = responseWithElements.summary?.doctor_analysis_feedback?.[0];
|
||||
const feedback =
|
||||
responseWithElements.summary?.doctor_analysis_feedback?.[0];
|
||||
return {
|
||||
id: analysisOrderId,
|
||||
order: {
|
||||
@@ -79,7 +104,8 @@ class UserAnalysesApi {
|
||||
orderedAnalysisElements: mappedOrderedAnalysisElements,
|
||||
summary:
|
||||
feedback?.status === 'COMPLETED'
|
||||
? (responseWithElements.summary?.doctor_analysis_feedback?.[0] ?? null)
|
||||
? (responseWithElements.summary?.doctor_analysis_feedback?.[0] ??
|
||||
null)
|
||||
: null,
|
||||
};
|
||||
}
|
||||
@@ -117,13 +143,19 @@ class UserAnalysesApi {
|
||||
analysisOrderId: number;
|
||||
orderedAnalysisElementIds: number[];
|
||||
}) {
|
||||
const { data: orderedAnalysisElements, error: orderedAnalysisElementsError } = await this.client
|
||||
const {
|
||||
data: orderedAnalysisElements,
|
||||
error: orderedAnalysisElementsError,
|
||||
} = await this.client
|
||||
.schema('medreport')
|
||||
.from('analysis_elements')
|
||||
.select('analysis_id_original,analysis_name_lab')
|
||||
.in('id', orderedAnalysisElementIds);
|
||||
if (orderedAnalysisElementsError) {
|
||||
console.error(`Failed to get ordered analysis elements for analysis order id=${analysisOrderId}`, orderedAnalysisElementsError);
|
||||
console.error(
|
||||
`Failed to get ordered analysis elements for analysis order id=${analysisOrderId}`,
|
||||
orderedAnalysisElementsError,
|
||||
);
|
||||
throw orderedAnalysisElementsError;
|
||||
}
|
||||
return orderedAnalysisElements;
|
||||
@@ -134,21 +166,34 @@ class UserAnalysesApi {
|
||||
orderedAnalysisElements,
|
||||
}: {
|
||||
analysisResponseElements: AnalysisResultsQuery['elements'];
|
||||
orderedAnalysisElements: { analysis_id_original: string; analysis_name_lab: string }[];
|
||||
orderedAnalysisElements: {
|
||||
analysis_id_original: string;
|
||||
analysis_name_lab: string;
|
||||
}[];
|
||||
}): Promise<AnalysisResultDetailsElement[]> {
|
||||
const mappedOrderedAnalysisElements = orderedAnalysisElements.map(({ analysis_id_original, analysis_name_lab }) => {
|
||||
return this.getOrderedAnalysisElement({
|
||||
analysisIdOriginal: analysis_id_original,
|
||||
analysisNameLab: analysis_name_lab,
|
||||
analysisResponseElements,
|
||||
});
|
||||
}).sort((a, b) => a.analysisName.localeCompare(b.analysisName));
|
||||
|
||||
const mappedOrderedAnalysisElements = orderedAnalysisElements
|
||||
.map(({ analysis_id_original, analysis_name_lab }) => {
|
||||
return this.getOrderedAnalysisElement({
|
||||
analysisIdOriginal: analysis_id_original,
|
||||
analysisNameLab: analysis_name_lab,
|
||||
analysisResponseElements,
|
||||
});
|
||||
})
|
||||
.sort((a, b) => a.analysisName.localeCompare(b.analysisName));
|
||||
|
||||
const nestedAnalysisElementIds = mappedOrderedAnalysisElements
|
||||
.map(({ results }) => results?.nestedElements.map(({ analysisElementOriginalId }) => analysisElementOriginalId))
|
||||
.flat().filter(Boolean);
|
||||
.map(({ results }) =>
|
||||
results?.nestedElements.map(
|
||||
({ analysisElementOriginalId }) => analysisElementOriginalId,
|
||||
),
|
||||
)
|
||||
.flat()
|
||||
.filter(Boolean);
|
||||
if (nestedAnalysisElementIds.length > 0) {
|
||||
const { data: nestedAnalysisElements, error: nestedAnalysisElementsError } = await this.client
|
||||
const {
|
||||
data: nestedAnalysisElements,
|
||||
error: nestedAnalysisElementsError,
|
||||
} = await this.client
|
||||
.schema('medreport')
|
||||
.from('analysis_elements')
|
||||
.select('*')
|
||||
@@ -161,18 +206,28 @@ class UserAnalysesApi {
|
||||
}
|
||||
for (const nestedElement of results.nestedElements) {
|
||||
const { analysisElementOriginalId } = nestedElement;
|
||||
const nestedAnalysisElement = nestedAnalysisElements.find(({ analysis_id_original }) => analysis_id_original === analysisElementOriginalId);
|
||||
const nestedAnalysisElement = nestedAnalysisElements.find(
|
||||
({ analysis_id_original }) =>
|
||||
analysis_id_original === analysisElementOriginalId,
|
||||
);
|
||||
if (!nestedAnalysisElement) {
|
||||
continue;
|
||||
}
|
||||
|
||||
nestedElement.analysisElementOriginalId = analysisElementOriginalId;
|
||||
nestedElement.analysisName = nestedAnalysisElement.analysis_name_lab as string | undefined;
|
||||
nestedElement.analysisName =
|
||||
nestedAnalysisElement.analysis_name_lab as string | undefined;
|
||||
}
|
||||
results.nestedElements = results.nestedElements.sort((a, b) => a.analysisName?.localeCompare(b.analysisName ?? '') ?? 0);
|
||||
results.nestedElements = results.nestedElements.sort(
|
||||
(a, b) => a.analysisName?.localeCompare(b.analysisName ?? '') ?? 0,
|
||||
);
|
||||
}
|
||||
} else {
|
||||
console.error('Failed to get nested analysis elements by ids=', nestedAnalysisElementIds, nestedAnalysisElementsError);
|
||||
console.error(
|
||||
'Failed to get nested analysis elements by ids=',
|
||||
nestedAnalysisElementIds,
|
||||
nestedAnalysisElementsError,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -188,7 +243,9 @@ class UserAnalysesApi {
|
||||
analysisNameLab: string;
|
||||
analysisResponseElements: AnalysisResultsQuery['elements'];
|
||||
}): AnalysisResultDetailsElement {
|
||||
const elementResponse = analysisResponseElements.find((element) => element.analysis_element_original_id === analysisIdOriginal);
|
||||
const elementResponse = analysisResponseElements.find(
|
||||
(element) => element.analysis_element_original_id === analysisIdOriginal,
|
||||
);
|
||||
if (!elementResponse) {
|
||||
return {
|
||||
analysisIdOriginal,
|
||||
@@ -196,34 +253,42 @@ class UserAnalysesApi {
|
||||
analysisName: analysisNameLab,
|
||||
};
|
||||
}
|
||||
const labComment = elementResponse.original_response_element?.UuringuKommentaar;
|
||||
const labComment =
|
||||
elementResponse.original_response_element?.UuringuKommentaar;
|
||||
return {
|
||||
analysisIdOriginal,
|
||||
isWaitingForResults: false,
|
||||
analysisName: analysisNameLab,
|
||||
results: {
|
||||
nestedElements: ((): AnalysisResultsDetailsElementNested[] => {
|
||||
const nestedElements = toArray(elementResponse.original_response_element?.UuringuElement)
|
||||
return nestedElements.map<AnalysisResultsDetailsElementNested>((element) => {
|
||||
const mappedResponse = this.mapUuringVastus({
|
||||
uuringVastus: element.UuringuVastus as UuringuVastus | undefined,
|
||||
});
|
||||
return {
|
||||
unit: element.Mootyhik ?? null,
|
||||
normLower: mappedResponse.normLower,
|
||||
normUpper: mappedResponse.normUpper,
|
||||
normStatus: mappedResponse.normStatus,
|
||||
responseTime: mappedResponse.responseTime,
|
||||
responseValue: mappedResponse.responseValue,
|
||||
responseValueIsNegative: mappedResponse.responseValueIsNegative,
|
||||
responseValueIsWithinNorm: mappedResponse.responseValueIsWithinNorm,
|
||||
normLowerIncluded: mappedResponse.normLowerIncluded,
|
||||
normUpperIncluded: mappedResponse.normUpperIncluded,
|
||||
analysisElementOriginalId: element.UuringId,
|
||||
status: Number(elementResponse.status) as AnalysisStatus,
|
||||
analysisName: undefined,
|
||||
};
|
||||
});
|
||||
const nestedElements = toArray(
|
||||
elementResponse.original_response_element?.UuringuElement,
|
||||
);
|
||||
return nestedElements.map<AnalysisResultsDetailsElementNested>(
|
||||
(element) => {
|
||||
const mappedResponse = this.mapUuringVastus({
|
||||
uuringVastus: element.UuringuVastus as
|
||||
| UuringuVastus
|
||||
| undefined,
|
||||
});
|
||||
return {
|
||||
unit: element.Mootyhik ?? null,
|
||||
normLower: mappedResponse.normLower,
|
||||
normUpper: mappedResponse.normUpper,
|
||||
normStatus: mappedResponse.normStatus,
|
||||
responseTime: mappedResponse.responseTime,
|
||||
responseValue: mappedResponse.responseValue,
|
||||
responseValueIsNegative: mappedResponse.responseValueIsNegative,
|
||||
responseValueIsWithinNorm:
|
||||
mappedResponse.responseValueIsWithinNorm,
|
||||
normLowerIncluded: mappedResponse.normLowerIncluded,
|
||||
normUpperIncluded: mappedResponse.normUpperIncluded,
|
||||
analysisElementOriginalId: element.UuringId,
|
||||
status: Number(elementResponse.status) as AnalysisStatus,
|
||||
analysisName: undefined,
|
||||
};
|
||||
},
|
||||
);
|
||||
})(),
|
||||
labComment,
|
||||
unit: elementResponse.unit,
|
||||
@@ -232,13 +297,19 @@ class UserAnalysesApi {
|
||||
normStatus: elementResponse.norm_status,
|
||||
responseTime: elementResponse.response_time,
|
||||
responseValue: elementResponse.response_value,
|
||||
responseValueIsNegative: elementResponse.response_value_is_negative === null ? null : elementResponse.response_value_is_negative === true,
|
||||
responseValueIsWithinNorm: elementResponse.response_value_is_within_norm === null ? null : elementResponse.response_value_is_within_norm === true,
|
||||
responseValueIsNegative:
|
||||
elementResponse.response_value_is_negative === null
|
||||
? null
|
||||
: elementResponse.response_value_is_negative === true,
|
||||
responseValueIsWithinNorm:
|
||||
elementResponse.response_value_is_within_norm === null
|
||||
? null
|
||||
: elementResponse.response_value_is_within_norm === true,
|
||||
normLowerIncluded: elementResponse.norm_lower_included,
|
||||
normUpperIncluded: elementResponse.norm_upper_included,
|
||||
status: Number(elementResponse.status) as AnalysisStatus,
|
||||
analysisElementOriginalId: elementResponse.analysis_element_original_id,
|
||||
}
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -258,11 +329,19 @@ class UserAnalysesApi {
|
||||
return {
|
||||
normLower: uuringVastus?.NormAlum?.['#text'] ?? null,
|
||||
normUpper: uuringVastus?.NormYlem?.['#text'] ?? null,
|
||||
normStatus: (uuringVastus?.NormiStaatus ?? null) as AnalysisResultLevel | null,
|
||||
normStatus: (uuringVastus?.NormiStaatus ??
|
||||
null) as AnalysisResultLevel | null,
|
||||
responseTime: uuringVastus?.VastuseAeg ?? null,
|
||||
responseValue: responseValueIsNegative || !responseValueIsNumeric ? null : (responseValueNumber ?? null),
|
||||
responseValueIsNegative: responseValueIsNumeric ? null : responseValueIsNegative,
|
||||
responseValueIsWithinNorm: responseValueIsNumeric ? null : responseValueIsWithinNorm,
|
||||
responseValue:
|
||||
responseValueIsNegative || !responseValueIsNumeric
|
||||
? null
|
||||
: (responseValueNumber ?? null),
|
||||
responseValueIsNegative: responseValueIsNumeric
|
||||
? null
|
||||
: responseValueIsNegative,
|
||||
responseValueIsWithinNorm: responseValueIsNumeric
|
||||
? null
|
||||
: responseValueIsWithinNorm,
|
||||
normLowerIncluded:
|
||||
uuringVastus?.NormAlum?.['@_kaasaarvatud'].toLowerCase() === 'jah',
|
||||
normUpperIncluded:
|
||||
|
||||
Reference in New Issue
Block a user