BB.UI.Web.MVC.Controllers.Web_API.PlaylistController.getNextTrack C# (CSharp) Method

getNextTrack() private method

private getNextTrack ( long playlistId ) : IHttpActionResult
playlistId long
return IHttpActionResult
        public IHttpActionResult getNextTrack(long playlistId)
        {
            var userIdentity = RequestContext.Principal.Identity as ClaimsIdentity;
            if (userIdentity == null) return InternalServerError();

            var email = userIdentity.Claims.First(c => c.Type == "sub").Value;
            if (email == null) return InternalServerError();

            var user = userManager.ReadUser(email);
            if (user == null) return InternalServerError();

            if (AssignPlaylistMaster(playlistId, user.Id))
            {

            var playlistTracks = playlistManager.ReadPlaylist(playlistId).PlaylistTracks
                 .Where(t => t.PlayedAt == null);

            if (!playlistTracks.Any()) return NotFound();

            var sortedByVotesPlaylistTracks = playlistTracks.ToList();
            sortedByVotesPlaylistTracks.Sort((t1, t2) => t2.Votes.Sum(v => v.Score) - t1.Votes.Sum(v => v.Score));
                

                var originalPlayListTrack = sortedByVotesPlaylistTracks.First(t => t.PlayedAt == null);
                var newTrack = GetTrackWithFreshYoutubeUrl(originalPlayListTrack.Track);
                
                var success = playlistManager.MarkTrackAsPlayed(originalPlayListTrack.Id, playlistId);
                if (success)
                {
                    return Ok(newTrack);
                }
                else {
                    return InternalServerError(new Exception("Could not mark track as played."));
                }
            }
            else {
                return BadRequest("Playlistmaster already set or you are not the organiser or co-organiser.");
            }
        }