feat(MED-97): move order status updating to user-analyses feature pkg
This commit is contained in:
@@ -28,7 +28,7 @@ import {
|
|||||||
upsertAnalysisResponseElement,
|
upsertAnalysisResponseElement,
|
||||||
} from '../analysis-order.service';
|
} from '../analysis-order.service';
|
||||||
import { logMedipostDispatch } from '../audit.service';
|
import { logMedipostDispatch } from '../audit.service';
|
||||||
import { getAnalysisOrder, updateAnalysisOrderStatus } from '../order.service';
|
import { getAnalysisOrder } from '../order.service';
|
||||||
import { parseXML } from '../util/xml.service';
|
import { parseXML } from '../util/xml.service';
|
||||||
import { MedipostValidationError } from './MedipostValidationError';
|
import { MedipostValidationError } from './MedipostValidationError';
|
||||||
import {
|
import {
|
||||||
@@ -430,14 +430,16 @@ export async function readPrivateMessageResponse({
|
|||||||
medipostExternalOrderId,
|
medipostExternalOrderId,
|
||||||
});
|
});
|
||||||
if (status.isPartial) {
|
if (status.isPartial) {
|
||||||
await updateAnalysisOrderStatus({
|
await createUserAnalysesApi(getSupabaseServerAdminClient())
|
||||||
|
.updateAnalysisOrderStatus({
|
||||||
medusaOrderId,
|
medusaOrderId,
|
||||||
orderStatus: 'PARTIAL_ANALYSIS_RESPONSE',
|
orderStatus: 'PARTIAL_ANALYSIS_RESPONSE',
|
||||||
});
|
});
|
||||||
hasAnalysisResponse = true;
|
hasAnalysisResponse = true;
|
||||||
hasPartialAnalysisResponse = true;
|
hasPartialAnalysisResponse = true;
|
||||||
} else if (status.isCompleted) {
|
} else if (status.isCompleted) {
|
||||||
await updateAnalysisOrderStatus({
|
await createUserAnalysesApi(getSupabaseServerAdminClient())
|
||||||
|
.updateAnalysisOrderStatus({
|
||||||
medusaOrderId,
|
medusaOrderId,
|
||||||
orderStatus: 'FULL_ANALYSIS_RESPONSE',
|
orderStatus: 'FULL_ANALYSIS_RESPONSE',
|
||||||
});
|
});
|
||||||
@@ -622,5 +624,9 @@ export async function sendOrderToMedipost({
|
|||||||
hasAnalysisResults: false,
|
hasAnalysisResults: false,
|
||||||
medusaOrderId,
|
medusaOrderId,
|
||||||
});
|
});
|
||||||
await updateAnalysisOrderStatus({ medusaOrderId, orderStatus: 'PROCESSING' });
|
await createUserAnalysesApi(getSupabaseServerAdminClient())
|
||||||
|
.updateAnalysisOrderStatus({
|
||||||
|
medusaOrderId,
|
||||||
|
orderStatus: 'PROCESSING',
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
"@kit/supabase": "workspace:*",
|
"@kit/supabase": "workspace:*",
|
||||||
"@kit/tsconfig": "workspace:*",
|
"@kit/tsconfig": "workspace:*",
|
||||||
"@kit/ui": "workspace:*",
|
"@kit/ui": "workspace:*",
|
||||||
|
"@kit/user-analyses": "workspace:*",
|
||||||
"@makerkit/data-loader-supabase-core": "^0.0.10",
|
"@makerkit/data-loader-supabase-core": "^0.0.10",
|
||||||
"@makerkit/data-loader-supabase-nextjs": "^1.2.5",
|
"@makerkit/data-loader-supabase-nextjs": "^1.2.5",
|
||||||
"@supabase/supabase-js": "2.49.4",
|
"@supabase/supabase-js": "2.49.4",
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { isBefore } from 'date-fns';
|
|||||||
import { renderDoctorSummaryReceivedEmail } from '@kit/email-templates';
|
import { renderDoctorSummaryReceivedEmail } from '@kit/email-templates';
|
||||||
import { getFullName } from '@kit/shared/utils';
|
import { getFullName } from '@kit/shared/utils';
|
||||||
import { getSupabaseServerClient } from '@kit/supabase/server-client';
|
import { getSupabaseServerClient } from '@kit/supabase/server-client';
|
||||||
|
import { createUserAnalysesApi } from '@kit/user-analyses/api';
|
||||||
|
|
||||||
import { sendEmailFromTemplate } from '../../../../../../../lib/services/mailer.service';
|
import { sendEmailFromTemplate } from '../../../../../../../lib/services/mailer.service';
|
||||||
import { AnalysisResultDetails } from '../schema/doctor-analysis-detail-view.schema';
|
import { AnalysisResultDetails } from '../schema/doctor-analysis-detail-view.schema';
|
||||||
@@ -641,7 +642,14 @@ export async function submitFeedback(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (status === 'COMPLETED') {
|
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
|
supabase
|
||||||
.schema('medreport')
|
.schema('medreport')
|
||||||
.from('accounts')
|
.from('accounts')
|
||||||
@@ -649,19 +657,10 @@ export async function submitFeedback(
|
|||||||
.eq('is_personal_account', true)
|
.eq('is_personal_account', true)
|
||||||
.eq('primary_owner_user_id', userId)
|
.eq('primary_owner_user_id', userId)
|
||||||
.throwOnError(),
|
.throwOnError(),
|
||||||
supabase
|
createUserAnalysesApi(supabase).updateAnalysisOrderStatus({
|
||||||
.schema('medreport')
|
orderId: analysisOrderId,
|
||||||
.from('analysis_orders')
|
orderStatus: 'COMPLETED',
|
||||||
.select('medusa_order_id, id')
|
}),
|
||||||
.eq('id', analysisOrderId)
|
|
||||||
.limit(1)
|
|
||||||
.throwOnError(),
|
|
||||||
supabase
|
|
||||||
.schema('medreport')
|
|
||||||
.from('analysis_orders')
|
|
||||||
.update({ status: 'COMPLETED' })
|
|
||||||
.eq('id', analysisOrderId)
|
|
||||||
.throwOnError(),
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if (!recipient?.[0]?.email) {
|
if (!recipient?.[0]?.email) {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import type { UuringuVastus } from '@kit/shared/types/medipost-analysis';
|
|||||||
import { toArray } from '@kit/shared/utils';
|
import { toArray } from '@kit/shared/utils';
|
||||||
import { Database } from '@kit/supabase/database';
|
import { Database } from '@kit/supabase/database';
|
||||||
|
|
||||||
import type { AnalysisOrder } from '../types/analysis-orders';
|
import type { AnalysisOrder, AnalysisOrderStatus } from '../types/analysis-orders';
|
||||||
import type {
|
import type {
|
||||||
AnalysisResultDetailsElement,
|
AnalysisResultDetailsElement,
|
||||||
AnalysisResultDetailsMapped,
|
AnalysisResultDetailsMapped,
|
||||||
@@ -450,6 +450,32 @@ class UserAnalysesApi {
|
|||||||
|
|
||||||
return data;
|
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>) {
|
export function createUserAnalysesApi(client: SupabaseClient<Database>) {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
import { Tables } from '@kit/supabase/database';
|
import { Tables } from '@kit/supabase/database';
|
||||||
|
|
||||||
export type AnalysisOrder = Tables<{ schema: 'medreport' }, 'analysis_orders'>;
|
export type AnalysisOrder = Tables<{ schema: 'medreport' }, 'analysis_orders'>;
|
||||||
|
export type AnalysisOrderStatus = AnalysisOrder['status'];
|
||||||
|
|||||||
3
pnpm-lock.yaml
generated
3
pnpm-lock.yaml
generated
@@ -755,6 +755,9 @@ importers:
|
|||||||
'@kit/ui':
|
'@kit/ui':
|
||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:../../ui
|
version: link:../../ui
|
||||||
|
'@kit/user-analyses':
|
||||||
|
specifier: workspace:*
|
||||||
|
version: link:../user-analyses
|
||||||
'@makerkit/data-loader-supabase-core':
|
'@makerkit/data-loader-supabase-core':
|
||||||
specifier: ^0.0.10
|
specifier: ^0.0.10
|
||||||
version: 0.0.10(@supabase/postgrest-js@1.19.4)(@supabase/supabase-js@2.49.4)
|
version: 0.0.10(@supabase/postgrest-js@1.19.4)(@supabase/supabase-js@2.49.4)
|
||||||
|
|||||||
Reference in New Issue
Block a user