public async Task AddUser(User userToAdd) { if (userToAdd == null || userToAdd.Username.IsNullOrEmptyExt()) { throw new ArgumentNullException(nameof(userToAdd)); } var exist = (await _context.Users.FirstOrDefaultAsync(a => a.Username == userToAdd.Username).ConfigureAwait(false)) != null; if (exist) { throw new ApplicationException($"Username {userToAdd.Username} already exist."); } var resp = await _userRoleRepository.CanAssignRoles(userToAdd.UserRoles.Select(a => a.RoleName).ToList()).ConfigureAwait(false); if (!resp.Success) { throw new ApplicationException(resp.Message); } userToAdd.CreatedAt = DateTime.UtcNow; userToAdd.CreatedBy = _apiIdentity.GetUserName(); _context.Users.Add(userToAdd); await _userRoleRepository.AddRolesAndClaims(userToAdd).ConfigureAwait(false); await SaveChangesAsync(); ResetClaimsCache(userToAdd.Username); }