forked from next-route/best-route
-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
122 lines (88 loc) · 3.89 KB
/
app.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
from flask import Flask, Response, app, request
from flask_sqlalchemy import SQLAlchemy
import mysql.connector
import json
from sqlalchemy.orm import exc
# Inicializa o Flask
app = Flask(__name__)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
# Modificar "host", "senha" e "0000" pelas informações correspondentes no seu mysql
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://host:senha@localhost:0000/melhor_rota'
# Conecta o Flask ao db(database) através da instância SLQAlchemy
db = SQLAlchemy(app)
# Cria a classe Truck e declara as variáveis como colunas no banco de dados
class Truck(db.Model):
id = db.Column(db.Integer, primary_key=True)
status = db.Column(db.Boolean)
location = db.Column(db.String(50))
destination = db.Column(db.String(50))
# retorna os valores das variáveis em formato json
def to_json(self):
return{"id": self.id, "status": self.status, "location": self.location, "destination": self.destination}
# seleciona todos os trucks cadastrados
@app.route("/trucks", methods=['GET'])
def get_trucks():
# variável que chama todos os atributos da classe truck
trucks_object = Truck.query.all()
# trandforma em json
trucks_json = [truck.to_json() for truck in trucks_object]
return generate_response(200, "trucks", trucks_json)
# gera a resposta ao método http(GET, POST, PUT e DELETE)
def generate_response(status, content_name, content, message=False):
body = {}
body[content_name] = content
if(message):
body["message"] = message
return Response(json.dumps(body), status=status, mimetype="application/json")
# Seleciona apenas um truck pelo seu id
@app.route("/truck/<id>", methods=['GET'])
def get_truck(id):
truck_object = Truck.query.filter_by(id=id).first()
truck_json = truck_object.to_json()
return generate_response(200, "truck", truck_json)
# cadastra um truck colocando o status, localização e destino (id é autoincrementável)
@app.route("/truck", methods=["POST"])
def create_truck():
# faz requisição em json dos valores informados pelo usuário
body = request.get_json()
try:
truck = Truck(
status=body["status"], location=body["location"], destination=body["destination"])
# adiciona os valores informados no banco de dados
db.session.add(truck)
db.session.commit()
return generate_response(201, "truck", truck.to_json(), "Truck created with success.")
except Exception as e:
print('Error', e)
return generate_response(400, "truck", {}, "Error creating truck")
# faz update de um truck, especificado pelo id
@app.route("/truck/<id>", methods=["PUT"])
def update_truck(id):
truck_object = Truck.query.filter_by(id=id).first()
body = request.get_json()
try:
# se, por exemplo, no body(valores informados) tenha status e localização, apenas esses valores serão modificados.
if("status" in body):
truck_object.status = body["status"]
if("location" in body):
truck_object.location = body["location"]
if("destination" in body):
truck_object.destination = body["destination"]
db.session.add(truck_object)
db.session.commit()
return generate_response(200, "truck", truck_object.to_json(), "Truck updated with success")
except Exception as e:
print('Error', e)
return generate_response(400, "truck", {}, "Error updating truck")
# deleta um truck de acordo com o id
@app.route("/truck/<id>", methods=["DELETE"])
def delete_truck(id):
truck_object = Truck.query.filter_by(id=id).first()
try:
db.session.delete(truck_object)
db.session.commit()
return generate_response(200, "truck", truck_object.to_json(), "Truck deleted with success")
except Exception as e:
print('Error', e)
return generate_response(400, "truck", {}, "Error deleting truck")
app.run()