mirror of
https://github.com/wahyd4/you-music.git
synced 2026-08-08 20:59:47 +10:00
48 lines
1.9 KiB
Python
48 lines
1.9 KiB
Python
from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey, Table, Text
|
|
from sqlalchemy.orm import relationship
|
|
from datetime import datetime
|
|
from app.db.session import Base
|
|
|
|
# Association table for playlist-music many-to-many relationship
|
|
playlist_music = Table(
|
|
'playlist_music',
|
|
Base.metadata,
|
|
Column('playlist_id', Integer, ForeignKey('playlists.id'), primary_key=True),
|
|
Column('music_id', Integer, ForeignKey('music.id'), primary_key=True),
|
|
Column('position', Integer, default=0),
|
|
Column('added_at', DateTime, default=datetime.utcnow),
|
|
)
|
|
|
|
|
|
class Music(Base):
|
|
__tablename__ = "music"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
title = Column(String, index=True)
|
|
artist = Column(String, index=True, nullable=True)
|
|
album = Column(String, nullable=True)
|
|
duration = Column(Float, nullable=True)
|
|
file_path = Column(String, unique=True)
|
|
file_size = Column(Integer, nullable=True)
|
|
source_url = Column(String, nullable=True)
|
|
source_type = Column(String, nullable=True) # local, youtube, bilibili, etc.
|
|
thumbnail = Column(String, nullable=True)
|
|
lyrics = Column(Text, nullable=True)
|
|
created_at = Column(DateTime, default=datetime.utcnow)
|
|
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
|
|
|
playlists = relationship("Playlist", secondary=playlist_music, back_populates="music_items")
|
|
|
|
|
|
class Playlist(Base):
|
|
__tablename__ = "playlists"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
name = Column(String, unique=True, index=True)
|
|
description = Column(Text, nullable=True)
|
|
thumbnail = Column(String, nullable=True)
|
|
created_at = Column(DateTime, default=datetime.utcnow)
|
|
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
|
|
|
music_items = relationship("Music", secondary=playlist_music, back_populates="playlists")
|