feat(MED-131): improve logging, error validation
This commit is contained in:
@@ -3,10 +3,15 @@ import { readPrivateMessageResponse } from "~/lib/services/medipost.service";
|
||||
export default async function syncAnalysisResults() {
|
||||
console.info("Syncing analysis results");
|
||||
|
||||
let processedMessageIds: string[] = [];
|
||||
const excludedMessageIds: string[] = [];
|
||||
while (true) {
|
||||
console.info("Fetching private messages");
|
||||
const { messageIdErrored } = await readPrivateMessageResponse({ excludedMessageIds });
|
||||
const { messageIdErrored, messageIdProcessed } = await readPrivateMessageResponse({ excludedMessageIds });
|
||||
if (messageIdProcessed) {
|
||||
processedMessageIds.push(messageIdProcessed);
|
||||
}
|
||||
|
||||
if (!messageIdErrored) {
|
||||
console.info("No more messages to process");
|
||||
break;
|
||||
@@ -17,7 +22,8 @@ export default async function syncAnalysisResults() {
|
||||
break;
|
||||
}
|
||||
|
||||
console.info(`Message id=${messageIdErrored} has no response yet, skipping`);
|
||||
excludedMessageIds.push(messageIdErrored);
|
||||
}
|
||||
|
||||
console.info(`Processed ${processedMessageIds.length} messages, ids: ${processedMessageIds.join(', ')}`);
|
||||
}
|
||||
|
||||
@@ -100,6 +100,7 @@ const handleOrderToken = async (orderToken: string) => {
|
||||
analysisPackageName: analysisPackageOrderItem?.title ?? '',
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("Failed to place order", error);
|
||||
throw new Error(`Failed to place order, message=${error}`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -195,6 +195,7 @@ export async function readPrivateMessageResponse({
|
||||
excludedMessageIds: string[];
|
||||
}) {
|
||||
let messageIdErrored: string | null = null;
|
||||
let messageIdProcessed: string | null = null;
|
||||
try {
|
||||
const privateMessage = await getLatestPrivateMessageListItem({ excludedMessageIds });
|
||||
if (!privateMessage) {
|
||||
@@ -202,7 +203,10 @@ export async function readPrivateMessageResponse({
|
||||
}
|
||||
|
||||
messageIdErrored = privateMessage.messageId;
|
||||
|
||||
if (!messageIdErrored) {
|
||||
throw new Error(`No message id found`);
|
||||
}
|
||||
|
||||
const privateMessageContent = await getPrivateMessage(
|
||||
privateMessage.messageId,
|
||||
);
|
||||
@@ -216,12 +220,13 @@ export async function readPrivateMessageResponse({
|
||||
|
||||
if (status === 'COMPLETED') {
|
||||
await deletePrivateMessage(privateMessage.messageId);
|
||||
messageIdProcessed = privateMessage.messageId;
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
console.warn(`Failed to process private message id=${messageIdErrored}, message=${(e as Error).message}`);
|
||||
}
|
||||
|
||||
return { messageIdErrored };
|
||||
return { messageIdErrored, messageIdProcessed };
|
||||
}
|
||||
|
||||
async function saveAnalysisGroup(
|
||||
@@ -417,7 +422,14 @@ export async function composeOrderXML({
|
||||
comment?: string;
|
||||
}) {
|
||||
const analysisElements = await getAnalysisElementsAdmin({ ids: orderedAnalysisElementsIds });
|
||||
if (analysisElements.length !== orderedAnalysisElementsIds.length) {
|
||||
throw new Error(`Got ${analysisElements.length} analysis elements, expected ${orderedAnalysisElementsIds.length}`);
|
||||
}
|
||||
|
||||
const analyses = await getAnalyses({ ids: orderedAnalysesIds });
|
||||
if (analyses.length !== orderedAnalysesIds.length) {
|
||||
throw new Error(`Got ${analyses.length} analyses, expected ${orderedAnalysesIds.length}`);
|
||||
}
|
||||
|
||||
const analysisGroups: Tables<{ schema: 'medreport' }, 'analysis_groups'>[] =
|
||||
uniqBy(
|
||||
@@ -572,6 +584,7 @@ export async function syncPrivateMessage({
|
||||
);
|
||||
}
|
||||
const analysisGroups = toArray(messageResponse.UuringuGrupp);
|
||||
console.info(`Order has results for ${analysisGroups.length} analysis groups`);
|
||||
|
||||
const responses: Omit<
|
||||
Tables<{ schema: 'medreport' }, 'analysis_response_elements'>,
|
||||
@@ -581,6 +594,7 @@ export async function syncPrivateMessage({
|
||||
const groupItems = toArray(
|
||||
analysisGroup.Uuring as ResponseUuringuGrupp['Uuring'],
|
||||
);
|
||||
console.info(`Order has results in group ${analysisGroup.UuringuGruppNimi} for ${groupItems.length} analysis elements`);
|
||||
for (const item of groupItems) {
|
||||
const element = item.UuringuElement;
|
||||
const elementAnalysisResponses = toArray(element.UuringuVastus);
|
||||
|
||||
Reference in New Issue
Block a user