public async Task <ActionResult <string> > CreateGroupPlaylistAsync(GroupPlaylistUploadModel groupPlaylistUploadModel)
        {
            try
            {
                if (await IsUserValidAsync())
                {
                    var newGroupPlaylistIdentifier = await GroupPlaylistModel.CreateNewGroupPlaylistAsync(
                        groupPlaylistUploadModel,
                        ExtractUserIdFromToken(),
                        RepositoryManager,
                        GetMapper(),
                        _spotifyAPICredentials);

                    return(Ok(newGroupPlaylistIdentifier));
                }
                else
                {
                    return(Unauthorized());
                }
            }
            catch (InvalidTokenException err)
            {
                return(BadRequest(new InvalidTokenException(err.InvalidTokenType, err.ErrorMessage)));
            }
            catch (UserNotGroupMemberException)
            {
                return(Forbid());
            }
            catch (Exception err)
            {
                LogException(err);

                return(Problem());
            }
        }
        public static async Task <string> CreateNewGroupPlaylistAsync(
            GroupPlaylistUploadModel groupPlaylistUploadModel,
            Guid userId,
            IRepositoryManager repositoryManager,
            IMapper mapper,
            SpotifyAPICredentials spotifyAPICredentials)
        {
            var groupIdentifier = groupPlaylistUploadModel.GroupIdentifier.ToUpperInvariant();

            try
            {
                var group = await repositoryManager.GroupRepository.GetByIdentifierAsync(groupIdentifier);

                if (group != null)
                {
                    var isUserMemberOfGroup = await GroupMemberModel.CheckGroupMemberExistsAsync(
                        groupPlaylistUploadModel.GroupIdentifier,
                        userId,
                        repositoryManager);

                    if (isUserMemberOfGroup)
                    {
                        var newGroupPlaylistIdentifier = await GenerateNewGroupPlaylistIdentifierAsync(
                            group.Id,
                            repositoryManager.GroupPlaylistRepository).ConfigureAwait(false);

                        var newGroupPlaylist = new GroupPlaylist
                        {
                            GroupId       = group.Id,
                            Identifier    = newGroupPlaylistIdentifier,
                            CreatedOn     = DateTime.Now,
                            CreatedBy     = userId,
                            LastUpdatedOn = DateTime.Now,
                            LastUpdatedBy = userId
                        };

                        var existingPlaylist = await repositoryManager.PlaylistRepository.CheckExistsBySpotifyIdAsync(
                            groupPlaylistUploadModel.PlaylistIdentifier);

                        if (existingPlaylist != null)
                        {
                            newGroupPlaylist.PlaylistId = existingPlaylist.Id;
                        }
                        else
                        {
                            var newPlaylist = await PlaylistModel.IndexNewPlaylistAsync(
                                groupPlaylistUploadModel.PlaylistIdentifier,
                                userId,
                                repositoryManager,
                                mapper,
                                spotifyAPICredentials);

                            newGroupPlaylist.PlaylistId = newPlaylist.Id;
                        }

                        await repositoryManager.GroupPlaylistRepository.AddAsync(newGroupPlaylist);

                        return(newGroupPlaylistIdentifier);
                    }
                    else
                    {
                        throw new UserNotGroupMemberException(
                                  "You are not able to perform this action",
                                  "You are not able to perform this action");
                    }
                }
                else
                {
                    throw new InvalidTokenException(InvalidTokenType.TokenNotFound, "The requested Group was not found");
                }
            }
            catch (Exception)
            {
                throw;
            }
        }