63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
from flask import Blueprint, jsonify, request
|
|
from app.auth import generate_token, token_required
|
|
from app.models.user import User
|
|
from app.database import db
|
|
from werkzeug.security import generate_password_hash, check_password_hash
|
|
from app.docs.user_docs import user_get_doc, user_post_doc, login_post_doc
|
|
from flasgger import swag_from
|
|
|
|
user_bp = Blueprint("users", __name__)
|
|
|
|
@user_bp.route("/", methods=["GET"])
|
|
@swag_from(user_get_doc)
|
|
@token_required # Protege a rota
|
|
def get_users(self):
|
|
users = User.query.all() # select * from User
|
|
return jsonify([{"id": u.id, "name": u.name, "email": u.email} for u in users])
|
|
|
|
@user_bp.route("/", methods=["POST"])
|
|
@swag_from(user_post_doc)
|
|
@token_required # Protege a rota
|
|
def create_user(self):
|
|
data = request.get_json()
|
|
print(data)
|
|
name = data.get("name")
|
|
email = data.get("email")
|
|
password = data.get("password")
|
|
|
|
# Verificar se o usuário já existe
|
|
if User.query.filter_by(email=email).first():
|
|
return jsonify({"message": "Usuário já existe!"}), 400
|
|
|
|
# Gerar senha criptografada
|
|
hashed_password = generate_password_hash(password, method="pbkdf2:sha256")
|
|
|
|
# Criar novo usuário
|
|
new_user = User(name=name, email=email, password=hashed_password)
|
|
|
|
# Adicionar e salvar no banco de dados
|
|
db.session.add(new_user)
|
|
db.session.commit()
|
|
|
|
return jsonify({"message": "Usuário registrado com sucesso!"}), 201
|
|
|
|
# Rota para login de usuário
|
|
@user_bp.route("/login", methods=["POST"])
|
|
@swag_from(login_post_doc)
|
|
def login_user():
|
|
data = request.get_json()
|
|
print(data)
|
|
|
|
email = data.get("email")
|
|
password = data.get("password")
|
|
|
|
user = User.query.filter_by(email=email).first()
|
|
|
|
if not user or not check_password_hash(user.password, password):
|
|
return jsonify({"message": "Credenciais inválidas!"}), 401
|
|
|
|
token = generate_token(user)
|
|
|
|
return jsonify({"message": "Login bem-sucedido", "token": token}), 200
|
|
|