From b3e185c6e0830c400ba40506aed2913adc2431e6 Mon Sep 17 00:00:00 2001 From: Fernanda Date: Wed, 15 Apr 2026 17:12:35 -0300 Subject: [PATCH] Adiciona login ao usuario --- app.py | 2 -- controller/usuario_controller.py | 22 +++++++++++++++++++++- model/usuario.py | 4 ++++ service/usuario_service.py | 16 +++++++++++++++- 4 files changed, 40 insertions(+), 4 deletions(-) diff --git a/app.py b/app.py index 3073fd2..b97536a 100644 --- a/app.py +++ b/app.py @@ -6,12 +6,10 @@ from controller.dispositivo_controller import dispositivo_bp from controller.leitura_controller import leitura_bp import os -# Variaveis dinamicas que sao usadas para definir qual a porta do servidor e o host do mesmo host = str(os.environ.get("HOST", "localhost")) port = int(os.environ.get("PORT", 5000)) debug = str(os.environ.get("DEBUG", "true")) -# Variaveis dinamicas usadas para definir o Host do banco de dados assim conectando a banco de dados dedicado db_user = str(os.environ.get("POSTGRES_DB_KEY", "fauUser")) db_name = str(os.environ.get("POSTGRES_USER_KEY", "facu")) db_host = str(os.environ.get("POSTGRES_HOST_KEY", "127.0.0.1")) diff --git a/controller/usuario_controller.py b/controller/usuario_controller.py index 0c8a1a7..fd2b40f 100644 --- a/controller/usuario_controller.py +++ b/controller/usuario_controller.py @@ -1,6 +1,6 @@ from flask import Blueprint, request, jsonify from service.usuario_service import UsuarioService -from model.usuario import EmailJaCadastrado, UsuarioNaoEncontrado +from model.usuario import EmailJaCadastrado, UsuarioNaoEncontrado, SenhaInvalida usuario_bp = Blueprint('usuario', __name__) @@ -24,6 +24,26 @@ def registrar(): return jsonify({"erro": "Email ja cadastrado"}), 409 +@usuario_bp.route('/auth/login', methods=['POST']) +def login(): + dados = request.get_json() + try: + usuario = UsuarioService.instancia().login( + email=dados['email'], + senha=dados['senha'] + ) + return jsonify({ + "id": usuario.id, + "nome": usuario.nome, + "email": usuario.email, + "token_api": usuario.token_api + }) + except UsuarioNaoEncontrado: + return jsonify({"erro": "Email nao encontrado"}), 404 + except SenhaInvalida: + return jsonify({"erro": "Senha invalida"}), 401 + + @usuario_bp.route('/auth/usuario/', methods=['GET']) def buscar(id): try: diff --git a/model/usuario.py b/model/usuario.py index c7fd51f..5476453 100644 --- a/model/usuario.py +++ b/model/usuario.py @@ -10,6 +10,10 @@ class EmailJaCadastrado(Exception): pass +class SenhaInvalida(Exception): + pass + + class Usuario(db.Model): __tablename__ = 'usuarios' diff --git a/service/usuario_service.py b/service/usuario_service.py index d8ee027..c6c56ce 100644 --- a/service/usuario_service.py +++ b/service/usuario_service.py @@ -1,4 +1,4 @@ -from model.usuario import Usuario, UsuarioNaoEncontrado, EmailJaCadastrado +from model.usuario import Usuario, UsuarioNaoEncontrado, EmailJaCadastrado, SenhaInvalida from dao.usuario_dao import UsuarioDao import bcrypt @@ -32,3 +32,17 @@ class UsuarioService: if not usuario: raise UsuarioNaoEncontrado() return usuario + + def login(self, email, senha): + usuario = self.dao.buscar_por_email(email) + if not usuario: + raise UsuarioNaoEncontrado() + + senha_correta = bcrypt.checkpw( + senha.encode('utf-8'), + usuario.senha_hash.encode('utf-8') + ) + if not senha_correta: + raise SenhaInvalida() + + return usuario