const db = require("../../db/db"); const payPalProviders = require('./paypal/paypal.providers') const redsysProviders = require('./redsys/redsys.providers') class PaymentServices { async Create(req, res) { try { //parĂ¢metros para retornar os produtos que serĂ£o comprados const { products, dateExpired, postalCode, customer, type } = req.body const _products = await db.getProducts(dateExpired, postalCode) const productsFilter = _products[0].filter((item) => { if (products.includes(item.id)) { return item } }); if (productsFilter.length !== products.length) { return res.status(422).send({ data: { message: "Uno de los productos no existe." } }) } let priceIntial = 0 let price = productsFilter.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 } }, }) const order = await db.orderData_put(jsonOrderData); const orderFk = order[0][0].orderFk 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();