admin roadmap trips ops and payment ops
This commit is contained in:
@@ -56,6 +56,37 @@ export async function startMidtransPaymentAction(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Admin variant reconcile — skip ownership check, dipakai dari panel admin
|
||||
* `/admin/bookings/[id]` saat investigasi.
|
||||
*/
|
||||
export async function adminReconcileMidtransAction(orderId: string) {
|
||||
const session = await getServerSession(authOptions);
|
||||
if (!session?.user) {
|
||||
return { error: "Kamu harus login terlebih dahulu" };
|
||||
}
|
||||
const { isAdminEmail } = await import("@/lib/admin");
|
||||
if (!isAdminEmail(session.user.email)) {
|
||||
return { error: "Hanya admin yang bisa melakukan aksi ini" };
|
||||
}
|
||||
if (!orderId || typeof orderId !== "string") {
|
||||
return { error: "order_id tidak valid" };
|
||||
}
|
||||
|
||||
try {
|
||||
const result = await paymentService.adminReconcile(orderId);
|
||||
if (!result.ok) {
|
||||
if (result.reason === "not_found") {
|
||||
return { error: "Order tidak ditemukan di sistem" };
|
||||
}
|
||||
return { error: "Status pembayaran tidak cocok dengan tagihan" };
|
||||
}
|
||||
return { success: true as const, status: result.status };
|
||||
} catch (err) {
|
||||
return { error: (err as Error).message };
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tarik status terkini dari Midtrans untuk satu order, lalu sinkron ke DB.
|
||||
* Dipakai oleh payment page saat user kembali dari Snap (redirect bawa
|
||||
|
||||
Reference in New Issue
Block a user