From f64b49cab62024c719bae4993c3b0704bd3485dc Mon Sep 17 00:00:00 2001 From: TheJoeCoder <joe@radialbog9.uk> Date: Tue, 20 Jun 2023 12:16:19 +0100 Subject: [PATCH] (Nearly) finish server --- README.md | 2 +- requirements.txt | 1 - server/app.py | 31 +++++++++++++++++++++++++++---- server/config.py.example | 5 ++++- server/requirements.txt | 3 +++ 5 files changed, 35 insertions(+), 7 deletions(-) delete mode 100644 requirements.txt create mode 100644 server/requirements.txt diff --git a/README.md b/README.md index 67d7d63..a428072 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 19acec6..0000000 --- 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 d8fbbf5..00768a7 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 56d4b0b..18d4123 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 0000000..752eee9 --- /dev/null +++ b/server/requirements.txt @@ -0,0 +1,3 @@ +flask==2.3.2 +pymongo[srv]==4.3.3 +requests==2.29.0 -- GitLab