Files
tainagustului/UI_V2/dbActions/users.py
2025-10-27 21:11:31 +02:00

206 lines
7.0 KiB
Python

import sqlite3
from typing import Optional
import hashlib
class Users:
def __init__(self, db_path="instance/app_database.db"):
self.db_path = db_path
self._create_users_table()
def _create_users_table(self):
"""Create the users table if it doesn't already exist."""
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
email TEXT NOT NULL UNIQUE,
password TEXT,
token TEXT,
name TEXT,
phone TEXT,
address TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
status TEXT NOT NULL DEFAULT 'active',
role TEXT DEFAULT 'client'
);
""")
conn.commit()
def hash_password(self, password: str) -> bytes:
return hashlib.md5(password.encode('utf-8')).hexdigest()
def add_user(self, email, passwd, role):
"""Register a new user."""
try:
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute("""
INSERT INTO users (email, password, role)
VALUES (?, ?, ?)
""", (email, passwd, role))
conn.commit()
return True
except sqlite3.IntegrityError:
return False # Username already exist
def invite_user(self, email, name, phone, address, role='invited'):
#try:
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute("""
INSERT INTO users (email, name, phone, address, role)
VALUES (?, ?, ?, ?, ?)
""", (email, name, phone, address, role))
conn.commit()
return cursor.lastrowid
#except sqlite3.IntegrityError:
# return None
def register_user(self, email: str, password: str) -> bool:
"""Register a new user."""
try:
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute("""
INSERT INTO users (email, password)
VALUES (?, ?)
""", (email, password))
conn.commit()
return True
except sqlite3.IntegrityError:
return False # Username already exist
def authenticate_user(self, email: str, password: str) -> bool:
"""Authenticate a user."""
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute("""
SELECT * FROM users
WHERE email = ? AND password = ?
""", (email, password))
row = cursor.fetchone()
if row:
return {
"id": row[0],
"email": row[1],
"token": row[3],
"name":row[4],
"phone": row[5],
"address": row[6],
"created_at": row[7],
"status": row[8],
"role":row[9]
}
else:
return None
def get_user(self, email: str) -> Optional[dict]:
"""Retrieve user details by username."""
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute("""
SELECT * FROM users
WHERE email = ?
""", (email,))
row = cursor.fetchone()
if row:
return {
"id": row[0],
"email": row[1],
"token": row[3],
"name":row[4],
"phone": row[5],
"address": row[6],
"created_at": row[7],
"status": row[8],
"role":row[9]
}
return None
def get(self, id: int) -> Optional[dict]:
"""Retrieve user details by username."""
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute("""
SELECT * FROM users
WHERE id = ?
""", (id,))
row = cursor.fetchone()
if row:
return {
"id": row[0],
"email": row[1],
"token": row[3],
"name":row[4],
"phone": row[5],
"address": row[6],
"created_at": row[7],
"status": row[8],
"role":row[9]
}
return None
def get_all(self) -> Optional[dict]:
"""Retrieve user details by username."""
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute("""
SELECT * FROM users
""")
rows = cursor.fetchall()
if rows:
buffer = []
for row in rows:
buffer.append({
"id": row[0],
"email": row[1],
"token": row[3],
"name":row[4],
"phone": row[5],
"address": row[6],
"created_at": row[7],
"status": row[8],
"role":row[9]
})
return buffer
return []
def update_password(self, email, passwd):
'''Update user password'''
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute('''
UPDATE users SET password = ?
WHERE email = ?
''', (passwd, email))
conn.commit()
def update_token(self, id, token):
'''Update user token'''
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute('''
UPDATE users SET token = ?
WHERE id = ?
''', (token, id))
conn.commit()
def update_user_data(self, name, phone, address, id):
'''Update user data'''
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute('''
UPDATE users SET name = ?, phone = ?, address = ?
WHERE id = ?
''', (name, phone, address, id))
conn.commit()
def delete(self, id):
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute('''
DELETE FROM users WHERE id=?;
''', (id,))
conn.commit()