diff --git a/lnbits/extensions/diagonalley/crud.py b/lnbits/extensions/diagonalley/crud.py index fbc1d3324..b915c81da 100644 --- a/lnbits/extensions/diagonalley/crud.py +++ b/lnbits/extensions/diagonalley/crud.py @@ -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( diff --git a/lnbits/extensions/diagonalley/migrations.py b/lnbits/extensions/diagonalley/migrations.py index e994d723a..8a65df8a1 100644 --- a/lnbits/extensions/diagonalley/migrations.py +++ b/lnbits/extensions/diagonalley/migrations.py @@ -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 ); """ ) diff --git a/lnbits/extensions/diagonalley/models.py b/lnbits/extensions/diagonalley/models.py index 4fbf04ff1..737f2b4b5 100644 --- a/lnbits/extensions/diagonalley/models.py +++ b/lnbits/extensions/diagonalley/models.py @@ -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):