63 lines
1.8 KiB
TypeScript
63 lines
1.8 KiB
TypeScript
import { readPrivateMessageResponse } from "~/lib/services/medipost.service";
|
|
|
|
type ProcessedMessage = {
|
|
messageId: string;
|
|
hasAnalysisResponse: boolean;
|
|
hasPartialAnalysisResponse: boolean;
|
|
hasFullAnalysisResponse: boolean;
|
|
medusaOrderId: string | undefined;
|
|
};
|
|
|
|
type GroupedResults = {
|
|
processed: Pick<ProcessedMessage, 'messageId' | 'medusaOrderId'>[];
|
|
waitingForResults: Pick<ProcessedMessage, 'messageId' | 'medusaOrderId'>[];
|
|
};
|
|
|
|
export default async function syncAnalysisResults() {
|
|
console.info("Syncing analysis results");
|
|
|
|
let processedMessages: ProcessedMessage[] = [];
|
|
const excludedMessageIds: string[] = [];
|
|
while (true) {
|
|
const result = await readPrivateMessageResponse({ excludedMessageIds });
|
|
if (result.messageId) {
|
|
processedMessages.push(result as ProcessedMessage);
|
|
}
|
|
|
|
if (!result.messageId) {
|
|
console.info("No more messages to process");
|
|
break;
|
|
}
|
|
|
|
if (!excludedMessageIds.includes(result.messageId)) {
|
|
excludedMessageIds.push(result.messageId);
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
const groupedResults = processedMessages.reduce((acc, result) => {
|
|
if (result.medusaOrderId) {
|
|
if (result.hasAnalysisResponse) {
|
|
if (!acc.processed) {
|
|
acc.processed = [];
|
|
}
|
|
acc.processed.push({
|
|
messageId: result.messageId,
|
|
medusaOrderId: result.medusaOrderId,
|
|
});
|
|
} else {
|
|
if (!acc.waitingForResults) {
|
|
acc.waitingForResults = [];
|
|
}
|
|
acc.waitingForResults.push({
|
|
messageId: result.messageId,
|
|
medusaOrderId: result.medusaOrderId,
|
|
});
|
|
}
|
|
}
|
|
return acc;
|
|
}, {} as GroupedResults);
|
|
console.info(`Processed ${processedMessages.length} messages, results: ${JSON.stringify(groupedResults, undefined, 2)}`);
|
|
}
|