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); }