import { retrieveOrder } from "@lib/data"; import { NextRequest, NextResponse } from "next/server"; import { getAccountAdmin } from "~/lib/services/account.service"; import { composeOrderXML, sendPrivateMessage } from "~/lib/services/medipost.service"; import { getOrder, updateOrder } from "~/lib/services/order.service"; interface MedipostCreateRequest { medusaOrderId: string; } export const POST = async (request: NextRequest) => { const { medusaOrderId } = (await request.json()) as MedipostCreateRequest; const medusaOrder = await retrieveOrder(medusaOrderId) const medreportOrder = await getOrder({ medusaOrderId }); const account = await getAccountAdmin({ primaryOwnerUserId: medreportOrder.user_id }); const ANALYSIS_ELEMENT_HANDLE_PREFIX = 'analysis-element-'; const orderedAnalysisElementsIds = (medusaOrder?.items ?? []) .filter((item) => item.product?.handle?.startsWith(ANALYSIS_ELEMENT_HANDLE_PREFIX)) .map((item) => { const id = Number(item.product?.handle?.replace(ANALYSIS_ELEMENT_HANDLE_PREFIX, '')); if (Number.isNaN(id)) { return null; } return id; }) .filter(Boolean) as number[]; const orderXml = await composeOrderXML({ person: { idCode: account.personal_code!, firstName: account.name ?? '', lastName: account.last_name ?? '', phone: account.phone ?? '', }, orderedAnalysisElementsIds, orderedAnalysesIds: [], orderId: medusaOrderId, orderCreatedAt: new Date(medreportOrder.created_at), comment: '', }); await sendPrivateMessage(orderXml); await updateOrder({ orderId: medreportOrder.id, orderStatus: 'PROCESSING', }); return NextResponse.json({ orderXml }); };