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