UNPKG

skailan-core

Version:

Servicio de autenticación y multitenancy para Skailan.

83 lines 2.85 kB
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