using System.Collections.Generic; using System.Linq; using Nancy; using Sony.Filtr.AdminAPI.Utility; using Sony.Filtr.AdminSearch; using Sony.Filtr.AdminSearch.Models; using Sony.Filtr.Applications; using Sony.Filtr.Contracts.Definitions; using Sony.Filtr.Contracts.Entities.Buzz; using Sony.Filtr.Utility; namespace Sony.Filtr.AdminAPI.Modules.AppleMusic { public class AppleMusicSearchModule : BaseModule { public AppleMusicSearchModule(ApplicationInstanceManager applicationInstanceManager, AdminSearchManager adminSearchManager) : base(applicationInstanceManager) { Get["GetAppleMusicSearchResults", "/appleMusic/search/", true] = async (parameters, cx) => { var searchTerm = (string)Request.Query.search; if (string.IsNullOrWhiteSpace(searchTerm)) { return HttpStatusCode.BadRequest; } var limit = Maybe.ToIntOrFallback((string)Request.Query.limit, 10); var searchBuzzUsersTask = adminSearchManager.SearchBuzzUsersAsync(searchTerm, MusicService.AppleMusic, limit); var searchAppleMusicPlaylistResultTask = adminSearchManager.SearchAppleMusicPlaylistAsync(searchTerm, limit); var buzzUsers = await searchBuzzUsersTask; var appleMusicPlaylists = await searchAppleMusicPlaylistResultTask; var resultModel = BuildSearchResultViewModel(appleMusicPlaylists, buzzUsers); return Response.AsJson(resultModel); }; } private SearchResultViewModel BuildSearchResultViewModel(List playlistSearchResults, List buzzUsers) { var resultModel = new SearchResultViewModel() { Playlists = playlistSearchResults.Select(BuildPlaylist).ToList(), Users = buzzUsers.Select(BuildUser).ToList() }; return resultModel; } private AppleMusicSearchUserViewModel BuildUser(BuzzUser buzzUser) { return new AppleMusicSearchUserViewModel() { Name = string.IsNullOrWhiteSpace(buzzUser.DisplayName) ? buzzUser.Username : buzzUser.DisplayName, CountryCode = buzzUser.CountryCode, CuratorId = buzzUser.Username, ImageUrl = ImageUrlUtility.GetAbsoluteImageUrl(buzzUser.Image), }; } private AppleMusicSearchPlaylistViewModel BuildPlaylist(AppleMusicPlaylistIndexItem playlist) { return new AppleMusicSearchPlaylistViewModel() { Name = playlist.Name, PlaylistId = playlist.PlaylistId, CountryCode = playlist.CountryCode, Image = playlist.ArtworkUrl, AccountName = playlist.Curator, }; } } public class SearchResultViewModel { public List Playlists { get; set; } public List Users { get; set; } } public class AppleMusicSearchUserViewModel { public string Name { get; set; } public string CuratorId { get; set; } public string CountryCode { get; set; } public string ImageUrl { get; set; } } public class AppleMusicSearchPlaylistViewModel { public string Name { get; set; } public string PlaylistId { get; set; } public string Image { get; set; } public string CountryCode { get; set; } public string AccountName { get; set; } } }