skailan-core
Version:
Servicio de autenticación y multitenancy para Skailan.
83 lines • 2.85 kB
JavaScript
import { PaymentService } from "../services/PaymentService";
/**
* Inicia un pago directo con ePayco y retorna la URL de checkout.
* POST /api/payments/start
*/
export const startPayment = async (req, res) => {
const { organizationId, planId, userId } = req.body;
if (!organizationId || !planId || !userId) {
return res.status(400).json({ error: "Faltan datos obligatorios." });
}
try {
if (!req.tenantPrisma) {
return res
.status(500)
.json({ error: "Prisma client not initialized for tenant." });
}
const paymentService = PaymentService.getInstance(req.tenantPrisma);
const { checkoutUrl, reference } = await paymentService.startPayment({
organizationId,
planId,
userId,
});
return res.status(200).json({ checkoutUrl, reference });
}
catch (err) {
if (err.message === "Plan no encontrado.") {
return res.status(404).json({ error: err.message });
}
return res
.status(500)
.json({ error: err.message || "Error al iniciar pago." });
}
};
/**
* Webhook de confirmación de pago de ePayco.
* POST /api/payments/confirm
*/
export const confirmPayment = async (req, res) => {
try {
if (!req.tenantPrisma) {
return res
.status(500)
.json({ error: "Prisma client not initialized for tenant." });
}
const paymentService = PaymentService.getInstance(req.tenantPrisma);
await paymentService.confirmPayment({
body: req.body,
expectedAmount: 0, // Se calculará en el servicio
});
return res.status(200).send("OK");
}
catch (err) {
if (err.message === "Pago no encontrado.") {
return res.status(404).send(err.message);
}
return res.status(500).send(err.message || "Error al confirmar pago");
}
};
/**
* Consulta los pagos de una organización.
* GET /api/payments/:organizationId
*/
export const listPayments = async (req, res) => {
const { organizationId } = req.params;
if (!organizationId)
return res.status(400).json({ error: "ID de organización requerido." });
try {
if (!req.tenantPrisma) {
return res
.status(500)
.json({ error: "Prisma client not initialized for tenant." });
}
const paymentService = PaymentService.getInstance(req.tenantPrisma);
const payments = await paymentService.listPayments(organizationId);
return res.status(200).json(payments);
}
catch (err) {
return res
.status(500)
.json({ error: err.message || "Error al consultar pagos." });
}
};
//# sourceMappingURL=paymentController.js.map