nininigold's picture
Upload folder using huggingface_hub
3cecacc verified
from sqlalchemy import Column, Integer, String, DateTime, Boolean, ForeignKey, Float,JSON
from sqlalchemy.orm import relationship
from datetime import datetime
from database import Base
import random
def get_random_album_art():
number = random.randint(1, 30)
return f"https://storage.googleapis.com/mippia-userfile-bucket/userfiles/default_albumart/thumbnail_240_{number:02}.png"
class Result(Base): # ํ•œ๊ธ€ path, ์˜์–ด path, data_pkl # 3๊ฐœ๊ฐ€ result๊ฐ€ ์žˆ์Œ 1ํ†ตํ•ฉ -> migration์„ํ•˜๋ฉด ์ง€๊ธˆ ๋Œ๊ณ ์žˆ๋Š” ์‚ฌ์ดํŠธ์—๋„ ์˜ํ–ฅ์ด๊ฐ
__tablename__ = "files"
id = Column(Integer, primary_key=True, index=True)
path = Column(String, index=True, default = None) # deprecated
music_id = Column(Integer, ForeignKey("musics.id"))
rank = Column(Integer)
requested_at = Column(DateTime, default=datetime.utcnow)
title = Column(String, index=True)
music = relationship("Music", back_populates="results")
plagiarism_rate = Column(Float)
data_pkl = Column(String)
def __repr__(self):
return f"<Result(id={self.id}, name='{self.path}')>"
class Visual_Result(Base): # ํ•œ๊ธ€ path, ์˜์–ด path, data_pkl # 3๊ฐœ๊ฐ€ result๊ฐ€ ์žˆ์Œ 1ํ†ตํ•ฉ -> migration์„ํ•˜๋ฉด ์ง€๊ธˆ ๋Œ๊ณ ์žˆ๋Š” ์‚ฌ์ดํŠธ์—๋„ ์˜ํ–ฅ์ด๊ฐ
__tablename__ = "visual_results"
id = Column(Integer, primary_key=True)
ko_path = Column(String, default = None) # default = None
en_path = Column(String, default = None) # default = None, path2๊ฐœ๋Š” ๊ฑฐ์˜ deprecated๋œ ์ƒํƒœ์ผ๋“ฏ?
music_id = Column(Integer, ForeignKey("musics.id"), index=True)
rank = Column(Integer)
requested_at = Column(DateTime, default=datetime.utcnow)
title = Column(String, index=True)
music = relationship("Music", back_populates="visual_results")
plagiarism_rate = Column(Float)
data_pkl = Column(String) # data json์ธ๋ฐ ใ…‹ใ…‹.. column name ๋ฐ”๊พธ๋ ค๋‹ค๊ฐ€ ํ„ฐ์งˆ ์ˆ˜ ์žˆ์–ด์„œ..
opened = Column(Boolean, default = False)
share_token = Column(String, default = None)
def __repr__(self):
return f"<Visual_Result(id={self.id}, name='{self.ko_path}')>"
class Monitoring_Visual_Result(Base):
__tablename__ = "monitoring_visual_results"
id = Column(Integer, primary_key=True)
music_id = Column(Integer, ForeignKey("musics.id"), index=True)
rank = Column(Integer)
requested_at = Column(DateTime, default=datetime.utcnow)
title = Column(String, index=True)
primary_artist = Column(String, index=True)
other_artist = Column(String)
distributor = Column(String, index=True)
release_date = Column(String)
additional_info = Column(JSON)
copyright_owner = Column(String)
music = relationship("Music", back_populates="monitoring_visual_results")
plagiarism_rate = Column(Float)
data_pkl = Column(String)
opened = Column(Boolean, default = False)
share_token = Column(String, default = None)
inst = Column(String)
def __repr__(self):
return f"<Visual_Result(id={self.id})>"
class Music(Base): # ์‹ ์ฒญ ๋ฐ›์€ ๊ณก
__tablename__ = "musics"
id = Column(Integer, primary_key=True, index=True)
music_path = Column(String)
preview_music_path = Column(String)
title = Column(String) # ์ด๊ฑฐ ์•„๋งˆ ์—…๋Žƒํ•ด์•ผํ• ๋“ฏ? ์•„๋งˆ ๋‹ค์šด ์ดํ›„์— ๊ตฌํ•ด์งˆ๊ฑฐ์ž„. ๋ฌผ๋ก  ๊ณก์„ ์—…๋กœ๋“œํ•œ๊ฒฝ์šฐ์—๋Š” ๋ฐ”๋กœ ์—…๋Žƒ๋„ ๊ฐ€๋Šฅํ• ๋“ฏ
user_input = Column(String) # ์ด๊ฒŒ ๊ณก์ด๋ฉด music_path๋ž‘ ๋˜‘๊ฐ™๊ณ , ๋งํฌ๋ฉด, ์ด๊ฑฐ๋Š” ๋งํฌ์ธ๋ฐ music_path๋Š” ์—ฌ๊ธฐ ๋กœ์ปฌ path์ž„
user_id = Column(Integer, ForeignKey("users.id"))
user = relationship("User", back_populates="musics")
results = relationship("Result", back_populates="music", cascade="all, delete-orphan")
visual_results = relationship("Visual_Result", back_populates="music", cascade="all, delete-orphan")
key_change = Column(Integer, default=0)
key = Column(String, nullable=True)
status = Column(String)
inst = Column(String)
requested_at = Column(DateTime, default=datetime.utcnow)
bpm = Column(Integer, nullable=True)
language = Column(String)
processed_in_aibackend = Column(Boolean)
is_monitoring = Column(Boolean, default=False) # ์ƒˆ๋กœ์šด ์†์„ฑ ์ถ”๊ฐ€
monitoring_music = relationship("Monitoring_Music", back_populates="music")
monitoring_visual_results = relationship("Monitoring_Visual_Result", back_populates="music", cascade="all, delete-orphan")
ai_detection_musics = relationship("AI_Detection_Music", back_populates="music", cascade="all, delete-orphan")
deleted = Column(Boolean, default=False)
info_link = Column(String)
new_info_link = Column(String)
duration = Column(Float)
new_version = Column(Boolean, default = True)
credit = Column(Integer)
music_task = Column(String) #['monitoring', 'analysis', 'plagiarism_check','ai_detector',...]
# ์ด๊ฑฐ๋กœ monitoring, 1v1, 1๋Œ€๋‹ค ๋“ฑ๋“ฑ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋„๋ก. ์—ฅ๊ฐ„ํ•˜๋ฉด Adminํ™•์ธ์šฉ์œผ๋กœ!. ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์จ๋„ ๋˜๊ธดํ• ๊ฑด๋ฐ enumํ˜•ํƒœ๋Š” ์•„๋‹ˆ๋ผ ๊นŒ๋‹ค๋กœ์šธ๊ฑฐ์ž„
opened = Column(Boolean, default = False)
def __repr__(self):
return f"<Music(id={self.id}, name='{self.title}')>"
@property
def user_name(self):
return self.user.user_info.name if self.user and self.user.user_info else None
class Monitoring_Music(Base):
__tablename__ = "monitoring_musics"
id = Column(Integer, primary_key=True, index=True)
music_id = Column(Integer, ForeignKey("musics.id"))
music = relationship("Music", back_populates="monitoring_music")
title = Column(String)
artist = Column(String)
requested_at = Column(DateTime, default=datetime.utcnow)
release_date = Column(DateTime)
album_art = Column(String, default=get_random_album_art)
detected_count = Column(Integer, default=0)
find_count = Column(Integer, default=0)
criteria = Column(Integer)
mail_agree = Column(Boolean, default=False)
deleted = Column(Boolean, default=False)
deleted_reason = Column(String, nullable=True, default=None)
is_monitoring = Column(Boolean, default=True)
# ์•จ๋ฒ”๊ณผ์˜ ๊ด€๊ณ„. ์—ฌ๊ธฐ์„œ ์•จ๋ฒ”์€ ๋ชจ๋‹ˆํ„ฐ๋ง์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค
album_id = Column(Integer, ForeignKey("albums.id"), nullable=True) # ์•จ๋ฒ” ID (์˜ต์…˜)
album = relationship("Album", back_populates="monitoring_musics") # ์•จ๋ฒ”์— ๋Œ€ํ•œ ์—ญ์ฐธ์กฐ\
track_number = Column(Integer, nullable=True)
def __repr__(self):
return f"<Monitoring_Music(id={self.id}, music_id={self.music_id})>"
def to_dict(self):
music_dict = {"id": self.id, "title": self.title, "artist": self.artist,
"requested_at": self.requested_at, "release_date": self.release_date,
"album_art": self.album_art, "detected_count": self.detected_count}
return music_dict
class Album(Base):
__tablename__ = "albums"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id")) # ์•จ๋ฒ” ์†Œ์œ ์ž
user = relationship("User", back_populates="albums")
title = Column(String, nullable=False) # ์•จ๋ฒ” ์ œ๋ชฉ
artist = Column(String)
album_art = Column(String, default=get_random_album_art)
created_at = Column(DateTime, default=datetime.utcnow)
deleted = Column(Boolean, default=False)
music_number = Column(Integer, default=0)
# ๋ชจ๋‹ˆํ„ฐ๋ง ๊ณก๊ณผ์˜ ๊ด€๊ณ„
monitoring_musics = relationship("Monitoring_Music", back_populates="album")
def __repr__(self):
return f"<Album(id={self.id}, title='{self.title}')>"
class Now_Monitoring(Base):
__tablename__ = "now_monitoring"
id = Column(Integer, primary_key=True, index=True)
music_title = Column(String)
primary_artist = Column(String, index=True)
other_artist = Column(String)
distributor = Column(String, index=True)
release_date = Column(String)
additional_info = Column(JSON)
copyright_owner = Column(String)
now_index = Column(Integer, default=0)
class AI_Detection_Music(Base):
__tablename__ = "ai_detection_musics"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"))
music_id = Column(Integer, ForeignKey("musics.id"))
music = relationship("Music", back_populates="ai_detection_musics")
title = Column(String)
ai_percentage = Column(Float)
processed_in_ai_backend = Column(Boolean, default=False)
requested_at = Column(DateTime, default=datetime.utcnow)
vocal_percentage = Column(Float)
inst_percentage = Column(Float)
opened = Column(Boolean, default = False)
link = Column(String, default = None)
status = Column(String, default = None)
deleted = Column(Boolean, default=False)
user = relationship("User", back_populates="ai_detection_musics")
def to_dict(self):
return {
"id": self.id,
"music_id": self.music_id,
"title": self.title,
"ai_percentage": self.ai_percentage,
"processed_in_ai_backend": self.processed_in_ai_backend,
"requested_at": self.requested_at.isoformat() if self.requested_at else None,
"vocal_percentage": self.vocal_percentage,
"inst_percentage": self.inst_percentage
}