<reponame>netomap/API-FLASK
from typing import final
from weakref import finalize
import mysql.connector
from mysql.connector import Error
from variaveis import V
from auth import Auth
from db_variables import Var

class UsuarioDAO:

    def __init__(self):
        try:
            self.conn = mysql.connector.connect(
                host='localhost',
                user=Var().DB_USER,
                password=Var().DB_PASSWORD,
                port=Var().DB_PORT,
                database=Var().DB_NAME
            )
        except Error as e:
            print (e)
            return False
    
    def signup(self, user):
        if (self.conn.is_connected()):
            try:
                cursor = self.conn.cursor()
                cursor.execute('INSERT INTO users (email, password, nome, idade) VALUES ("{}","{}","{}","{}");'.format(
                    user['email'], user['password'], user['nome'], user['idade']
                ))
                self.conn.commit()
                success, message = True, 'Usuário inserido com sucesso!'

            except Error as e:
                if (e.msg.find('Duplicate entry', 0) != -1):
                    success, message = False, 'email já cadastrado no banco'
                else:
                    success, message = False, str(e)

        else:
            success, message = False, 'sem conexão com db'
        
        cursor.close()
        self.conn.close()
        return {'success': success, 'message': message}
    
    def getUser(self, id):
        usuario = None
        if (self.conn.is_connected()):
            cursor = self.conn.cursor()
            try:
                cursor.execute('SELECT * FROM users WHERE id="{}";'.format(id))
                ut = cursor.fetchall() # usertupla. 
                if (len(ut) == 1):
                    ut = ut[0] # o índice zero é porque retorna um vetor
                    usuario = {'id': ut[0], 'email': ut[1], 'nome': ut[3], 'idade': ut[4]}
                    success, message = True, 'usuário encontrado.'
                else:
                    success, message = False, 'usuário não encontrado.'
            except Error as e:
                success, message = False, str(e)

        else:
            success, message = False, 'sem conexão com db'
        
        cursor.close()
        self.conn.close()
        return {'success': success, 'message': message, 'usuario': usuario}
    
    def editUser(self, user):
        if (self.conn.is_connected()):
            cursor = self.conn.cursor()
            try:
                cursor.execute('UPDATE users SET nome="{}", idade="{}" WHERE id="{}";'.format(
                    user['nome'], user['idade'], user['id']
                ))
                self.conn.commit()
                if (cursor.rowcount == 1):
                    success, message = True, 'usuário editado com sucesso'
                else:
                    success, message = False, 'credenciais não encontradas'
            except Error as e:
                success, message = False, str(e)

        else:
            success, message = False, 'sem conexão com db'

        cursor.close()
        self.conn.close()
        return {'success': success, 'message': message}
    
    def deleteUser(self, id):
        if (self.conn.is_connected()):
            cursor = self.conn.cursor()
            try:
                cursor.execute('DELETE FROM users WHERE id="{}"'.format(id))
                self.conn.commit()
                if (cursor.rowcount == 1):
                    success, message = True, 'usuário excluído'
                else:
                    success, message = False, 'usuário não encontrado'
            except Error as e:
                success, message = False, str(e)
        else:
            success, message = False, 'sem conexão com db'

        cursor.close()
        self.conn.close()
        return {'success': success, 'message': message}
    
    def login(self, user):
        if (self.conn.is_connected()):
            cursor = self.conn.cursor()
            token = None
            try:
                cursor.execute('SELECT * FROM users WHERE email="{}" AND password="{}"'.format(
                    user['email'], user['password']
                ))
                resultado = cursor.fetchall()
                if (len(resultado) == 1):
                    token = Auth().criarToken(resultado[0])
                    success, message = True, 'usuário logado'
                else:
                   success, message = False, 'credenciais inválidas'
            except Error as e:
                success, message = False, str(e)

        else:
            success, message = False, 'sem conexão com db'
        
        cursor.close()
        self.conn.close()
        return {'success': success, 'message': message, 'token': token}
from typing import final
from weakref import finalize
import mysql.connector
from mysql.connector import Error
from variaveis import V
from auth import Auth
from db_variables import Var

class UsuarioDAO:

    def __init__(self):
        try:
            self.conn = mysql.connector.connect(
                host='localhost',
                user=Var().DB_USER,
                password=Var().DB_PASSWORD,
                port=Var().DB_PORT,
                database=Var().DB_NAME
            )
        except Error as e:
            print (e)
            return False
    
    def signup(self, user):
        if (self.conn.is_connected()):
            try:
                cursor = self.conn.cursor()
                cursor.execute('INSERT INTO users (email, password, nome, idade) VALUES ("{}","{}","{}","{}");'.format(
                    user['email'], user['password'], user['nome'], user['idade']
                ))
                self.conn.commit()
                success, message = True, 'Usuário inserido com sucesso!'

            except Error as e:
                if (e.msg.find('Duplicate entry', 0) != -1):
                    success, message = False, 'email já cadastrado no banco'
                else:
                    success, message = False, str(e)

        else:
            success, message = False, 'sem conexão com db'
        
        cursor.close()
        self.conn.close()
        return {'success': success, 'message': message}
    
    def getUser(self, id):
        usuario = None
        if (self.conn.is_connected()):
            cursor = self.conn.cursor()
            try:
                cursor.execute('SELECT * FROM users WHERE id="{}";'.format(id))
                ut = cursor.fetchall() # usertupla. 
                if (len(ut) == 1):
                    ut = ut[0] # o índice zero é porque retorna um vetor
                    usuario = {'id': ut[0], 'email': ut[1], 'nome': ut[3], 'idade': ut[4]}
                    success, message = True, 'usuário encontrado.'
                else:
                    success, message = False, 'usuário não encontrado.'
            except Error as e:
                success, message = False, str(e)

        else:
            success, message = False, 'sem conexão com db'
        
        cursor.close()
        self.conn.close()
        return {'success': success, 'message': message, 'usuario': usuario}
    
    def editUser(self, user):
        if (self.conn.is_connected()):
            cursor = self.conn.cursor()
            try:
                cursor.execute('UPDATE users SET nome="{}", idade="{}" WHERE id="{}";'.format(
                    user['nome'], user['idade'], user['id']
                ))
                self.conn.commit()
                if (cursor.rowcount == 1):
                    success, message = True, 'usuário editado com sucesso'
                else:
                    success, message = False, 'credenciais não encontradas'
            except Error as e:
                success, message = False, str(e)

        else:
            success, message = False, 'sem conexão com db'

        cursor.close()
        self.conn.close()
        return {'success': success, 'message': message}
    
    def deleteUser(self, id):
        if (self.conn.is_connected()):
            cursor = self.conn.cursor()
            try:
                cursor.execute('DELETE FROM users WHERE id="{}"'.format(id))
                self.conn.commit()
                if (cursor.rowcount == 1):
                    success, message = True, 'usuário excluído'
                else:
                    success, message = False, 'usuário não encontrado'
            except Error as e:
                success, message = False, str(e)
        else:
            success, message = False, 'sem conexão com db'

        cursor.close()
        self.conn.close()
        return {'success': success, 'message': message}
    
    def login(self, user):
        if (self.conn.is_connected()):
            cursor = self.conn.cursor()
            token = None
            try:
                cursor.execute('SELECT * FROM users WHERE email="{}" AND password="{}"'.format(
                    user['email'], user['password']
                ))
                resultado = cursor.fetchall()
                if (len(resultado) == 1):
                    token = Auth().criarToken(resultado[0])
                    success, message = True, 'usuário logado'
                else:
                   success, message = False, 'credenciais inválidas'
            except Error as e:
                success, message = False, str(e)

        else:
            success, message = False, 'sem conexão com db'
        
        cursor.close()
        self.conn.close()
        return {'success': success, 'message': message, 'token': token}
# usertupla. # o índice zero é porque retorna um vetor