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 .models import (
Market,
OrderDetail,
Orders,
Products,
Stalls,
Zones,
createOrder,
createOrderDetails,
createProduct,
createStalls,
createZones,
@ -208,38 +210,55 @@ async def delete_diagonalley_stall(stall_id: str) -> None:
###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()
await db.execute(
f"""
INSERT INTO diagonalley.orders (id, productid, wallet, product,
quantity, shippingzone, address, email, invoiceid, paid, shipped)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
INSERT INTO diagonalley.orders (id, wallet, shippingzone, address, email, total, invoiceid, paid, shipped)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
""",
(
order_id,
data.productid,
data.wallet,
data.product,
data.quantity,
wallet_id,
data.shippingzone,
data.address,
data.email,
data.total,
data.invoiceid,
False,
False,
),
)
# if db.type == SQLITE:
# order_id = result._result_proxy.lastrowid
# else:
# order_id = result[0]
link = await get_diagonalley_order(order_id)
assert link, "Newly created link couldn't be retrieved"
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]:
row = await db.fetchone(

View file

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

View file

@ -55,16 +55,29 @@ class Zones(BaseModel):
cost: int
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):
productid: str = Query(...)
stall: str = Query(...)
product: str = Query(...)
quantity: int = Query(..., ge=1)
wallet: str = Query(...)
pubkey: str = Query(None)
shippingzone: int = Query(...)
address: str = Query(...)
email: str = Query(...)
total: int = Query(...)
invoiceid: str = Query(...)
products: List[createOrderDetails]
# stall: str = Query(...)
# product: str = Query(...)
# quantity: int = Query(..., ge=1)
class Orders(BaseModel):