diff --git a/README.md b/README.md index 67d7d63d05d0238a346f9eb5045521dc52079893..a428072be37b9ae67fe2ede4125c0f25e1911667 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,8 @@ GCSE Computer Science Challenge ``` git clone https://github.com/TheJoeCoder/PizzaPalace cd PizzaPalace -pip install -r requirements.txt cd server +pip install -r requirements.txt cp config.py.example config.py python app.py ``` \ No newline at end of file diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 19acec61d8f3aca4a7ea87bfd4f5894938b6df6a..0000000000000000000000000000000000000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -flask==2.3.2 \ No newline at end of file diff --git a/server/app.py b/server/app.py index d8fbbf5dc79661127645cc4bbe129406c87117d5..00768a7238029f09888a8fbee0625a8eace8ee97 100644 --- a/server/app.py +++ b/server/app.py @@ -1,5 +1,6 @@ -import json, uuid, logging +import json, uuid, logging, requests from flask import Flask, request, jsonify, Response +from pymongo import MongoClient logger = logging.Logger(__name__) @@ -7,6 +8,11 @@ app = Flask(__name__) import config +# Connect to MongoDB +client = MongoClient(config.mongo_uri) + +db = client[config.mongo_db] + with open("pizza_types.json","r") as f: pizza_types = json.loads(f.read()) @@ -158,7 +164,7 @@ def get_cart_total(): grand_total = subtotal + config.delivery_flatrate return "{\"status\":200,\"message\":\"ok\",\"subtotal\":" + str(subtotal) + ",\"delivery_rate\":" + str(config.delivery_flatrate) + ",\"total\":" + str(grand_total) + ",\"breakdown\":" + json.dumps(breakdown) + "}", 200 -@app.route("/cart/confirmorder") +@app.route("/cart/confirmorder", methods=["POST"]) def confirm_order_cart(): # Get cart id and key from request cart_id = request.args.get("id") @@ -175,8 +181,25 @@ def confirm_order_cart(): address = json.loads(address) except: return gen_invalid_message("address") - # TODO place order and clear cart - return "{\"status\":500,\"message\":\"not implemented\"}" + # Build order + order = { + "address": address, + "items": cart["items"] + } + # Add order to database + order_id = db.orders.insert_one(order).inserted_id + # Post webhook + webhook_data = { + "username": "PizzaBot", + "content": config.webhook_content_prepend + str(order_id) + } + webhook_response = requests.post(config.webhook_url, json=webhook_data) + if (webhook_response.status_code != 200): + logger.error("Webhook failed with status code " + str(webhook_response.status_code)) + # Remove cart from existing carts + del open_carts[cart_id] + # Return order ID + return "{\"status\":200,\"message\":\"OK\", \"code\":\"" + str(order_id) + "\"}", 200 if (__name__ == "__main__"): app.run(debug=True, host="0.0.0.0") \ No newline at end of file diff --git a/server/config.py.example b/server/config.py.example index 56d4b0bc60c7c089912175d372440e18d7b46a71..18d41237b75010ffa98963c91ba431ac26a8c18c 100644 --- a/server/config.py.example +++ b/server/config.py.example @@ -1,2 +1,5 @@ webhook = "https://example.com/webhook" -delivery_flatrate = 0 \ No newline at end of file +webhook_content_prepend = "New order received! Order ID: " +delivery_flatrate = 0 +mongo_uri = "mongodb://localhost:27017/" +mongo_db = "pizza_palace" \ No newline at end of file diff --git a/server/requirements.txt b/server/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..752eee95b78ce109a339fc64edb6d9181b73d9e6 --- /dev/null +++ b/server/requirements.txt @@ -0,0 +1,3 @@ +flask==2.3.2 +pymongo[srv]==4.3.3 +requests==2.29.0