From 918e9be7ed8daccb778c4c951b3bdb4c990c2e56 Mon Sep 17 00:00:00 2001 From: Tiago Vasconcelos Date: Fri, 14 Jan 2022 12:19:30 +0000 Subject: [PATCH] Upgrade conversion endpoint (#491) --- lnbits/core/views/api.py | 25 +++++++++++++++++++++---- lnbits/utils/exchange_rates.py | 3 +++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index d82e541bb..667083e20 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -3,7 +3,7 @@ import hashlib import json from binascii import unhexlify from http import HTTPStatus -from typing import Dict, Optional, Union +from typing import Dict, List, Optional, Union from urllib.parse import ParseResult, parse_qs, urlencode, urlparse, urlunparse import httpx @@ -12,6 +12,7 @@ from fastapi.exceptions import HTTPException from fastapi.param_functions import Depends from fastapi.params import Body from pydantic import BaseModel +from pydantic.fields import Field from sse_starlette.sse import EventSourceResponse from lnbits import bolt11, lnurl @@ -25,7 +26,11 @@ from lnbits.decorators import ( ) from lnbits.helpers import url_for from lnbits.requestvars import g -from lnbits.utils.exchange_rates import currencies, fiat_amount_as_satoshis +from lnbits.utils.exchange_rates import ( + currencies, + fiat_amount_as_satoshis, + satoshis_amount_as_fiat, +) from .. import core_app, db from ..crud import ( @@ -504,9 +509,21 @@ async def api_list_currencies_available(): class ConversionData(BaseModel): - unit: str + from_: str = Field('sat', alias="from") amount: float + to: str = Query('usd') @core_app.post("/api/v1/conversion") async def api_fiat_as_sats(data: ConversionData): - return await fiat_amount_as_satoshis(data.amount, data.unit) + output = {} + if data.from_ == 'sat': + output["sats"] = int(data.amount) + output["BTC"] = data.amount / 100000000 + for currency in data.to.split(','): + output[currency.strip().upper()] = await satoshis_amount_as_fiat(data.amount, currency.strip()) + return output + else: + output[data.from_.upper()] = data.amount + output["sats"] = await fiat_amount_as_satoshis(data.amount, data.to) + output["BTC"] = output["sats"] / 100000000 + return output diff --git a/lnbits/utils/exchange_rates.py b/lnbits/utils/exchange_rates.py index ab425c2a2..585904385 100644 --- a/lnbits/utils/exchange_rates.py +++ b/lnbits/utils/exchange_rates.py @@ -284,3 +284,6 @@ async def get_fiat_rate_satoshis(currency: str) -> float: async def fiat_amount_as_satoshis(amount: float, currency: str) -> int: return int(amount * (await get_fiat_rate_satoshis(currency))) + +async def satoshis_amount_as_fiat(amount: float, currency: str) -> float: + return float(amount / (await get_fiat_rate_satoshis(currency)))