'use server'; import type { Message } from '@/lib/types/medipost'; import { getSupabaseServerAdminClient } from '@/packages/supabase/src/clients/server-admin-client'; export async function getLatestMessage({ messages, excludedMessageIds, }: { messages?: Message[]; excludedMessageIds?: string[]; }) { if (!messages?.length) { return null; } const filtered = messages.filter(({ messageId }) => !excludedMessageIds?.includes(messageId)); if (!filtered.length) { return null; } return filtered.reduce((prev, current) => Number(prev.messageId) > Number(current.messageId) ? prev : current, { messageId: '' } as Message, ); } export async function upsertMedipostActionLog({ action, xml, hasAnalysisResults = false, medusaOrderId, responseXml, hasError = false, medipostExternalOrderId, medipostPrivateMessageId, }: { action: | 'send_order_to_medipost' | 'sync_analysis_results_from_medipost' | 'send_fake_analysis_results_to_medipost'; xml: string; hasAnalysisResults?: boolean; medusaOrderId?: string | null; responseXml?: string | null; hasError?: boolean; medipostExternalOrderId?: string | null; medipostPrivateMessageId?: string | null; }) { const { data } = await getSupabaseServerAdminClient() .schema('medreport') .from('medipost_actions') .upsert( { action, xml, has_analysis_results: hasAnalysisResults, medusa_order_id: medusaOrderId, response_xml: responseXml, has_error: hasError, medipost_external_order_id: medipostExternalOrderId, medipost_private_message_id: medipostPrivateMessageId, }, { onConflict: 'medipost_private_message_id', ignoreDuplicates: false } ) .select('id') .throwOnError(); const medipostActionId = data?.[0]?.id; if (!medipostActionId) { throw new Error( `Failed to insert or update medipost action (private message id: ${medipostPrivateMessageId})` ); } return { medipostActionId }; }