feat(MED-131): sync analysis results in job handler

This commit is contained in:
2025-08-04 11:53:18 +03:00
parent 69f41430e2
commit 0e9d9a212a
2 changed files with 50 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
import { readPrivateMessageResponse } from "~/lib/services/medipost.service";
export default async function syncAnalysisResults() {
console.info("Syncing analysis results");
const excludedMessageIds: string[] = [];
while (true) {
console.info("Fetching private messages");
const { messageIdErrored } = await readPrivateMessageResponse({ excludedMessageIds });
if (!messageIdErrored) {
console.info("No more messages to process");
break;
}
if (excludedMessageIds.includes(messageIdErrored)) {
console.info(`Message id=${messageIdErrored} has already been processed, stopping`);
break;
}
console.info(`Message id=${messageIdErrored} has no response yet, skipping`);
excludedMessageIds.push(messageIdErrored);
}
}

View File

@@ -0,0 +1,27 @@
import { NextRequest, NextResponse } from "next/server";
import loadEnv from "../handler/load-env";
import validateApiKey from "../handler/validate-api-key";
import syncAnalysisResults from "../handler/sync-analysis-results";
export const POST = async (request: NextRequest) => {
loadEnv();
try {
validateApiKey(request);
} catch (e) {
return NextResponse.json({}, { status: 401, statusText: 'Unauthorized' });
}
try {
await syncAnalysisResults();
console.info("Successfully synced analysis results");
return NextResponse.json({
message: 'Successfully synced analysis results',
}, { status: 200 });
} catch (e) {
console.error("Error syncing analysis results", e);
return NextResponse.json({
message: 'Failed to sync analysis results',
}, { status: 500 });
}
};