Esempio n. 1
0
        public async Task Save(Domain.Admin.Users.User user)
        {
            if (_context.Entry(user).State == EntityState.Detached)
            {
                await _context.Users.AddAsync(user);
            }

            await _context.SaveChangesAsync();
        }
Esempio n. 2
0
        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));
        }