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 . import db
from .models import ( from .models import (
Market,
Orders, Orders,
Products, Products,
Stalls, 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: async def delete_diagonalley_order(order_id: str) -> None:
await db.execute("DELETE FROM diagonalley.orders WHERE id = ?", (order_id,)) 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 fastapi.param_functions import Query
from pydantic import BaseModel from pydantic import BaseModel
@ -81,3 +81,13 @@ class Orders(BaseModel):
paid: bool paid: bool
shipped: bool shipped: bool
time: int 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', name: 'stall',
align: 'left', align: 'left',
label: 'Stall', label: 'Store',
field: 'stall' field: 'stall'
}, },
{ {
@ -1384,23 +1384,21 @@ new Vue({
LNbits.utils.exportCSV(this.zonesTable.columns, this.zones) LNbits.utils.exportCSV(this.zonesTable.columns, this.zones)
}, },
//////////////////////////////////////// ////////////////////////////////////////
//////////////////SHOP////////////////// //////////////////MARKET//////////////////
//////////////////////////////////////// ////////////////////////////////////////
getShops: function () { getMarkets(){
var self = this
LNbits.api LNbits.api
.request( .request(
'GET', 'GET',
'/diagonalley/api/v1/shops?all_wallets=true', '/diagonalley/api/v1/markets',
this.g.user.wallets[0].inkey this.g.user.wallets[0].inkey
) )
.then(function (response) { .then((response) => {
if (response.data) { if (response.data) {
self.shops = response.data.map(mapShops) this.shops = response.data.map(mapShops)
} }
}) })
.catch(function (error) { .catch((error) => {
LNbits.utils.notifyApiError(error) LNbits.utils.notifyApiError(error)
}) })
}, },
@ -1451,7 +1449,6 @@ new Vue({
}) })
}, },
createShop: function (data) { createShop: function (data) {
var self = this
console.log('cuntywoo') console.log('cuntywoo')
LNbits.api LNbits.api
.request( .request(
@ -1591,6 +1588,7 @@ new Vue({
this.getProducts() this.getProducts()
this.getZones() this.getZones()
this.getOrders() this.getOrders()
this.getMarkets()
this.customerKeys = [ this.customerKeys = [
'cb4c0164fe03fcdadcbfb4f76611c71620790944c24f21a1cd119395cdedfe1b', 'cb4c0164fe03fcdadcbfb4f76611c71620790944c24f21a1cd119395cdedfe1b',
'a9c17358a6dc4ceb3bb4d883eb87967a66b3453a0f3199f0b1c8eef8070c6a07' 'a9c17358a6dc4ceb3bb4d883eb87967a66b3453a0f3199f0b1c8eef8070c6a07'

View file

@ -38,3 +38,21 @@ async def display(request: Request, stall_id):
"products": [product.dict() for product in products] "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_product,
delete_diagonalley_stall, delete_diagonalley_stall,
delete_diagonalley_zone, delete_diagonalley_zone,
get_diagonalley_market,
get_diagonalley_markets,
get_diagonalley_order, get_diagonalley_order,
get_diagonalley_orders, get_diagonalley_orders,
get_diagonalley_product, get_diagonalley_product,
@ -38,6 +40,7 @@ from .crud import (
update_diagonalley_zone, update_diagonalley_zone,
) )
from .models import ( from .models import (
CreateMarket,
Orders, Orders,
Products, Products,
Stalls, Stalls,
@ -383,3 +386,39 @@ async def api_diagonalley_stall_order(
), ),
) )
return {"checking_id": checking_id, "payment_request": payment_request} 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()