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() { export default async function syncAnalysisResults() {
console.info("Syncing analysis results"); console.info("Syncing analysis results");
let processedMessageIds: string[] = [];
const excludedMessageIds: string[] = []; const excludedMessageIds: string[] = [];
while (true) { while (true) {
console.info("Fetching private messages"); console.info("Fetching private messages");
const { messageIdErrored } = await readPrivateMessageResponse({ excludedMessageIds }); const { messageIdErrored, messageIdProcessed } = await readPrivateMessageResponse({ excludedMessageIds });
if (messageIdProcessed) {
processedMessageIds.push(messageIdProcessed);
}
if (!messageIdErrored) { if (!messageIdErrored) {
console.info("No more messages to process"); console.info("No more messages to process");
break; break;
@@ -17,7 +22,8 @@ export default async function syncAnalysisResults() {
break; break;
} }
console.info(`Message id=${messageIdErrored} has no response yet, skipping`);
excludedMessageIds.push(messageIdErrored); 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 ?? '', analysisPackageName: analysisPackageOrderItem?.title ?? '',
}; };
} catch (error) { } catch (error) {
console.error("Failed to place order", error);
throw new Error(`Failed to place order, message=${error}`); throw new Error(`Failed to place order, message=${error}`);
} }
} }

View File

@@ -195,6 +195,7 @@ export async function readPrivateMessageResponse({
excludedMessageIds: string[]; excludedMessageIds: string[];
}) { }) {
let messageIdErrored: string | null = null; let messageIdErrored: string | null = null;
let messageIdProcessed: string | null = null;
try { try {
const privateMessage = await getLatestPrivateMessageListItem({ excludedMessageIds }); const privateMessage = await getLatestPrivateMessageListItem({ excludedMessageIds });
if (!privateMessage) { if (!privateMessage) {
@@ -202,6 +203,9 @@ export async function readPrivateMessageResponse({
} }
messageIdErrored = privateMessage.messageId; messageIdErrored = privateMessage.messageId;
if (!messageIdErrored) {
throw new Error(`No message id found`);
}
const privateMessageContent = await getPrivateMessage( const privateMessageContent = await getPrivateMessage(
privateMessage.messageId, privateMessage.messageId,
@@ -216,12 +220,13 @@ export async function readPrivateMessageResponse({
if (status === 'COMPLETED') { if (status === 'COMPLETED') {
await deletePrivateMessage(privateMessage.messageId); await deletePrivateMessage(privateMessage.messageId);
messageIdProcessed = privateMessage.messageId;
} }
} catch (e) { } 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( async function saveAnalysisGroup(
@@ -417,7 +422,14 @@ export async function composeOrderXML({
comment?: string; comment?: string;
}) { }) {
const analysisElements = await getAnalysisElementsAdmin({ ids: orderedAnalysisElementsIds }); 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 }); 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'>[] = const analysisGroups: Tables<{ schema: 'medreport' }, 'analysis_groups'>[] =
uniqBy( uniqBy(
@@ -572,6 +584,7 @@ export async function syncPrivateMessage({
); );
} }
const analysisGroups = toArray(messageResponse.UuringuGrupp); const analysisGroups = toArray(messageResponse.UuringuGrupp);
console.info(`Order has results for ${analysisGroups.length} analysis groups`);
const responses: Omit< const responses: Omit<
Tables<{ schema: 'medreport' }, 'analysis_response_elements'>, Tables<{ schema: 'medreport' }, 'analysis_response_elements'>,
@@ -581,6 +594,7 @@ export async function syncPrivateMessage({
const groupItems = toArray( const groupItems = toArray(
analysisGroup.Uuring as ResponseUuringuGrupp['Uuring'], analysisGroup.Uuring as ResponseUuringuGrupp['Uuring'],
); );
console.info(`Order has results in group ${analysisGroup.UuringuGruppNimi} for ${groupItems.length} analysis elements`);
for (const item of groupItems) { for (const item of groupItems) {
const element = item.UuringuElement; const element = item.UuringuElement;
const elementAnalysisResponses = toArray(element.UuringuVastus); const elementAnalysisResponses = toArray(element.UuringuVastus);