sarlink-portal/actions/payment.ts
i701 586c0e7210 Refactor Omada actions and enhance payment processing
- Simplified fetchOmadaGroupProfiles function by removing unnecessary parameters and using environment variables for base URL and API key.
- Improved error handling in fetchOmadaGroupProfiles to check for error codes in the response.
- Updated addDevicesToGroup function to remove redundant parameters and streamline device addition logic.
- Integrated formatMacAddress utility to ensure consistent MAC address formatting during payment verification.
- Enhanced verifyPayment function to include device addition upon successful payment verification, with improved logging.
- Refactored DevicesToPay component to clean up payment verification logic and improve UI responsiveness.

These changes enhance the clarity and efficiency of device management and payment processing functionalities.
2024-12-21 00:24:29 +05:00

97 lines
1.9 KiB
TypeScript

"use server";
import prisma from "@/lib/db";
import type { PaymentType } from "@/lib/types";
import { formatMacAddress } from "@/lib/utils";
import { revalidatePath } from "next/cache";
import { addDevicesToGroup } from "./omada-actions";
export async function createPayment(data: PaymentType) {
console.log("data", data);
const payment = await prisma.payment.create({
data: {
amount: data.amount,
numberOfMonths: data.numberOfMonths,
paid: data.paid,
userId: data.userId,
devices: {
connect: data.deviceIds.map((id) => {
return {
id,
};
}),
},
},
});
revalidatePath("/devices");
return payment;
}
type VerifyPaymentType = {
paymentId?: string;
benefName: string;
accountNo?: string;
absAmount: string;
time: string;
};
export async function verifyPayment(data: VerifyPaymentType) {
console.log({ data });
try {
const payment = await prisma.payment.findUnique({
where: {
id: data.paymentId,
},
include: {
devices: true,
},
});
const response = await fetch(
"https://verifypaymentsapi.baraveli.dev/verify-payment",
{
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(data),
},
);
const json = await response.json();
console.log(json);
const newDevices = payment?.devices.map((d) => {
return {
name: d.name,
macAddress: formatMacAddress(d.mac),
};
});
if (json.success === true) {
await Promise.all([
prisma.payment.update({
where: {
id: payment?.id,
},
data: {
paid: true,
},
}),
]);
}
const res = await addDevicesToGroup({
groupId: process.env.OMADA_GROUP_ID,
siteId: process.env.OMADA_SITE_ID,
newDevices: newDevices || [],
});
revalidatePath("/payment[paymentId]");
console.log(res);
return res;
} catch (error) {
console.error(error);
}
}
export async function addDevicesToOmada() {
console.log("hi");
}