public HttpResponseMessage Post([FromBody] RegisterUserInputModel model) { if (!ModelState.IsValid) { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Provided data is invalid"); } var isValidEmail = Regex.IsMatch(model.Email, @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$", RegexOptions.IgnoreCase); if (!isValidEmail) { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Provided email format is invalid"); } var registerUser = new RegisterUser(model.Name, model.Email); try { _bus.Send(registerUser); } catch (EmailAlreadyRegisteredException ex) { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Email already registered for a user"); } var response = Request.CreateResponse(HttpStatusCode.Created); response.Headers.Location = new Uri(Request.RequestUri, model.Email); return response; }
public void Handle(RegisterUser registerUser) { var user = _repository.GetById(registerUser.Email); if (user != null) { throw new EmailAlreadyRegisteredException(registerUser.Email); } var name = new Name(registerUser.Name); var emailAddress = new EmailAddress(registerUser.Email); user = new User(name, emailAddress); _repository.Save(user); }