-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfastfood.py
More file actions
128 lines (105 loc) · 3.71 KB
/
fastfood.py
File metadata and controls
128 lines (105 loc) · 3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/env python
'''Create a set of API endpoints and use data structures to store data in memory'''
from functools import wraps
from flask import Flask, jsonify, request, session
app = Flask(__name__)
app.config['SECRET_KEY'] = "philipotieno"
USER = {}
ORDERS = {}
@app.route('/', methods=['GET'])
def home():
return jsonify({'message' : 'welcome to Fast-Food-Fast'}), 200
#Register new user
@app.route('/api/v1/register', methods=['POST'])
def register():
name = request.get_json()['name']
username = request.get_json()['username']
email = request.get_json()['email']
password = request.get_json()['password']
if username not in USER:
USER.update({username:{"name":name, "email":email, "password":password}})
return jsonify({"message" : "successfully registered"}), 200
return jsonify({"message" : "User already registered"})
#Login authorisation
def log_auth(username, password):
if username in USER:
if password == USER[username]['password']:
return True
return False
#check if user is in session
def check_user(func):
@wraps(func)
def wrap(*args, **kwargs):
if session["check_user"]:
return func(*args, **kwargs)
return jsonify({'message' : "please login to continue"}), 401
return wrap
#Login if registered
@app.route('/api/v1/login', methods=['POST'])
def login():
username = request.get_json()['username']
password = request.get_json()['password']
if log_auth(username, password):
session['check_user'] = True
session['username'] = username
return jsonify({'message' : 'welcome to Fast-Food-Fast'}), 200
return jsonify({'message' : "invalid details"}), 401
#make an order
@app.route('/api/v1/make_order', methods=['POST'])
@check_user
def make_order():
username = session.get("username")
food = request.get_json()['food']
if username not in ORDERS:
ORDERS.update({username:[]})
ORDERS[username].append(food)
return jsonify({"message" : "Order sent"}), 200
#History of ordered food
@app.route('/api/v1/history', methods=['GET'])
@check_user
def history():
username = session.get('username')
my_history = {}
for each in ORDERS[username]:
my_history.update({ORDERS[username].index(each) + 1:each})
return jsonify(my_history), 200
#History of order
@app.route('/api/v1/history', methods=['GET'])
@check_user
def history():
username = session.get('username')
my_history = {}
for each in orders[username]:
my_history.update({orders[username].index(each) + 1:each})
return jsonify(my_history), 200
#Fetch a specific order from placed order
@app.route('/api/v1/fetch/<int:order_id>', methods=['GET'])
@check_user
def fetch(order_id):
username = session.get('username')
return jsonify({order_id:ORDERS[username][order_id-1]}), 200
def update(old_order, new_order, mlo):#updates the ORDERS
for i in mlo:
if i == old_order:
index = mlo.index(i)
del mlo[index]
mlo.insert(index, new_order)
#Update an existing food order
@app.route('/api/v1/update_order/<int:order_id>', methods=['PUT'])
@check_user
def update_order(order_id):
food = request.get_json()['food']
username = session.get('username')
old_order = ORDERS[username][order_id-1]
update(old_order, food, ORDERS[username])
return jsonify({'message' : 'order updated successfully'}), 200
#delete specific order by id
@app.route('/api/v1/delete_order/<int:order_id>', methods=['DELETE'])
@check_user
def delete_order(order_id):
username = session.get('username')
del ORDERS[username][order_id]
return jsonify({'message' : 'successfully deleted order'}), 200
#Initalization
if __name__ == "__main__":
app.run(debug=True)