public async Task <AlbumsResponse> Get([FromUri] AlbumsRequest request)
        {
            AddNewRelicCustomParameters(request);

            var albumsResponse = new AlbumsResponse {
                Albums = new List <Album>(),
                Pages  = new List <Page>(),
                Info   = new AlbumsResponseInfo {
                    Genre = request.Genre, Page = request.Page, Source = request.Source
                }
            };

            try {
                ValidateRequest(request);
                var albums = await _albumService.GetAlbumsByGenreAsync(request.Source, request.Genre, request.Page);

                albumsResponse.Albums             = albums.Items;
                albumsResponse.Pages              = albums.Pages;
                albumsResponse.Info.Count         = albums.Items.Count;
                albumsResponse.ResponseStatusCode = HttpStatusCode.OK;

                return(albumsResponse);
            }
            catch (ServiceApiException saex) {
                LogError(saex);
                albumsResponse.ResponseStatusCode = saex.StatusCode;
                return(albumsResponse);
            }
            catch (Exception ex) {
                LogError(ex);
                albumsResponse.ResponseStatusCode = HttpStatusCode.InternalServerError;
                return(albumsResponse);
            }
        }
        public async Task <IActionResult> Albums(AlbumsRequest request)
        {
            try
            {
                if (request == null)
                {
                    this._logger.LogWarning("BadRequest in GetAlbums", new object[] { request, System.Diagnostics.Activity.Current?.RootId });
                    return(BadRequest(ModelState));
                }

                var albumsResult = await this._typicodeService.GetAlbums(request);

                if (!albumsResult.Success)
                {
                    return(StatusCode(500, albumsResult.Message));
                }

                return(Ok(albumsResult.Value));
            }
            catch (Exception ex)
            {
                this._logger.LogError(ex, "Exception in GetAlbums", new object[] { request, System.Diagnostics.Activity.Current?.RootId });
                return(StatusCode(500, "Server Error"));
            }
        }
        public List <FullAlbum> GetFullAlbums(List <string> ids)
        {
            var fullAlbums = new List <FullAlbum>();

            for (int i = 0; i < ids.Count; i += (ids.Count - i) >= 20 ? 20 : (ids.Count - i))
            {
                var request  = new AlbumsRequest(ids.GetRange(i, (ids.Count - i) < 20 ? (ids.Count - i) : 20));
                var response = client.Albums.GetSeveral(request).Result;
                fullAlbums.AddRange(response.Albums);
            }
            return(fullAlbums);
        }
Пример #4
0
        public void GetAllSuccess()
        {
            Setup();

            AlbumsRequest request = new AlbumsRequest();

            albumAppServiceMock.Setup(p => p.GetAllAlbumsByFilter(It.IsAny <GetAllAlbumsByFilterRequest>())).Returns(getAllAlbumsByFilterResponse);


            var result = controller.Get(request);

            Assert.AreEqual(result.ListAlbums.Count, 2);
        }
 private void ValidateRequest(AlbumsRequest request)
 {
     if (string.IsNullOrWhiteSpace(request.Genre))
     {
         throw new ServiceApiException(HttpStatusCode.BadRequest,
                                       string.Format(ServiceApiException.InvalidValueErrorMessageFormat, "Genre", request.Genre));
     }
     if (request.Page <= 0)
     {
         throw new ServiceApiException(HttpStatusCode.BadRequest,
                                       string.Format(ServiceApiException.InvalidValueErrorMessageFormat, "Page", request.Page));
     }
 }
Пример #6
0
        public AlbumsGetResponse Get([FromQuery] AlbumsRequest request)
        {
            AlbumsGetResponse albumResponse = new AlbumsGetResponse();

            albumResponse.ListAlbums = new List <Album>();

            GetAllAlbumsByFilterRequest getAllAlbumsByFilterRequest = _mapper.Map <GetAllAlbumsByFilterRequest>(request);

            var appServiceResponse = _albumsAppService.GetAllAlbumsByFilter(getAllAlbumsByFilterRequest);

            albumResponse = _mapper.Map <AlbumsGetResponse>(appServiceResponse);


            return(albumResponse);
        }
Пример #7
0
        public async Task <ResultHandler <IEnumerable <Album> > > GetAlbums(AlbumsRequest request)
        {
            try
            {
                if (request == null)
                {
                    return(ResultHandler.Fail <IEnumerable <Album> >(E_ErrorType.EntityNotValid));
                }

                Dictionary <string, string> nameValueCollection = new Dictionary <string, string>();

                if (request.Id.HasValue)
                {
                    nameValueCollection.Add("Id", request.Id.Value.ToString());
                }

                HttpRequestModel httpRequestModel = new HttpRequestModel()
                {
                    MethodName        = "Albums",
                    CancellationToken = new System.Threading.CancellationToken(),
                    ClientName        = E_HttpClient.Typicode,
                    CompletionOption  = System.Net.Http.HttpCompletionOption.ResponseContentRead,
                    Headers           = null,
                    HttpContent       = null,
                    HttpMethod        = System.Net.Http.HttpMethod.Get,
                    QueryString       = null
                };

                List <Album> result = new List <Album>();

                for (int i = 0; i < 50; i++)
                {
                    var albumsResponseResult = await this._httpClientFactoryService.GetHttpResponse <Album[]>(httpRequestModel);

                    if (!albumsResponseResult.Success)
                    {
                        return(ResultHandler.Fail <IEnumerable <Album> >(albumsResponseResult.ErrorType));
                    }
                    result.AddRange(albumsResponseResult.Value);
                }

                return(ResultHandler.Ok <IEnumerable <Album> >(result));
            }
            catch (System.Exception ex)
            {
                return(ResultHandler.Fail <IEnumerable <Album> >(ex));
            }
        }
        public async Task Test_ListAlbums_Favourite()
        {
            // Arrange
            _client.Favourites.AlbumIds = new List <string> {
                "2C5HYffMBumERQlNfceyrO"
            };
            // Act
            var request = new AlbumsRequest()
            {
                AlbumType = AlbumType.Favourite
            };
            var response = await _client.ListAlbumsAsync(request);

            // Assert
            Assert.IsNotNull(response);
        }
        public async Task Test_ListAlbums_NewReleases()
        {
            var request = new AlbumsRequest()
            {
                AlbumType = AlbumType.NewReleases
            };
            var items = await _client.ListAlbumsAsync(request);

            Assert.IsNotNull(items?.Items);
            Assert.IsTrue(items?.Items.Count > 0);

            var more = await _client.ListAlbumsAsync(items);

            Assert.IsNotNull(more?.Items);
            Assert.IsTrue(more?.Items.Count > 0);
        }
        public async Task Test_ListAlbums_Multiple()
        {
            var request = new AlbumsRequest()
            {
                AlbumType        = AlbumType.Multiple,
                MultipleAlbumIds = new List <string>
                {
                    "5sXSHscDjBez8VF20cSyad",
                    "31qVWUdRrlb8thMvts0yYL"
                }
            };
            var items = await _client.ListAlbumsAsync(request);

            Assert.IsNotNull(items?.Items);
            Assert.IsTrue(items?.Items.Count > 0);
        }
        public async Task Test_ListAlbums_Search()
        {
            var request = new AlbumsRequest()
            {
                AlbumType = AlbumType.Search,
                Value     = "Tubular Bells"
            };
            var items = await _client.ListAlbumsAsync(request);

            Assert.IsNotNull(items?.Items);
            Assert.IsTrue(items?.Items.Count > 0);

            var more = await _client.ListAlbumsAsync(items);

            Assert.IsNotNull(more?.Items);
            Assert.IsTrue(more?.Items.Count > 0);
        }
        public async Task Test_ListAlbums_Artist()
        {
            var request = new AlbumsRequest()
            {
                AlbumType    = AlbumType.Artist,
                Value        = "43ZHCT0cAZBISjO8DG9PnE",
                IncludeGroup = new IncludeGroupRequest()
                {
                    Album = true
                }
            };
            var items = await _client.ListAlbumsAsync(request);

            Assert.IsNotNull(items?.Items);
            Assert.IsTrue(items?.Items.Count > 0);

            var more = await _client.ListAlbumsAsync(items);

            Assert.IsNotNull(more?.Items);
            Assert.IsTrue(more?.Items.Count > 0);
        }
Пример #13
0
        public void GetAllSuccess_pageSize()
        {
            Setup();

            AlbumsRequest request = new AlbumsRequest();

            request.PageSize = 1;


            getAllAlbumsByFilterResponse.ListAlbums = getAllAlbumsByFilterResponse.ListAlbums
                                                      .Skip((request.PageNumber - 1) * request.PageSize)
                                                      .Take(request.PageSize)
                                                      .ToList();


            albumAppServiceMock.Setup(p => p.GetAllAlbumsByFilter(It.IsAny <GetAllAlbumsByFilterRequest>())).Returns(getAllAlbumsByFilterResponse);


            var result = controller.Get(request);

            Assert.AreEqual(result.ListAlbums.Count, 1);
            Assert.AreEqual(result.ListAlbums[0].Id, 1);
        }
 private void AddNewRelicCustomParameters(AlbumsRequest request)
 {
     _newRelicTransactionManager.AddCustomParameter("request.Source", request.Source);
     _newRelicTransactionManager.AddCustomParameter("request.Genre", request.Genre);
     _newRelicTransactionManager.AddCustomParameter("request.Page", request.Page);
 }
        public Task <List <string> > FindAllConnectedArtists(string artistID, float priority)
        {
            return(Task.Run(() =>
            {
                CheckedArtists.Add(artistID);
                List <string> artistNames = new List <string>();
                HashSet <string> connectedArtists = new HashSet <string>();
                Paging <SimpleAlbum> pagingAlbums;
                try
                {
                    Task <Paging <SimpleAlbum> > pagingAlbumsTask = Spotify.Artists.GetAlbums(artistID);
                    pagingAlbumsTask.Wait();
                    pagingAlbums = pagingAlbumsTask.Result;
                } catch {
                    Thread.Sleep(3500);
                    Task <Paging <SimpleAlbum> > pagingAlbumsTask = Spotify.Artists.GetAlbums(artistID);
                    pagingAlbumsTask.Wait();
                    pagingAlbums = pagingAlbumsTask.Result;
                }
                List <string> albumIDs = new List <string>();
                foreach (SimpleAlbum simpleAlbum in pagingAlbums.Items)
                {
                    albumIDs.Add(simpleAlbum.Id);
                }
                if (albumIDs.Count > 0)
                {
                    AlbumsRequest request = new AlbumsRequest(albumIDs);
                    AlbumsResponse albumsResponse;
                    try
                    {
                        Task <AlbumsResponse> fullAlbumTask = Spotify.Albums.GetSeveral(request);
                        fullAlbumTask.Wait();
                        albumsResponse = fullAlbumTask.Result;
                    }
                    catch
                    {
                        Thread.Sleep(3500);
                        Task <AlbumsResponse> fullAlbumTask = Spotify.Albums.GetSeveral(request);
                        fullAlbumTask.Wait();
                        albumsResponse = fullAlbumTask.Result;
                    }

                    foreach (FullAlbum fullAlbum in albumsResponse.Albums)
                    {
                        Paging <SimpleTrack> simpleTracks = fullAlbum.Tracks;
                        foreach (SimpleTrack simpleTrack in simpleTracks.Items)
                        {
                            List <SimpleArtist> simpleArtistsList = simpleTrack.Artists;
                            List <String> simpleArtistsOnTrack = new List <string>();
                            foreach (SimpleArtist simpleArtist in simpleArtistsList)
                            {
                                simpleArtistsOnTrack.Add(simpleArtist.Id);
                            }
                            if (simpleArtistsOnTrack.Contains(artistID))
                            {
                                foreach (SimpleArtist simpleArtist in simpleTrack.Artists)
                                {
                                    if (!ArtistIdToName.ContainsKey(simpleArtist.Id))
                                    {
                                        ArtistIdToName.Add(simpleArtist.Id, simpleArtist.Name);
                                    }
                                    if (!ArtistsToCheck.Contains(simpleArtist.Id) && !CheckedArtists.Contains(simpleArtist.Id))
                                    {
                                        ArtistsToCheck.Enqueue(simpleArtist.Id, priority + 1);
                                        Edge edge = new Edge(artistID, simpleTrack.Name, simpleArtist.Id);
                                        if (!containsEdge(edge))
                                        {
                                            ArtistsGraph.AddEdge(artistID, simpleTrack.Name, simpleArtist.Id);
                                            //Edges.Add(edge);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                return connectedArtists.ToList();
            }));
        }