mirror of
https://github.com/lnbits/lnbits-legend.git
synced 2025-02-26 07:31:22 +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 . import db
|
||||||
from .models import (
|
from .models import (
|
||||||
|
CreateMarket,
|
||||||
|
CreateMarketStalls,
|
||||||
Market,
|
Market,
|
||||||
OrderDetail,
|
OrderDetail,
|
||||||
Orders,
|
Orders,
|
||||||
|
@ -332,11 +334,55 @@ async def get_diagonalley_market(market_id: str) -> Optional[Market]:
|
||||||
row = await db.fetchone(
|
row = await db.fetchone(
|
||||||
"SELECT * FROM diagonalley.markets WHERE id = ?", (market_id,)
|
"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):
|
async def get_diagonalley_market_stalls(market_id: str):
|
||||||
rows = await db.fetchall(
|
rows = await db.fetchall(
|
||||||
"SELECT * FROM diagonalley.market_stalls WHERE marketid = ?", (market_id,)
|
"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
|
id: str
|
||||||
usr: str
|
usr: str
|
||||||
name: Optional[str]
|
name: Optional[str]
|
||||||
|
|
||||||
|
class CreateMarketStalls(BaseModel):
|
||||||
|
stallid: str
|
||||||
|
|
|
@ -179,12 +179,12 @@
|
||||||
</q-form>
|
</q-form>
|
||||||
</q-card>
|
</q-card>
|
||||||
</q-dialog>
|
</q-dialog>
|
||||||
<!-- SHOP DIALOG -->
|
<!-- MARKETPLACE/SHOP DIALOG -->
|
||||||
<q-dialog v-model="marketDialog.show" position="top">
|
<q-dialog v-model="marketDialog.show" position="top">
|
||||||
<q-card class="q-pa-lg q-pt-xl" style="width: 500px">
|
<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
|
<q-toggle
|
||||||
label="Activate shop"
|
label="Activate marketplace"
|
||||||
color="primary"
|
color="primary"
|
||||||
v-model="marketDialog.data.activate"
|
v-model="marketDialog.data.activate"
|
||||||
></q-toggle>
|
></q-toggle>
|
||||||
|
@ -197,13 +197,19 @@
|
||||||
label="Stalls"
|
label="Stalls"
|
||||||
v-model.trim="marketDialog.data.stalls"
|
v-model.trim="marketDialog.data.stalls"
|
||||||
></q-select>
|
></q-select>
|
||||||
|
<q-input
|
||||||
|
filled
|
||||||
|
dense
|
||||||
|
v-model.trim="marketDialog.data.name"
|
||||||
|
label="Name"
|
||||||
|
></q-input>
|
||||||
<div class="row q-mt-lg">
|
<div class="row q-mt-lg">
|
||||||
<q-btn
|
<q-btn
|
||||||
v-if="marketDialog.data.id"
|
v-if="marketDialog.data.id"
|
||||||
unelevated
|
unelevated
|
||||||
color="primary"
|
color="primary"
|
||||||
type="submit"
|
type="submit"
|
||||||
>Update Relay</q-btn
|
>Update Marketplace</q-btn
|
||||||
>
|
>
|
||||||
<q-btn
|
<q-btn
|
||||||
v-else
|
v-else
|
||||||
|
@ -212,7 +218,7 @@
|
||||||
:disable="marketDialog.data.activate == null
|
:disable="marketDialog.data.activate == null
|
||||||
|| marketDialog.data.stalls == null"
|
|| marketDialog.data.stalls == null"
|
||||||
type="submit"
|
type="submit"
|
||||||
>Launch</q-btn
|
>Launch Marketplace</q-btn
|
||||||
>
|
>
|
||||||
|
|
||||||
<q-btn
|
<q-btn
|
||||||
|
@ -368,7 +374,7 @@
|
||||||
>+ Store
|
>+ Store
|
||||||
<q-tooltip> Create a store to list products on </q-tooltip></q-btn
|
<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)
|
>Launch frontend shop (not Nostr)
|
||||||
<q-tooltip>
|
<q-tooltip>
|
||||||
Makes a simple frontend shop for your stalls</q-tooltip
|
Makes a simple frontend shop for your stalls</q-tooltip
|
||||||
|
@ -809,6 +815,11 @@
|
||||||
return obj
|
return obj
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const mapMarkets = obj => {
|
||||||
|
obj._data = _.clone(obj)
|
||||||
|
return obj
|
||||||
|
}
|
||||||
|
|
||||||
const humanReadableZones = zones => {
|
const humanReadableZones = zones => {
|
||||||
return zones.map(z => `${z.id} - ${z.countries}`)
|
return zones.map(z => `${z.id} - ${z.countries}`)
|
||||||
}
|
}
|
||||||
|
@ -1505,7 +1516,7 @@
|
||||||
)
|
)
|
||||||
.then(response => {
|
.then(response => {
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
this.shops = response.data.map(mapShops)
|
this.markets = response.data.map(mapMarkets)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
|
@ -1514,12 +1525,12 @@
|
||||||
},
|
},
|
||||||
openShopUpdateDialog: function (linkId) {
|
openShopUpdateDialog: function (linkId) {
|
||||||
var self = this
|
var self = this
|
||||||
var link = _.findWhere(self.shops, {id: linkId})
|
var link = _.findWhere(self.markets, {id: linkId})
|
||||||
|
|
||||||
this.shopDialog.data = _.clone(link._data)
|
this.marketDialog.data = _.clone(link._data)
|
||||||
this.shopDialog.show = true
|
this.marketDialog.show = true
|
||||||
},
|
},
|
||||||
sendShopFormData: function () {
|
sendMarketplaceFormData: function () {
|
||||||
let data = {...this.marketDialog.data}
|
let data = {...this.marketDialog.data}
|
||||||
|
|
||||||
if (!data.usr) {
|
if (!data.usr) {
|
||||||
|
@ -1529,7 +1540,7 @@
|
||||||
if (data.id) {
|
if (data.id) {
|
||||||
this.updateZone(data)
|
this.updateZone(data)
|
||||||
} else {
|
} else {
|
||||||
this.createZone(data)
|
this.createMarketplace(data)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
updateShop: function (data) {
|
updateShop: function (data) {
|
||||||
|
@ -1539,24 +1550,24 @@
|
||||||
'PUT',
|
'PUT',
|
||||||
'/diagonalley/api/v1/shops' + data.id,
|
'/diagonalley/api/v1/shops' + data.id,
|
||||||
_.findWhere(self.g.user.wallets, {
|
_.findWhere(self.g.user.wallets, {
|
||||||
id: self.shopDialog.data.wallet
|
id: self.marketDialog.data.wallet
|
||||||
}).inkey,
|
}).inkey,
|
||||||
_.pick(data, 'countries', 'cost')
|
_.pick(data, 'countries', 'cost')
|
||||||
)
|
)
|
||||||
.then(function (response) {
|
.then(function (response) {
|
||||||
self.shops = _.reject(self.shops, function (obj) {
|
self.markets = _.reject(self.markets, function (obj) {
|
||||||
return obj.id == data.id
|
return obj.id == data.id
|
||||||
})
|
})
|
||||||
self.shops.push(mapShops(response.data))
|
self.markets.push(mapShops(response.data))
|
||||||
self.shopDialog.show = false
|
self.marketDialog.show = false
|
||||||
self.shopDialog.data = {}
|
self.marketDialog.data = {}
|
||||||
data = {}
|
data = {}
|
||||||
})
|
})
|
||||||
.catch(function (error) {
|
.catch(function (error) {
|
||||||
LNbits.utils.notifyApiError(error)
|
LNbits.utils.notifyApiError(error)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
createShop(data) {
|
createMarketplace(data) {
|
||||||
LNbits.api
|
LNbits.api
|
||||||
.request(
|
.request(
|
||||||
'POST',
|
'POST',
|
||||||
|
@ -1565,9 +1576,9 @@
|
||||||
data
|
data
|
||||||
)
|
)
|
||||||
.then(response => {
|
.then(response => {
|
||||||
this.shops.push(mapShops(response.data))
|
this.markets.push(mapMarkets(response.data))
|
||||||
this.shopDialog.show = false
|
this.marketDialog.show = false
|
||||||
this.shopDialog.data = {}
|
this.marketDialog.data = {}
|
||||||
data = {}
|
data = {}
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
|
@ -1576,7 +1587,7 @@
|
||||||
},
|
},
|
||||||
deleteShop: function (shopId) {
|
deleteShop: function (shopId) {
|
||||||
var self = this
|
var self = this
|
||||||
var shop = _.findWhere(self.shops, {id: shopId})
|
var shop = _.findWhere(self.markets, {id: shopId})
|
||||||
|
|
||||||
LNbits.utils
|
LNbits.utils
|
||||||
.confirmDialog('Are you sure you want to delete this Shop link?')
|
.confirmDialog('Are you sure you want to delete this Shop link?')
|
||||||
|
@ -1588,7 +1599,7 @@
|
||||||
_.findWhere(self.g.user.wallets, {id: shop.wallet}).inkey
|
_.findWhere(self.g.user.wallets, {id: shop.wallet}).inkey
|
||||||
)
|
)
|
||||||
.then(function (response) {
|
.then(function (response) {
|
||||||
self.shops = _.reject(self.shops, function (obj) {
|
self.markets = _.reject(self.markets, function (obj) {
|
||||||
return obj.id == shopId
|
return obj.id == shopId
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -1598,7 +1609,7 @@
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
exportShopsCSV: function () {
|
exportShopsCSV: function () {
|
||||||
LNbits.utils.exportCSV(this.shopsTable.columns, this.shops)
|
LNbits.utils.exportCSV(this.shopsTable.columns, this.markets)
|
||||||
},
|
},
|
||||||
////////////////////////////////////////
|
////////////////////////////////////////
|
||||||
////////////////ORDERS//////////////////
|
////////////////ORDERS//////////////////
|
||||||
|
@ -1694,7 +1705,7 @@
|
||||||
this.getProducts()
|
this.getProducts()
|
||||||
this.getZones()
|
this.getZones()
|
||||||
this.getOrders()
|
this.getOrders()
|
||||||
//this.getMarkets() # NOT YET IMPLEMENTED
|
this.getMarkets() // NOT YET IMPLEMENTED
|
||||||
this.customerKeys = [
|
this.customerKeys = [
|
||||||
'cb4c0164fe03fcdadcbfb4f76611c71620790944c24f21a1cd119395cdedfe1b',
|
'cb4c0164fe03fcdadcbfb4f76611c71620790944c24f21a1cd119395cdedfe1b',
|
||||||
'a9c17358a6dc4ceb3bb4d883eb87967a66b3453a0f3199f0b1c8eef8070c6a07'
|
'a9c17358a6dc4ceb3bb4d883eb87967a66b3453a0f3199f0b1c8eef8070c6a07'
|
||||||
|
|
|
@ -21,6 +21,8 @@ from lnbits.decorators import (
|
||||||
from ...helpers import urlsafe_short_hash
|
from ...helpers import urlsafe_short_hash
|
||||||
from . import db, diagonalley_ext
|
from . import db, diagonalley_ext
|
||||||
from .crud import (
|
from .crud import (
|
||||||
|
create_diagonalley_market,
|
||||||
|
create_diagonalley_market_stalls,
|
||||||
create_diagonalley_order,
|
create_diagonalley_order,
|
||||||
create_diagonalley_order_details,
|
create_diagonalley_order_details,
|
||||||
create_diagonalley_product,
|
create_diagonalley_product,
|
||||||
|
@ -42,6 +44,7 @@ from .crud import (
|
||||||
get_diagonalley_stalls,
|
get_diagonalley_stalls,
|
||||||
get_diagonalley_zone,
|
get_diagonalley_zone,
|
||||||
get_diagonalley_zones,
|
get_diagonalley_zones,
|
||||||
|
update_diagonalley_market,
|
||||||
update_diagonalley_product,
|
update_diagonalley_product,
|
||||||
update_diagonalley_stall,
|
update_diagonalley_stall,
|
||||||
update_diagonalley_zone,
|
update_diagonalley_zone,
|
||||||
|
@ -439,7 +442,6 @@ async def api_diagonalley_stall_create(
|
||||||
market_id: str = None,
|
market_id: str = None,
|
||||||
wallet: WalletTypeInfo = Depends(require_invoice_key),
|
wallet: WalletTypeInfo = Depends(require_invoice_key),
|
||||||
):
|
):
|
||||||
|
|
||||||
if market_id:
|
if market_id:
|
||||||
market = await get_diagonalley_market(market_id)
|
market = await get_diagonalley_market(market_id)
|
||||||
if not market:
|
if not market:
|
||||||
|
@ -451,5 +453,6 @@ async def api_diagonalley_stall_create(
|
||||||
market = await update_diagonalley_market(market_id, **data.dict())
|
market = await update_diagonalley_market(market_id, **data.dict())
|
||||||
else:
|
else:
|
||||||
market = await create_diagonalley_market(data=data)
|
market = await create_diagonalley_market(data=data)
|
||||||
|
await create_diagonalley_market_stalls(market_id=market.id, data=data.stalls)
|
||||||
|
|
||||||
return market.dict()
|
return market.dict()
|
||||||
|
|
Loading…
Add table
Reference in a new issue