place order flow WIP

This commit is contained in:
Tiago vasconcelos 2022-08-16 12:08:27 +01:00
parent d9242ddd5b
commit 8032566f44
3 changed files with 53 additions and 22 deletions

View file

@ -13,11 +13,13 @@ from lnbits.settings import WALLET
from . import db from . import db
from .models import ( from .models import (
Market, Market,
OrderDetail,
Orders, Orders,
Products, Products,
Stalls, Stalls,
Zones, Zones,
createOrder, createOrder,
createOrderDetails,
createProduct, createProduct,
createStalls, createStalls,
createZones, createZones,
@ -208,38 +210,55 @@ async def delete_diagonalley_stall(stall_id: str) -> None:
###Orders ###Orders
async def create_diagonalley_order(data: createOrder) -> Orders: async def create_diagonalley_order(wallet_id: str, data: createOrder) -> Orders:
order_id = urlsafe_short_hash() order_id = urlsafe_short_hash()
await db.execute( await db.execute(
f""" f"""
INSERT INTO diagonalley.orders (id, productid, wallet, product, INSERT INTO diagonalley.orders (id, wallet, shippingzone, address, email, total, invoiceid, paid, shipped)
quantity, shippingzone, address, email, invoiceid, paid, shipped) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""", """,
( (
order_id, order_id,
data.productid, wallet_id,
data.wallet,
data.product,
data.quantity,
data.shippingzone, data.shippingzone,
data.address, data.address,
data.email, data.email,
data.total,
data.invoiceid, data.invoiceid,
False, False,
False, False,
), ),
) )
# if db.type == SQLITE:
# order_id = result._result_proxy.lastrowid
# else:
# order_id = result[0]
link = await get_diagonalley_order(order_id) link = await get_diagonalley_order(order_id)
assert link, "Newly created link couldn't be retrieved" assert link, "Newly created link couldn't be retrieved"
return link return link
async def create_diagonalley_order_details(order_id: str, data: List[createOrderDetails]):
for item in data:
item_id = urlsafe_short_hash()
await db.execute(
"""
INSERT INTO diagonalley.order_details (id, orderid, productid, quantity)
VALUES (?, ?, ?, ?)
""",
(
item_id,
order_id,
item.product_id,
item.quantity,
),
)
order_details = await get_diagonalley_order_details(order_id)
return order_details
async def get_diagonalley_order_details(order_id: str) -> List[OrderDetail]:
rows = await db.fetchall(
f"SELECT * FROM diagonalley.order_details WHERE order_id = ?", (order_id,)
)
return [OrderDetail(**row) for row in rows]
async def get_diagonalley_order(order_id: str) -> Optional[Orders]: async def get_diagonalley_order(order_id: str) -> Optional[Orders]:
row = await db.fetchone( row = await db.fetchone(

View file

@ -56,12 +56,12 @@ async def m001_initial(db):
""" """
CREATE TABLE diagonalley.orders ( CREATE TABLE diagonalley.orders (
id {db.serial_primary_key}, id {db.serial_primary_key},
productid TEXT NOT NULL, wallet TEXT NOT NULL,
usr TEXT NOT NULL, pubkey TEXT,
pubkey TEXT NOT NULL,
shippingzone INTEGER NOT NULL, shippingzone INTEGER NOT NULL,
address TEXT NOT NULL, address TEXT NOT NULL,
email TEXT NOT NULL, email TEXT NOT NULL,
total INTEGER NOT NULL,
invoiceid TEXT NOT NULL, invoiceid TEXT NOT NULL,
paid BOOLEAN NOT NULL, paid BOOLEAN NOT NULL,
shipped BOOLEAN NOT NULL, shipped BOOLEAN NOT NULL,
@ -81,8 +81,7 @@ async def m001_initial(db):
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
orderid INTEGER NOT NULL REFERENCES {db.references_schema}orders (id) orderid INTEGER NOT NULL REFERENCES {db.references_schema}orders (id)
productid TEXT NOT NULL REFERENCES {db.references_schema}products (id), productid TEXT NOT NULL REFERENCES {db.references_schema}products (id),
quantity INTEGER NOT NULL, quantity INTEGER NOT NULL
total INTEGER NOT NULL
); );
""" """
) )

View file

@ -55,16 +55,29 @@ class Zones(BaseModel):
cost: int cost: int
countries: str countries: str
class OrderDetail(BaseModel):
id: str
order_id: str
product_id: str
quantity: int
class createOrderDetails(BaseModel):
product_id: str = Query(...)
quantity: int = Query(..., ge=1)
class createOrder(BaseModel): class createOrder(BaseModel):
productid: str = Query(...) wallet: str = Query(...)
stall: str = Query(...) pubkey: str = Query(None)
product: str = Query(...)
quantity: int = Query(..., ge=1)
shippingzone: int = Query(...) shippingzone: int = Query(...)
address: str = Query(...) address: str = Query(...)
email: str = Query(...) email: str = Query(...)
total: int = Query(...)
invoiceid: str = Query(...) invoiceid: str = Query(...)
products: List[createOrderDetails]
# stall: str = Query(...)
# product: str = Query(...)
# quantity: int = Query(..., ge=1)
class Orders(BaseModel): class Orders(BaseModel):