From 9ae9f1797a72571e1972056ff77c0f6fa99a2293 Mon Sep 17 00:00:00 2001 From: grimhilt Date: Mon, 14 Aug 2023 01:19:42 +0200 Subject: [PATCH] create playlist with permissions --- src/api/abl/PlaylistAbl.py | 22 ++++++++++++++++++---- src/api/models.py | 14 +++++++++++--- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/api/abl/PlaylistAbl.py b/src/api/abl/PlaylistAbl.py index cd10c90..3a4d6a9 100644 --- a/src/api/abl/PlaylistAbl.py +++ b/src/api/abl/PlaylistAbl.py @@ -1,5 +1,5 @@ from flask import jsonify -from ..models import Playlist, PlaylistFile, File +from ..models import Playlist, PlaylistFile, File, Role from .. import db from datetime import datetime from ..dao.Playlist import PlaylistDao @@ -9,9 +9,16 @@ from screen.ScreenManager import ScreenManager class PlaylistAbl: @staticmethod def create(data): - print(data) + roles_edit = db.session.query(Role).filter(Role.id.in_(data['edit'])).all() + roles_view = db.session.query(Role).filter(Role.id.in_(data['view'])).all() + new_playlist = Playlist(name=data['name'], owner_id=current_user.as_dict()['id']) - return jsonify() + for role in roles_edit: + new_playlist.edit.append(role) + + for role in roles_view: + new_playlist.view.append(role) + db.session.add(new_playlist) db.session.flush() db.session.commit() @@ -31,7 +38,14 @@ class PlaylistAbl: @staticmethod def get_playlist(playlist_id): (query, files) = PlaylistDao.get_playlist(playlist_id) - return jsonify({'id': query.id, 'name': query.name, 'owner_id': query.owner_id, 'files': files}) + query = query.as_dict_with_roles() + return jsonify({ \ + 'id': query['id'], \ + 'name': query['name'], \ + 'owner_id': query['owner_id'], \ + 'view': query['view'], \ + 'edit': query['edit'], \ + 'files': files}) @staticmethod def list(): diff --git a/src/api/models.py b/src/api/models.py index 2180701..d13f128 100644 --- a/src/api/models.py +++ b/src/api/models.py @@ -22,10 +22,12 @@ class File(db.Model): return {c.name: getattr(self, c.name) for c in self.__table__.columns} class PlaylistView(db.Model): + __tablename__ = 'PlaylistView' playlist_id = db.Column(db.Integer, db.ForeignKey('playlist.id'), primary_key=True) role_id = db.Column(db.Integer, db.ForeignKey('role.id'), primary_key=True) class PlaylistEdit(db.Model): + __tablename__ = 'PlaylistEdit' playlist_id = db.Column(db.Integer, db.ForeignKey('playlist.id'), primary_key=True) role_id = db.Column(db.Integer, db.ForeignKey('role.id'), primary_key=True) @@ -36,9 +38,15 @@ class Playlist(db.Model): last_modified = db.Column(db.DateTime(timezone=True), default=func.now()) view = db.relationship('Role', secondary='PlaylistView', back_populates='playlists_view') edit = db.relationship('Role', secondary='PlaylistEdit', back_populates='playlists_edit') - files = db.relationship('File', secondary='PlaylistFile') playlist_files = db.relationship('PlaylistFile', order_by='PlaylistFile.position', back_populates='playlist') + def as_dict_with_roles(self): + res = self.as_dict() + res['view'] = [role.as_dict() for role in self.view] + res['edit'] = [role.as_dict() for role in self.edit] + return res + + def as_dict(self): return {c.name: getattr(self, c.name) for c in self.__table__.columns} @@ -54,8 +62,8 @@ class Role(db.Model): permissions= db.Column(db.Integer, default=0) parent_id = db.Column(db.Integer, db.ForeignKey('role.id'), default=None) users = db.relationship('User', secondary='UserRole', back_populates='roles') - playlist_view = db.relationship('Playlist', secondary='PlaylistView', back_populates='view') - playlist_edit = db.relationship('Playlist', secondary='PlaylistEdit', back_populates='edit') + playlists_view = db.relationship('Playlist', secondary='PlaylistView', back_populates='view') + playlists_edit = db.relationship('Playlist', secondary='PlaylistEdit', back_populates='edit') def as_dict(self): return {c.name: getattr(self, c.name) for c in self.__table__.columns}