initial launch market
This commit is contained in:
parent
0f238286a3
commit
6d5e9aba39
6 changed files with 127 additions and 11 deletions
|
|
@ -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]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
);
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
|
|
|
||||||
|
|
@ -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'
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue