from sqlalchemy import Column, Integer, String, ForeignKey, Text, Table, Boolean, DateTime from sqlalchemy.orm import relationship from .database import Base class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) username = Column(String, index=True) email = Column(String, unique=True, index=True) hashed_password = Column(String) tier = Column(String) tier_expires_at = Column(DateTime) last_active_at = Column(DateTime) # System keys public_key = Column(String) private_key = Column(String) # Encrypted or raw? Storing raw for now as per req is_admin = Column(Boolean, default=False) guale = Column(Boolean, default=False) assets = relationship("Asset", foreign_keys="Asset.author_id", back_populates="author") inherited_assets = relationship("Asset", foreign_keys="Asset.heir_id", back_populates="heir") class Asset(Base): __tablename__ = "assets" id = Column(Integer, primary_key=True, index=True) title = Column(String, index=True) content_outer_encrypted = Column(Text) author_id = Column(Integer, ForeignKey("users.id")) heir_id = Column(Integer, ForeignKey("users.id")) # Key shard for this asset private_key_shard = Column(String) author = relationship("User", foreign_keys=[author_id], back_populates="assets") heir = relationship("User", foreign_keys=[heir_id], back_populates="inherited_assets") class AIConfig(Base): __tablename__ = "ai_configs" id = Column(Integer, primary_key=True, index=True) provider_name = Column(String, unique=True, index=True) api_key = Column(String) api_url = Column(String) default_model = Column(String) is_active = Column(Boolean, default=True)