Beispiel #1
0
        /// <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);
        }
Beispiel #3
0
        /// <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);
            }
        }