/// <summary> /// Register user. /// </summary> /// <param name="request"> /// The request. /// </param> /// <returns> /// Register user response. /// </returns> public SignUpResponse RegisterUser(SignUpRequest request) { var response = new SignUpResponse(); var user = new User { Email = request.Email, Password = request.Password, ActivationCode = Guid.NewGuid(), Profile = new Profile { FirstName = request.FirstName, LastName = request.LastName, NotifyOnOrderStatusChanged = true, NotifyOnPackageStatusChanged = true } }; try { ////ThrowExceptionIfUserIsInvalid(user); var createdUser = this.userRepository.CreateUser(user); var profile = this.profileRepository.FindOrAddProfile(user.Profile); this.userRepository.SaveChanges(); this.profileRepository.SaveChanges(); var role = this.roleRepository.GetRoleByName(request.RoleName); if (role == null) { this.roleRepository.AddRole(new Role { Name = request.RoleName, Description = string.Empty }); this.roleRepository.SaveChanges(); role = this.roleRepository.GetRoleByName(request.RoleName); } createdUser.Roles.Add(role); this.userRepository.SaveChanges(); this.emailService.SendMail( EmailResources.EmailActivationFrom, request.Email, EmailResources.EmailActivationSubject, string.Format(EmailResources.EmailActivationBody, createdUser.Id, createdUser.ActivationCode, profile.GetFullName())); } catch (InvalidUserException ex) { response.MessageType = MessageType.Error; response.ErrorCode = ErrorCode.UserEmailExists.ToString(); this.Logger.Error(ErrorCodeResources.UserEmailExists, ex); } return response; }
/// <summary> /// Sign up shopper. /// </summary> /// <param name="request"> /// The request. /// </param> /// <returns> /// Sign up shopper response. /// </returns> public SignUpResponse SignUpShopper(SignUpRequest request) { var role = new Role { Name = StandardRole.Shopper.ToString(), Description = string.Empty }; var user = new User { Email = request.Email, Password = PasswordHash.CreateHash(request.Password), Profile = new Profile { FirstName = request.FirstName, LastName = request.LastName, NotifyOnOrderStatusChanged = true, NotifyOnPackageStatusChanged = true }, ActivationCode = Guid.NewGuid(), Activated = false }; var response = new SignUpResponse { BrokenRules = user.Profile.GetBrokenRules().ToList() }; response.BrokenRules.AddRange(role.GetBrokenRules()); response.BrokenRules.AddRange(user.GetBrokenRules()); if (response.BrokenRules.Any()) { response.MessageType = MessageType.Warning; response.Message = CommonResources.SignUpErrorMessage; return response; } var userExists = this.membershipRepository.GetUser(request.Email); if (userExists != null) { response.MessageType = MessageType.Warning; response.Message = CommonResources.SignUpErrorMessage; response.BrokenRules.Add(UserBusinessRules.EmailExists); return response; } try { var result = this.membershipRepository.CreateUser(user, new List<Role> { role }); this.emailService.SendMail( EmailResources.EmailActivationFrom, result.Email, EmailResources.EmailActivationSubject, string.Format(EmailResources.EmailActivationBody, this.ApplicationUrl, result.Id, result.ActivationCode, user.Profile.GetFullName())); return result.ConvertToRegisterUserResponse(); } catch (Exception e) { response.MessageType = MessageType.Error; response.Message = CommonResources.SignUpErrorMessage; this.Logger.Error(CommonResources.SignUpErrorMessage, e); return response; } }