from datetime import datetime from sqlalchemy import BOOLEAN, JSON, TEXT, TIMESTAMP, Column, Index, String from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class Application(Base): __tablename__ = "applications" id = Column(String(36), primary_key=True, nullable=False) name = Column(String(255), nullable=False, default="Untitled_Application") owner = Column(String(255), nullable=False, default="Anonymous") created_at = Column(TIMESTAMP, nullable=False, default=datetime.utcnow()) updated_at = Column(TIMESTAMP, nullable=False, default=datetime.utcnow()) version = Column(String(32), nullable=True) description = Column(TEXT, nullable=True) deploy = Column(BOOLEAN, nullable=False, default=False) custom_fields = Column(JSON, nullable=True) configuration = Column(JSON, nullable=False) name_index = Index("ix_applications_name", name) owner_index = Index("ix_applications_owner", owner) created_at_index = Index("ix_applications_created_at", created_at) updated_at_index = Index("ix_applications_updated_at", updated_at) deploy_index = Index("ix_applications_deploy", deploy) description_index = Index( "ix_applications_description", description, mysql_length=255 ) # TEXT needs length version_index = Index("ix_applications_version", version) class Interaction(Base): __tablename__ = "interactions" id = Column(String(36), primary_key=True, nullable=False) created_at = Column(TIMESTAMP, nullable=False, default=datetime.utcnow()) application_id = Column(String(36), nullable=False) data = Column(JSON, nullable=False) usage = Column(JSON, nullable=True) error = Column(JSON, nullable=True) application_index = Index("ix_interactions_application_id", application_id) created_at_index = Index("ix_interactions_created_at", created_at) metadata = Base.metadata