Esempio n. 1
0
        public async Task <IActionResult> SearchByTerm(UserParams userParams)
        {
            var result = new SearchResult();
            var idUser = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);
            var user   = await usersRepo.Get(idUser);

            if (user == null)
            {
                return(Unauthorized());
            }

            if (userParams.SearchArtists)
            {
                result.Artists = (await artistRepo.FindWithPhoto(a => a.Name.Contains(userParams.SearchTerm, StringComparison.OrdinalIgnoreCase)))
                                 .Select(a => mapper.Map <ArtistDTO>(a))
                                 .ToList();
            }

            if (userParams.SearchAlbums)
            {
                result.Albums = (await albumRepo.FindWithArtist(a => a.Name.Contains(userParams.SearchTerm, StringComparison.OrdinalIgnoreCase)))
                                .Select(a => mapper.Map <AlbumDTO>(a))
                                .ToList();
            }

            if (userParams.SearchSongs)
            {
                result.Songs = (await songRepo.FindWithAlbum(a => a.Name.Contains(userParams.SearchTerm, StringComparison.OrdinalIgnoreCase)))
                               .Select(a => mapper.Map <SongDTO>(a))
                               .ToList();
            }

            if (userParams.SearchPlaylists)
            {
                result.Playlists = (await playlistRepo.FindWithUsers(a => a.Name.Contains(userParams.SearchTerm, StringComparison.OrdinalIgnoreCase) &&
                                                                     !a.IsMain))
                                   .Select(a => mapper.Map <PlaylistDTO>(a))
                                   .ToList();

                foreach (var pl in result.Playlists)
                {
                    var artists = (await playlistRepo.GetPlaylistArtists(pl.Id))
                                  .Distinct()
                                  .Select(a => mapper.Map <ArtistInfoDTO>(a))
                                  .ToList();
                    pl.Artists = artists;
                }
            }
            return(Ok(result));
        }