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.");
}
}