-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
123 lines (110 loc) · 3.52 KB
/
main.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
import mysql.connector
from flask import Flask, make_response, jsonify, request
from flask_mail import Mail, Message
from config import email, senha
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
#Conexão com o MySQL
mydb = mysql.connector.connect(
host='localhost',
user='root',
password='1234',
database='produtos',
)
app = Flask(__name__)
app.config['JSON_SORT_KEYS'] = False
app.secret_key = 'teste'
#Conexão com o gmail(lembre de configurar a conta Gmail para receber acesso de apps menos seguros)
mail_settings = {
"MAIL_SERVER": 'smtp.gmail.com',
"MAIL_PORT": 465,
"MAIL_USE_TLS": False,
"MAIL_USE_SSL": True,
"MAIL_USERNAME": email,
"MAIL_PASSWORD": senha
}
app.config.update(mail_settings)
mail = Mail(app)
#Read
@app.route('/produtos', methods=['GET'])
def get_produtos():
cursor = mydb.cursor()
cursor.execute('SELECT * FROM produto')
meus_produtos = cursor.fetchall()
produto = list()
for pr in meus_produtos:
produto.append(
{
'id': pr[0],
'nome': pr[1],
'descrição': pr[2],
'valor': pr[3],
'alíquota': pr[4]
}
)
return make_response(
jsonify(
mensagem='Lista de produtos',
dados=pr
)
)
#Create
@app.route('/cadastro', methods=['POST'])
def create_produto():
pr = request.json
'''cursor = mydb.cursor()
sql = f"INSERT INTO produto (nome_produto, descricao_produto, valor_produto, aliquota_produto) VALUES ('{pr['nome_produto']}', '{pr['descricao_produto']}', {pr['valor_produto']}, {pr['aliquota_produto']})"
cursor.execute(sql)
mydb.commit()'''
cnv = canvas.Canvas("meu_pdf.pdf")
cnv.drawString(250, 450, f"{pr['nome_produto']}, {pr['descricao_produto']}, {pr['valor_produto']}, {pr['aliquota_produto']}")
cnv.save()
return make_response(
jsonify(
mensagem='PDF gerado com sucesso!',
dados=pr
)
)
#Update
@app.route('/update', methods=['POST', 'GET'])
def update_produto():
pr = request.json
cursor = mydb.cursor()
sql = f"UPDATE produto SET nome_produto = '{pr['nome_produto']}', descricao_produto = '{pr['descricao_produto']}', valor_produto = {pr['valor_produto']}, aliquota_produto = {pr['aliquota_produto']} WHERE idproduto = {pr['idproduto']}"
cursor.execute(sql)
mydb.commit()
return make_response(
jsonify(
mensagem='Produto atualizado com sucesso!',
dados=pr
)
)
#Rota de envio de email caso o estoque esteja baixo
@app.route('/send', methods=['GET', 'POST'])
def send():
cursor = mydb.cursor()
cursor.execute("SELECT count(*) FROM produto")
qtd = cursor.fetchone()[0]
if qtd < 3:
msg = Message(
subject = 'Aviso de Estoque Baixo!',
sender = app.config.get("MAIL_USERNAME"),
recipients = [app.config.get("MAIL_USERNAME")],
body = f'''
Seu estoque está abaixo de 3 produtos!
'''
)
mail.send(msg)
return make_response(
jsonify(
mensagem='Email enviado com sucesso!',
)
)
else:
return make_response(
jsonify(
mensagem='O estoque não está acabando!',
)
)
if __name__ == '__main__':
app.run(debug=True)