/// <summary> /// Plays the event. /// </summary> /// <param name="domainEvent">The domain event.</param> private void PlayEvent(HoleAddedToMeasuredCourseEvent domainEvent) { // Find the measured course MeasuredCourse measuredCourse = this.MeasuredCourses.Single(m => m.MeasuredCourseId == domainEvent.MeasuredCourseId); measuredCourse.AddHole(Hole.Create(domainEvent.HoleNumber, domainEvent.LengthInYards, domainEvent.LengthInMeters, domainEvent.Par, domainEvent.StrokeIndex)); }
public void HoleAddedToMeasuredCourseEvent_CanBeCreated_IsCreated() { HoleAddedToMeasuredCourseEvent holeAddedToMeasuredCourseEvent = HoleAddedToMeasuredCourseEvent.Create( GolfClubTestData.AggregateId, GolfClubTestData.MeasuredCourseId, GolfClubTestData.HoleNumber, GolfClubTestData.LengthInYards, GolfClubTestData.LengthInMeters, GolfClubTestData.HolePar, GolfClubTestData.HoleStrokeIndex); holeAddedToMeasuredCourseEvent.ShouldNotBeNull(); holeAddedToMeasuredCourseEvent.AggregateId.ShouldBe(GolfClubTestData.AggregateId); holeAddedToMeasuredCourseEvent.EventCreatedDateTime.ShouldNotBe(DateTime.MinValue); holeAddedToMeasuredCourseEvent.EventId.ShouldNotBe(Guid.Empty); holeAddedToMeasuredCourseEvent.MeasuredCourseId.ShouldBe(GolfClubTestData.MeasuredCourseId); holeAddedToMeasuredCourseEvent.HoleNumber.ShouldBe(GolfClubTestData.HoleNumber); holeAddedToMeasuredCourseEvent.LengthInYards.ShouldBe(GolfClubTestData.LengthInYards); holeAddedToMeasuredCourseEvent.LengthInMeters.ShouldBe(GolfClubTestData.LengthInMeters); holeAddedToMeasuredCourseEvent.Par.ShouldBe(GolfClubTestData.HolePar); holeAddedToMeasuredCourseEvent.StrokeIndex.ShouldBe(GolfClubTestData.HoleStrokeIndex); }
/// <summary> /// Adds the measured course. /// </summary> /// <param name="measuredCourse">The measured course.</param> public void AddMeasuredCourse(MeasuredCourseDataTransferObject measuredCourse) { // Apply the business rules here // Check club has been created this.CheckHasGolfClubAlreadyBeenCreated(); // Check for a duplicate measured course addition this.CheckNotDuplicateMeasuredCourse(measuredCourse); // Validate the measured course data this.ValidateMeasuredCourse(measuredCourse); // Now apply and pend the required events // First the measured course added event MeasuredCourseAddedEvent measuredCourseAddedEvent = MeasuredCourseAddedEvent.Create(this.AggregateId, measuredCourse.MeasuredCourseId, measuredCourse.Name, measuredCourse.TeeColour, measuredCourse.StandardScratchScore); this.ApplyAndPend(measuredCourseAddedEvent); // Now add an event for each hole foreach (HoleDataTransferObject holeDataTransferObject in measuredCourse.Holes) { HoleAddedToMeasuredCourseEvent holeAddedToMeasuredCourseEvent = HoleAddedToMeasuredCourseEvent.Create(this.AggregateId, measuredCourse.MeasuredCourseId, holeDataTransferObject.HoleNumber, holeDataTransferObject.LengthInYards, holeDataTransferObject.LengthInMeters, holeDataTransferObject.Par, holeDataTransferObject.StrokeIndex); this.ApplyAndPend(holeAddedToMeasuredCourseEvent); } }