from sqlalchemy import create_engine, Column, Integer, String, Boolean, DateTime, Text from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from datetime import datetime import os from dotenv import load_dotenv load_dotenv() # SQLite Database URL SQLITE_DATABASE_URL = os.getenv("SQLITE_DATABASE_URL", "sqlite:///./smart_line_bot.db") engine = create_engine(SQLITE_DATABASE_URL, connect_args={"check_same_thread": False}) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() # Database Models class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) username = Column(String, unique=True, index=True) email = Column(String, unique=True, index=True) hashed_password = Column(String) is_active = Column(Boolean, default=True) is_admin = Column(Boolean, default=False) created_at = Column(DateTime, default=datetime.utcnow) class APIKey(Base): __tablename__ = "api_keys" id = Column(Integer, primary_key=True, index=True) key = Column(String, unique=True, index=True) name = Column(String) user_id = Column(Integer) # Foreign key to User.id (simplified for now) is_active = Column(Boolean, default=True) created_at = Column(DateTime, default=datetime.utcnow) expires_at = Column(DateTime, nullable=True) last_used_at = Column(DateTime, nullable=True) class Settings(Base): __tablename__ = "settings" id = Column(Integer, primary_key=True, index=True) key = Column(String, unique=True, index=True) value = Column(Text) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) # Create tables def create_tables(): Base.metadata.create_all(bind=engine) # Dependency def get_db(): db = SessionLocal() try: yield db finally: db.close()