const express = require('express'); const { listAssets, getPrices, buildQuote, getStatus } = require('./price_engine'); const router = express.Router(); function sendError(res, status, message, extra = {}) { return res.status(status).json({ ok: false, error: message, ...extra }); } router.get('/health', (req, res) => { try { return res.json({ ok: true, service: 'otb-oracle', version: '0.1.0', time_utc: new Date().toISOString(), status: 'healthy' }); } catch (err) { return sendError(res, 500, 'health_failed', { detail: err.message }); } }); router.get('/assets', (req, res) => { try { return res.json(listAssets()); } catch (err) { return sendError(res, 500, 'assets_failed', { detail: err.message }); } }); router.get('/prices', (req, res) => { try { return res.json(getPrices()); } catch (err) { return sendError(res, 500, 'prices_failed', { detail: err.message }); } }); router.get('/price/:pairKey', (req, res) => { try { const pairKey = String(req.params.pairKey || '').trim().toUpperCase(); const prices = getPrices(); const asset = prices.assets?.[pairKey]; if (!asset) { return sendError(res, 404, 'asset_not_found', { pair_key: pairKey }); } return res.json(asset); } catch (err) { return sendError(res, 500, 'price_lookup_failed', { detail: err.message }); } }); router.get('/quote', (req, res) => { try { const fiat = req.query.fiat || 'CAD'; const amount = req.query.amount; if (amount === undefined || amount === null || amount === '') { return sendError(res, 400, 'missing_amount'); } const quote = buildQuote({ fiat, amount }); return res.json(quote); } catch (err) { return sendError(res, 400, 'quote_failed', { detail: err.message }); } }); router.get('/status', (req, res) => { try { return res.json(getStatus()); } catch (err) { return sendError(res, 500, 'status_failed', { detail: err.message }); } }); module.exports = router;