68 lines
2.8 KiB
Python
68 lines
2.8 KiB
Python
from . import db
|
|
from flask_login import UserMixin
|
|
from sqlalchemy.sql import func
|
|
|
|
class PlaylistFile(db.Model):
|
|
__tablename__ = 'PlaylistFile'
|
|
playlist_id = db.Column(db.Integer, db.ForeignKey('playlist.id'), primary_key=True)
|
|
file_id = db.Column(db.Integer, db.ForeignKey('file.id'), primary_key=True)
|
|
position = db.Column(db.Integer)
|
|
seconds = db.Column(db.Integer, default=10)
|
|
playlist = db.relationship('Playlist', back_populates='playlist_files')
|
|
file = db.relationship('File', back_populates='playlist_files')
|
|
|
|
class File(db.Model):
|
|
id = db.Column(db.Integer, primary_key = True, autoincrement=True)
|
|
name = db.Column(db.String(150))
|
|
type = db.Column(db.String(255)) # maximum length of mimetype
|
|
playlist_files = db.relationship('PlaylistFile', back_populates='file')
|
|
|
|
def as_dict(self):
|
|
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
|
|
|
|
class Playlist(db.Model):
|
|
id = db.Column(db.Integer, primary_key = True, autoincrement=True)
|
|
name = db.Column(db.String(150))
|
|
owner_id = db.Column(db.Integer, db.ForeignKey('user.id'))
|
|
last_modified = db.Column(db.DateTime(timezone=True), default=func.now())
|
|
read_permissions = db.Column(db.Integer, default=0)
|
|
write_permissions = db.Column(db.Integer, default=0)
|
|
execute_permissions = db.Column(db.Integer, default=0)
|
|
files = db.relationship('File', secondary='PlaylistFile')
|
|
playlist_files = db.relationship('PlaylistFile', order_by='PlaylistFile.position', back_populates='playlist')
|
|
|
|
def as_dict(self):
|
|
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
|
|
|
|
class UserRole(db.Model):
|
|
__tablename__ = 'UserRole'
|
|
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
|
|
role_id = db.Column(db.Integer, db.ForeignKey('role.id'), primary_key=True)
|
|
|
|
class Role(db.Model):
|
|
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
|
name = db.Column(db.String)
|
|
parent_id = db.Column(db.Integer, db.ForeignKey('role.id'))
|
|
can_create_role = db.Column(db.Boolean, default=False)
|
|
can_create_playlist = db.Column(db.Boolean, default=False)
|
|
users = db.relationship('User', secondary='UserRole', back_populates='roles')
|
|
|
|
def as_dict(self):
|
|
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
|
|
|
|
class User(db.Model, UserMixin):
|
|
id = db.Column(db.Integer, primary_key = True, autoincrement=True)
|
|
login = db.Column(db.String(150))
|
|
password = db.Column(db.String(150))
|
|
roles = db.relationship('Role', secondary='UserRole', back_populates='users')
|
|
|
|
def as_dict(self):
|
|
res = self.as_dict_unsafe()
|
|
res['roles'] = [role.as_dict() for role in self.roles]
|
|
del res['password']
|
|
return res
|
|
|
|
def as_dict_unsafe(self):
|
|
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
|
|
|