from sqlalchemy import create_engine, Column, Integer, String, DateTime from sqlalchemy.orm import sessionmaker, declarative_base from datetime import datetime Base = declarative_base() class ChatMessage(Base): __tablename__ = "chat_messages" id = Column(Integer, primary_key=True, index=True) user_id = Column(String, index=True) role = Column(String) # "user" or "bot" message = Column(String) timestamp = Column(DateTime, default=datetime.utcnow) class Task(Base): __tablename__ = "tasks" id = Column(Integer, primary_key=True, index=True) user_id = Column(String, index=True) name = Column(String) timestamp = Column(DateTime, default=datetime.utcnow) engine = create_engine("sqlite:///tasks.db", echo=False) SessionLocal = sessionmaker(bind=engine) def init_db(): Base.metadata.create_all(bind=engine) def save_message(user_id, role, message): session = SessionLocal() msg = ChatMessage(user_id=user_id, role=role, message=message) session.add(msg) session.commit() session.close() def load_chat_history(user_id, limit=5): session = SessionLocal() messages = session.query(ChatMessage).filter_by(user_id=user_id).order_by(ChatMessage.timestamp.desc()).limit(limit).all() session.close() return reversed(messages) # --- Task DB functions --- def add_task_db(user_id, task_name): session = SessionLocal() task = Task(user_id=user_id, name=task_name) session.add(task) session.commit() session.close() return f'Task "{task_name}" added successfully ✅' def list_tasks_db(user_id): session = SessionLocal() tasks = session.query(Task).filter_by(user_id=user_id).order_by(Task.timestamp.asc()).all() session.close() if not tasks: return "No tasks found." return "Your Tasks:\n" + "\n".join([f"{i+1}. {t.name}" for i, t in enumerate(tasks)]) def edit_task_db(user_id, old_name, new_name): session = SessionLocal() task = session.query(Task).filter_by(user_id=user_id, name=old_name).first() if task: task.name = new_name session.commit() session.close() return f'Task "{old_name}" updated to "{new_name}" ✅' session.close() return f'Task "{old_name}" not found ❌' def delete_task_db(user_id, task_name): session = SessionLocal() task = session.query(Task).filter_by(user_id=user_id, name=task_name).first() if task: session.delete(task) session.commit() session.close() return f'Task "{task_name}" deleted successfully 🗑️' session.close() return f'Task "{task_name}" not found ❌'