const db = require("../../db/db"); const payPalProviders = require('./paypal.providers') const redsysProviders = require('./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 } }) } /* if (newOrder) { return res.status(200).send({ data: { link: newOrder.links, orderId: orderFk } }) } */ } catch (error) { console.log(error); return res.status(422).send({ data: { message: "Error al iniciar el pago" } }) } } async Success(req, res) { try { //Parameters payment const { paymentId, PayerID, orderId } = req.body const payerId = { 'payer_id': PayerID }; //API validation payent and confirnm order paypal.payment.execute(paymentId, payerId, async function (error, payment) { if (error) { return res.status(422).send({ data: { message: "payment not successful" } }) } else { if (payment.state == 'approved') { await db.order_confirm(orderId) return res.status(200).send({ data: { id: payment.id, message: "payment completed successfully", } }) } else { return res.status(422).send({ data: { message: "payment not successful" } }) } } }); } catch (error) { throw error; } } } module.exports = new PaymentServices();