/// <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)); }
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(); }
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 }); } }
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(); }