"""Audio Attribute modeling.""" from sqlalchemy import Column from sqlalchemy import DateTime from sqlalchemy import Enum from sqlalchemy import ForeignKey from sqlalchemy import Integer from sqlalchemy import JSON from sqlalchemy import String from sqlalchemy.orm import relationship from sqlalchemy.sql import func from backend.connectors import mysql class AudioAttributes(mysql.BaseModel): """Model for Audio Attributes.""" __tablename__ = 'audio_attributes' id = Column(Integer, primary_key=True, autoincrement=True) # noqa: A003 description = Column(String(100), nullable=False) def to_dict(self): """Audio Attributes data dictionary. Returns: dict """ return { 'id': self.id, 'description': self.description } class AudioAttributesSuggestionKeywords(mysql.BaseModel): """Model for Audio Attributes Suggestion Keywords.""" __tablename__ = 'audio_attributes_suggestion_keywords' id = Column(Integer, primary_key=True, autoincrement=True) # noqa: A003 audio_attribute_id = Column(Integer, ForeignKey( 'audio_attributes.id'), nullable=False) keyword = Column(String(30), nullable=False) def to_dict(self): """Audio Attributes Suggestion Keywords data dictionary. Returns: dict """ return { 'id': self.id, 'audio_attribute_id': self.audio_attribute_id, 'keyword': self.keyword } class TrackAudioAttributes(mysql.BaseModel): """Model for Track Audio Attributes.""" __tablename__ = 'track_audio_attributes' id = Column(Integer, primary_key=True, autoincrement=True) # noqa: A003 unique_track_id = Column(Integer, ForeignKey('track.id'), nullable=False) audio_attribute_id = Column(Integer, ForeignKey( 'audio_attributes.id'), nullable=False) audio_attributes = relationship( 'AudioAttributes', foreign_keys=[audio_attribute_id]) def to_dict(self): """Track Audio Attributes data dictionary. Returns: dict """ return { 'id': self.id, 'unique_track_id': self.unique_track_id, 'audio_attribute_id': self.audio_attribute_id, 'audio_attributes': self.audio_attributes } class TrackAudioAttributesEdits(mysql.BaseModel): """Model for Track Audio Attributes Edits.""" __tablename__ = 'track_audio_attributes_edits' id = Column(Integer, primary_key=True, autoincrement=True) # noqa: A003 unique_track_id = Column(Integer, ForeignKey('track.id'), nullable=False) audio_attribute_id = Column(Integer, ForeignKey( 'audio_attributes.id'), nullable=False) audio_attributes = relationship( 'AudioAttributes', foreign_keys=[audio_attribute_id]) def to_dict(self): """Track Audio Attributes Edits data dictionary. Returns: dict """ return { 'id': self.id, 'unique_track_id': self.unique_track_id, 'audio_attribute_id': self.audio_attribute_id, 'audio_attributes': self.audio_attributes } class TrackAudioAttributesChangelog(mysql.BaseModel): """Model for Track Audio Attributes Changelog.""" __tablename__ = 'track_audio_attributes_changelog' id = Column(Integer, primary_key=True, autoincrement=True) # noqa: A003 unique_track_id = Column(Integer, ForeignKey('track.id'), nullable=False) audio_attribute_id = Column(Integer, ForeignKey('audio_attributes.id'), nullable=False) user_uuid = Column(String(36)) action = Column(Enum('insert', 'delete')) datetime = Column(DateTime, default=func.now(), onupdate=func.now()) change_source = Column(String(255), nullable=True) def to_dict(self): """Track Audio Attributes Changelog. Returns: dict """ return { 'id': self.id, 'unique_track_id': self.unique_track_id, 'audio_attribute_id': self.audio_attribute_id, 'user_uuid': self.user_uuid, 'action': self.action, 'datetime': self.datetime, 'change_source': self.change_source } class TrackAudioAttributeSuggestions(mysql.BaseModel): """Model for Track Audio Attribute Suggestions.""" __tablename__ = 'track_audio_attribute_suggestions' id = Column(Integer, primary_key=True, autoincrement=True) # noqa: A003 unique_track_id = Column(Integer, ForeignKey('track.id'), nullable=False) suggestions = Column(JSON, nullable=False) user_uuid = Column(String(36), nullable=False) review_queue_id = Column(Integer, nullable=False) class VendorAudioAttributes(mysql.BaseModel): """Model for Vendor Audio Attributes.""" __tablename__ = 'vendor_audio_attributes' id = Column(Integer, primary_key=True, autoincrement=True) # noqa: A003 vendor_id = Column(Integer) audio_attribute_id = Column(Integer, ForeignKey( 'audio_attributes.id'), nullable=False) audio_attributes = relationship( 'AudioAttributes', foreign_keys=[audio_attribute_id]) def to_dict(self): """Audio Attributes data dictionary. Returns: dict """ return { 'id': self.id, 'vendor_id': self.vendor_id, 'audio_attribute_id': self.audio_attribute_id, 'audio_attributes': self.audio_attributes }