protected override int ExecuteWorkImplementation() { var client = m_communicationProvider.GetAuthRegistrationApiClient(); var authUser = new Ridics.Authentication.DataContracts.User.CreateUserContract { Password = m_data.NewPassword, UserName = m_data.UserName, User = new UserContractBase { FirstName = m_data.FirstName, LastName = m_data.LastName, Email = m_data.Email, PhoneNumber = null } }; var user = client.CreateUserAsync(authUser).GetAwaiter().GetResult(); var now = DateTime.UtcNow; var dbUser = new User { ExternalId = user.Id, CreateTime = now, ExtUsername = user.UserName, ExtFirstName = user.FirstName, ExtLastName = user.LastName, Groups = null, FavoriteLabels = null, }; var singleUserGroupSubwork = new SingleUserGroupSubwork(m_userRepository, m_codeGenerator); var singleUserGroup = new SingleUserGroup { Name = singleUserGroupSubwork.GetUniqueName(), CreateTime = now, LastChange = now, User = dbUser, Users = new List <User> { dbUser }, Permissions = null, }; dbUser.Groups = new List <UserGroup> { singleUserGroup }; // RoleUserGroups are assigned on every login var userFavoriteLabelSubwork = new UserFavoriteLabelSubwork(m_userRepository); var defaultFavoriteLabel = userFavoriteLabelSubwork.GetNewDefaultFavoriteLabel(dbUser); dbUser.FavoriteLabels = new List <FavoriteLabel> { defaultFavoriteLabel }; var userId = (int)m_userRepository.Create(dbUser); return(userId); }
protected override int ExecuteWorkImplementation() { var userFavoriteLabelSubwork = new UserFavoriteLabelSubwork(m_userRepository); IList <RoleUserGroup> dbRoleUserGroups = null; var now = DateTime.UtcNow; if (m_roles != null) { var userGroupSubwork = new UserGroupSubwork(m_userRepository); dbRoleUserGroups = userGroupSubwork.UpdateAndGetUserGroups(m_roles); } var user = m_userRepository.GetUserByExternalId(m_userExternalId); if (user != null) { // Update user data if (m_userInfo.Username != null) // Username is not always returned { user.ExtUsername = m_userInfo.Username; } user.ExtFirstName = m_userInfo.FirstName; user.ExtLastName = m_userInfo.LastName; // Update RoleUserGroups if (dbRoleUserGroups != null) { // User already exists, so only update groups var originalGroups = user.Groups; var nonRoleGroups = originalGroups.Where(x => !(x is RoleUserGroup)); var newGroups = new List <UserGroup>(dbRoleUserGroups); newGroups.AddRange(nonRoleGroups); user.Groups = newGroups; } // Add SingleUserGroup if (user.Groups.OfType <SingleUserGroup>().Any() == false) { user.Groups.Add(CreateSingleUserGroupObject(user, now)); } m_userRepository.Update(user); userFavoriteLabelSubwork.CreateOrUpdateDefaultFavoriteLabel(user.Id); return(user.Id); } var dbUser = new User { ExternalId = m_userExternalId, CreateTime = now, Groups = dbRoleUserGroups?.Cast <UserGroup>().ToList() ?? new List <UserGroup>(), ExtUsername = m_userInfo.Username, ExtFirstName = m_userInfo.FirstName, ExtLastName = m_userInfo.LastName, FavoriteLabels = null, }; var newSingleUserGroup = CreateSingleUserGroupObject(dbUser, now); dbUser.Groups.Add(newSingleUserGroup); var defaultFavoriteLabel = userFavoriteLabelSubwork.GetNewDefaultFavoriteLabel(dbUser); dbUser.FavoriteLabels = new List <FavoriteLabel> { defaultFavoriteLabel }; var userId = (int)m_userRepository.Create(dbUser); return(userId); }