-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathroute.py
135 lines (114 loc) · 3.3 KB
/
route.py
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
129
130
131
132
133
134
135
from flask import Flask, g, request, json
from services import auth, account, maprender
from utils import weather
import decorators
app = Flask(__name__)
@app.route('/', methods=['POST', 'GET'])
def home_route():
return json.jsonify({
"status": 200,
"message": "Roam Backend API v1"
})
@app.route('/signup', methods=['POST'])
def signup_route():
request_dict = request.get_json(force=True, silent=True)
username = request_dict.get("username")
password = request_dict.get("password")
class_id = request_dict.get("class_id")
try:
auth.signup(username, password, class_id)
except:
response = json.jsonify({
"status": 400,
"message": "failure"
})
response.status_code = 400
return response
return json.jsonify({
"status": 200,
"message": "success"
})
@app.route('/login', methods=['POST'])
def login_route():
request_dict = request.get_json(force=True, silent=True)
username = request_dict.get("username")
password = request_dict.get("password")
jwt_token = None
try:
jwt_token = auth.login(username, password)
except BaseException as e:
response = json.jsonify({
"status": 400,
"message": str(e)
})
response.status_code = 400
return response
if jwt_token is None:
response = json.jsonify({
"status": 400,
"message": "user doesn't exist or wrong password"
})
response.status_code = 400
return response
return json.jsonify({
"status": 200,
"message": jwt_token
})
@app.route('/user/me/account', methods=['GET', 'POST'])
@decorators.auth_protected
def user_account_route():
jwt_token = g.jwt_token
user_id = jwt_token.get("id")
if user_id is None:
response = json.jsonify({
"status": 400,
"message": "user_id is required in JWT token"
})
response.status_code = 400
return response
if request.method == "GET":
user_info = account.get_user(user_id)
if user_info is None:
response = json.jsonify({
"status": 400,
"message": "user does not exist"
})
response.status_code = 400
return response
return json.jsonify(user_info)
if request.method == "POST":
request_dict = request.get_json(force=True, silent=True)
if not isinstance(request_dict, dict):
response = json.jsonify({
"status": 400,
"message": "request_body not obtained"
})
response.status_code = 400
return response
account.update_user(user_id, request_dict)
return json.jsonify({
"status": 200,
"message": "user succesfully updated"
})
@app.route('/maprender', methods=['POST'])
@decorators.auth_protected
def maprender_route():
request_dict = request.get_json(force=True, silent=True)
if not isinstance(request_dict, dict):
response = json.jsonify({
"status": 400,
"message": "request_body not obtained"
})
response.status_code = 400
return response
x = request_dict.get("x", 0)
y = request_dict.get("y", 0)
center = request_dict.get("center", {})
res_map = maprender.get_new_map(x, y, center)
render_objects = maprender.get_objects(15, center)
weather_info = weather.get_weather()
return json.jsonify({
"image_url": res_map,
"weather": weather_info,
"render_objects": render_objects
})