Spaces:
Runtime error
Runtime error
from sqlalchemy import Column, Integer, Float, String, DateTime, Boolean, JSON, ForeignKey, Enum as SQLEnum | |
from enum import Enum | |
from sqlalchemy import Enum as SQLAlchemyEnum | |
from sqlalchemy.orm import relationship, backref | |
from datetime import datetime | |
from sqlalchemy.ext.declarative import declarative_base | |
from database import Base | |
class AnalysisStatus(str, Enum): | |
PENDING = "pending" # ๋ถ์ ๋๊ธฐ ์ค | |
PROCESSING = "processing" # ๋ถ์ ์งํ ์ค | |
COMPARING = "comparing" # ๋ถ์ ๊ฒฐ๊ณผ ๋น๊ต ์ค | |
COMPLETED = "completed" # ๋ถ์ ์๋ฃ | |
FAILED = "failed" # ๋ถ์ ์คํจ | |
class Music_Analysis(Base): # Music ๊ฐ ๋ถ์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ํ ์ด๋ธ | |
__tablename__ = "music_analysis" | |
id = Column(Integer, primary_key=True, index=True) | |
user_id = Column(Integer, ForeignKey("users.id")) | |
user = relationship("User", back_populates="music_analysis") | |
music1_id = Column(Integer, ForeignKey("musics.id"), nullable=False) # ์ฒซ ๋ฒ์งธ Music | |
music2_id = Column(Integer, ForeignKey("musics.id"), nullable=False) # ๋ ๋ฒ์งธ Music | |
analysis_results = relationship("Analysis_Result", back_populates="music_analysis", cascade="all, delete-orphan") | |
compare_results = relationship("Compare_Result", back_populates="music_analysis", cascade="all, delete-orphan") | |
music1 = relationship("Music", foreign_keys=[music1_id]) # ๊ด๊ณ ์ ์ | |
music2 = relationship("Music", foreign_keys=[music2_id]) # ๊ด๊ณ ์ ์ | |
requested_at = Column(DateTime, default=datetime.utcnow) # ์์ฒญ ์๊ฐ | |
status = Column(SQLAlchemyEnum(AnalysisStatus), default=AnalysisStatus.COMPLETED) | |
progress = Column(Float, default=0.0) # 1๋1 ๋ถ์ ์งํ๋ฅ . ์ผ๋งค๋ก ๋ฃ์ต๋๋ค | |
deleted = Column(Boolean, default=False) # ์ญ์ ์ฌ๋ถ | |
def __repr__(self): | |
return f"<MusicAnalysis(id={self.id}, music1_id={self.music1_id}, music2_id={self.music2_id}')>" | |
def user_name(self): | |
return self.user.user_info.name if self.user and self.user.user_info else None | |
def music1_title(self): | |
return self.music1.title if self.music1 else None | |
def music2_title(self): | |
return self.music2.title if self.music2 else None | |
def __repr__(self): | |
return f"<MusicAnalysis(id={self.id}, music1_id={self.music1_id}, music2_id={self.music2_id}')>" | |
class Analysis_Result(Base): | |
__tablename__ = "analysis_results" | |
id = Column(Integer, primary_key=True, index=True) | |
analysis_id = Column(Integer, ForeignKey("music_analysis.id"), nullable=False) # Music_Analysis์์ ์ธ๋ ํค ๊ด๊ณ | |
music_analysis = relationship("Music_Analysis", back_populates="analysis_results") | |
requested_at = Column(DateTime, default=datetime.utcnow) # ์์ฒญ ์๊ฐ | |
music1_json_path = Column(String) # ์ฒซ ๋ฒ์งธ Music JSON ํ์ผ ๊ฒฝ๋ก | |
music2_json_path = Column(String) # ๋ ๋ฒ์งธ Music JSON ํ์ผ ๊ฒฝ๋ก | |
def __repr__(self): | |
return f"<AnalysisResult(id={self.id}, analysis_id={self.analysis_id})>" | |
class Compare_Result(Base): | |
__tablename__ = "compare_results" | |
id = Column(Integer, primary_key=True, index=True) | |
analysis_id = Column(Integer, ForeignKey("music_analysis.id"), nullable=False) # Music_Analysis์์ ์ธ๋ ํค ๊ด๊ณ | |
music_analysis = relationship("Music_Analysis", back_populates="compare_results") # ์ฌ๊ธฐ๋ฅผ ์์ | |
requested_at = Column(DateTime, default=datetime.utcnow) # ์์ฒญ ์๊ฐ | |
compare_result_path = Column(String) # ๋ถ์ ๊ฒฐ๊ณผ ํ์ผ ๊ฒฝ๋ก | |
def __repr__(self): | |
return f"<CompareResult(id={self.id}, music_analysis_id={self.analysis_id})>" |