Files
Music-site/backend/app/models/models.py
2026-02-24 21:24:16 +06:00

63 lines
2.5 KiB
Python

from sqlalchemy import Column, Integer, String, ForeignKey, Table, DateTime, Boolean
from sqlalchemy.orm import relationship
from datetime import datetime
from app.database import Base
playlist_songs = Table('playlist_songs', Base.metadata,
Column('playlist_id', Integer, ForeignKey('playlists.id')),
Column('song_id', Integer, ForeignKey('songs.id'))
)
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
username = Column(String, unique=True, index=True)
email = Column(String, unique=True, index=True)
hashed_password = Column(String)
is_admin = Column(Boolean, default=False)
is_owner = Column(Boolean, default=False)
is_banned = Column(Boolean, default=False)
created_at = Column(DateTime, default=datetime.utcnow)
songs = relationship("Song", back_populates="owner")
playlists = relationship("Playlist", back_populates="owner")
rooms = relationship("Room", back_populates="creator")
class Song(Base):
__tablename__ = "songs"
id = Column(Integer, primary_key=True, index=True)
title = Column(String, index=True)
artist = Column(String)
file_path = Column(String)
cover_path = Column(String, nullable=True)
duration = Column(Integer)
owner_id = Column(Integer, ForeignKey("users.id"))
created_at = Column(DateTime, default=datetime.utcnow)
owner = relationship("User", back_populates="songs")
playlists = relationship("Playlist", secondary=playlist_songs, back_populates="songs")
class Playlist(Base):
__tablename__ = "playlists"
id = Column(Integer, primary_key=True, index=True)
name = Column(String)
description = Column(String, nullable=True)
is_public = Column(Boolean, default=False)
owner_id = Column(Integer, ForeignKey("users.id"))
created_at = Column(DateTime, default=datetime.utcnow)
owner = relationship("User", back_populates="playlists")
songs = relationship("Song", secondary=playlist_songs, back_populates="playlists")
class Room(Base):
__tablename__ = "rooms"
id = Column(Integer, primary_key=True, index=True)
name = Column(String)
code = Column(String, unique=True, index=True)
creator_id = Column(Integer, ForeignKey("users.id"))
current_song_id = Column(Integer, ForeignKey("songs.id"), nullable=True)
is_playing = Column(Boolean, default=False)
created_at = Column(DateTime, default=datetime.utcnow)
creator = relationship("User", back_populates="rooms")