/// <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);
        }
コード例 #2
0
        private ManagementAPIReadModel GetContext(String databaseName)
        {
            DbContextOptionsBuilder <ManagementAPIReadModel> builder = new DbContextOptionsBuilder <ManagementAPIReadModel>()
                                                                       .UseInMemoryDatabase(databaseName)
                                                                       .ConfigureWarnings(w => w.Ignore(InMemoryEventId.TransactionIgnoredWarning));
            ManagementAPIReadModel context = new ManagementAPIReadModel(builder.Options);

            return(context);
        }
コード例 #3
0
        /// <summary>
        /// Initialises the database.
        /// </summary>
        /// <param name="app">The application.</param>
        /// <param name="environment">The environment.</param>
        private async Task InitialiseDatabase(IApplicationBuilder app,
                                              IHostingEnvironment environment)
        {
            using (IServiceScope scope = app.ApplicationServices.GetService <IServiceScopeFactory>().CreateScope())
            {
                ManagementAPIReadModel managementApiReadModel = scope.ServiceProvider.GetRequiredService <ManagementAPIReadModel>();

                SeedingType seedingType = Startup.Configuration.GetValue <SeedingType>("SeedingType");

                DatabaseSeeding.InitialiseDatabase(managementApiReadModel, seedingType);
            }
        }
コード例 #4
0
        public async Task ReportingManager_GetNumberOfMembersByAgeCategoryReport_NoMembers_ReportDataReturned()
        {
            String databaseName = Guid.NewGuid().ToString("N");
            ManagementAPIReadModel        context         = this.GetContext(databaseName);
            Func <ManagementAPIReadModel> contextResolver = () => { return(context); };

            ReportingManager reportingManager = new ReportingManager(contextResolver);

            GetNumberOfMembersByAgeCategoryReportResponse reportData = await reportingManager.GetNumberOfMembersByAgeCategoryReport(GolfClubTestData.AggregateId, CancellationToken.None);

            reportData.GolfClubId.ShouldBe(GolfClubTestData.AggregateId);
            reportData.MembersByAgeCategoryResponse.ShouldBeEmpty();
        }
コード例 #5
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);
        }
コード例 #6
0
        public async Task ReportingManager_GetMembersHandicapListReport_NoMembers_ReportDataReturned()
        {
            String databaseName            = Guid.NewGuid().ToString("N");
            ManagementAPIReadModel context = this.GetContext(databaseName);

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

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

            ReportingManager reportingManager = new ReportingManager(contextResolver);

            GetMembersHandicapListReportResponse reportData = await reportingManager.GetMembersHandicapListReport(GolfClubTestData.AggregateId, CancellationToken.None);

            reportData.GolfClubId.ShouldBe(GolfClubTestData.AggregateId);
            reportData.MembersHandicapListReportResponse.Count.ShouldBe(reportingData.Count);
        }
        /// <summary>
        /// Gets the number of members report.
        /// </summary>
        /// <param name="golfClubId">The golf club identifier.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns></returns>
        public async Task <GetNumberOfMembersReportResponse> GetNumberOfMembersReport(Guid golfClubId,
                                                                                      CancellationToken cancellationToken)
        {
            Guard.ThrowIfInvalidGuid(golfClubId, nameof(golfClubId));
            GetNumberOfMembersReportResponse response = new GetNumberOfMembersReportResponse();

            using (ManagementAPIReadModel context = this.ReadModelResolver())
            {
                Int32 membersCount = await context.GolfClubMembershipReporting.CountAsync(g => g.GolfClubId == golfClubId, cancellationToken);

                response.NumberOfMembers = membersCount;
                response.GolfClubId      = golfClubId;
            }

            return(response);
        }
コード例 #8
0
        public async Task ReportingManager_GetNumberOfMembersByTimePeriodReport_NoMembers_ReportDataReturned(String timePeriod, TimePeriod expectedTimePeriod)
        {
            String databaseName            = Guid.NewGuid().ToString("N");
            ManagementAPIReadModel context = this.GetContext(databaseName);

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

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

            ReportingManager reportingManager = new ReportingManager(contextResolver);

            GetNumberOfMembersByTimePeriodReportResponse reportData = await reportingManager.GetNumberOfMembersByTimePeriodReport(GolfClubTestData.AggregateId, timePeriod, CancellationToken.None);

            reportData.GolfClubId.ShouldBe(GolfClubTestData.AggregateId);
            reportData.TimePeriod.ShouldBe(expectedTimePeriod);
            reportData.MembersByTimePeriodResponse.ShouldBeEmpty();
        }
コード例 #9
0
        public async Task ReportingManager_GetNumberOfMembersReport_ReportDataReturned()
        {
            String databaseName            = Guid.NewGuid().ToString("N");
            ManagementAPIReadModel context = this.GetContext(databaseName);

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

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = DateTime.Now,
                DateOfBirth      = DateTime.Now.AddYears(-20),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 1,
                PlayerGender     = "M",
                PlayerName       = "Test Player 1"
            });

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = DateTime.Now,
                DateOfBirth      = DateTime.Now.AddYears(-25),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 2,
                PlayerGender     = "M",
                PlayerName       = "Test Player 2"
            });
            await context.GolfClubMembershipReporting.AddRangeAsync(reportingData, CancellationToken.None);

            await context.SaveChangesAsync(CancellationToken.None);

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

            ReportingManager reportingManager = new ReportingManager(contextResolver);

            GetNumberOfMembersReportResponse reportData = await reportingManager.GetNumberOfMembersReport(GolfClubTestData.AggregateId, CancellationToken.None);

            reportData.GolfClubId.ShouldBe(GolfClubTestData.AggregateId);
            reportData.NumberOfMembers.ShouldBe(reportingData.Count);
        }
        /// <summary>
        /// Gets the number of members by age category report.
        /// </summary>
        /// <param name="golfClubId">The golf club identifier.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns></returns>
        public async Task <GetNumberOfMembersByAgeCategoryReportResponse> GetNumberOfMembersByAgeCategoryReport(Guid golfClubId,
                                                                                                                CancellationToken cancellationToken)
        {
            // TODO: get the configured age categories from the golf club record
            Guard.ThrowIfInvalidGuid(golfClubId, nameof(golfClubId));

            GetNumberOfMembersByAgeCategoryReportResponse response = new GetNumberOfMembersByAgeCategoryReportResponse();

            using (ManagementAPIReadModel context = this.ReadModelResolver())
            {
                // Get the members grouped by age
                IQueryable <GolfClubMembershipReporting> members = context.GolfClubMembershipReporting.Where(g => g.GolfClubId == golfClubId).AsQueryable();
                DateTime zeroTime = new DateTime(1, 1, 1);

                // Group the members records by age
                var membersByAge = members.GroupBy(g => (zeroTime + DateTime.Now.Date.Subtract(g.DateOfBirth)).Year).Select(x => new
                {
                    Age   = x.Key,
                    Count = x.Count()
                });
                // Now build the members by age category to go into the response
                var membersByAgeCategory = membersByAge.Select(x => new
                {
                    AgeCategory = (x.Age < 17 ? "Junior" :
                                   x.Age >= 17 && x.Age < 19 ? "Juvenile" :
                                   x.Age >= 19 && x.Age < 21 ? "Youth" :
                                   x.Age >= 21 && x.Age < 25 ? "Young Adult" :
                                   x.Age >= 25 && x.Age < 65 ? "Adult" :
                                   x.Age >= 65 ? "Senior" : "Unknown"),
                    Count = x.Count
                });

                response.GolfClubId = golfClubId;
                response.MembersByAgeCategoryResponse = membersByAgeCategory.GroupBy(g => g.AgeCategory).Select(x => new MembersByAgeCategoryResponse
                {
                    AgeCategory     = x.Key,
                    NumberOfMembers = x.Sum(s => s.Count)
                }).ToList();
            }

            return(response);
        }
コード例 #11
0
        public static void InitialiseDatabase(ManagementAPIReadModel managementApiReadModel,
                                              SeedingType seedingType)
        {
            try
            {
                if (managementApiReadModel.Database.IsSqlServer())
                {
                    managementApiReadModel.Database.Migrate();
                }

                managementApiReadModel.SaveChanges();
            }
            catch (Exception ex)
            {
                String connString = managementApiReadModel.Database.GetDbConnection().ConnectionString;

                Exception newException = new Exception($"Connection String [{connString}]", ex);
                throw newException;
            }
        }
コード例 #12
0
        public async Task ReportingManager_GetMembersHandicapListReport_ReportDataReturned()
        {
            String databaseName            = Guid.NewGuid().ToString("N");
            ManagementAPIReadModel context = this.GetContext(databaseName);

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

            reportingData.Add(new PlayerHandicapListReporting
            {
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                HandicapCategory = 1,
                PlayerName       = "Test Player 1",
                ExactHandicap    = 5.4m,
                PlayingHandicap  = 5
            });

            reportingData.Add(new PlayerHandicapListReporting
            {
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                HandicapCategory = 2,
                PlayerName       = "Test Player 2",
                ExactHandicap    = 12.8m,
                PlayingHandicap  = 13
            });
            await context.PlayerHandicapListReporting.AddRangeAsync(reportingData, CancellationToken.None);

            await context.SaveChangesAsync(CancellationToken.None);

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

            ReportingManager reportingManager = new ReportingManager(contextResolver);

            GetMembersHandicapListReportResponse reportData = await reportingManager.GetMembersHandicapListReport(GolfClubTestData.AggregateId, CancellationToken.None);

            reportData.GolfClubId.ShouldBe(GolfClubTestData.AggregateId);
            reportData.MembersHandicapListReportResponse.ShouldNotBeEmpty();
            reportData.MembersHandicapListReportResponse.Count.ShouldBe(reportingData.Count);
        }
        /// <summary>
        /// Gets the members handicap list report.
        /// </summary>
        /// <param name="golfClubId">The golf club identifier.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns></returns>
        public async Task <GetMembersHandicapListReportResponse> GetMembersHandicapListReport(Guid golfClubId,
                                                                                              CancellationToken cancellationToken)
        {
            Guard.ThrowIfInvalidGuid(golfClubId, nameof(golfClubId));
            GetMembersHandicapListReportResponse response = new GetMembersHandicapListReportResponse();

            using (ManagementAPIReadModel context = this.ReadModelResolver())
            {
                List <PlayerHandicapListReporting> reportData = context.PlayerHandicapListReporting.Where(p => p.GolfClubId == golfClubId).ToList();
                response.GolfClubId = golfClubId;
                reportData.ForEach(f => response.MembersHandicapListReportResponse.Add(new MembersHandicapListReportResponse
                {
                    GolfClubId       = f.GolfClubId,
                    PlayerId         = f.PlayerId,
                    HandicapCategory = f.HandicapCategory,
                    ExactHandicap    = f.ExactHandicap,
                    PlayingHandicap  = f.PlayingHandicap,
                    PlayerName       = f.PlayerName
                }));
            }

            return(response);
        }
        /// <summary>
        /// Gets the number of members by handicap category report.
        /// </summary>
        /// <param name="golfClubId">The golf club identifier.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns></returns>
        public async Task <GetNumberOfMembersByHandicapCategoryReportResponse> GetNumberOfMembersByHandicapCategoryReport(Guid golfClubId,
                                                                                                                          CancellationToken cancellationToken)
        {
            Guard.ThrowIfInvalidGuid(golfClubId, nameof(golfClubId));

            GetNumberOfMembersByHandicapCategoryReportResponse response = new GetNumberOfMembersByHandicapCategoryReportResponse();

            using (ManagementAPIReadModel context = this.ReadModelResolver())
            {
                response.GolfClubId = golfClubId;
                List <IGrouping <Int32, GolfClubMembershipReporting> > groupedData = await context.GolfClubMembershipReporting.Where(g => g.GolfClubId == golfClubId).GroupBy(g => g.HandicapCategory).ToListAsync(cancellationToken);

                foreach (IGrouping <Int32, GolfClubMembershipReporting> golfClubMembershipReportings in groupedData)
                {
                    response.MembersByHandicapCategoryResponse.Add(new MembersByHandicapCategoryResponse
                    {
                        HandicapCategory = golfClubMembershipReportings.Key,
                        NumberOfMembers  = golfClubMembershipReportings.Count()
                    });
                }
            }

            return(response);
        }
コード例 #15
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);
        }
        /// <summary>
        /// Gets the number of members by time period report.
        /// </summary>
        /// <param name="golfClubId">The golf club identifier.</param>
        /// <param name="timePeriod">The time period.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns></returns>
        public async Task <GetNumberOfMembersByTimePeriodReportResponse> GetNumberOfMembersByTimePeriodReport(Guid golfClubId,
                                                                                                              String timePeriod,
                                                                                                              CancellationToken cancellationToken)
        {
            TimePeriod parsedTimePeriod = Enum.Parse <TimePeriod>(timePeriod, true);

            GetNumberOfMembersByTimePeriodReportResponse response = new GetNumberOfMembersByTimePeriodReportResponse();

            response.GolfClubId = golfClubId;

            using (ManagementAPIReadModel context = this.ReadModelResolver())
            {
                // get the base query data
                IQueryable <GolfClubMembershipReporting> data = context.GolfClubMembershipReporting.Where(r => r.GolfClubId == golfClubId).AsQueryable();
                List <MembersByTimePeriodResponse>       membersByTimePeriodResponse = null;
                // Build the database query depending on the time period requested
                if (parsedTimePeriod == TimePeriod.Day)
                {
                    response.TimePeriod         = Service.DataTransferObjects.Responses.TimePeriod.Day;
                    membersByTimePeriodResponse = data.GroupBy(x => new
                    {
                        x.DateJoined.Date
                    },
                                                               (key,
                                                                group) => new MembersByTimePeriodResponse
                    {
                        Period          = key.Date.ToString("yyyy-MM-dd"),
                        NumberOfMembers = group.Count()
                    }).ToList();
                }
                // TODO: May re-introduce this later on
                //else if (parsedTimePeriod == TimePeriod.Week)
                //{
                //    response.TimePeriod = Service.DataTransferObjects.Responses.TimePeriod.Week;
                //    membersByTimePeriodResponse = data.GroupBy(x => new
                //                                                    {
                //                                                        x.DateJoined.Date
                //                                                    },
                //                                               (key,
                //                                                group) => new MembersByTimePeriodResponse
                //                                                          {
                //                                                              Period = $"{key.Date.ToString("yyyy")}-{ISOWeek.GetWeekNumber(key.Date):D2}",
                //                                                              NumberOfMembers = group.Count()
                //                                                          }).ToList();
                //}
                else if (parsedTimePeriod == TimePeriod.Month)
                {
                    response.TimePeriod         = Service.DataTransferObjects.Responses.TimePeriod.Month;
                    membersByTimePeriodResponse = data.GroupBy(x => new
                    {
                        x.DateJoined.Date
                    },
                                                               (key,
                                                                group) => new MembersByTimePeriodResponse
                    {
                        Period          = key.Date.ToString("yyyy-MM"),
                        NumberOfMembers = group.Count()
                    }).ToList();
                    membersByTimePeriodResponse = membersByTimePeriodResponse.GroupBy(g => g.Period).Select(x => new MembersByTimePeriodResponse
                    {
                        Period          = x.Key,
                        NumberOfMembers = x.Sum(s => s.NumberOfMembers)
                    }).ToList();
                }
                else if (parsedTimePeriod == TimePeriod.Year)
                {
                    response.TimePeriod         = Service.DataTransferObjects.Responses.TimePeriod.Year;
                    membersByTimePeriodResponse = data.GroupBy(x => new
                    {
                        Year = x.DateJoined.Date
                    },
                                                               (key,
                                                                group) => new MembersByTimePeriodResponse
                    {
                        Period          = key.Year.ToString("yyyy"),
                        NumberOfMembers = group.Count()
                    }).ToList();
                    membersByTimePeriodResponse = membersByTimePeriodResponse.GroupBy(g => g.Period).Select(x => new MembersByTimePeriodResponse
                    {
                        Period          = x.Key,
                        NumberOfMembers = x.Sum(s => s.NumberOfMembers)
                    }).ToList();
                }

                Int32 runningTotal = 0;
                response.MembersByTimePeriodResponse = membersByTimePeriodResponse?.OrderBy(x => x.Period).Select(x => new MembersByTimePeriodResponse
                {
                    NumberOfMembers = runningTotal += x.NumberOfMembers,
                    Period          = x.Period
                }).ToList();
            }

            return(response);
        }
コード例 #17
0
        public async Task ReportingManager_GetNumberOfMembersByTimePeriodReport_ByYear_ReportDataReturned()
        {
            String databaseName = Guid.NewGuid().ToString("N");
            ManagementAPIReadModel             context       = this.GetContext(databaseName);
            List <GolfClubMembershipReporting> reportingData = new List <GolfClubMembershipReporting>();

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = new DateTime(2019, 08, 16),
                DateOfBirth      = DateTime.Now.AddYears(-20),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 1,
                PlayerGender     = "M",
                PlayerName       = "Test Player 1"
            });

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = new DateTime(2019, 08, 16),
                DateOfBirth      = DateTime.Now.AddYears(-25),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 2,
                PlayerGender     = "M",
                PlayerName       = "Test Player 2"
            });

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = new DateTime(2018, 08, 16),
                DateOfBirth      = DateTime.Now.AddYears(-25),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 2,
                PlayerGender     = "M",
                PlayerName       = "Test Player 3"
            });

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = new DateTime(2018, 07, 15),
                DateOfBirth      = DateTime.Now.AddYears(-25),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 3,
                PlayerGender     = "M",
                PlayerName       = "Test Player 4"
            });

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = new DateTime(2018, 07, 14),
                DateOfBirth      = DateTime.Now.AddYears(-25),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 3,
                PlayerGender     = "M",
                PlayerName       = "Test Player 5"
            });

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = new DateTime(2017, 06, 13),
                DateOfBirth      = DateTime.Now.AddYears(-25),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 3,
                PlayerGender     = "M",
                PlayerName       = "Test Player 6"
            });
            context.GolfClubMembershipReporting.AddRange(reportingData);
            context.SaveChanges();

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

            ReportingManager reportingManager = new ReportingManager(contextResolver);

            GetNumberOfMembersByTimePeriodReportResponse reportData = await reportingManager.GetNumberOfMembersByTimePeriodReport(GolfClubTestData.AggregateId, TimePeriod.Year.ToString(), CancellationToken.None);

            reportData.GolfClubId.ShouldBe(GolfClubTestData.AggregateId);
            reportData.TimePeriod.ShouldBe(TimePeriod.Year);
            reportData.MembersByTimePeriodResponse.ShouldNotBeNull();
            reportData.MembersByTimePeriodResponse.ShouldNotBeEmpty();
            reportData.MembersByTimePeriodResponse.Count.ShouldBe(3);
            reportData.MembersByTimePeriodResponse[0].Period.ShouldBe("2017");
            reportData.MembersByTimePeriodResponse[0].NumberOfMembers.ShouldBe(1);
            reportData.MembersByTimePeriodResponse[1].Period.ShouldBe("2018");
            reportData.MembersByTimePeriodResponse[1].NumberOfMembers.ShouldBe(4);
            reportData.MembersByTimePeriodResponse[2].Period.ShouldBe("2019");
            reportData.MembersByTimePeriodResponse[2].NumberOfMembers.ShouldBe(6);
        }
コード例 #18
0
        public async Task ReportingManager_GetNumberOfMembersByAgeCategoryReport_ReportDataReturned()
        {
            String databaseName            = Guid.NewGuid().ToString("N");
            ManagementAPIReadModel context = this.GetContext(databaseName);

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

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = DateTime.Now,
                DateOfBirth      = DateTime.Now.AddYears(-16),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 1,
                PlayerGender     = "M",
                PlayerName       = "Test Player 1"
            });

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = DateTime.Now,
                DateOfBirth      = DateTime.Now.AddYears(-18),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 2,
                PlayerGender     = "M",
                PlayerName       = "Test Player 2"
            });

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = DateTime.Now,
                DateOfBirth      = DateTime.Now.AddYears(-18),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 2,
                PlayerGender     = "M",
                PlayerName       = "Test Player 3"
            });

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = DateTime.Now,
                DateOfBirth      = DateTime.Now.AddYears(-19),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 2,
                PlayerGender     = "M",
                PlayerName       = "Test Player 4"
            });

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = DateTime.Now,
                DateOfBirth      = DateTime.Now.AddYears(-20),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 3,
                PlayerGender     = "M",
                PlayerName       = "Test Player 5"
            });

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = DateTime.Now,
                DateOfBirth      = DateTime.Now.AddYears(-22),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 3,
                PlayerGender     = "M",
                PlayerName       = "Test Player 6"
            });

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = DateTime.Now,
                DateOfBirth      = DateTime.Now.AddYears(-24),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 3,
                PlayerGender     = "M",
                PlayerName       = "Test Player 7"
            });

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = DateTime.Now,
                DateOfBirth      = DateTime.Now.AddYears(-26),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 3,
                PlayerGender     = "M",
                PlayerName       = "Test Player 8"
            });

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = DateTime.Now,
                DateOfBirth      = DateTime.Now.AddYears(-35),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 3,
                PlayerGender     = "M",
                PlayerName       = "Test Player 9"
            });

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = DateTime.Now,
                DateOfBirth      = DateTime.Now.AddYears(-64),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 3,
                PlayerGender     = "M",
                PlayerName       = "Test Player 10"
            });

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = DateTime.Now,
                DateOfBirth      = DateTime.Now.AddYears(-65),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 3,
                PlayerGender     = "M",
                PlayerName       = "Test Player 11"
            });

            reportingData.Add(new GolfClubMembershipReporting
            {
                DateJoined       = DateTime.Now,
                DateOfBirth      = DateTime.Now.AddYears(-70),
                PlayerId         = Guid.NewGuid(),
                GolfClubId       = GolfClubTestData.AggregateId,
                GolfClubName     = GolfClubTestData.Name,
                HandicapCategory = 3,
                PlayerGender     = "M",
                PlayerName       = "Test Player 12"
            });

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

            await context.SaveChangesAsync(CancellationToken.None);

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

            ReportingManager reportingManager = new ReportingManager(contextResolver);

            GetNumberOfMembersByAgeCategoryReportResponse reportData = await reportingManager.GetNumberOfMembersByAgeCategoryReport(GolfClubTestData.AggregateId, CancellationToken.None);

            reportData.GolfClubId.ShouldBe(GolfClubTestData.AggregateId);
            reportData.MembersByAgeCategoryResponse.ShouldNotBeEmpty();
            reportData.MembersByAgeCategoryResponse.Single(q => q.AgeCategory == "Junior").NumberOfMembers.ShouldBe(1);
            reportData.MembersByAgeCategoryResponse.Single(q => q.AgeCategory == "Juvenile").NumberOfMembers.ShouldBe(2);
            reportData.MembersByAgeCategoryResponse.Single(q => q.AgeCategory == "Youth").NumberOfMembers.ShouldBe(2);
            reportData.MembersByAgeCategoryResponse.Single(q => q.AgeCategory == "Young Adult").NumberOfMembers.ShouldBe(2);
            reportData.MembersByAgeCategoryResponse.Single(q => q.AgeCategory == "Adult").NumberOfMembers.ShouldBe(3);
            reportData.MembersByAgeCategoryResponse.Single(q => q.AgeCategory == "Senior").NumberOfMembers.ShouldBe(2);
        }
コード例 #19
0
        public async Task StopContainersForScenarioRun()
        {
            try
            {
                IPEndPoint sqlEndpoint = Setup.DatabaseServerContainer.ToHostExposedEndpoint("1433/tcp");

                String server   = "127.0.0.1";
                String database = $"ManagementAPIReadModel{this.TestId:N}";
                String user     = "******";
                String password = "******";
                String port     = sqlEndpoint.Port.ToString();

                String connectionString = $"server={server},{port};user id={user}; password={password}; database={database};";

                ManagementAPI.Database.ManagementAPIReadModel context = new ManagementAPIReadModel(connectionString);
                context.Database.EnsureDeleted();

                if (this.ManagementAPIContainer != null)
                {
                    this.ManagementAPIContainer.StopOnDispose   = true;
                    this.ManagementAPIContainer.RemoveOnDispose = true;
                    this.ManagementAPIContainer.Dispose();
                }

                if (this.MessagingServiceContainer != null)
                {
                    this.MessagingServiceContainer.StopOnDispose   = true;
                    this.MessagingServiceContainer.RemoveOnDispose = true;
                    this.MessagingServiceContainer.Dispose();
                }

                if (this.EventStoreContainer != null)
                {
                    this.EventStoreContainer.StopOnDispose   = true;
                    this.EventStoreContainer.RemoveOnDispose = true;
                    this.EventStoreContainer.Dispose();
                }

                if (this.SecurityServiceContainer != null)
                {
                    this.SecurityServiceContainer.StopOnDispose   = true;
                    this.SecurityServiceContainer.RemoveOnDispose = true;
                    this.SecurityServiceContainer.Dispose();
                }

                if (this.SubscriptionServiceContainer != null)
                {
                    this.SubscriptionServiceContainer.StopOnDispose   = true;
                    this.SubscriptionServiceContainer.RemoveOnDispose = true;
                    this.SubscriptionServiceContainer.Dispose();
                }

                if (this.TestNetwork != null)
                {
                    this.TestNetwork.Stop();
                    this.TestNetwork.Remove(true);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }