|
@ -5,7 +5,21 @@ from lnbits.core.crud import get_user |
|
|
from lnbits.decorators import api_check_wallet_key, api_validate_post_request |
|
|
from lnbits.decorators import api_check_wallet_key, api_validate_post_request |
|
|
|
|
|
|
|
|
from lnbits.extensions.diagonalley import diagonalley_ext |
|
|
from lnbits.extensions.diagonalley import diagonalley_ext |
|
|
from .crud import create_diagonalleys_product,get_diagonalleys_product,get_diagonalleys_products,delete_diagonalleys_product,create_diagonalleys_indexer,update_diagonalleys_indexer,get_diagonalleys_indexer,get_diagonalleys_indexers,delete_diagonalleys_indexer,create_diagonalleys_order,get_diagonalleys_order,get_diagonalleys_orders,delete_diagonalleys_order |
|
|
from .crud import ( |
|
|
|
|
|
create_diagonalleys_product, |
|
|
|
|
|
get_diagonalleys_product, |
|
|
|
|
|
get_diagonalleys_products, |
|
|
|
|
|
delete_diagonalleys_product, |
|
|
|
|
|
create_diagonalleys_indexer, |
|
|
|
|
|
update_diagonalleys_indexer, |
|
|
|
|
|
get_diagonalleys_indexer, |
|
|
|
|
|
get_diagonalleys_indexers, |
|
|
|
|
|
delete_diagonalleys_indexer, |
|
|
|
|
|
create_diagonalleys_order, |
|
|
|
|
|
get_diagonalleys_order, |
|
|
|
|
|
get_diagonalleys_orders, |
|
|
|
|
|
delete_diagonalleys_order, |
|
|
|
|
|
) |
|
|
from lnbits.core.services import create_invoice |
|
|
from lnbits.core.services import create_invoice |
|
|
from base64 import urlsafe_b64encode |
|
|
from base64 import urlsafe_b64encode |
|
|
from uuid import uuid4 |
|
|
from uuid import uuid4 |
|
@ -13,6 +27,7 @@ from lnbits.db import open_ext_db |
|
|
|
|
|
|
|
|
###Products |
|
|
###Products |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@diagonalley_ext.route("/api/v1/diagonalley/products", methods=["GET"]) |
|
|
@diagonalley_ext.route("/api/v1/diagonalley/products", methods=["GET"]) |
|
|
@api_check_wallet_key(key_type="invoice") |
|
|
@api_check_wallet_key(key_type="invoice") |
|
|
def api_diagonalley_products(): |
|
|
def api_diagonalley_products(): |
|
@ -27,14 +42,16 @@ def api_diagonalley_products(): |
|
|
@diagonalley_ext.route("/api/v1/diagonalley/products", methods=["POST"]) |
|
|
@diagonalley_ext.route("/api/v1/diagonalley/products", methods=["POST"]) |
|
|
@diagonalley_ext.route("/api/v1/diagonalley/products<product_id>", methods=["PUT"]) |
|
|
@diagonalley_ext.route("/api/v1/diagonalley/products<product_id>", methods=["PUT"]) |
|
|
@api_check_wallet_key(key_type="invoice") |
|
|
@api_check_wallet_key(key_type="invoice") |
|
|
@api_validate_post_request(schema={ |
|
|
@api_validate_post_request( |
|
|
"product": {"type": "string", "empty": False, "required": True}, |
|
|
schema={ |
|
|
"categories": {"type": "string", "empty": False, "required": True}, |
|
|
"product": {"type": "string", "empty": False, "required": True}, |
|
|
"description": {"type": "string", "empty": False, "required": True}, |
|
|
"categories": {"type": "string", "empty": False, "required": True}, |
|
|
"image": {"type": "string", "empty": False, "required": True}, |
|
|
"description": {"type": "string", "empty": False, "required": True}, |
|
|
"price": {"type": "integer", "min": 0, "required": True}, |
|
|
"image": {"type": "string", "empty": False, "required": True}, |
|
|
"quantity": {"type": "integer", "min": 0, "required": True} |
|
|
"price": {"type": "integer", "min": 0, "required": True}, |
|
|
}) |
|
|
"quantity": {"type": "integer", "min": 0, "required": True}, |
|
|
|
|
|
} |
|
|
|
|
|
) |
|
|
def api_diagonalley_product_create(product_id=None): |
|
|
def api_diagonalley_product_create(product_id=None): |
|
|
|
|
|
|
|
|
if product_id: |
|
|
if product_id: |
|
@ -53,7 +70,6 @@ def api_diagonalley_product_create(product_id=None): |
|
|
return jsonify(product._asdict()), HTTPStatus.OK if product_id else HTTPStatus.CREATED |
|
|
return jsonify(product._asdict()), HTTPStatus.OK if product_id else HTTPStatus.CREATED |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@diagonalley_ext.route("/api/v1/diagonalley/products/<product_id>", methods=["DELETE"]) |
|
|
@diagonalley_ext.route("/api/v1/diagonalley/products/<product_id>", methods=["DELETE"]) |
|
|
@api_check_wallet_key(key_type="invoice") |
|
|
@api_check_wallet_key(key_type="invoice") |
|
|
def api_diagonalley_products_delete(product_id): |
|
|
def api_diagonalley_products_delete(product_id): |
|
@ -70,9 +86,9 @@ def api_diagonalley_products_delete(product_id): |
|
|
return "", HTTPStatus.NO_CONTENT |
|
|
return "", HTTPStatus.NO_CONTENT |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
###Indexers |
|
|
###Indexers |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@diagonalley_ext.route("/api/v1/diagonalley/indexers", methods=["GET"]) |
|
|
@diagonalley_ext.route("/api/v1/diagonalley/indexers", methods=["GET"]) |
|
|
@api_check_wallet_key(key_type="invoice") |
|
|
@api_check_wallet_key(key_type="invoice") |
|
|
def api_diagonalley_indexers(): |
|
|
def api_diagonalley_indexers(): |
|
@ -87,15 +103,17 @@ def api_diagonalley_indexers(): |
|
|
@diagonalley_ext.route("/api/v1/diagonalley/indexers", methods=["POST"]) |
|
|
@diagonalley_ext.route("/api/v1/diagonalley/indexers", methods=["POST"]) |
|
|
@diagonalley_ext.route("/api/v1/diagonalley/indexers<indexer_id>", methods=["PUT"]) |
|
|
@diagonalley_ext.route("/api/v1/diagonalley/indexers<indexer_id>", methods=["PUT"]) |
|
|
@api_check_wallet_key(key_type="invoice") |
|
|
@api_check_wallet_key(key_type="invoice") |
|
|
@api_validate_post_request(schema={ |
|
|
@api_validate_post_request( |
|
|
"shopname": {"type": "string", "empty": False, "required": True}, |
|
|
schema={ |
|
|
"indexeraddress": {"type": "string", "empty": False, "required": True}, |
|
|
"shopname": {"type": "string", "empty": False, "required": True}, |
|
|
"shippingzone1": {"type": "string", "empty": False, "required": True}, |
|
|
"indexeraddress": {"type": "string", "empty": False, "required": True}, |
|
|
"shippingzone2": {"type": "string", "empty": False, "required": True}, |
|
|
"shippingzone1": {"type": "string", "empty": False, "required": True}, |
|
|
"email": {"type": "string", "empty": False, "required": True}, |
|
|
"shippingzone2": {"type": "string", "empty": False, "required": True}, |
|
|
"zone1cost": {"type": "integer", "min": 0, "required": True}, |
|
|
"email": {"type": "string", "empty": False, "required": True}, |
|
|
"zone2cost": {"type": "integer", "min": 0, "required": True} |
|
|
"zone1cost": {"type": "integer", "min": 0, "required": True}, |
|
|
}) |
|
|
"zone2cost": {"type": "integer", "min": 0, "required": True}, |
|
|
|
|
|
} |
|
|
|
|
|
) |
|
|
def api_diagonalley_indexer_create(indexer_id=None): |
|
|
def api_diagonalley_indexer_create(indexer_id=None): |
|
|
|
|
|
|
|
|
if indexer_id: |
|
|
if indexer_id: |
|
@ -132,6 +150,7 @@ def api_diagonalley_indexer_delete(indexer_id): |
|
|
|
|
|
|
|
|
###Orders |
|
|
###Orders |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@diagonalley_ext.route("/api/v1/diagonalley/orders", methods=["GET"]) |
|
|
@diagonalley_ext.route("/api/v1/diagonalley/orders", methods=["GET"]) |
|
|
@api_check_wallet_key(key_type="invoice") |
|
|
@api_check_wallet_key(key_type="invoice") |
|
|
def api_diagonalley_orders(): |
|
|
def api_diagonalley_orders(): |
|
@ -145,13 +164,15 @@ def api_diagonalley_orders(): |
|
|
|
|
|
|
|
|
@diagonalley_ext.route("/api/v1/diagonalley/orders", methods=["POST"]) |
|
|
@diagonalley_ext.route("/api/v1/diagonalley/orders", methods=["POST"]) |
|
|
@api_check_wallet_key(key_type="invoice") |
|
|
@api_check_wallet_key(key_type="invoice") |
|
|
@api_validate_post_request(schema={ |
|
|
@api_validate_post_request( |
|
|
"id": {"type": "string", "empty": False, "required": True}, |
|
|
schema={ |
|
|
"address": {"type": "string", "empty": False, "required": True}, |
|
|
"id": {"type": "string", "empty": False, "required": True}, |
|
|
"email": {"type": "string", "empty": False, "required": True}, |
|
|
"address": {"type": "string", "empty": False, "required": True}, |
|
|
"quantity": {"type": "integer", "empty": False, "required": True}, |
|
|
"email": {"type": "string", "empty": False, "required": True}, |
|
|
"shippingzone": {"type": "integer", "empty": False, "required": True}, |
|
|
"quantity": {"type": "integer", "empty": False, "required": True}, |
|
|
}) |
|
|
"shippingzone": {"type": "integer", "empty": False, "required": True}, |
|
|
|
|
|
} |
|
|
|
|
|
) |
|
|
def api_diagonalley_order_create(): |
|
|
def api_diagonalley_order_create(): |
|
|
order = create_diagonalleys_order(wallet_id=g.wallet.id, **g.data) |
|
|
order = create_diagonalleys_order(wallet_id=g.wallet.id, **g.data) |
|
|
return jsonify(order._asdict()), HTTPStatus.CREATED |
|
|
return jsonify(order._asdict()), HTTPStatus.CREATED |
|
@ -193,6 +214,7 @@ def api_diagonalleys_order_shipped(order_id): |
|
|
|
|
|
|
|
|
###List products based on indexer id |
|
|
###List products based on indexer id |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@diagonalley_ext.route("/api/v1/diagonalley/stall/products/<indexer_id>", methods=["GET"]) |
|
|
@diagonalley_ext.route("/api/v1/diagonalley/stall/products/<indexer_id>", methods=["GET"]) |
|
|
def api_diagonalleys_stall_products(indexer_id): |
|
|
def api_diagonalleys_stall_products(indexer_id): |
|
|
with open_ext_db("diagonalley") as db: |
|
|
with open_ext_db("diagonalley") as db: |
|
@ -207,8 +229,10 @@ def api_diagonalleys_stall_products(indexer_id): |
|
|
|
|
|
|
|
|
return jsonify([products._asdict() for products in get_diagonalleys_products(rows[1])]), HTTPStatus.OK |
|
|
return jsonify([products._asdict() for products in get_diagonalleys_products(rows[1])]), HTTPStatus.OK |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
###Check a product has been shipped |
|
|
###Check a product has been shipped |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@diagonalley_ext.route("/api/v1/diagonalley/stall/checkshipped/<checking_id>", methods=["GET"]) |
|
|
@diagonalley_ext.route("/api/v1/diagonalley/stall/checkshipped/<checking_id>", methods=["GET"]) |
|
|
def api_diagonalleys_stall_checkshipped(checking_id): |
|
|
def api_diagonalleys_stall_checkshipped(checking_id): |
|
|
with open_ext_db("diagonalley") as db: |
|
|
with open_ext_db("diagonalley") as db: |
|
@ -216,16 +240,20 @@ def api_diagonalleys_stall_checkshipped(checking_id): |
|
|
|
|
|
|
|
|
return jsonify({"shipped": rows["shipped"]}), HTTPStatus.OK |
|
|
return jsonify({"shipped": rows["shipped"]}), HTTPStatus.OK |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
###Place order |
|
|
###Place order |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@diagonalley_ext.route("/api/v1/diagonalley/stall/order/<indexer_id>", methods=["POST"]) |
|
|
@diagonalley_ext.route("/api/v1/diagonalley/stall/order/<indexer_id>", methods=["POST"]) |
|
|
@api_validate_post_request(schema={ |
|
|
@api_validate_post_request( |
|
|
"id": {"type": "string", "empty": False, "required": True}, |
|
|
schema={ |
|
|
"email": {"type": "string", "empty": False, "required": True}, |
|
|
"id": {"type": "string", "empty": False, "required": True}, |
|
|
"address": {"type": "string", "empty": False, "required": True}, |
|
|
"email": {"type": "string", "empty": False, "required": True}, |
|
|
"quantity": {"type": "integer", "empty": False, "required": True}, |
|
|
"address": {"type": "string", "empty": False, "required": True}, |
|
|
"shippingzone": {"type": "integer", "empty": False, "required": True}, |
|
|
"quantity": {"type": "integer", "empty": False, "required": True}, |
|
|
}) |
|
|
"shippingzone": {"type": "integer", "empty": False, "required": True}, |
|
|
|
|
|
} |
|
|
|
|
|
) |
|
|
def api_diagonalley_stall_order(indexer_id): |
|
|
def api_diagonalley_stall_order(indexer_id): |
|
|
product = get_diagonalleys_product(g.data["id"]) |
|
|
product = get_diagonalleys_product(g.data["id"]) |
|
|
shipping = get_diagonalleys_indexer(indexer_id) |
|
|
shipping = get_diagonalleys_indexer(indexer_id) |
|
@ -235,14 +263,28 @@ def api_diagonalley_stall_order(indexer_id): |
|
|
else: |
|
|
else: |
|
|
shippingcost = shipping.zone2cost |
|
|
shippingcost = shipping.zone2cost |
|
|
|
|
|
|
|
|
checking_id, payment_request = create_invoice(wallet_id=product.wallet, amount=shippingcost + (g.data["quantity"] * product.price), memo=g.data["id"]) |
|
|
checking_id, payment_request = create_invoice( |
|
|
selling_id = urlsafe_b64encode(uuid4().bytes_le).decode('utf-8') |
|
|
wallet_id=product.wallet, amount=shippingcost + (g.data["quantity"] * product.price), memo=g.data["id"] |
|
|
|
|
|
) |
|
|
|
|
|
selling_id = urlsafe_b64encode(uuid4().bytes_le).decode("utf-8") |
|
|
with open_ext_db("diagonalley") as db: |
|
|
with open_ext_db("diagonalley") as db: |
|
|
db.execute( |
|
|
db.execute( |
|
|
""" |
|
|
""" |
|
|
INSERT INTO orders (id, productid, wallet, product, quantity, shippingzone, address, email, invoiceid, paid, shipped) |
|
|
INSERT INTO orders (id, productid, wallet, product, quantity, shippingzone, address, email, invoiceid, paid, shipped) |
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) |
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) |
|
|
""", |
|
|
""", |
|
|
(selling_id ,g.data["id"] , product.wallet, product.product, g.data["quantity"], g.data["shippingzone"], g.data["address"], g.data["email"], checking_id, False, False), |
|
|
( |
|
|
|
|
|
selling_id, |
|
|
|
|
|
g.data["id"], |
|
|
|
|
|
product.wallet, |
|
|
|
|
|
product.product, |
|
|
|
|
|
g.data["quantity"], |
|
|
|
|
|
g.data["shippingzone"], |
|
|
|
|
|
g.data["address"], |
|
|
|
|
|
g.data["email"], |
|
|
|
|
|
checking_id, |
|
|
|
|
|
False, |
|
|
|
|
|
False, |
|
|
|
|
|
), |
|
|
) |
|
|
) |
|
|
return jsonify({"checking_id": checking_id, "payment_request": payment_request}), HTTPStatus.OK |
|
|
return jsonify({"checking_id": checking_id, "payment_request": payment_request}), HTTPStatus.OK |
|
|