/// <summary> /// Requests the club membership. /// </summary> /// <param name="playerId">The player identifier.</param> /// <param name="golfClubId">The golf club identifier.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns></returns> /// <exception cref="InvalidDataException"> /// Unable to request club membership for a player that has not been registered /// or /// Unable to request club membership for a club that has not been created /// </exception> public async Task RequestClubMembership(Guid playerId, Guid golfClubId, CancellationToken cancellationToken) { // Rehydrate the golf club membership aggregate GolfClubMembershipAggregate golfClubMembershipAggregate = await this.GolfClubMembershipRepository.GetLatestVersion(golfClubId, cancellationToken); // Validate the player id firstly PlayerAggregate playerAggregate = await this.PlayerRepository.GetLatestVersion(playerId, cancellationToken); if (!playerAggregate.HasBeenRegistered) { throw new InvalidDataException("Unable to request club membership for a player that has not been registered"); } // Now validate the club GolfClubAggregate golfClubAggregate = await this.GolfClubRepository.GetLatestVersion(golfClubId, cancellationToken); if (!golfClubAggregate.HasBeenCreated) { throw new InvalidDataException("Unable to request club membership for a club that has not been created"); } // Ok all the data has been validated, now run through the aggregate rules golfClubMembershipAggregate.RequestMembership(playerId, playerAggregate.FullName, playerAggregate.DateOfBirth, playerAggregate.Gender, DateTime.Now); // Save any pending changes await this.GolfClubMembershipRepository.SaveChanges(golfClubMembershipAggregate, cancellationToken); }
public void GolfClubMembershipAggregate_RequestMembership_PlayerToYoung_RequestRejected() { GolfClubMembershipAggregate aggregate = GolfClubMembershipTestData.GetCreatedGolfClubMembershipAggregate(); // Get the lowest valid age DateTime dateOfBirth = DateTime.Now.AddYears(-13); // Now add a day to make it invalid dateOfBirth = dateOfBirth.AddDays(1); aggregate.RequestMembership(GolfClubMembershipTestData.PlayerId, GolfClubMembershipTestData.PlayerFullName, dateOfBirth, GolfClubMembershipTestData.PlayerGender, GolfClubMembershipTestData.RequestDateAndTime); MembershipDataTransferObject membership = aggregate.GetMembership(GolfClubMembershipTestData.PlayerId, dateOfBirth, GolfClubMembershipTestData.PlayerGender); membership.MembershipId.ShouldNotBe(Guid.Empty); membership.PlayerId.ShouldBe(GolfClubMembershipTestData.PlayerId); membership.PlayerFullName.ShouldBe(GolfClubMembershipTestData.PlayerFullName); membership.PlayerDateOfBirth.ShouldBe(dateOfBirth); membership.PlayerGender.ShouldBe(GolfClubMembershipTestData.PlayerGender); membership.RejectedDateAndTime.ShouldBe(GolfClubMembershipTestData.RequestDateAndTime); membership.AcceptedDateAndTime.ShouldBe(DateTime.MinValue); membership.RejectionReason.ShouldBe($"Player Id {GolfClubMembershipTestData.PlayerId} is too young."); membership.Status.ShouldBe(2); }
public async Task SignUpPlayerForTournament(Guid tournamentId, Guid playerId, CancellationToken cancellationToken) { // Validate the tournament Id TournamentAggregate tournament = await this.TournamentRepository.GetLatestVersion(tournamentId, cancellationToken); PlayerAggregate player = await this.PlayerRepository.GetLatestVersion(playerId, cancellationToken); if (!player.HasBeenRegistered) { throw new InvalidOperationException("A player must be registered to sign up for a club tournament"); } try { GolfClubMembershipAggregate golfClubMembership = await this.ClubMembershipRepository.GetLatestVersion(tournament.GolfClubId, cancellationToken); golfClubMembership.GetMembership(player.AggregateId, player.DateOfBirth, player.Gender); } catch (NotFoundException nex) { throw new InvalidOperationException("A player must be a member of the club to sign up for a club tournament"); } tournament.SignUpForTournament(playerId); await this.TournamentRepository.SaveChanges(tournament, cancellationToken); }
public void GolfClubMembershipAggregate_CanBeCreated_IsCreated() { GolfClubMembershipAggregate aggregate = GolfClubMembershipAggregate.Create(GolfClubMembershipTestData.AggregateId); aggregate.ShouldNotBeNull(); aggregate.AggregateId.ShouldBe(GolfClubMembershipTestData.AggregateId); }
public void GolfClubMembershipAggregate_CanBeCreated_EmptyAggregateId_ErrorThrown() { Should.Throw <ArgumentNullException>(() => { GolfClubMembershipAggregate aggregate = GolfClubMembershipAggregate.Create(Guid.Empty); }); }
public void GolfClubMembershipAggregate_GetMemberships_MembershipsReturned() { GolfClubMembershipAggregate aggregate = GolfClubMembershipTestData.GetCreatedGolfClubMembershipAggregateWithMultipleMembershipRequested(); List <MembershipDataTransferObject> memberships = aggregate.GetMemberships(); memberships.Count.ShouldBe(2); }
public static GolfClubMembershipAggregate GetCreatedGolfClubMembershipAggregateWithMembershipRequested() { GolfClubMembershipAggregate aggregate = GolfClubMembershipAggregate.Create(AggregateId); aggregate.RequestMembership(PlayerId, PlayerFullName, PlayerDateOfBirth, PlayerGender, RequestDateAndTime); return(aggregate); }
public void GolfClubMembershipAggregate_GetMemberships_NoMemberships_ErrorThrown() { GolfClubMembershipAggregate aggregate = GolfClubMembershipTestData.GetCreatedGolfClubMembershipAggregate(); Should.Throw <NotFoundException>(() => { aggregate.GetMemberships(); }); }
public void GolfClubMembershipAggregate_GetMembership_NoMemberships_ErrorThrown() { GolfClubMembershipAggregate aggregate = GolfClubMembershipTestData.GetCreatedGolfClubMembershipAggregate(); Should.Throw <NotFoundException>(() => { aggregate.GetMembership(GolfClubMembershipTestData.PlayerId, GolfClubMembershipTestData.PlayerDateOfBirth, GolfClubMembershipTestData.PlayerGender); }); }
public static GolfClubMembershipAggregate GetCreatedGolfClubMembershipAggregateWithNumberOfAcceptedMembershipRequests(Int32 memberCount) { GolfClubMembershipAggregate aggregate = GolfClubMembershipAggregate.Create(AggregateId); for (Int32 i = 0; i < memberCount; i++) { aggregate.RequestMembership(Guid.NewGuid(), $"Player {i}", PlayerDateOfBirth, PlayerGender, RequestDateAndTime); } return(aggregate); }
public async Task <IActionResult> GetGolfClub([FromRoute] Guid golfClubId, [FromQuery] Boolean includeMemberships, CancellationToken cancellationToken) { GolfClubAggregate golfClub = await this.GolfClubRepository.GetLatestVersion(golfClubId, cancellationToken); if (!golfClub.HasBeenCreated) { return(this.NotFound($"Golf Club not found with Id {golfClubId}")); } // Translate to Developer DTO DeveloperGetGolfClubResponse response = new DeveloperGetGolfClubResponse { AddressLine1 = golfClub.AddressLine1, Name = golfClub.Name, Town = golfClub.Town, Website = golfClub.Website, Region = golfClub.Region, TelephoneNumber = golfClub.TelephoneNumber, EmailAddress = golfClub.EmailAddress, PostalCode = golfClub.PostalCode, AggregateId = golfClub.AggregateId, AddressLine2 = golfClub.AddressLine2, HasBeenCreated = golfClub.HasBeenCreated }; if (includeMemberships) { GolfClubMembershipAggregate golfClubMemberships = await this.GolfClubMembershipRepository.GetLatestVersion(golfClubId, cancellationToken); List <MembershipDataTransferObject> memberships = golfClubMemberships.GetMemberships(); memberships.ForEach(m => { response.GolfClubMemberships.Add(new GolfClubMembershipResponse { AcceptedDateAndTime = m.AcceptedDateAndTime, MembershipId = m.MembershipId, MembershipNumber = m.MembershipNumber, PlayerDateOfBirth = m.PlayerDateOfBirth, PlayerFullName = m.PlayerFullName, PlayerGender = m.PlayerGender, PlayerId = m.PlayerId, RejectedDateAndTime = m.RejectedDateAndTime, RejectionReason = m.RejectionReason, Status = m.Status }); }); } return(this.Ok(response)); }
public void GolfClubMembershipAggregate_RequestMembership_DuplicatePlayerMembershipRequest_RequestRejected() { GolfClubMembershipAggregate aggregate = GolfClubMembershipTestData.GetCreatedGolfClubMembershipAggregateWithMembershipRequested(); Should.Throw <InvalidOperationException>(() => { aggregate.RequestMembership(GolfClubMembershipTestData.PlayerId, GolfClubMembershipTestData.PlayerFullName, GolfClubMembershipTestData.PlayerDateOfBirth, GolfClubMembershipTestData.PlayerGender, GolfClubMembershipTestData.RequestDateAndTime); }); }
public void GolfClubMembershipAggregate_RequestMembership_InvalidData_ErrorThrown(Boolean validPlayerId, String playerFullName, Boolean validDateOfBirth, String playerGender, Type exceptionType) { Guid playerId = validPlayerId ? GolfClubMembershipTestData.PlayerId : Guid.Empty; DateTime dateOfBirth = validDateOfBirth ? GolfClubMembershipTestData.PlayerDateOfBirth : DateTime.MinValue; GolfClubMembershipAggregate aggregate = GolfClubMembershipTestData.GetCreatedGolfClubMembershipAggregate(); Should.Throw(() => { aggregate.RequestMembership(playerId, playerFullName, dateOfBirth, playerGender, GolfClubMembershipTestData.RequestDateAndTime); }, exceptionType); }
public void GolfClubMembershipAggregate_GetMembership_MembershipReturned() { GolfClubMembershipAggregate aggregate = GolfClubMembershipTestData.GetCreatedGolfClubMembershipAggregateWithMembershipRequested(); MembershipDataTransferObject membership = aggregate.GetMembership(GolfClubMembershipTestData.PlayerId, GolfClubMembershipTestData.PlayerDateOfBirth, GolfClubMembershipTestData.PlayerGender); membership.MembershipId.ShouldNotBe(Guid.Empty); membership.PlayerId.ShouldBe(GolfClubMembershipTestData.PlayerId); membership.PlayerFullName.ShouldBe(GolfClubMembershipTestData.PlayerFullName); membership.PlayerDateOfBirth.ShouldBe(GolfClubMembershipTestData.PlayerDateOfBirth); membership.PlayerGender.ShouldBe(GolfClubMembershipTestData.PlayerGender); membership.AcceptedDateAndTime.ShouldBe(GolfClubMembershipTestData.RequestDateAndTime); membership.RejectedDateAndTime.ShouldBe(DateTime.MinValue); membership.RejectionReason.ShouldBeNullOrEmpty(); membership.Status.ShouldBe(1); }
public void GolfClubMembershipAggregate_RequestMembership_MembershipRequested() { GolfClubMembershipAggregate aggregate = GolfClubMembershipTestData.GetCreatedGolfClubMembershipAggregate(); aggregate.RequestMembership(GolfClubMembershipTestData.PlayerId, GolfClubMembershipTestData.PlayerFullName, GolfClubMembershipTestData.PlayerDateOfBirth, GolfClubMembershipTestData.PlayerGender, GolfClubMembershipTestData.RequestDateAndTime); MembershipDataTransferObject membership = aggregate.GetMembership(GolfClubMembershipTestData.PlayerId, GolfClubMembershipTestData.PlayerDateOfBirth, GolfClubMembershipTestData.PlayerGender); membership.MembershipId.ShouldNotBe(Guid.Empty); membership.PlayerId.ShouldBe(GolfClubMembershipTestData.PlayerId); membership.PlayerFullName.ShouldBe(GolfClubMembershipTestData.PlayerFullName); membership.PlayerDateOfBirth.ShouldBe(GolfClubMembershipTestData.PlayerDateOfBirth); membership.PlayerGender.ShouldBe(GolfClubMembershipTestData.PlayerGender); membership.AcceptedDateAndTime.ShouldBe(GolfClubMembershipTestData.RequestDateAndTime); membership.AcceptedDateAndTime.ShouldNotBe(DateTime.MinValue); membership.MembershipNumber.ShouldBe("000001"); membership.Status.ShouldBe(1); }
public void GolfClubMembershipAggregate_RequestMembership_NoSpaceForNewMembers_RequestRejected() { GolfClubMembershipAggregate aggregate = GolfClubMembershipTestData.GetCreatedGolfClubMembershipAggregateWithNumberOfAcceptedMembershipRequests(500); aggregate.RequestMembership(GolfClubMembershipTestData.PlayerId, GolfClubMembershipTestData.PlayerFullName, GolfClubMembershipTestData.PlayerDateOfBirth, GolfClubMembershipTestData.PlayerGender, GolfClubMembershipTestData.RequestDateAndTime); MembershipDataTransferObject membership = aggregate.GetMembership(GolfClubMembershipTestData.PlayerId, GolfClubMembershipTestData.PlayerDateOfBirth, GolfClubMembershipTestData.PlayerGender); membership.MembershipId.ShouldNotBe(Guid.Empty); membership.PlayerId.ShouldBe(GolfClubMembershipTestData.PlayerId); membership.PlayerFullName.ShouldBe(GolfClubMembershipTestData.PlayerFullName); membership.PlayerDateOfBirth.ShouldBe(GolfClubMembershipTestData.PlayerDateOfBirth); membership.PlayerGender.ShouldBe(GolfClubMembershipTestData.PlayerGender); membership.RejectedDateAndTime.ShouldBe(GolfClubMembershipTestData.RequestDateAndTime); membership.AcceptedDateAndTime.ShouldBe(DateTime.MinValue); membership.RejectionReason.ShouldBe($"No more space at club for Player Id {GolfClubMembershipTestData.PlayerId}"); membership.Status.ShouldBe(2); }
public static GolfClubMembershipAggregate GetCreatedGolfClubMembershipAggregate() { GolfClubMembershipAggregate aggregate = GolfClubMembershipAggregate.Create(GolfClubMembershipTestData.AggregateId); return(aggregate); }