const db = require("../../db/db"); const payPalProviders = require('./paypal/paypal.providers') const redsysProviders = require('./redsys/redsys.providers') class PaymentServices { async Create(req, res) { try { //parameters to return the products that will be purchased const { products, dateExpired, postalCode, customer, type } = req.body const productsFilter = await db.getProductById(products[0]); if (productsFilter[0][0].length !== products.length) { return res.status(422).send({ data: { message: "Uno de los productos no existe." } }) } let priceIntial = 0 let price = productsFilter[0][0].reduce((accumulator, curValue) => accumulator + Number(curValue.price), priceIntial) let productsIds = '' for (let i = 0; i < products.length; i++) { productsIds += `${products[i]}${i === products.length - 1 ? '' : '-'}` } //Create new order const jsonOrderData = JSON.stringify({ "customer": { customerData: { ...customer.customerData, type: type, products: productsFilter[0][0] } }, }) const order = await db.orderData_put(jsonOrderData); const orderFk = productsFilter[0][0][0].id; if (type === "paypal") { const data = await payPalProviders.New(orderFk, price) return res.status(200).send({ data: { ...data, orderId: orderFk } }) } if (type === "redsys") { const data = await redsysProviders.New(orderFk, price) return res.status(200).send({ data: { ...data, orderId: orderFk } }) } } catch (error) { return res.status(422).send({ data: { message: "Error al iniciar el pago", error: error.message } }) } } async Success(req, res) { try { //Parameters payment const { orderId, type, ...paramns } = req.body if (type === "paypal") { const payerId = { 'payer_id': paramns.PayerID }; const data = await payPalProviders.success(paramns.paymentId, payerId, orderId) return res.status(200).send({ data: { ...data, message: "Payment success" } }) } if (type === "redsys") { await redsysProviders.success(orderId) return res.status(200).send({ data: { message: "Payment success" } }) } } catch (error) { return res.status(422).send({ data: { message: "Payment Error" } }) } } } module.exports = new PaymentServices();