public JsonResult Update(UpdateParticipant command)
        {
            Domain.Dispatcher.SendCommand(command);

            return Json(command);
        }
        public JsonResult Update(UpdateParticipant command)
        {
            Domain.Dispatcher.SendCommand(command);

            return(Json(command));
        }
        public IEnumerable Handle(Func <Guid, ParticipantAggregate> al, UpdateParticipant command)
        {
            var agg = al(command.Id);

            if (agg.Name != command.Name)
            {
                yield return new ParticipantRenamed
                       {
                           Id   = command.Id,
                           Name = command.Name,
                       }
            }
            ;

            if (agg.Gender != command.Gender)
            {
                yield return new ParticipantGenderReassigned
                       {
                           Id     = command.Id,
                           Gender = command.Gender,
                       }
            }
            ;

            if (agg.IsDelegate != command.IsDelegate && command.IsDelegate)
            {
                yield return new ParticipantDelegateStatusGranted
                       {
                           Id = command.Id
                       }
            }
            ;

            if (agg.IsDelegate != command.IsDelegate && !command.IsDelegate)
            {
                yield return new ParticipantDelegateStatusRevoked
                       {
                           Id = command.Id
                       }
            }
            ;

            if (agg.IsManager != command.IsManager && command.IsManager)
            {
                yield return new ParticipantManagerStatusGranted
                       {
                           Id = command.Id
                       }
            }
            ;

            if (agg.IsManager != command.IsManager && !command.IsManager)
            {
                yield return new ParticipantManagerStatusRevoked
                       {
                           Id = command.Id
                       }
            }
            ;

            if (agg.YearsQualifying != command.YearsQualifying)
            {
                yield return new ParticipantYearsQualifyingChanged
                       {
                           Id = command.Id,
                           YearsQualifying = command.YearsQualifying,
                       }
            }
            ;

            if (agg.ShirtSize != command.ShirtSize)
            {
                yield return new ParticipantShirtSizeChanged
                       {
                           Id        = command.Id,
                           ShirtSize = command.ShirtSize,
                       }
            }
            ;

            if (agg.LeaguePinfall != command.LeaguePinfall ||
                agg.LeagueGames != command.LeagueGames ||
                agg.TournamentPinfall != command.TournamentPinfall ||
                agg.TournamentGames != command.TournamentGames)
            {
                yield return new ParticipantAverageChanged
                       {
                           Id                = command.Id,
                           LeaguePinfall     = command.LeaguePinfall,
                           LeagueGames       = command.LeagueGames,
                           TournamentPinfall = command.TournamentPinfall,
                           TournamentGames   = command.TournamentGames,
                           Average           = (command.LeagueGames + command.TournamentGames) > 0
                        ? (command.LeaguePinfall + command.TournamentPinfall) / (command.LeagueGames + command.TournamentGames)
                        : 0
                       }
            }
            ;

            if (agg.Package.ManitobaDinner != command.Package.ManitobaDinner ||
                agg.Package.ManitobaDance != command.Package.ManitobaDance ||
                agg.Package.FinalBanquet != command.Package.FinalBanquet ||
                agg.Package.Transportation != command.Package.Transportation ||
                agg.Package.Option1 != command.Package.Option1 ||
                agg.Package.Option2 != command.Package.Option2 ||
                agg.Package.Option3 != command.Package.Option3 ||
                agg.Package.Option4 != command.Package.Option4)
            {
                yield return new ParticipantGuestPackageChanged
                       {
                           Id             = command.Id,
                           ManitobaDinner = command.Package.ManitobaDinner,
                           ManitobaDance  = command.Package.ManitobaDance,
                           FinalBanquet   = command.Package.FinalBanquet,
                           Transportation = command.Package.Transportation,
                           Option1        = command.Package.Option1,
                           Option2        = command.Package.Option2,
                           Option3        = command.Package.Option3,
                           Option4        = command.Package.Option4,
                       }
            }
            ;

            if (command.Birthday.HasValue && agg.Birthday != command.Birthday)
            {
                yield return new ParticipantBirthdayChanged
                       {
                           Id       = command.Id,
                           Birthday = command.Birthday.Value,
                       }
            }
            ;
        }