MED-198: add notification for new analysis result

This commit is contained in:
Danel Kungla
2025-10-08 16:32:19 +03:00
parent 3a8d73e742
commit 8386e541cb
16 changed files with 126 additions and 16 deletions

View File

@@ -3,7 +3,9 @@
import type { PostgrestError } from '@supabase/supabase-js';
import { GetMessageListResponse, MedipostAction } from '@/lib/types/medipost';
import { createNotificationsApi } from '@/packages/features/notifications/src/server/api';
import { createUserAnalysesApi } from '@/packages/features/user-analyses/src/server/api';
import { pathsConfig } from '@/packages/shared/src/config';
import { AnalysisOrderStatus } from '@/packages/shared/src/types/medipost-analysis';
import type {
MedipostOrderResponse,
@@ -16,6 +18,7 @@ import axios from 'axios';
import { toArray } from '@kit/shared/utils';
import { Tables } from '@kit/supabase/database';
import { createI18nServerInstance } from '~/lib/i18n/i18n.server';
import type { AnalysisResponseElement } from '~/lib/types/analysis-response-element';
import type { AnalysisOrder } from '~/lib/types/order';
@@ -268,6 +271,7 @@ export async function syncPrivateMessage({
order: Tables<{ schema: 'medreport' }, 'analysis_orders'>;
}) {
const supabase = getSupabaseServerAdminClient();
const { t } = await createI18nServerInstance();
const orderStatus = AnalysisOrderStatus[TellimuseOlek];
@@ -300,6 +304,7 @@ export async function syncPrivateMessage({
log,
});
let newElementsAdded = 0;
for (const element of newElements) {
try {
await upsertAnalysisResponseElement({
@@ -308,6 +313,7 @@ export async function syncPrivateMessage({
analysis_response_id: analysisResponseId,
},
});
newElementsAdded++;
} catch (e) {
log(
`Failed to create order response element for response id ${analysisResponseId}, element id '${element.analysis_element_original_id}' (order id: ${order.id})`,
@@ -316,6 +322,16 @@ export async function syncPrivateMessage({
}
}
log(`Added ${newElementsAdded} new elements`);
if (newElementsAdded !== 0) {
await createNotificationsApi(supabase).createNotification({
account_id: analysisOrder.user_id,
body: t('analysis-results:notification.body'),
link: `${pathsConfig.app.analysisResults}/${order.id}`,
});
}
return (await hasAllAnalysisResponseElements({ analysisResponseId, order }))
? { isCompleted: orderStatus === 'COMPLETED' }
: { isPartial: true };
@@ -371,8 +387,13 @@ export async function readPrivateMessageResponse({
const hasInvalidOrderId = isNaN(analysisOrderId);
if (hasInvalidOrderId || !messageResponse || !patientPersonalCode) {
console.log({
privateMessageContent,
saadetis: privateMessageContent?.Saadetis,
messageResponse,
});
console.error(
`Invalid order id or message response or patient personal code, medipostExternalOrderId=${medipostExternalOrderId}, privateMessageId=${privateMessageId}`,
`Invalid !order id or message response or patient personal code, medipostExternalOrderId=${medipostExternalOrderId}, privateMessageId=${privateMessageId}`,
);
await upsertMedipostActionLog({
action: 'sync_analysis_results_from_medipost',