public async Task Save(Domain.Admin.Users.User user) { if (_context.Entry(user).State == EntityState.Detached) { await _context.Users.AddAsync(user); } await _context.SaveChangesAsync(); }
public async Task <IActionResult> CreateUser( CancellationToken cancellationToken, [FromBody] CreateUserBinding binding, [FromServices] IUserRepository userRepository, [FromServices] IPasswordHasher passwordHasher) { var user = await userRepository.Get(binding.Id, cancellationToken); if (user != null) { if (!user.Name.Equals(binding.Name) || !user.Email.Equals(binding.Email)) { throw new ApiException(HttpStatusCode.Conflict, ErrorCode.UserAlreadyExists, "User already exists with other parameters"); } } user = await userRepository.GetByName(binding.Name, cancellationToken); if (user != null) { throw new ApiException(HttpStatusCode.Conflict, ErrorCode.NameAlreadyExists, "Name already exists"); } user = await userRepository.GetByEmail(binding.Email, cancellationToken); if (user != null) { throw new ApiException(HttpStatusCode.Conflict, ErrorCode.EmailAlreadyExists, "Email already exists"); } var passwordHash = passwordHasher.HashPassword(binding.Password); user = new Domain.Admin.Users.User(binding.Id, binding.Name, binding.Email, passwordHash, binding.FirstName, binding.LastName, Enum.Parse <UserRole>(binding.Role.ToString())); await userRepository.Save(user); return(CreatedAtRoute("GetUserAdminRoute", new { id = user.Id }, null)); }