# # database.py # import sqlite3 # import json # from datetime import datetime # from typing import Optional, Dict # DB_PATH = "users.db" # # Ensure DB and table are created on import # def init_db(): # conn = sqlite3.connect(DB_PATH) # cursor = conn.cursor() # cursor.execute(""" # CREATE TABLE IF NOT EXISTS users ( # session_alias TEXT PRIMARY KEY, # name TEXT, # created_at TEXT, # profile TEXT, # chat_history TEXT, # workout_plan TEXT, # nutrition_plan TEXT, # last_updated TEXT # ) # """) # conn.commit() # conn.close() # def save_user_data(session_alias: str, user_data: Dict): # conn = sqlite3.connect(DB_PATH) # cursor = conn.cursor() # cursor.execute(""" # INSERT INTO users ( # session_alias, name, created_at, profile, chat_history, # workout_plan, nutrition_plan, last_updated # ) VALUES (?, ?, ?, ?, ?, ?, ?, ?) # ON CONFLICT(session_alias) DO UPDATE SET # name=excluded.name, # profile=excluded.profile, # chat_history=excluded.chat_history, # workout_plan=excluded.workout_plan, # nutrition_plan=excluded.nutrition_plan, # last_updated=excluded.last_updated # """, ( # session_alias, # user_data.get("name", ""), # user_data.get("created_at", datetime.now().isoformat()), # json.dumps(user_data.get("profile", {})), # json.dumps(user_data.get("chat_history", [])), # json.dumps(user_data.get("workout_plan", {})), # json.dumps(user_data.get("nutrition_plan", {})), # datetime.now().isoformat() # )) # conn.commit() # conn.close() # def get_user_data(session_alias: str) -> Optional[Dict]: # conn = sqlite3.connect(DB_PATH) # cursor = conn.cursor() # cursor.execute("SELECT * FROM users WHERE session_alias = ?", (session_alias,)) # row = cursor.fetchone() # conn.close() # if not row: # return None # return { # "session_alias": row[0], # "name": row[1], # "created_at": row[2], # "profile": json.loads(row[3] or "{}"), # "chat_history": json.loads(row[4] or "[]"), # "workout_plan": json.loads(row[5] or "{}"), # "nutrition_plan": json.loads(row[6] or "{}"), # "last_updated": row[7] # } # def create_user(session_alias: str, name: str): # # Only called when new user logs in # user_data = { # "name": name, # "created_at": datetime.now().isoformat(), # "profile": {}, # "chat_history": [], # "workout_plan": {}, # "nutrition_plan": {} # } # save_user_data(session_alias, user_data) # # Always call on app start # init_db()