diff --git a/server/app/api/playlist.py b/server/app/api/playlist.py index ef06976..51ab11c 100644 --- a/server/app/api/playlist.py +++ b/server/app/api/playlist.py @@ -1,22 +1,28 @@ """ Contains all the playlist routes. """ - +from copy import deepcopy +from typing import List from flask import Blueprint, request from app import instances, api from app.lib import playlistlib from app import models +from app import exceptions playlist_bp = Blueprint("playlist", __name__, url_prefix="/") +PlaylistExists = exceptions.PlaylistExists +TrackExistsInPlaylist = exceptions.TrackExistsInPlaylist + @playlist_bp.route("/playlists", methods=["GET"]) def get_all_playlists(): + ppp = deepcopy(api.PLAYLISTS) playlists = [] - for playlist in api.PLAYLISTS: - playlist.tracks = [] - playlists.append(playlist) + for pl in ppp: + pl.tracks = [] + playlists.append(pl) return {"data": playlists} @@ -30,24 +36,28 @@ def create_playlist(): p_in_db = instances.playlist_instance.get_playlist_by_name(playlist["name"]) if p_in_db: - raise Exception("Playlist already exists.") - except Exception as e: + raise PlaylistExists("Playlist already exists.") + except PlaylistExists as e: return {"error": str(e)}, 409 upsert_id = instances.playlist_instance.insert_playlist(playlist) p = instances.playlist_instance.get_playlist_by_id(upsert_id) + pp = models.Playlist(p) - api.PLAYLISTS.append(models.Playlist(p)) + api.PLAYLISTS.append(pp) - return {"msg": "Playlist created successfully."}, 201 + return {"playlist": pp}, 201 @playlist_bp.route("/playlist//add", methods=["POST"]) def add_track_to_playlist(playlist_id): data = request.get_json() - pid = data["playlist"] trackid = data["track"] - playlistlib.add_track(pid, trackid) - return 200 + try: + playlistlib.add_track(playlist_id, trackid) + except TrackExistsInPlaylist as e: + return {"error": str(e)}, 409 + + return {"msg": "I think It's done"}, 200 diff --git a/server/app/lib/playlistlib.py b/server/app/lib/playlistlib.py index 5895702..d8acec9 100644 --- a/server/app/lib/playlistlib.py +++ b/server/app/lib/playlistlib.py @@ -1,10 +1,13 @@ """ This library contains all the functions related to playlists. """ +from progress.bar import Bar +from app import api, instances, models, exceptions, helpers -from app import api, instances, models from app.lib import trackslib +TrackExistsInPlaylist = exceptions.TrackExistsInPlaylist + def add_track(playlistid: str, trackid: str): """ @@ -13,14 +16,23 @@ def add_track(playlistid: str, trackid: str): for playlist in api.PLAYLISTS: if playlist.playlistid == playlistid: track = trackslib.get_track_by_id(trackid) - playlist.tracks.append(track) - instances.playlist_instance.add_track_to_playlist(playlistid, track) + if track not in playlist.tracks: + playlist.tracks.append(track) + instances.playlist_instance.add_track_to_playlist(playlistid, track) + return + else: + raise TrackExistsInPlaylist("Track already in playlist.") def create_all_playlists(): """ Gets all playlists from the database. """ - for playlist in instances.playlist_instance.get_all_playlists(): + playlists = instances.playlist_instance.get_all_playlists() + + _bar = Bar("Creating playlists", max=len(playlists)) + for playlist in playlists: api.PLAYLISTS.append(models.Playlist(playlist)) + _bar.next() + _bar.finish()