diff --git a/lnbits/extensions/diagonalley/crud.py b/lnbits/extensions/diagonalley/crud.py index 557b45d23..664dcb064 100644 --- a/lnbits/extensions/diagonalley/crud.py +++ b/lnbits/extensions/diagonalley/crud.py @@ -9,6 +9,8 @@ from lnbits.settings import WALLET from . import db from .models import ( + CreateMarket, + CreateMarketStalls, Market, OrderDetail, Orders, @@ -332,11 +334,55 @@ async def get_diagonalley_market(market_id: str) -> Optional[Market]: row = await db.fetchone( "SELECT * FROM diagonalley.markets WHERE id = ?", (market_id,) ) - Market(**row) if row else None + return Market(**row) if row else None async def get_diagonalley_market_stalls(market_id: str): rows = await db.fetchall( "SELECT * FROM diagonalley.market_stalls WHERE marketid = ?", (market_id,) ) - return [Stalls(**row) for row in rows] + + return [{**row} for row in rows] + +async def create_diagonalley_market(data: CreateMarket): + market_id = urlsafe_short_hash() + + await db.execute( + """ + INSERT INTO diagonalley.markets (id, usr, name) + VALUES (?, ?, ?) + """, + ( + market_id, + data.usr, + data.name, + ), + ) + market = await get_diagonalley_market(market_id) + assert market, "Newly created market couldn't be retrieved" + return market + + +async def create_diagonalley_market_stalls( + market_id: str, data: List[CreateMarketStalls] +): + for stallid in data: + id = urlsafe_short_hash() + + await db.execute( + """ + INSERT INTO diagonalley.market_stalls (id, marketid, stallid) + VALUES (?, ?, ?) + """, + ( + id, + market_id, + stallid, + ), + ) + market_stalls = await get_diagonalley_market_stalls(market_id) + return market_stalls + + +async def update_diagonalley_market(market_id): + pass diff --git a/lnbits/extensions/diagonalley/models.py b/lnbits/extensions/diagonalley/models.py index e6516037f..0c32798c5 100644 --- a/lnbits/extensions/diagonalley/models.py +++ b/lnbits/extensions/diagonalley/models.py @@ -103,3 +103,6 @@ class Market(BaseModel): id: str usr: str name: Optional[str] + +class CreateMarketStalls(BaseModel): + stallid: str diff --git a/lnbits/extensions/diagonalley/templates/diagonalley/index.html b/lnbits/extensions/diagonalley/templates/diagonalley/index.html index 516544ea7..8d812a4ab 100644 --- a/lnbits/extensions/diagonalley/templates/diagonalley/index.html +++ b/lnbits/extensions/diagonalley/templates/diagonalley/index.html @@ -179,12 +179,12 @@ - + - + @@ -197,13 +197,19 @@ label="Stalls" v-model.trim="marketDialog.data.stalls" > +
Update RelayUpdate Marketplace LaunchLaunch Marketplace + Store Create a store to list products on - Launch frontend shop (not Nostr) Makes a simple frontend shop for your stalls { + obj._data = _.clone(obj) + return obj + } + const humanReadableZones = zones => { return zones.map(z => `${z.id} - ${z.countries}`) } @@ -1505,7 +1516,7 @@ ) .then(response => { if (response.data) { - this.shops = response.data.map(mapShops) + this.markets = response.data.map(mapMarkets) } }) .catch(error => { @@ -1514,12 +1525,12 @@ }, openShopUpdateDialog: function (linkId) { var self = this - var link = _.findWhere(self.shops, {id: linkId}) + var link = _.findWhere(self.markets, {id: linkId}) - this.shopDialog.data = _.clone(link._data) - this.shopDialog.show = true + this.marketDialog.data = _.clone(link._data) + this.marketDialog.show = true }, - sendShopFormData: function () { + sendMarketplaceFormData: function () { let data = {...this.marketDialog.data} if (!data.usr) { @@ -1529,7 +1540,7 @@ if (data.id) { this.updateZone(data) } else { - this.createZone(data) + this.createMarketplace(data) } }, updateShop: function (data) { @@ -1539,24 +1550,24 @@ 'PUT', '/diagonalley/api/v1/shops' + data.id, _.findWhere(self.g.user.wallets, { - id: self.shopDialog.data.wallet + id: self.marketDialog.data.wallet }).inkey, _.pick(data, 'countries', 'cost') ) .then(function (response) { - self.shops = _.reject(self.shops, function (obj) { + self.markets = _.reject(self.markets, function (obj) { return obj.id == data.id }) - self.shops.push(mapShops(response.data)) - self.shopDialog.show = false - self.shopDialog.data = {} + self.markets.push(mapShops(response.data)) + self.marketDialog.show = false + self.marketDialog.data = {} data = {} }) .catch(function (error) { LNbits.utils.notifyApiError(error) }) }, - createShop(data) { + createMarketplace(data) { LNbits.api .request( 'POST', @@ -1565,9 +1576,9 @@ data ) .then(response => { - this.shops.push(mapShops(response.data)) - this.shopDialog.show = false - this.shopDialog.data = {} + this.markets.push(mapMarkets(response.data)) + this.marketDialog.show = false + this.marketDialog.data = {} data = {} }) .catch(error => { @@ -1576,7 +1587,7 @@ }, deleteShop: function (shopId) { var self = this - var shop = _.findWhere(self.shops, {id: shopId}) + var shop = _.findWhere(self.markets, {id: shopId}) LNbits.utils .confirmDialog('Are you sure you want to delete this Shop link?') @@ -1588,7 +1599,7 @@ _.findWhere(self.g.user.wallets, {id: shop.wallet}).inkey ) .then(function (response) { - self.shops = _.reject(self.shops, function (obj) { + self.markets = _.reject(self.markets, function (obj) { return obj.id == shopId }) }) @@ -1598,7 +1609,7 @@ }) }, exportShopsCSV: function () { - LNbits.utils.exportCSV(this.shopsTable.columns, this.shops) + LNbits.utils.exportCSV(this.shopsTable.columns, this.markets) }, //////////////////////////////////////// ////////////////ORDERS////////////////// @@ -1694,7 +1705,7 @@ this.getProducts() this.getZones() this.getOrders() - //this.getMarkets() # NOT YET IMPLEMENTED + this.getMarkets() // NOT YET IMPLEMENTED this.customerKeys = [ 'cb4c0164fe03fcdadcbfb4f76611c71620790944c24f21a1cd119395cdedfe1b', 'a9c17358a6dc4ceb3bb4d883eb87967a66b3453a0f3199f0b1c8eef8070c6a07' diff --git a/lnbits/extensions/diagonalley/views_api.py b/lnbits/extensions/diagonalley/views_api.py index 4236d7429..6226e28b7 100644 --- a/lnbits/extensions/diagonalley/views_api.py +++ b/lnbits/extensions/diagonalley/views_api.py @@ -21,6 +21,8 @@ from lnbits.decorators import ( from ...helpers import urlsafe_short_hash from . import db, diagonalley_ext from .crud import ( + create_diagonalley_market, + create_diagonalley_market_stalls, create_diagonalley_order, create_diagonalley_order_details, create_diagonalley_product, @@ -42,6 +44,7 @@ from .crud import ( get_diagonalley_stalls, get_diagonalley_zone, get_diagonalley_zones, + update_diagonalley_market, update_diagonalley_product, update_diagonalley_stall, update_diagonalley_zone, @@ -439,7 +442,6 @@ async def api_diagonalley_stall_create( market_id: str = None, wallet: WalletTypeInfo = Depends(require_invoice_key), ): - if market_id: market = await get_diagonalley_market(market_id) if not market: @@ -451,5 +453,6 @@ async def api_diagonalley_stall_create( market = await update_diagonalley_market(market_id, **data.dict()) else: market = await create_diagonalley_market(data=data) + await create_diagonalley_market_stalls(market_id=market.id, data=data.stalls) return market.dict()