File size: 3,002 Bytes
a52940c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | import sqlite3
import os
from pathlib import Path
DB_PATH = os.path.join(os.path.dirname(__file__), "fitplan.db")
def init_database():
"""Initialize the SQLite database with users table."""
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
password_hash TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit()
conn.close()
def user_exists(email):
"""Check if a user with the given email already exists."""
email = email.strip().lower()
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute('SELECT id FROM users WHERE email = ?', (email,))
result = cursor.fetchone()
conn.close()
return result is not None
def register_user(name, email, password_hash):
"""Register a new user in the database."""
email = email.strip().lower()
try:
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute('''
INSERT INTO users (name, email, password_hash)
VALUES (?, ?, ?)
''', (name, email, password_hash))
conn.commit()
conn.close()
return True
except sqlite3.IntegrityError as e:
print(f"Database error: {e}")
return False
def get_user_by_email(email):
"""Retrieve user data by email."""
email = email.strip().lower()
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute('SELECT id, name, email, password_hash FROM users WHERE email = ?', (email,))
user = cursor.fetchone()
conn.close()
if user:
return {
"id": user[0],
"name": user[1],
"email": user[2],
"password_hash": user[3]
}
return None
def get_user_by_name_email(name, email):
"""Retrieve user data by name and email."""
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute('SELECT id, name, email, password_hash FROM users WHERE name = ? AND email = ?', (name, email))
user = cursor.fetchone()
conn.close()
if user:
return {
"id": user[0],
"name": user[1],
"email": user[2],
"password_hash": user[3]
}
return None
def get_all_users():
"""Debug: Get all users in database."""
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute('SELECT id, name, email FROM users')
users = cursor.fetchall()
conn.close()
return users
user = cursor.fetchone()
conn.close()
if user:
return {
"id": user[0],
"name": user[1],
"email": user[2],
"password_hash": user[3]
}
return None |