From fe2990f367b7313792d8d099efad471ed5d501b0 Mon Sep 17 00:00:00 2001 From: Jesse Egbosionu Date: Sun, 14 Jan 2024 16:30:19 +0100 Subject: [PATCH] feat: handle reject handler and add rates page --- pages/api/v1/{home.js => rates.js} | 27 +++++++------- pages/rates.js | 57 ++++++++++++++++++++++++++++++ utils/api.js | 5 +++ 3 files changed, 74 insertions(+), 15 deletions(-) rename pages/api/v1/{home.js => rates.js} (91%) create mode 100644 pages/rates.js create mode 100644 utils/api.js diff --git a/pages/api/v1/home.js b/pages/api/v1/rates.js similarity index 91% rename from pages/api/v1/home.js rename to pages/api/v1/rates.js index c69dd50..db52050 100644 --- a/pages/api/v1/home.js +++ b/pages/api/v1/rates.js @@ -66,21 +66,11 @@ export default async (req, res) => { .then(response => response.data[0].baseRate) .catch(error => console.log('error', error)); - - await Promise.all([send_call, tap_call]) - .then(([tap_response, send_response]) => { - rates.send = send_response.toString(); - rates.tap = tap_response.toString(); - }) - .catch(error => { - console.error(error); - }); - const { exec } = require('child_process'); const curlCommand = 'curl https://acemoneytransfer.com/make-request -H "authority: acemoneytransfer.com" -H "accept: */*" -H "accept-language: en-GB,en-US;q=0.9,en;q=0.8" -H "content-type: application/x-www-form-urlencoded; charset=UTF-8" -H "origin: https://acemoneytransfer.com" -H "referer: https://acemoneytransfer.com/Nigeria/Send-Money-to-Nigeria" -H \'sec-ch-ua: "Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"\' -H "sec-ch-ua-mobile: ?0" -H \'sec-ch-ua-platform: "macOS"\' -H "sec-fetch-dest: empty" -H "sec-fetch-mode: cors" -H "sec-fetch-site: same-origin" -H "user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" -H "x-requested-with: XMLHttpRequest" --data-raw "uri=rate%2Fcalculator&type=POST&data%5Bsrc_amount%5D=100&data%5Bdest_amount%5D=&data%5Buser_currency%5D=EUR&data%5Bcalculation_mode%5D=S&data%5Bdest_iso_numeric_code%5D=566&data%5Bsrc_iso_numeric_code%5D=528&data%5Bsepecific_payer_id%5D=1199&auth=true" --compressed'; - await new Promise((resolve, reject) => { + const ace_call = new Promise((resolve, reject) => { exec(curlCommand, (error, stdout, stderr) => { if (error) { reject(`Error: ${error.message}`); @@ -91,11 +81,18 @@ export default async (req, res) => { reject(parseError.message); } }); - }).then((result) => { - rates.ace = result.data.exchange_rate.toString(); - }) - + }).then((result) => result.data.exchange_rate.toString() + ).catch((result) => "Could not get ace transfer rates") + await Promise.all([ace_call, send_call, tap_call]) + .then(([tap_response, send_response, ace_reponse]) => { + rates.send = parseFloat(send_response); + rates.tap = parseFloat(tap_response); + rates.ace = parseFloat(ace_reponse); + }) + .catch(error => { + console.error(error); + }); return res.status(200).json(rates); diff --git a/pages/rates.js b/pages/rates.js new file mode 100644 index 0000000..7b4f0ac --- /dev/null +++ b/pages/rates.js @@ -0,0 +1,57 @@ +import Head from 'next/head'; +import { useEffect, useState } from 'react'; +import { fetchData } from '../utils/api'; + +export default function Rates() { + const [data, setData] = useState(null); + + useEffect(() => { + const fetchDataFromApi = async () => { + try { + const apiData = await fetchData(); + + setData(apiData); + } catch (error) { + console.error('Error fetching data:', error); + } + }; + + fetchDataFromApi(); + }, []); + + const formatCurrency = (value) => { + return new Intl.NumberFormat('en-NG', { + style: 'currency', + currency: 'NGN', + }).format(value); + }; + + // Your UI rendering logic here, using the 'data' state + return ( +
+ + EUR Rates + + +
+ +
+
+

For €1 you'll get the following rates

+
+ {data && ( +
+

Send: {formatCurrency(data.send)}

+

TapTap: {formatCurrency(data.tap)}

+

AceTransfer: {formatCurrency(data.ace)}

+
+ )} +
+
+
+ ); +} diff --git a/utils/api.js b/utils/api.js new file mode 100644 index 0000000..613c378 --- /dev/null +++ b/utils/api.js @@ -0,0 +1,5 @@ +export async function fetchData() { + const response = await fetch('/api/v1/rates'); + const data = await response.json(); + return data; +} \ No newline at end of file