-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.py
More file actions
130 lines (96 loc) · 4.21 KB
/
app.py
File metadata and controls
130 lines (96 loc) · 4.21 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
129
130
import json
from datetime import date
from flask import Flask, jsonify, request, make_response
from database.db import initialize_db
from database.models import Driver, Battery, Station, Vehicle, Swap, Odometer
app = Flask(__name__)
app.config['MONGODB_SETTINGS'] = {
'host': 'mongodb://localhost/motors'
}
initialize_db(app)
@app.route("/", methods=['GET'])
def home():
return "Welcome to motoly, your #1 app to manage electric vehicle business in Rwanda"
@app.route("/driver/<vehicle_id>", methods=["POST"])
def create_driver(vehicle_id):
driver = request.get_json()
new_driver = Driver(name=driver["name"], vehicle=vehicle_id).save()
return make_response(jsonify({"driver": json.loads(new_driver.to_json())})), 201
@app.route("/drivers", methods=["GET"])
def get_drivers():
drivers = Driver.objects().to_json()
return make_response(drivers), 200
@app.route("/driver/driver_id", methods=["GET"])
def get_one_drivers():
one_driver = Driver.objects().to_json()
return make_response(one_driver), 200
@app.route("/battery", methods=["POST"])
def create_battery():
battery = request.get_json()
Battery(**battery).save()
return make_response(jsonify(battery)), 201
@app.route("/batteries", methods=["GET"])
def get_batteries():
batteries = Battery.objects().to_json()
return make_response(batteries), 200
@app.route("/station", methods=["POST"])
def create_station():
station = request.get_json()
Station(location=station["location"]).save()
return make_response(jsonify(station)), 201
@app.route("/stations", methods=["GET"])
def get_stations():
stations = Station.objects().to_json()
return make_response(stations), 200
@app.route("/vehicle", methods=["POST"])
def create_vehicle():
vehicle_obj = request.get_json()
vehicle = Vehicle(odometer_reading=vehicle_obj["odometer_reading"]).save()
return make_response(jsonify({"message": "successfully created vehicle",
"vehicle": json.loads(vehicle.to_json())})), 201
@app.route("/swap/driver/<driver_id>/battery/<battery_id>/station/<station_id>", methods=["POST"])
def create_swap(driver_id, battery_id, station_id):
swap = request.get_json()
Swap(remainingBattery=swap["initialBattery"],
initialBattery=swap["initialBattery"],
driver=driver_id,
battery=battery_id,
station=station_id
).save()
return make_response(jsonify(swap)), 201
@app.route("/swap/<swap_id>", methods=["PUT"])
def make_swap(swap_id):
swap = request.get_json()
Swap.objects.get(id=swap_id).update(remainingBattery=swap["remainingBattery"], swapped=True)
return make_response(jsonify({"message": "successfully made swap"})), 200
@app.route("/swap/driver/<driver_id>/vehicle/<vehicle_id>/day", methods=["POST"])
def get_used_energy(driver_id, vehicle_id):
reading_got = request.get_json()
swaps = Swap.objects(driver=driver_id, swapped=True, timestamp=date.today()).to_json()
reading = Vehicle.objects(id=vehicle_id, timestamp=date.today())
data = json.loads(swaps)
total_initial_power = 0
total_remaining_power = 0
for i in data:
if i["initialBattery"]:
total_initial_power += i["initialBattery"]
if i["remainingBattery"]:
total_remaining_power += i["remainingBattery"]
total_power_used = total_initial_power - total_remaining_power
Odometer(vehicle=vehicle_id, current_reading=reading_got["reading"]).save()
return make_response(jsonify({"power_used": total_power_used,
"kilometers": json.loads(reading.to_json())})), 200
@app.route("/vehicle/<vehicle_id>/day", methods=["GET"])
def get_kilometers_done(vehicle_id):
reading = Odometer.objects(vehicle=vehicle_id, timestamp=date.today()).to_json()
reading_data = json.loads(reading)
km_done = 0
for i in reading_data:
km_done += i["current_reading"]-i["previous_reading"]
return make_response(jsonify({"kilometers": km_done})), 200
@app.route("/swap/driver/<driver_id>", methods=["GET"])
def get_swaps_made_by_driver(driver_id):
swaps = Swap.objects(driver=driver_id).to_json()
return make_response(swaps), 200
if __name__ == '__main__':
app.run(port=5000, debug=True)