Example #1
0
        /// <summary>
        /// Gets the player scores.
        /// </summary>
        /// <param name="accessToken">The access token.</param>
        /// <param name="playerId">The player identifier.</param>
        /// <param name="numberOfScores">The number of scores.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns></returns>
        public async Task <GetPlayerScoresResponse> GetPlayerScores(String accessToken,
                                                                    Guid playerId,
                                                                    Int32 numberOfScores,
                                                                    CancellationToken cancellationToken)
        {
            GetPlayerScoresResponse response = null;
            String requestUri = $"{this.BaseAddress}/api/Reporting/Player/{playerId}/scores?numberofscores={numberOfScores}";

            try
            {
                // Add the access token to the client headers
                this.HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

                // Make the Http Call here
                HttpResponseMessage httpResponse = await this.HttpClient.GetAsync(requestUri, cancellationToken);

                // Process the response
                String content = await this.HandleResponse(httpResponse, cancellationToken);

                // call was successful so now deserialise the body to the response object
                response = JsonConvert.DeserializeObject <GetPlayerScoresResponse>(content);
            }
            catch (Exception ex)
            {
                // An exception has occurred, add some additional information to the message
                Exception exception = new Exception($"Error getting number of scores report for Player {playerId}.", ex);

                throw exception;
            }

            return(response);
        }
        /// <summary>
        /// Gets the player scores report.
        /// </summary>
        /// <param name="playerId">The player identifier.</param>
        /// <param name="numberOfScores">The number of scores.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns></returns>
        public async Task <GetPlayerScoresResponse> GetPlayerScoresReport(Guid playerId,
                                                                          Int32 numberOfScores,
                                                                          CancellationToken cancellationToken)
        {
            Guard.ThrowIfInvalidGuid(playerId, nameof(playerId));
            Guard.ThrowIfZero(numberOfScores, nameof(numberOfScores));
            Guard.ThrowIfNegative(numberOfScores, nameof(numberOfScores));

            GetPlayerScoresResponse response = new GetPlayerScoresResponse();

            using (ManagementAPIReadModel context = this.ReadModelResolver())
            {
                List <PublishedPlayerScore> reportData = await context.PublishedPlayerScores.Where(p => p.PlayerId == playerId).OrderByDescending(p => p.TournamentDate).Take(numberOfScores).ToListAsync(cancellationToken);

                reportData.ForEach(f => response.Scores.Add(new PlayerScoreResponse
                {
                    TournamentDate          = f.TournamentDate,
                    GolfClubId              = f.GolfClubId,
                    MeasuredCourseId        = f.MeasuredCourseId,
                    PlayerId                = f.PlayerId,
                    TournamentId            = f.TournamentId,
                    NetScore                = f.NetScore,
                    MeasuredCourseName      = f.MeasuredCourseName,
                    GolfClubName            = f.GolfClubName,
                    MeasuredCourseTeeColour = f.MeasuredCourseTeeColour,
                    TournamentFormat        = (TournamentFormat)f.TournamentFormat,
                    GrossScore              = f.GrossScore,
                    CSS             = f.CSS,
                    TournamentName  = f.TournamentName,
                    PlayingHandicap = f.PlayingHandicap
                }));
            }

            return(response);
        }
        public async Task <IActionResult> GetPlayerScores(Guid playerId,
                                                          [FromQuery] Int32 numberOfScores,
                                                          CancellationToken cancellationToken)
        {
            GetPlayerScoresResponse response = await this.ReportingManager.GetPlayerScoresReport(playerId, numberOfScores, cancellationToken);

            return(this.Ok(response));
        }
Example #4
0
        public async Task ReportingManager_GetPlayerScores_NoMembers_ReportDataReturned()
        {
            String databaseName            = Guid.NewGuid().ToString("N");
            ManagementAPIReadModel context = this.GetContext(databaseName);

            List <PublishedPlayerScore> reportingData = new List <PublishedPlayerScore>();

            Func <ManagementAPIReadModel> contextResolver = () => { return(context); };

            ReportingManager reportingManager = new ReportingManager(contextResolver);

            GetPlayerScoresResponse reportData = await reportingManager.GetPlayerScoresReport(PlayerTestData.AggregateId, 10, CancellationToken.None);

            reportData.Scores.Count.ShouldBe(reportingData.Count);
        }
        public async Task ReportingClient_GetPlayerScores_ReportDataReturned()
        {
            // 1. Arrange
            HttpClient            client          = this.WebApplicationFactory.AddPlayer().CreateClient();
            Func <String, String> resolver        = api => "http://localhost";
            IReportingClient      reportingClient = new ReportingClient(resolver, client);

            String token =
                "eyJhbGciOiJSUzI1NiIsImtpZCI6ImVhZDQyNGJjNjI5MzU0NGM4MGFmZThhMDk2MzEyNjU2IiwidHlwIjoiSldUIn0.eyJuYmYiOjE1NzAyODk3MDksImV4cCI6MTU3MDI5MzMwOSwiaXNzIjoiaHR0cDovLzE5Mi4xNjguMS4xMzI6NTAwMSIsImF1ZCI6WyJodHRwOi8vMTkyLjE2OC4xLjEzMjo1MDAxL3Jlc291cmNlcyIsIm1hbmFnZW1lbnRhcGkiLCJzZWN1cmlydHlzZXJ2aWNlYXBpIl0sImNsaWVudF9pZCI6ImdvbGZoYW5kaWNhcC50ZXN0ZGF0YWdlbmVyYXRvciIsInNjb3BlIjpbIm1hbmFnZW1lbnRhcGkiLCJzZWN1cmlydHlzZXJ2aWNlYXBpIl19.vLfs2bOMXshW93nw5TTOqd6NPGNYpcrhcom8yZoYc9WGSuYH48VqM5BdbodEukNNJmgbV9wUVgoj1uGztlFfHGFA_q6IQfd3xZln_LIxju6ZNZs8qUyRXDTGxu0dlfF8STLfBUq469SsY9eNi1hBYFyNxl963OfKqDSHAdeBg9yNlwnbky1Tnsxobu9W33fLcjH0KoutlwTFV51UFUEKCBk0w1zsjaDVZacETn74t56y0CvMS7ZSN2_yyunq4JvoUsh3xM5lQ-gl23eQyo6l4QE4wukCS7U_Zr2dg8-EF63VKiCH-ZD49M76TD9kIIge-XIgHqa2Xf3S-FpLxXfEqw";

            // 2. Act
            GetPlayerScoresResponse getPlayerScores =
                await reportingClient.GetPlayerScores(token, TestData.PlayerId, 10, CancellationToken.None);

            // 3. Assert
            getPlayerScores.Scores.ShouldNotBeEmpty();
        }
Example #6
0
        public GetPlayerScoresResponse GetPlayerScores(int tournamentId)
        {
            var connectionString = _settings.TournamentDB;

            using (var dataStore = new DataStore(new SqlConnection(connectionString)))
            {
                GetPlayerScoresResponse response = new GetPlayerScoresResponse();

                try
                {
                    response.playerScores = dataStore.GetPlayerScores(tournamentId);
                }
                catch (Exception e)
                {
                    AddErrorToResponse(response, e.Message);
                }

                return(response);
            }
        }
        /// <summary>
        /// Gets the top player scores.
        /// </summary>
        /// <param name="passwordToken">The password token.</param>
        /// <param name="playerId">The player identifier.</param>
        /// <param name="numberOfScores">The number of scores.</param>
        /// <param name="viewModel">The view model.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        public async Task GetTopPlayerScores(String passwordToken,
                                             Guid playerId,
                                             Int32 numberOfScores,
                                             MyTournamentsViewModel viewModel,
                                             CancellationToken cancellationToken)
        {
            GetPlayerScoresResponse playerScoresResponse = await this.ReportingClient.GetPlayerScores(passwordToken, playerId, numberOfScores, cancellationToken);

            foreach (PlayerScoreResponse playerScore in playerScoresResponse.Scores)
            {
                viewModel.TournamentScores.Add(new TournamentScoreViewModel
                {
                    CourseName      = playerScore.MeasuredCourseName,
                    TournamentName  = playerScore.TournamentName,
                    TournamentDate  = playerScore.TournamentDate,
                    GrossScore      = playerScore.GrossScore,
                    PlayingHandicap = 0,
                    NetScore        = playerScore.NetScore,
                    CSS             = playerScore.CSS
                });
            }
        }
Example #8
0
        public async Task ReportingManager_GetPlayerScores_ReportDataReturned()
        {
            String databaseName            = Guid.NewGuid().ToString("N");
            ManagementAPIReadModel context = this.GetContext(databaseName);

            List <PublishedPlayerScore> reportingData = new List <PublishedPlayerScore>();

            reportingData.Add(new PublishedPlayerScore
            {
                TournamentDate   = TournamentTestData.TournamentDate,
                PlayerId         = PlayerTestData.AggregateId,
                TournamentFormat = TournamentTestData.TournamentFormat,
                GolfClubId       = TournamentTestData.GolfClubId,
                MeasuredCourseId = TournamentTestData.MeasuredCourseId,
                TournamentId     = TournamentTestData.AggregateId,
                CSS                     = TournamentTestData.CSS,
                NetScore                = TournamentTestData.NetScore,
                MeasuredCourseName      = GolfClubTestData.MeasuredCourseName,
                GolfClubName            = GolfClubTestData.Name,
                MeasuredCourseTeeColour = GolfClubTestData.TeeColour,
                GrossScore              = TournamentTestData.GrossScore,
                TournamentName          = TournamentTestData.Name
            });

            await context.PublishedPlayerScores.AddRangeAsync(reportingData, CancellationToken.None);

            await context.SaveChangesAsync(CancellationToken.None);

            Func <ManagementAPIReadModel> contextResolver = () => { return(context); };

            ReportingManager reportingManager = new ReportingManager(contextResolver);

            GetPlayerScoresResponse reportData = await reportingManager.GetPlayerScoresReport(PlayerTestData.AggregateId, 10, CancellationToken.None);

            reportData.Scores.Count.ShouldBe(reportingData.Count);
        }
        public async Task ReportingController_GET_GetPlayerScores_PlayerScoresResponseReturned()
        {
            // 1. Arrange
            HttpClient client = this.WebApplicationFactory.CreateClient();

            String uri = $"api/reports/players/{TestData.PlayerId}/scores";

            client.DefaultRequestHeaders.Add("api-version", "2.0");
            // 2. Act
            HttpResponseMessage response = await client.GetAsync(uri, CancellationToken.None);

            // 3. Assert
            response.StatusCode.ShouldBe(HttpStatusCode.OK);

            String responseAsJson = await response.Content.ReadAsStringAsync();

            responseAsJson.ShouldNotBeNullOrEmpty();

            GetPlayerScoresResponse responseObject = JsonConvert.DeserializeObject <GetPlayerScoresResponse>(responseAsJson);

            responseObject.ShouldNotBeNull();
            responseObject.Scores.ShouldNotBeNull();
            responseObject.Scores.ShouldNotBeEmpty();
        }