Exemple #1
0
        public int Handle(ICommand <int> command)
        {
            var insertUserCmd = command as InsertUserCommand;

            var errorList = new Dictionary <string, string>();

            //Validation - put this here to avoid having code check ModelValidationResult in module. Just a personal preference
            var validator = new UserValidator();

            validator.ValidateAndThrow(insertUserCmd.User);

            //Basic business logic
            var existingPerson = DB.Data.FirstOrDefault(x => x.EmailAddress == insertUserCmd.User.EmailAddress);

            if (existingPerson != null)
            {
                errorList.Add("EmailAddress", "User already exists");
            }

            if (errorList.Any())
            {
                var validationErrors = new List <ValidationFailure>();
                foreach (var item in errorList)
                {
                    validationErrors.Add(new ValidationFailure(item.Key, item.Value));
                }
                throw new ValidationException(validationErrors);
            }

            //Other business logic that might do checks and return errors

            var newid = DB.Data.Last().Id + 1;

            insertUserCmd.User.Id = newid;
            DB.Data.Add(insertUserCmd.User);

            return(newid);
        }
        public int Handle(ICommand <int> command)
        {
            var updateUserCmd = command as UpdateUserCommand;

            //Validation
            var validator = new UserValidator();

            validator.ValidateAndThrow(updateUserCmd.User);

            var currentUser = DB.Data.FirstOrDefault(x => x.Id == updateUserCmd.User.Id);

            //Idempotent!!
            if (currentUser == null)
            {
                throw new InvalidOperationException("User not found");
            }

            currentUser.FirstName    = updateUserCmd.User.FirstName;
            currentUser.LastName     = updateUserCmd.User.LastName;
            currentUser.EmailAddress = updateUserCmd.User.EmailAddress;

            //Rows affected
            return(1);
        }