From a5825f1aa91fc5c82f2d97eb11b6e2f880d06a4f Mon Sep 17 00:00:00 2001 From: Joel Klabo Date: Wed, 11 Jan 2023 14:44:51 -0800 Subject: [PATCH 1/4] Enabled Editing the Price for NIP-5 Domains --- lnbits/extensions/nostrnip5/crud.py | 20 ++++- lnbits/extensions/nostrnip5/models.py | 9 +++ .../nostrnip5/templates/nostrnip5/index.html | 73 +++++++++++++++++++ lnbits/extensions/nostrnip5/views_api.py | 11 ++- 4 files changed, 111 insertions(+), 2 deletions(-) diff --git a/lnbits/extensions/nostrnip5/crud.py b/lnbits/extensions/nostrnip5/crud.py index fe71b981f..b71670c7e 100644 --- a/lnbits/extensions/nostrnip5/crud.py +++ b/lnbits/extensions/nostrnip5/crud.py @@ -3,7 +3,7 @@ from typing import List, Optional, Union from lnbits.helpers import urlsafe_short_hash from . import db -from .models import Address, CreateAddressData, CreateDomainData, Domain +from .models import Address, CreateAddressData, CreateDomainData, EditDomainData, Domain async def get_domain(domain_id: str) -> Optional[Domain]: @@ -169,6 +169,24 @@ async def create_address_internal(domain_id: str, data: CreateAddressData) -> Ad assert address, "Newly created address couldn't be retrieved" return address +async def update_domain_internal(wallet_id: str, data: EditDomainData) -> Domain: + if data.currency != "Satoshis": + amount = data.amount * 100 + else: + amount = data.amount + print(data) + await db.execute( + """ + UPDATE nostrnip5.domains + SET amount = ?, currency = ? + WHERE id = ? + """, + (int(amount), data.currency, data.id), + ) + + domain = await get_domain(data.id) + assert domain, "Domain couldn't be updated" + return domain async def create_domain_internal(wallet_id: str, data: CreateDomainData) -> Domain: domain_id = urlsafe_short_hash() diff --git a/lnbits/extensions/nostrnip5/models.py b/lnbits/extensions/nostrnip5/models.py index e02f2909a..71e32c370 100644 --- a/lnbits/extensions/nostrnip5/models.py +++ b/lnbits/extensions/nostrnip5/models.py @@ -1,4 +1,5 @@ from enum import Enum +from locale import currency from sqlite3 import Row from typing import List, Optional @@ -23,6 +24,14 @@ class CreateDomainData(BaseModel): amount: float = Query(..., ge=0.01) domain: str +class EditDomainData(BaseModel): + id: str + currency: str + amount: float = Query(..., ge=0.01) + + @classmethod + def from_row(cls, row: Row) -> "Domain": + return cls(**dict(row)) class Domain(BaseModel): id: str diff --git a/lnbits/extensions/nostrnip5/templates/nostrnip5/index.html b/lnbits/extensions/nostrnip5/templates/nostrnip5/index.html index 6b805cccf..6d66ecd84 100644 --- a/lnbits/extensions/nostrnip5/templates/nostrnip5/index.html +++ b/lnbits/extensions/nostrnip5/templates/nostrnip5/index.html @@ -73,6 +73,14 @@ :color="($q.dark.isActive) ? 'grey-7' : 'grey-5'" @click="deleteDomain(props.row.id)" > + {{ col.value }} @@ -226,6 +234,40 @@ + + + + + + +
+ Update Amount + Cancel +
+
+
+
+ Date: Wed, 11 Jan 2023 15:45:43 -0800 Subject: [PATCH 2/4] Formatting --- lnbits/extensions/nostrnip5/crud.py | 4 +++- lnbits/extensions/nostrnip5/models.py | 4 +++- .../nostrnip5/templates/nostrnip5/index.html | 22 +++++++++---------- lnbits/extensions/nostrnip5/views_api.py | 9 +++++++- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/lnbits/extensions/nostrnip5/crud.py b/lnbits/extensions/nostrnip5/crud.py index b71670c7e..66b9840b3 100644 --- a/lnbits/extensions/nostrnip5/crud.py +++ b/lnbits/extensions/nostrnip5/crud.py @@ -3,7 +3,7 @@ from typing import List, Optional, Union from lnbits.helpers import urlsafe_short_hash from . import db -from .models import Address, CreateAddressData, CreateDomainData, EditDomainData, Domain +from .models import Address, CreateAddressData, CreateDomainData, Domain, EditDomainData async def get_domain(domain_id: str) -> Optional[Domain]: @@ -169,6 +169,7 @@ async def create_address_internal(domain_id: str, data: CreateAddressData) -> Ad assert address, "Newly created address couldn't be retrieved" return address + async def update_domain_internal(wallet_id: str, data: EditDomainData) -> Domain: if data.currency != "Satoshis": amount = data.amount * 100 @@ -188,6 +189,7 @@ async def update_domain_internal(wallet_id: str, data: EditDomainData) -> Domain assert domain, "Domain couldn't be updated" return domain + async def create_domain_internal(wallet_id: str, data: CreateDomainData) -> Domain: domain_id = urlsafe_short_hash() diff --git a/lnbits/extensions/nostrnip5/models.py b/lnbits/extensions/nostrnip5/models.py index 71e32c370..0059a4ef1 100644 --- a/lnbits/extensions/nostrnip5/models.py +++ b/lnbits/extensions/nostrnip5/models.py @@ -24,8 +24,9 @@ class CreateDomainData(BaseModel): amount: float = Query(..., ge=0.01) domain: str + class EditDomainData(BaseModel): - id: str + id: str currency: str amount: float = Query(..., ge=0.01) @@ -33,6 +34,7 @@ class EditDomainData(BaseModel): def from_row(cls, row: Row) -> "Domain": return cls(**dict(row)) + class Domain(BaseModel): id: str wallet: str diff --git a/lnbits/extensions/nostrnip5/templates/nostrnip5/index.html b/lnbits/extensions/nostrnip5/templates/nostrnip5/index.html index 6d66ecd84..8ebaa5027 100644 --- a/lnbits/extensions/nostrnip5/templates/nostrnip5/index.html +++ b/lnbits/extensions/nostrnip5/templates/nostrnip5/index.html @@ -235,7 +235,11 @@ - +
- Update Amount + Update Amount Cancel @@ -627,13 +626,14 @@ saveEditedDomain: function () { var data = this.editFormDialog.data var self = this - + LNbits.api .request( 'PUT', '/nostrnip5/api/v1/domain', - _.findWhere(this.g.user.wallets, {id: this.editFormDialog.data.wallet}) - .inkey, + _.findWhere(this.g.user.wallets, { + id: this.editFormDialog.data.wallet + }).inkey, data ) .then(function (response) { @@ -647,7 +647,7 @@ editDomain: function (domain_id) { var self = this var data = _.findWhere(this.domains, {id: domain_id}) - + self.editFormDialog.show = true self.editFormDialog.data = data }, diff --git a/lnbits/extensions/nostrnip5/views_api.py b/lnbits/extensions/nostrnip5/views_api.py index 3dc1cbc89..99a0fe011 100644 --- a/lnbits/extensions/nostrnip5/views_api.py +++ b/lnbits/extensions/nostrnip5/views_api.py @@ -28,7 +28,12 @@ from .crud import ( rotate_address, update_domain_internal, ) -from .models import CreateAddressData, CreateDomainData, RotateAddressData, EditDomainData +from .models import ( + CreateAddressData, + CreateDomainData, + EditDomainData, + RotateAddressData, +) @nostrnip5_ext.get("/api/v1/domains", status_code=HTTPStatus.OK) @@ -89,6 +94,7 @@ async def api_domain_create( return domain + @nostrnip5_ext.put("/api/v1/domain", status_code=HTTPStatus.OK) async def api_domain_update( data: EditDomainData, wallet: WalletTypeInfo = Depends(get_key_type) @@ -98,6 +104,7 @@ async def api_domain_update( return domain + @nostrnip5_ext.delete("/api/v1/domain/{domain_id}", status_code=HTTPStatus.CREATED) async def api_domain_delete( domain_id: str, From 731ebf9f852a098060c6ca2e5fe712208ffab341 Mon Sep 17 00:00:00 2001 From: Joel Klabo Date: Wed, 11 Jan 2023 15:51:05 -0800 Subject: [PATCH 3/4] Fix EditDomainData in Test --- lnbits/extensions/nostrnip5/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/extensions/nostrnip5/models.py b/lnbits/extensions/nostrnip5/models.py index 0059a4ef1..f6492d1a9 100644 --- a/lnbits/extensions/nostrnip5/models.py +++ b/lnbits/extensions/nostrnip5/models.py @@ -31,7 +31,7 @@ class EditDomainData(BaseModel): amount: float = Query(..., ge=0.01) @classmethod - def from_row(cls, row: Row) -> "Domain": + def from_row(cls, row: Row) -> "EditDomainData": return cls(**dict(row)) From 76e84359cee57e2608684f14b6016597a6146606 Mon Sep 17 00:00:00 2001 From: Joel Klabo Date: Wed, 11 Jan 2023 18:51:09 -0800 Subject: [PATCH 4/4] Remove Accidental Import --- lnbits/extensions/nostrnip5/models.py | 1 - 1 file changed, 1 deletion(-) diff --git a/lnbits/extensions/nostrnip5/models.py b/lnbits/extensions/nostrnip5/models.py index f6492d1a9..5abbf1281 100644 --- a/lnbits/extensions/nostrnip5/models.py +++ b/lnbits/extensions/nostrnip5/models.py @@ -1,5 +1,4 @@ from enum import Enum -from locale import currency from sqlite3 import Row from typing import List, Optional