feat(MED-131): improve logging, error validation

This commit is contained in:
2025-08-04 16:26:26 +03:00
parent 58e2b8dc81
commit 36816cfcd5
3 changed files with 26 additions and 5 deletions

View File

@@ -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(', ')}`);
}

View File

@@ -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}`);
}
}

View File

@@ -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);