Merge branch 'develop' into MED-98
This commit is contained in:
@@ -1,8 +1,13 @@
|
||||
'use server';
|
||||
|
||||
import { AccountBalanceService, AccountBalanceSummary } from '@kit/accounts/services/account-balance.service';
|
||||
import {
|
||||
AccountBalanceService,
|
||||
AccountBalanceSummary,
|
||||
} from '@kit/accounts/services/account-balance.service';
|
||||
|
||||
export async function getAccountBalanceSummary(accountId: string): Promise<AccountBalanceSummary | null> {
|
||||
export async function getAccountBalanceSummary(
|
||||
accountId: string,
|
||||
): Promise<AccountBalanceSummary | null> {
|
||||
try {
|
||||
const service = new AccountBalanceService();
|
||||
return await service.getBalanceSummary(accountId);
|
||||
|
||||
@@ -1,24 +1,27 @@
|
||||
'use server';
|
||||
|
||||
import { z } from 'zod';
|
||||
import type { StoreCart, StoreOrder } from '@medusajs/types';
|
||||
import jwt from 'jsonwebtoken';
|
||||
|
||||
import type { StoreCart, StoreOrder } from "@medusajs/types";
|
||||
import { z } from 'zod';
|
||||
|
||||
import { initiateMultiPaymentSession, placeOrder } from "@lib/data/cart";
|
||||
import { handleNavigateToPayment } from "~/lib/services/medusaCart.service";
|
||||
import { loadCurrentUserAccount } from "./load-user-account";
|
||||
import { getOrderedAnalysisIds } from "~/lib/services/medusaOrder.service";
|
||||
import { createAnalysisOrder, getAnalysisOrder } from "~/lib/services/order.service";
|
||||
import { listProductTypes } from "@lib/data";
|
||||
import { sendOrderToMedipost } from "~/lib/services/medipost/medipostPrivateMessage.service";
|
||||
import { AccountWithParams } from "@/packages/features/accounts/src/types/accounts";
|
||||
import { createI18nServerInstance } from "~/lib/i18n/i18n.server";
|
||||
import { getSupabaseServerAdminClient } from "@/packages/supabase/src/clients/server-admin-client";
|
||||
import { createNotificationsApi } from "@/packages/features/notifications/src/server/api";
|
||||
import { FailureReason } from '~/lib/types/connected-online';
|
||||
import { getOrderedTtoServices } from '~/lib/services/reservation.service';
|
||||
import { createI18nServerInstance } from '~/lib/i18n/i18n.server';
|
||||
import { bookAppointment } from '~/lib/services/connected-online.service';
|
||||
import { sendOrderToMedipost } from '~/lib/services/medipost/medipostPrivateMessage.service';
|
||||
import { handleNavigateToPayment } from '~/lib/services/medusaCart.service';
|
||||
import { getOrderedAnalysisIds } from '~/lib/services/medusaOrder.service';
|
||||
import {
|
||||
createAnalysisOrder,
|
||||
getAnalysisOrder,
|
||||
} from '~/lib/services/order.service';
|
||||
import { getOrderedTtoServices } from '~/lib/services/reservation.service';
|
||||
import { FailureReason } from '~/lib/types/connected-online';
|
||||
|
||||
import { loadCurrentUserAccount } from './load-user-account';
|
||||
|
||||
const ANALYSIS_PACKAGES_TYPE_HANDLE = 'analysis-packages';
|
||||
const ANALYSIS_TYPE_HANDLE = 'synlab-analysis';
|
||||
@@ -39,12 +42,16 @@ const env = () =>
|
||||
isEnabledDispatchOnMontonioCallback: z.boolean({
|
||||
error: 'MEDIPOST_ENABLE_DISPATCH_ON_MONTONIO_CALLBACK is required',
|
||||
}),
|
||||
medusaBackendPublicUrl: z.string({
|
||||
error: 'MEDUSA_BACKEND_PUBLIC_URL is required',
|
||||
}).min(1),
|
||||
companyBenefitsPaymentSecretKey: z.string({
|
||||
error: 'COMPANY_BENEFITS_PAYMENT_SECRET_KEY is required',
|
||||
}).min(1),
|
||||
medusaBackendPublicUrl: z
|
||||
.string({
|
||||
error: 'MEDUSA_BACKEND_PUBLIC_URL is required',
|
||||
})
|
||||
.min(1),
|
||||
companyBenefitsPaymentSecretKey: z
|
||||
.string({
|
||||
error: 'COMPANY_BENEFITS_PAYMENT_SECRET_KEY is required',
|
||||
})
|
||||
.min(1),
|
||||
})
|
||||
.parse({
|
||||
emailSender: process.env.EMAIL_SENDER,
|
||||
@@ -52,7 +59,8 @@ const env = () =>
|
||||
isEnabledDispatchOnMontonioCallback:
|
||||
process.env.MEDIPOST_ENABLE_DISPATCH_ON_MONTONIO_CALLBACK === 'true',
|
||||
medusaBackendPublicUrl: process.env.MEDUSA_BACKEND_PUBLIC_URL!,
|
||||
companyBenefitsPaymentSecretKey: process.env.COMPANY_BENEFITS_PAYMENT_SECRET_KEY!,
|
||||
companyBenefitsPaymentSecretKey:
|
||||
process.env.COMPANY_BENEFITS_PAYMENT_SECRET_KEY!,
|
||||
});
|
||||
|
||||
export const initiatePayment = async ({
|
||||
@@ -91,23 +99,30 @@ export const initiatePayment = async ({
|
||||
// place order if all paid already
|
||||
const { orderId } = await handlePlaceOrder({ cart });
|
||||
|
||||
const companyBenefitsOrderToken = jwt.sign({
|
||||
accountId,
|
||||
companyBenefitsPaymentSessionId,
|
||||
orderId,
|
||||
totalByBenefits,
|
||||
}, env().companyBenefitsPaymentSecretKey, {
|
||||
algorithm: 'HS256',
|
||||
});
|
||||
const webhookResponse = await fetch(`${env().medusaBackendPublicUrl}/hooks/payment/company-benefits_company-benefits`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
orderToken: companyBenefitsOrderToken,
|
||||
}),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
const companyBenefitsOrderToken = jwt.sign(
|
||||
{
|
||||
accountId,
|
||||
companyBenefitsPaymentSessionId,
|
||||
orderId,
|
||||
totalByBenefits,
|
||||
},
|
||||
});
|
||||
env().companyBenefitsPaymentSecretKey,
|
||||
{
|
||||
algorithm: 'HS256',
|
||||
},
|
||||
);
|
||||
const webhookResponse = await fetch(
|
||||
`${env().medusaBackendPublicUrl}/hooks/payment/company-benefits_company-benefits`,
|
||||
{
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
orderToken: companyBenefitsOrderToken,
|
||||
}),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
},
|
||||
);
|
||||
if (!webhookResponse.ok) {
|
||||
throw new Error('Failed to send company benefits webhook');
|
||||
}
|
||||
@@ -117,14 +132,15 @@ export const initiatePayment = async ({
|
||||
console.error('Error initiating payment', error);
|
||||
}
|
||||
|
||||
return { url: null, isFullyPaidByBenefits: false, orderId: null, unavailableLineItemIds: [] };
|
||||
}
|
||||
return {
|
||||
url: null,
|
||||
isFullyPaidByBenefits: false,
|
||||
orderId: null,
|
||||
unavailableLineItemIds: [],
|
||||
};
|
||||
};
|
||||
|
||||
export async function handlePlaceOrder({
|
||||
cart,
|
||||
}: {
|
||||
cart: StoreCart;
|
||||
}) {
|
||||
export async function handlePlaceOrder({ cart }: { cart: StoreCart }) {
|
||||
const { account } = await loadCurrentUserAccount();
|
||||
if (!account) {
|
||||
throw new Error('Account not found in context');
|
||||
@@ -183,6 +199,7 @@ export async function handlePlaceOrder({
|
||||
);
|
||||
bookServiceResults = await Promise.all(bookingPromises);
|
||||
}
|
||||
// TODO: SEND EMAIL
|
||||
|
||||
if (email) {
|
||||
if (analysisPackageOrder) {
|
||||
|
||||
@@ -6,7 +6,7 @@ export const isValidOpenAiEnv = async () => {
|
||||
await client.models.list();
|
||||
return true;
|
||||
} catch (e) {
|
||||
console.log('No openAI env');
|
||||
console.log('AI not enabled');
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user