From 25c26b8cfbaacb863172bfd98619b2d084255aec Mon Sep 17 00:00:00 2001 From: Filip Borum Poulsen Date: Tue, 25 Apr 2023 14:29:53 +0200 Subject: [PATCH] Added stripe refund on user and trainer cancel --- server/src/routes/order.ts | 9 +++++++++ server/src/routes/trainer/order.ts | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/server/src/routes/order.ts b/server/src/routes/order.ts index 39ccc1e..09b9961 100644 --- a/server/src/routes/order.ts +++ b/server/src/routes/order.ts @@ -10,6 +10,7 @@ import Trainer from "../interfaces/trainer"; import { Order, OrderObject, OrderObjectStatus, OrderStatus, PaymentIntentStatus } from "../interfaces/order"; import { sendUserCancelledOrderEmail } from "../mail/userCancelledOrder"; import User from "../interfaces/user"; +import { stripe } from "../stripe"; const router: Router = express.Router(); @@ -28,6 +29,7 @@ router.post("/order/:id/cancel", UserAuth, async (req: AuthedRequest, res: Respo price, created_at, payment_intents.status as payment_intent_status, + payment_intents.external_id as payment_intent_id, start_time as "startDate", end_time as "endDate", json_build_object( @@ -65,6 +67,8 @@ router.post("/order/:id/cancel", UserAuth, async (req: AuthedRequest, res: Respo const user: User = lookupResult.rows[0].user; lookupResult.rows[0].user = undefined; + const paymentIntentId = lookupResult.rows[0].payment_intent_id; + lookupResult.rows[0].payment_intent_id = undefined; const order: Order = lookupResult.rows[0]; const dateValidation = Joi.date().min(Date.now()).validate(order.startDate) @@ -81,6 +85,11 @@ router.post("/order/:id/cancel", UserAuth, async (req: AuthedRequest, res: Respo req.params.id ]); + await stripe.refunds.create({ + payment_intent: paymentIntentId, + reason: "requested_by_customer" + }); + sendUserCancelledOrderEmail(user, order); return res.sendStatus(204); diff --git a/server/src/routes/trainer/order.ts b/server/src/routes/trainer/order.ts index 59ac15e..00e5af8 100644 --- a/server/src/routes/trainer/order.ts +++ b/server/src/routes/trainer/order.ts @@ -11,6 +11,7 @@ import { TrainerAuth } from "../../middlewares/auth"; import User from "../../interfaces/user"; import { sendTrainerMovedOrderEmail } from "../../mail/trainerMovedOrder"; import { sendTrainerCancelledOrderEmail } from "../../mail/trainerCancelledOrder"; +import { stripe } from "../../stripe"; const router: Router = express.Router(); @@ -272,6 +273,7 @@ router.post("/trainer/order/:id/cancel", TrainerAuth, async (req: AuthedRequest, price, created_at, payment_intents.status as payment_intent_status, + payment_intents.external_id as payment_intent_id, start_time as "startDate", end_time as "endDate", json_build_object( @@ -309,6 +311,8 @@ router.post("/trainer/order/:id/cancel", TrainerAuth, async (req: AuthedRequest, const user: User = lookupResult.rows[0].user; lookupResult.rows[0].user = undefined; + const paymentIntentId = lookupResult.rows[0].payment_intent_id; + lookupResult.rows[0].payment_intent_id = undefined; const order: Order = lookupResult.rows[0]; const dateValidation = Joi.date().min(Date.now()).validate(order.startDate) @@ -325,6 +329,11 @@ router.post("/trainer/order/:id/cancel", TrainerAuth, async (req: AuthedRequest, req.params.id ]); + await stripe.refunds.create({ + payment_intent: paymentIntentId, + reason: "requested_by_customer" + }); + sendTrainerCancelledOrderEmail(user, order); return res.sendStatus(204);