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