from sqlalchemy import func from sqlalchemy.types import ( BigInteger, DateTime, VARCHAR, ) from sqlalchemy.dialects.postgresql import ENUM as pgEnum, JSON from sqlalchemy import Column, Index from sqlalchemy.ext.declarative import declarative_base from server.dna.constants import ARTIST, TRACK Base: declarative_base = declarative_base() class UserSearch(Base): __tablename__ = "user_search" id = Column(BigInteger, primary_key=True) name = Column(VARCHAR, nullable=False) user_id = Column(VARCHAR, nullable=False) params = Column(JSON, nullable=False) created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False) updated_at = Column(DateTime(timezone=True), onupdate=func.now(), nullable=False) archived = Column(DateTime, default=None) type = Column(pgEnum(ARTIST, TRACK), nullable=False) __table_args__ = ( Index("user_search_name_user_id_archived_key", "name", "user_id", "archived"), Index("user_search_name_user_id_key", "name", "user_id"), {"schema": "dna"}, ) class RecentSearches(Base): __tablename__ = "recent_searches" id = Column(BigInteger, primary_key=True) entity_id = Column(VARCHAR, nullable=False) entity_type = Column(pgEnum(ARTIST, TRACK), nullable=False) user_id = Column(VARCHAR, nullable=False) created_at = Column(DateTime(), server_default=func.now(), nullable=False) __table_args__ = ({"schema": "dna"},)