diff --git a/lib/services/medipost/medipostPrivateMessage.service.ts b/lib/services/medipost/medipostPrivateMessage.service.ts index 055acd6..efe0e74 100644 --- a/lib/services/medipost/medipostPrivateMessage.service.ts +++ b/lib/services/medipost/medipostPrivateMessage.service.ts @@ -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,17 +430,19 @@ export async function readPrivateMessageResponse({ medipostExternalOrderId, }); if (status.isPartial) { - await updateAnalysisOrderStatus({ - medusaOrderId, - orderStatus: 'PARTIAL_ANALYSIS_RESPONSE', - }); + await createUserAnalysesApi(getSupabaseServerAdminClient()) + .updateAnalysisOrderStatus({ + medusaOrderId, + orderStatus: 'PARTIAL_ANALYSIS_RESPONSE', + }); hasAnalysisResponse = true; hasPartialAnalysisResponse = true; } else if (status.isCompleted) { - await updateAnalysisOrderStatus({ - medusaOrderId, - orderStatus: 'FULL_ANALYSIS_RESPONSE', - }); + await createUserAnalysesApi(getSupabaseServerAdminClient()) + .updateAnalysisOrderStatus({ + medusaOrderId, + orderStatus: 'FULL_ANALYSIS_RESPONSE', + }); if (IS_ENABLED_DELETE_PRIVATE_MESSAGE) { await deletePrivateMessage(privateMessageId); } @@ -622,5 +624,9 @@ export async function sendOrderToMedipost({ hasAnalysisResults: false, medusaOrderId, }); - await updateAnalysisOrderStatus({ medusaOrderId, orderStatus: 'PROCESSING' }); + await createUserAnalysesApi(getSupabaseServerAdminClient()) + .updateAnalysisOrderStatus({ + medusaOrderId, + orderStatus: 'PROCESSING', + }); } diff --git a/packages/features/doctor/package.json b/packages/features/doctor/package.json index df1c635..fdf8e74 100644 --- a/packages/features/doctor/package.json +++ b/packages/features/doctor/package.json @@ -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", diff --git a/packages/features/doctor/src/lib/server/services/doctor-analysis.service.ts b/packages/features/doctor/src/lib/server/services/doctor-analysis.service.ts index c835c76..7033567 100644 --- a/packages/features/doctor/src/lib/server/services/doctor-analysis.service.ts +++ b/packages/features/doctor/src/lib/server/services/doctor-analysis.service.ts @@ -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) { diff --git a/packages/features/user-analyses/src/server/api.ts b/packages/features/user-analyses/src/server/api.ts index 0532886..ec01587 100644 --- a/packages/features/user-analyses/src/server/api.ts +++ b/packages/features/user-analyses/src/server/api.ts @@ -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) { diff --git a/packages/features/user-analyses/src/types/analysis-orders.ts b/packages/features/user-analyses/src/types/analysis-orders.ts index 4ef4027..1eac2f0 100644 --- a/packages/features/user-analyses/src/types/analysis-orders.ts +++ b/packages/features/user-analyses/src/types/analysis-orders.ts @@ -1,3 +1,4 @@ import { Tables } from '@kit/supabase/database'; export type AnalysisOrder = Tables<{ schema: 'medreport' }, 'analysis_orders'>; +export type AnalysisOrderStatus = AnalysisOrder['status']; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0ec48dd..2c396f6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -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)