# models.py from sqlalchemy import Column, Integer, String, Enum, ForeignKey, JSON from sqlalchemy.orm import relationship from data.db import Base from core.enums import ConnectionTypes, UserRole class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) username = Column(String, unique=True, index=True, nullable=False) role = Column(Enum(UserRole), default=UserRole.user, nullable=False) api_key = Column(String, unique=True, nullable=False) # repos = relationship("Connection", back_populates="owner") class Connection(Base): __tablename__ = "connections" id = Column(Integer, primary_key=True, index=True) db_name = Column(String, nullable=False) type = Column(Enum(ConnectionTypes), nullable=False) host = Column(String) port = Column(Integer) username = Column(String) password = Column(String) pool_minsize = Column(Integer, nullable=False, default=5) pool_maxsize = Column(Integer, nullable=False, default=10) owner_id = Column(Integer, ForeignKey("users.id")) # owner = relationship("User", back_populates="connections") class Query(Base): __tablename__ = "queries" id = Column(Integer, primary_key=True, index=True) name = Column(String, nullable=False) description = Column(String, nullable=True) owner_id = Column(Integer, ForeignKey("users.id")) table_name = Column(String, nullable=False) columns = Column(JSON, nullable=False) filters = Column(JSON, nullable=True) sort_by = Column(JSON, nullable=True) limit = Column(Integer, nullable=True) offset = Column(Integer, nullable=True) sql= Column(String, nullable=False) params = Column(JSON, nullable=False)