initial launch market

This commit is contained in:
Tiago vasconcelos 2022-07-27 15:28:58 +01:00
parent 0f238286a3
commit 6d5e9aba39
6 changed files with 127 additions and 11 deletions

View file

@ -12,6 +12,7 @@ from lnbits.settings import WALLET
from . import db
from .models import (
Market,
Orders,
Products,
Stalls,
@ -261,3 +262,27 @@ async def get_diagonalley_orders(wallet_ids: Union[str, List[str]]) -> List[Orde
async def delete_diagonalley_order(order_id: str) -> None:
await db.execute("DELETE FROM diagonalley.orders WHERE id = ?", (order_id,))
### Market/Marketplace
async def get_diagonalley_markets(user: str) -> List[Market]:
rows = await db.fetchall(
'SELECT * FROM diagonalley.markets WHERE usr = ?', (user,)
)
return [Market(**row) for row in rows]
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
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]

View file

@ -87,3 +87,29 @@ async def m001_initial(db):
"""
)
"""
Initial market table.
"""
await db.execute(
"""
CREATE TABLE diagonalley.markets (
id TEXT PRIMARY KEY,
usr TEXT NOT NULL,
name TEXT
);
"""
)
"""
Initial market stalls table.
"""
await db.execute(
"""
CREATE TABLE diagonalley.market_stalls (
id TEXT PRIMARY KEY,
marketid TEXT NOT NULL REFERENCES {db.references_schema}markets (id),
stallid TEXT NOT NULL REFERENCES {db.references_schema}stalls (id)
);
"""
)

View file

@ -1,4 +1,4 @@
from typing import Optional
from typing import List, Optional
from fastapi.param_functions import Query
from pydantic import BaseModel
@ -81,3 +81,13 @@ class Orders(BaseModel):
paid: bool
shipped: bool
time: int
class CreateMarket(BaseModel):
usr: str = Query(...)
name: str = Query(None)
stalls: List[str] = Query(...)
class Market(BaseModel):
id: str
usr: str
name: Optional[str]

View file

@ -816,7 +816,7 @@ new Vue({
{
name: 'stall',
align: 'left',
label: 'Stall',
label: 'Store',
field: 'stall'
},
{
@ -1384,23 +1384,21 @@ new Vue({
LNbits.utils.exportCSV(this.zonesTable.columns, this.zones)
},
////////////////////////////////////////
//////////////////SHOP//////////////////
//////////////////MARKET//////////////////
////////////////////////////////////////
getShops: function () {
var self = this
getMarkets(){
LNbits.api
.request(
'GET',
'/diagonalley/api/v1/shops?all_wallets=true',
'/diagonalley/api/v1/markets',
this.g.user.wallets[0].inkey
)
.then(function (response) {
.then((response) => {
if (response.data) {
self.shops = response.data.map(mapShops)
this.shops = response.data.map(mapShops)
}
})
.catch(function (error) {
.catch((error) => {
LNbits.utils.notifyApiError(error)
})
},
@ -1451,7 +1449,6 @@ new Vue({
})
},
createShop: function (data) {
var self = this
console.log('cuntywoo')
LNbits.api
.request(
@ -1591,6 +1588,7 @@ new Vue({
this.getProducts()
this.getZones()
this.getOrders()
this.getMarkets()
this.customerKeys = [
'cb4c0164fe03fcdadcbfb4f76611c71620790944c24f21a1cd119395cdedfe1b',
'a9c17358a6dc4ceb3bb4d883eb87967a66b3453a0f3199f0b1c8eef8070c6a07'

View file

@ -38,3 +38,21 @@ async def display(request: Request, stall_id):
"products": [product.dict() for product in products]
},
)
@diagonalley_ext.get("/{market_id}", response_class=HTMLResponse)
async def display(request: Request, stall_id):
stalls = await get_diagonalley_stall(stall_id)
products = await get_diagonalley_products(stall_id)
if not stall:
raise HTTPException(
status_code=HTTPStatus.NOT_FOUND, detail="Stall does not exist."
)
return diagonalley_renderer().TemplateResponse(
"diagonalley/stall.html",
{
"request": request,
"stall": stall.dict(),
"products": [product.dict() for product in products]
},
)

View file

@ -25,6 +25,8 @@ from .crud import (
delete_diagonalley_product,
delete_diagonalley_stall,
delete_diagonalley_zone,
get_diagonalley_market,
get_diagonalley_markets,
get_diagonalley_order,
get_diagonalley_orders,
get_diagonalley_product,
@ -38,6 +40,7 @@ from .crud import (
update_diagonalley_zone,
)
from .models import (
CreateMarket,
Orders,
Products,
Stalls,
@ -383,3 +386,39 @@ async def api_diagonalley_stall_order(
),
)
return {"checking_id": checking_id, "payment_request": payment_request}
##
# MARKETS
##
@diagonalley_ext.get("/api/v1/markets")
async def api_diagonalley_orders(
wallet: WalletTypeInfo = Depends(get_key_type)
):
try:
return [market.dict() for market in await get_diagonalley_markets(wallet.wallet.user)]
except:
return {"message": "We could not retrieve the markets."}
@diagonalley_ext.post("/api/v1/markets")
@diagonalley_ext.put("/api/v1/markets/{market_id}")
async def api_diagonalley_stall_create(
data: CreateMarket,
market_id: str = None,
wallet: WalletTypeInfo = Depends(require_invoice_key),
):
if market_id:
market = await get_diagonalley_market(market_id)
if not market:
return {"message": "Market does not exist."}
if market.usr != wallet.wallet.user:
return {"message": "Not your market."}
market = await update_diagonalley_market(market_id, **data.dict())
else:
market = await create_diagonalley_market(data=data)
return market.dict()