list marketplaces with stalls in index.html

This commit is contained in:
Tiago vasconcelos 2022-09-13 12:52:26 +01:00
parent 807eb59192
commit 6a5c0bd8ee
3 changed files with 135 additions and 3 deletions

View file

@ -201,6 +201,13 @@ async def get_diagonalley_stalls(wallet_ids: Union[str, List[str]]) -> List[Stal
) )
return [Stalls(**row) for row in rows] return [Stalls(**row) for row in rows]
async def get_diagonalley_stalls_by_ids(stall_ids: Union[str, List[str]]) -> List[Stalls]:
q = ",".join(["?"] * len(stall_ids))
rows = await db.fetchall(
f"SELECT * FROM diagonalley.stalls WHERE id IN ({q})", (*stall_ids,)
)
return [Stalls(**row) for row in rows]
async def delete_diagonalley_stall(stall_id: str) -> None: async def delete_diagonalley_stall(stall_id: str) -> None:
await db.execute("DELETE FROM diagonalley.stalls WHERE id = ?", (stall_id,)) await db.execute("DELETE FROM diagonalley.stalls WHERE id = ?", (stall_id,))
@ -346,9 +353,11 @@ async def get_diagonalley_market(market_id: str) -> Optional[Market]:
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 [{**row} for row in rows] ids = [row["stallid"] for row in rows]
return await get_diagonalley_stalls_by_ids(ids)
async def create_diagonalley_market(data: CreateMarket): async def create_diagonalley_market(data: CreateMarket):

View file

@ -669,6 +669,80 @@
</q-card-section> </q-card-section>
</q-card> </q-card>
<q-card v-if="markets.length">
<!-- MARKETPLACES TABLE -->
<q-card-section>
<div class="row items-center no-wrap q-mb-md">
<div class="col">
<h5 class="text-subtitle1 q-my-none">Marketplaces</h5>
</div>
<div class="col-auto">
<q-btn flat color="grey" @click="exportStallsCSV"
>Export to CSV</q-btn
>
</div>
</div>
<q-table
dense
flat
:data="markets"
row-key="id"
:columns="marketTable.columns"
:pagination.sync="marketTable.pagination"
>
{% raw %}
<template v-slot:header="props">
<q-tr :props="props">
<q-th auto-width></q-th>
<q-th v-for="col in props.cols" :key="col.name" :props="props">
{{ col.label }}
</q-th>
<q-th auto-width></q-th>
</q-tr>
</template>
<template v-slot:body="props">
<q-tr :props="props">
<q-td auto-width>
<q-btn
unelevated
dense
size="xs"
icon="storefront"
:color="($q.dark.isActive) ? 'grey-7' : 'grey-5'"
type="a"
:href="'/diagonalley/' + props.row.id"
target="_blank"
></q-btn>
<q-tooltip> Link to pass to stall relay </q-tooltip>
</q-td>
<q-td v-for="col in props.cols" :key="col.name" :props="props">
{{ col.value }}
</q-td>
<q-td auto-width>
<q-btn
flat
dense
size="xs"
@click="openStallUpdateDialog(props.row.id)"
icon="edit"
color="light-blue"
></q-btn>
<q-btn
flat
dense
size="xs"
@click="deleteStall(props.row.id)"
icon="cancel"
color="pink"
></q-btn>
</q-td>
</q-tr>
</template>
{% endraw %}
</q-table>
</q-card-section>
</q-card>
<q-card> <q-card>
<!-- ZONES TABLE --> <!-- ZONES TABLE -->
<q-card-section> <q-card-section>
@ -817,6 +891,17 @@
const mapMarkets = obj => { const mapMarkets = obj => {
obj._data = _.clone(obj) obj._data = _.clone(obj)
obj.stores = []
LNbits.api
.request('GET', `/diagonalley/api/v1/markets/${obj.id}/stalls`, null)
.then(response => {
if (response.data) {
obj.stores = response.data.map(s => s.name).toString()
}
})
.catch(error => {
LNbits.utils.notifyApiError(error)
})
return obj return obj
} }
@ -832,6 +917,7 @@
products: [], products: [],
orders: [], orders: [],
stalls: [], stalls: [],
markets: [],
zones: [], zones: [],
zoneOptions: [], zoneOptions: [],
customerKeys: [], customerKeys: [],
@ -1015,6 +1101,31 @@
rowsPerPage: 10 rowsPerPage: 10
} }
}, },
marketTable: {
columns: [
{
name: 'id',
align: 'left',
label: 'ID',
field: 'id'
},
{
name: 'name',
align: 'left',
label: 'Name',
field: 'name'
},
{
name: 'stores',
align: 'left',
label: 'Stores',
field: 'stores'
}
],
pagination: {
rowsPerPage: 10
}
},
zonesTable: { zonesTable: {
columns: [ columns: [
{ {
@ -1517,12 +1628,14 @@
.then(response => { .then(response => {
if (response.data) { if (response.data) {
this.markets = response.data.map(mapMarkets) this.markets = response.data.map(mapMarkets)
console.log(this.markets)
} }
}) })
.catch(error => { .catch(error => {
LNbits.utils.notifyApiError(error) LNbits.utils.notifyApiError(error)
}) })
}, },
openShopUpdateDialog: function (linkId) { openShopUpdateDialog: function (linkId) {
var self = this var self = this
var link = _.findWhere(self.markets, {id: linkId}) var link = _.findWhere(self.markets, {id: linkId})

View file

@ -1,5 +1,6 @@
from base64 import urlsafe_b64encode from base64 import urlsafe_b64encode
from http import HTTPStatus from http import HTTPStatus
from typing import List
from uuid import uuid4 from uuid import uuid4
from fastapi import Request from fastapi import Request
@ -33,6 +34,7 @@ from .crud import (
delete_diagonalley_stall, delete_diagonalley_stall,
delete_diagonalley_zone, delete_diagonalley_zone,
get_diagonalley_market, get_diagonalley_market,
get_diagonalley_market_stalls,
get_diagonalley_markets, get_diagonalley_markets,
get_diagonalley_order, get_diagonalley_order,
get_diagonalley_order_details, get_diagonalley_order_details,
@ -42,6 +44,7 @@ from .crud import (
get_diagonalley_products, get_diagonalley_products,
get_diagonalley_stall, get_diagonalley_stall,
get_diagonalley_stalls, get_diagonalley_stalls,
get_diagonalley_stalls_by_ids,
get_diagonalley_zone, get_diagonalley_zone,
get_diagonalley_zones, get_diagonalley_zones,
update_diagonalley_market, update_diagonalley_market,
@ -426,7 +429,8 @@ async def api_diagonalley_stall_order(
@diagonalley_ext.get("/api/v1/markets") @diagonalley_ext.get("/api/v1/markets")
async def api_diagonalley_orders(wallet: WalletTypeInfo = Depends(get_key_type)): async def api_diagonalley_markets(wallet: WalletTypeInfo = Depends(get_key_type)):
# await get_diagonalley_market_stalls(market_id="FzpWnMyHQMcRppiGVua4eY")
try: try:
return [ return [
market.dict() market.dict()
@ -436,6 +440,12 @@ async def api_diagonalley_orders(wallet: WalletTypeInfo = Depends(get_key_type))
return {"message": "We could not retrieve the markets."} return {"message": "We could not retrieve the markets."}
@diagonalley_ext.get("/api/v1/markets/{market_id}/stalls")
async def api_diagonalley_market_stalls(market_id: str):
stall_ids = await get_diagonalley_market_stalls(market_id)
return stall_ids
@diagonalley_ext.post("/api/v1/markets") @diagonalley_ext.post("/api/v1/markets")
@diagonalley_ext.put("/api/v1/markets/{market_id}") @diagonalley_ext.put("/api/v1/markets/{market_id}")
async def api_diagonalley_stall_create( async def api_diagonalley_stall_create(