This commit is contained in:
2026-05-19 12:48:41 +07:00
parent 208a91b971
commit 55a0133ed4
23 changed files with 3781 additions and 22 deletions
+70
View File
@@ -16,6 +16,13 @@ function docToRow(doc: ISummitRequest): AdminRequestRow {
status: doc.status,
notes: doc.notes,
source: doc.source,
// Payment fields
paymentStatus: doc.paymentStatus,
paypalOrderId: doc.paypalOrderId,
paypalCaptureId: doc.paypalCaptureId,
paymentAmount: doc.paymentAmount,
paymentCurrency: doc.paymentCurrency,
paymentCompletedAt: doc.paymentCompletedAt?.toISOString(),
};
}
@@ -52,3 +59,66 @@ export async function updateSummitRequestStatus(publicId: string, status: Submis
throw new Error(`Request not found: ${publicId}`);
}
}
export async function createRegistrationWithPayment(
row: AdminRequestRow,
paypalOrderId: string
): Promise<void> {
await connectDB();
await SummitRequest.create({
publicId: row.id,
submittedAt: row.submittedAt,
displayDate: row.displayDate,
fullName: row.fullName,
jobTitle: row.jobTitle,
company: row.company,
segment: row.segment,
email: row.email,
phone: row.phone,
status: row.status,
notes: row.notes,
source: row.source,
paymentStatus: "payment_pending",
paypalOrderId,
paymentAmount: 120,
paymentCurrency: "USD",
});
}
export async function markPaymentPaid(
paypalOrderId: string,
captureId: string
): Promise<void> {
await connectDB();
const updated = await SummitRequest.findOneAndUpdate(
{ paypalOrderId, paymentStatus: { $ne: "paid" } },
{
$set: {
paymentStatus: "paid",
paypalCaptureId: captureId,
paymentCompletedAt: new Date(),
},
},
{ new: true }
);
if (!updated) {
// Either not found or already paid — both are acceptable (idempotent)
console.log(`markPaymentPaid: no update for orderId=${paypalOrderId} (not found or already paid)`);
}
}
export async function markPaymentCancelled(paypalOrderId: string): Promise<void> {
await connectDB();
await SummitRequest.findOneAndUpdate(
{ paypalOrderId },
{ $set: { paymentStatus: "payment_cancelled" } },
{ new: true }
);
}
export async function findByPaypalOrderId(
paypalOrderId: string
): Promise<ISummitRequest | null> {
await connectDB();
return SummitRequest.findOne({ paypalOrderId }).lean<ISummitRequest>();
}