MusicDiary / database.py
subiin7777's picture
Upload 14 files
4c8bb93 verified
Raw
History Blame Contribute Delete
1.59 kB
from sqlalchemy import create_engine, Column, String, Integer, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import datetime
import json
SQLALCHEMY_DATABASE_URL = "sqlite:///./app_database.db"
engine = create_engine(
SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
class User(Base):
__tablename__ = "users"
user_id = Column(String, primary_key=True, index=True)
favorite_artists_json = Column(String, default="[]")
favorite_genres_json = Column(String, default="[]")
default_tags_json = Column(String, default="[]") # ["k-pop", "korean"]
def set_preferences(self, artists, genres, tags):
self.favorite_artists_json = json.dumps(artists)
self.favorite_genres_json = json.dumps(genres)
self.default_tags_json = json.dumps(tags)
class ListeningHistory(Base):
__tablename__ = "history"
id = Column(Integer, primary_key=True, index=True, autoincrement=True)
user_id = Column(String, index=True)
track_title = Column(String)
track_artist = Column(String)
track_url = Column(String)
duration = Column(Integer, default=0)
emotion_state = Column(String) # "Sadness"
action = Column(String) # "liked", "completed", "skipped"
timestamp = Column(DateTime, default=datetime.datetime.utcnow)
Base.metadata.create_all(bind=engine)
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()