feat(MED-97): move order status updating to user-analyses feature pkg

This commit is contained in:
2025-09-26 09:43:49 +03:00
parent 07237dece6
commit fc63b9e7b7
6 changed files with 61 additions and 25 deletions

View File

@@ -28,7 +28,7 @@ import {
upsertAnalysisResponseElement,
} from '../analysis-order.service';
import { logMedipostDispatch } from '../audit.service';
import { getAnalysisOrder, updateAnalysisOrderStatus } from '../order.service';
import { getAnalysisOrder } from '../order.service';
import { parseXML } from '../util/xml.service';
import { MedipostValidationError } from './MedipostValidationError';
import {
@@ -430,14 +430,16 @@ export async function readPrivateMessageResponse({
medipostExternalOrderId,
});
if (status.isPartial) {
await updateAnalysisOrderStatus({
await createUserAnalysesApi(getSupabaseServerAdminClient())
.updateAnalysisOrderStatus({
medusaOrderId,
orderStatus: 'PARTIAL_ANALYSIS_RESPONSE',
});
hasAnalysisResponse = true;
hasPartialAnalysisResponse = true;
} else if (status.isCompleted) {
await updateAnalysisOrderStatus({
await createUserAnalysesApi(getSupabaseServerAdminClient())
.updateAnalysisOrderStatus({
medusaOrderId,
orderStatus: 'FULL_ANALYSIS_RESPONSE',
});
@@ -622,5 +624,9 @@ export async function sendOrderToMedipost({
hasAnalysisResults: false,
medusaOrderId,
});
await updateAnalysisOrderStatus({ medusaOrderId, orderStatus: 'PROCESSING' });
await createUserAnalysesApi(getSupabaseServerAdminClient())
.updateAnalysisOrderStatus({
medusaOrderId,
orderStatus: 'PROCESSING',
});
}

View File

@@ -13,6 +13,7 @@
"@kit/supabase": "workspace:*",
"@kit/tsconfig": "workspace:*",
"@kit/ui": "workspace:*",
"@kit/user-analyses": "workspace:*",
"@makerkit/data-loader-supabase-core": "^0.0.10",
"@makerkit/data-loader-supabase-nextjs": "^1.2.5",
"@supabase/supabase-js": "2.49.4",

View File

@@ -5,6 +5,7 @@ import { isBefore } from 'date-fns';
import { renderDoctorSummaryReceivedEmail } from '@kit/email-templates';
import { getFullName } from '@kit/shared/utils';
import { getSupabaseServerClient } from '@kit/supabase/server-client';
import { createUserAnalysesApi } from '@kit/user-analyses/api';
import { sendEmailFromTemplate } from '../../../../../../../lib/services/mailer.service';
import { AnalysisResultDetails } from '../schema/doctor-analysis-detail-view.schema';
@@ -641,7 +642,14 @@ export async function submitFeedback(
}
if (status === 'COMPLETED') {
const [{ data: recipient }, { data: analysisOrder }] = await Promise.all([
const { data: analysisOrder } = await supabase
.schema('medreport')
.from('analysis_orders')
.select('medusa_order_id, id')
.eq('id', analysisOrderId)
.limit(1)
.throwOnError();
const [{ data: recipient }] = await Promise.all([
supabase
.schema('medreport')
.from('accounts')
@@ -649,19 +657,10 @@ export async function submitFeedback(
.eq('is_personal_account', true)
.eq('primary_owner_user_id', userId)
.throwOnError(),
supabase
.schema('medreport')
.from('analysis_orders')
.select('medusa_order_id, id')
.eq('id', analysisOrderId)
.limit(1)
.throwOnError(),
supabase
.schema('medreport')
.from('analysis_orders')
.update({ status: 'COMPLETED' })
.eq('id', analysisOrderId)
.throwOnError(),
createUserAnalysesApi(supabase).updateAnalysisOrderStatus({
orderId: analysisOrderId,
orderStatus: 'COMPLETED',
}),
]);
if (!recipient?.[0]?.email) {

View File

@@ -4,7 +4,7 @@ import type { UuringuVastus } from '@kit/shared/types/medipost-analysis';
import { toArray } from '@kit/shared/utils';
import { Database } from '@kit/supabase/database';
import type { AnalysisOrder } from '../types/analysis-orders';
import type { AnalysisOrder, AnalysisOrderStatus } from '../types/analysis-orders';
import type {
AnalysisResultDetailsElement,
AnalysisResultDetailsMapped,
@@ -450,6 +450,32 @@ class UserAnalysesApi {
return data;
}
async updateAnalysisOrderStatus({
orderId,
medusaOrderId,
orderStatus,
}: {
orderId?: number;
medusaOrderId?: string;
orderStatus: AnalysisOrderStatus;
}) {
const orderIdParam = orderId;
const medusaOrderIdParam = medusaOrderId;
console.info(`Updating order id=${orderId} medusaOrderId=${medusaOrderId} status=${orderStatus}`);
if (!orderIdParam && !medusaOrderIdParam) {
throw new Error('Either orderId or medusaOrderId must be provided');
}
await this.client
.schema('medreport')
.rpc('update_analysis_order_status', {
order_id: orderIdParam ?? -1,
status_param: orderStatus,
medusa_order_id_param: medusaOrderIdParam ?? '',
})
.throwOnError();
}
}
export function createUserAnalysesApi(client: SupabaseClient<Database>) {

View File

@@ -1,3 +1,4 @@
import { Tables } from '@kit/supabase/database';
export type AnalysisOrder = Tables<{ schema: 'medreport' }, 'analysis_orders'>;
export type AnalysisOrderStatus = AnalysisOrder['status'];

3
pnpm-lock.yaml generated
View File

@@ -755,6 +755,9 @@ importers:
'@kit/ui':
specifier: workspace:*
version: link:../../ui
'@kit/user-analyses':
specifier: workspace:*
version: link:../user-analyses
'@makerkit/data-loader-supabase-core':
specifier: ^0.0.10
version: 0.0.10(@supabase/postgrest-js@1.19.4)(@supabase/supabase-js@2.49.4)