Skip to content

Commit bf42acf

Browse files
committed
Feat - create endpoint '/create-transaction'
1 parent 8bd3d09 commit bf42acf

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

server/routes/api/checkout.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,45 @@ async function saveLetters(transactionId, constituentId, letter, html, deliveryM
6969
}
7070
}
7171

72+
router.post('/create-transaction', async (req, res) => {
73+
try {
74+
const { sessionId } = req.body;
75+
76+
if (!sessionId) {
77+
return res.status(400).json({ error: 'Session ID is required' });
78+
}
79+
80+
const session = await stripe.checkout.sessions.retrieve(sessionId);
81+
82+
if (!session) {
83+
return res.status(404).json({ error: 'Stripe session not found' });
84+
}
85+
86+
const formattedTransaction = {
87+
stripe_transaction_id: sessionId,
88+
amount: session.amount_total,
89+
currency: session.currency,
90+
payment_method: session.payment_method_types[0] || 'unknown',
91+
email: session.customer_details?.email || 'unknown',
92+
};
93+
94+
await db('transactions').insert(formattedTransaction);
95+
96+
return res.status(201).json({
97+
message: 'Transaction created successfully',
98+
transaction: formattedTransaction,
99+
});
100+
} catch (error) {
101+
console.error('Error creating transaction:', error);
102+
103+
const statusCode = error instanceof CheckoutError ? 400 : 500;
104+
105+
return res.status(statusCode).json({ error: error.message });
106+
}
107+
});
108+
109+
110+
72111
// Refactored /create-checkout-session route
73112
router.post('/create-checkout-session', async (req, res) => {
74113
const { donation, user, letter, deliveryMethods } = req.body;

0 commit comments

Comments
 (0)