From 254fa67859eae877d268ce9f114be105ded71c80 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 27 Jul 2022 22:49:23 +0100 Subject: [PATCH 1/5] allow for decimals in fiat unit --- lnbits/extensions/offlineshop/crud.py | 24 ++++++++++++------- lnbits/extensions/offlineshop/migrations.py | 10 ++++++++ lnbits/extensions/offlineshop/models.py | 11 ++++++++- .../extensions/offlineshop/static/js/index.js | 3 ++- lnbits/extensions/offlineshop/views_api.py | 16 ++++++++++--- 5 files changed, 51 insertions(+), 13 deletions(-) diff --git a/lnbits/extensions/offlineshop/crud.py b/lnbits/extensions/offlineshop/crud.py index bc4f3f14..896842d8 100644 --- a/lnbits/extensions/offlineshop/crud.py +++ b/lnbits/extensions/offlineshop/crud.py @@ -52,14 +52,20 @@ async def set_method(shop: int, method: str, wordlist: str = "") -> Optional[Sho async def add_item( - shop: int, name: str, description: str, image: Optional[str], price: int, unit: str + shop: int, + name: str, + description: str, + image: Optional[str], + price: int, + unit: str, + fiat_base_multiplier: int, ) -> int: result = await db.execute( """ - INSERT INTO offlineshop.items (shop, name, description, image, price, unit) - VALUES (?, ?, ?, ?, ?, ?) + INSERT INTO offlineshop.items (shop, name, description, image, price, unit, fiat_base_multiplier) + VALUES (?, ?, ?, ?, ?, ?, ?) """, - (shop, name, description, image, price, unit), + (shop, name, description, image, price, unit, fiat_base_multiplier), ) return result._result_proxy.lastrowid @@ -72,6 +78,7 @@ async def update_item( image: Optional[str], price: int, unit: str, + fiat_base_multiplier: int, ) -> int: await db.execute( """ @@ -80,10 +87,11 @@ async def update_item( description = ?, image = ?, price = ?, - unit = ? + unit = ?, + fiat_base_multiplier = ? WHERE shop = ? AND id = ? """, - (name, description, image, price, unit, shop, item_id), + (name, description, image, price, unit, fiat_base_multiplier, shop, item_id), ) return item_id @@ -92,12 +100,12 @@ async def get_item(id: int) -> Optional[Item]: row = await db.fetchone( "SELECT * FROM offlineshop.items WHERE id = ? LIMIT 1", (id,) ) - return Item(**dict(row)) if row else None + return Item.from_row(row) if row else None async def get_items(shop: int) -> List[Item]: rows = await db.fetchall("SELECT * FROM offlineshop.items WHERE shop = ?", (shop,)) - return [Item(**dict(row)) for row in rows] + return [Item.from_row(row) for row in rows] async def delete_item_from_shop(shop: int, item_id: int): diff --git a/lnbits/extensions/offlineshop/migrations.py b/lnbits/extensions/offlineshop/migrations.py index f7c2dfec..84aea27e 100644 --- a/lnbits/extensions/offlineshop/migrations.py +++ b/lnbits/extensions/offlineshop/migrations.py @@ -27,3 +27,13 @@ async def m001_initial(db): ); """ ) + + +async def m002_fiat_base_multiplier(db): + """ + Store the multiplier for fiat prices. We store the price in cents and + remember to multiply by 100 when we use it to convert to Dollars. + """ + await db.execute( + "ALTER TABLE offlineshop.items ADD COLUMN fiat_base_multiplier INTEGER DEFAULT 1;" + ) diff --git a/lnbits/extensions/offlineshop/models.py b/lnbits/extensions/offlineshop/models.py index 0128fdb8..ca5c73a5 100644 --- a/lnbits/extensions/offlineshop/models.py +++ b/lnbits/extensions/offlineshop/models.py @@ -2,6 +2,7 @@ import base64 import hashlib import json from collections import OrderedDict +from sqlite3 import Row from typing import Dict, List, Optional from lnurl import encode as lnurl_encode # type: ignore @@ -87,8 +88,16 @@ class Item(BaseModel): description: str image: Optional[str] enabled: bool - price: int + price: float unit: str + fiat_base_multiplier: int + + @classmethod + def from_row(cls, row: Row) -> "Item": + data = dict(row) + if data["unit"] != "sat" and data["fiat_base_multiplier"]: + data["price"] /= data["fiat_base_multiplier"] + return cls(**data) def lnurl(self, req: Request) -> str: return lnurl_encode(req.url_for("offlineshop.lnurl_response", item_id=self.id)) diff --git a/lnbits/extensions/offlineshop/static/js/index.js b/lnbits/extensions/offlineshop/static/js/index.js index 00e93241..c0390609 100644 --- a/lnbits/extensions/offlineshop/static/js/index.js +++ b/lnbits/extensions/offlineshop/static/js/index.js @@ -124,7 +124,8 @@ new Vue({ description, image, price, - unit + unit, + fiat_base_multiplier: unit == 'sat' ? 1 : 100 } try { diff --git a/lnbits/extensions/offlineshop/views_api.py b/lnbits/extensions/offlineshop/views_api.py index 5ced4351..9d7cc97d 100644 --- a/lnbits/extensions/offlineshop/views_api.py +++ b/lnbits/extensions/offlineshop/views_api.py @@ -1,6 +1,7 @@ from http import HTTPStatus from typing import Optional +from fastapi import Query from fastapi.params import Depends from lnurl.exceptions import InvalidUrl as LnurlInvalidUrl from pydantic.main import BaseModel @@ -34,7 +35,6 @@ async def api_shop_from_wallet( ): shop = await get_or_create_shop_by_wallet(wallet.wallet.id) items = await get_items(shop.id) - try: return { **shop.dict(), @@ -51,8 +51,9 @@ class CreateItemsData(BaseModel): name: str description: str image: Optional[str] - price: int + price: float unit: str + fiat_base_multiplier: int = Query(100, ge=1) @offlineshop_ext.post("/api/v1/offlineshop/items") @@ -61,9 +62,17 @@ async def api_add_or_update_item( data: CreateItemsData, item_id=None, wallet: WalletTypeInfo = Depends(get_key_type) ): shop = await get_or_create_shop_by_wallet(wallet.wallet.id) + if data.unit != "sat": + data.price = data.price * 100 if item_id == None: + await add_item( - shop.id, data.name, data.description, data.image, data.price, data.unit + shop.id, + data.name, + data.description, + data.image, + data.price, + data.unit, ) return HTMLResponse(status_code=HTTPStatus.CREATED) else: @@ -75,6 +84,7 @@ async def api_add_or_update_item( data.image, data.price, data.unit, + data.fiat_base_multiplier, ) From 85db59c3593b845bbbf9c1dc4c6299a49416d3a7 Mon Sep 17 00:00:00 2001 From: ben Date: Thu, 28 Jul 2022 10:32:17 +0100 Subject: [PATCH 2/5] make format --- lnbits/extensions/events/views_api.py | 3 ++- .../lnurlpayout/templates/lnurlpayout/_api_docs.html | 8 +------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/lnbits/extensions/events/views_api.py b/lnbits/extensions/events/views_api.py index 45ee4de0..56e6b06c 100644 --- a/lnbits/extensions/events/views_api.py +++ b/lnbits/extensions/events/views_api.py @@ -133,7 +133,8 @@ async def api_ticket_send_ticket(event_id, payment_hash, data: CreateTicket): if not ticket: raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, detail=f"Event could not be fetched." + status_code=HTTPStatus.NOT_FOUND, + detail=f"Event could not be fetched.", ) return {"paid": True, "ticket_id": ticket.id} diff --git a/lnbits/extensions/lnurlpayout/templates/lnurlpayout/_api_docs.html b/lnbits/extensions/lnurlpayout/templates/lnurlpayout/_api_docs.html index 4f921bb5..afe24c42 100644 --- a/lnbits/extensions/lnurlpayout/templates/lnurlpayout/_api_docs.html +++ b/lnbits/extensions/lnurlpayout/templates/lnurlpayout/_api_docs.html @@ -4,12 +4,7 @@ label="API info" :content-inset-level="0.5" > - + @@ -38,7 +33,6 @@ expand-separator label="Create a lnurlpayout" > - Date: Thu, 28 Jul 2022 11:08:15 +0100 Subject: [PATCH 3/5] add missing param in add item --- lnbits/extensions/offlineshop/views_api.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lnbits/extensions/offlineshop/views_api.py b/lnbits/extensions/offlineshop/views_api.py index 9d7cc97d..1bd045dd 100644 --- a/lnbits/extensions/offlineshop/views_api.py +++ b/lnbits/extensions/offlineshop/views_api.py @@ -73,6 +73,7 @@ async def api_add_or_update_item( data.image, data.price, data.unit, + data.fiat_base_multiplier, ) return HTMLResponse(status_code=HTTPStatus.CREATED) else: From 56cac668caa6aa3473eca522b0e68f01fb5870cc Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Thu, 28 Jul 2022 11:08:55 +0100 Subject: [PATCH 4/5] add mock data and fix conv --- tests/data/mock_data.zip | Bin 24900 -> 50915 bytes tools/conv.py | 11 +++++------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/tests/data/mock_data.zip b/tests/data/mock_data.zip index 0480adc27373df73d4d3a352ee4bbe5b40a7fc41..4953f53172afb3dc21a9e1fdaae5f708dd0f219e 100644 GIT binary patch delta 28623 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 z∨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 Date: Thu, 28 Jul 2022 12:09:20 +0100 Subject: [PATCH 5/5] update offline dbversion in mock data --- tests/data/mock_data.zip | Bin 50915 -> 50920 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/data/mock_data.zip b/tests/data/mock_data.zip index 4953f53172afb3dc21a9e1fdaae5f708dd0f219e..89cafa3f928386972c6bc9d274157fed5d27b767 100644 GIT binary patch delta 5507 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

-M{AtzEt(h?e>6_Sq%6{LE?VwR&qNhfNl|qg%3i zuGQvxPx&&}`|nM^uzis#-F!8_spwbGlJ5pR~|CJMywI0tvU66!;isQ0Ppqg3e8}e7m&a5o^Y_r}#Es!wY{NcrHS^m? zUpHH`+uZlHSq#6^Cw1Ao3{62Vq-IDZ{or-8YkzurO8q-2zCu|?0XLrF*yVj^W6$uc zD}JcJu+!nlf(LO$bx(KNZtvu|v+T*%ip$DVb#Lc=&Ym52(ucy5C_)~vtXZ>BZBn!R=;i`g)U)~+MGL_e?=3n`@h>1!IvL*_+ zaBwc%y?Jk_kH?w=^=|hYrmn4R*~i4~&!EkJfX7~)Bd~FYg1c7NKKaxxrQ5du-`vs5M8T}f591{AZZEif@%s7uzn;C0 zsj#!KnbWYIDx( zFG}A^ex$Eo9$kMUV@~+qHu89I$#_;3pJ%f93!Joyu!zSs^-@j$jgxZKLljdkeo{n(q4x1FrlP!6=LG5>0 z)t)mMI@5#S|Np2iaMPsL0HT}W!~d@T|M``^*F*RXXWM?+LzoAiIscW1FcUu4vTuGX zyllC&95b#_LW#-ib}O>7g2n|W^B$6&{ByS)WUhS)jNy~B_a!htRArd_Q5B-ZNkfDi z;ur>oC5^6=4fZGTwP-Ogq*j!~=j5eilqO9!G}Zu{c4faD^EEAo$AJ zFnRT%1jZSYc@8HqzMY(VIF0f1n@3y#JzT1-B7G=*`~WaDE=%=33JOkTgkbn@9_JX~hn3=DI2gS-R)R)MH? delta 5406 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