mirror of
https://github.com/lnbits/lnbits-legend.git
synced 2025-02-25 15:10:41 +01:00
create marketplace with stalls
This commit is contained in:
parent
6ef7411999
commit
f429037d63
4 changed files with 91 additions and 28 deletions
|
@ -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
|
||||
|
|
|
@ -103,3 +103,6 @@ class Market(BaseModel):
|
|||
id: str
|
||||
usr: str
|
||||
name: Optional[str]
|
||||
|
||||
class CreateMarketStalls(BaseModel):
|
||||
stallid: str
|
||||
|
|
|
@ -179,12 +179,12 @@
|
|||
</q-form>
|
||||
</q-card>
|
||||
</q-dialog>
|
||||
<!-- SHOP DIALOG -->
|
||||
<!-- MARKETPLACE/SHOP DIALOG -->
|
||||
<q-dialog v-model="marketDialog.show" position="top">
|
||||
<q-card class="q-pa-lg q-pt-xl" style="width: 500px">
|
||||
<q-form @submit="sendShopFormData" class="q-gutter-md">
|
||||
<q-form @submit="sendMarketplaceFormData" class="q-gutter-md">
|
||||
<q-toggle
|
||||
label="Activate shop"
|
||||
label="Activate marketplace"
|
||||
color="primary"
|
||||
v-model="marketDialog.data.activate"
|
||||
></q-toggle>
|
||||
|
@ -197,13 +197,19 @@
|
|||
label="Stalls"
|
||||
v-model.trim="marketDialog.data.stalls"
|
||||
></q-select>
|
||||
<q-input
|
||||
filled
|
||||
dense
|
||||
v-model.trim="marketDialog.data.name"
|
||||
label="Name"
|
||||
></q-input>
|
||||
<div class="row q-mt-lg">
|
||||
<q-btn
|
||||
v-if="marketDialog.data.id"
|
||||
unelevated
|
||||
color="primary"
|
||||
type="submit"
|
||||
>Update Relay</q-btn
|
||||
>Update Marketplace</q-btn
|
||||
>
|
||||
<q-btn
|
||||
v-else
|
||||
|
@ -212,7 +218,7 @@
|
|||
:disable="marketDialog.data.activate == null
|
||||
|| marketDialog.data.stalls == null"
|
||||
type="submit"
|
||||
>Launch</q-btn
|
||||
>Launch Marketplace</q-btn
|
||||
>
|
||||
|
||||
<q-btn
|
||||
|
@ -368,7 +374,7 @@
|
|||
>+ Store
|
||||
<q-tooltip> Create a store to list products on </q-tooltip></q-btn
|
||||
>
|
||||
<q-btn unelevated color="primary" @click="shopDialog.show = true"
|
||||
<q-btn unelevated color="primary" @click="marketDialog.show = true"
|
||||
>Launch frontend shop (not Nostr)
|
||||
<q-tooltip>
|
||||
Makes a simple frontend shop for your stalls</q-tooltip
|
||||
|
@ -809,6 +815,11 @@
|
|||
return obj
|
||||
}
|
||||
|
||||
const mapMarkets = obj => {
|
||||
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'
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Add table
Reference in a new issue