| 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 |