public async Task DoSetupStep( Func <string, bool, Task> output, Func <string, bool> appNeedsUpgrade, Func <string, Version> schemaVersionLookup, Func <string, Version> codeVersionLookup ) { bool needsUpgrade = appNeedsUpgrade("cloudscribe-core"); if (needsUpgrade) { await output("cloudscribe-core needs schema upgrade", false); return; } Version codeVersion = codeVersionLookup("cloudscribe-core"); Version schemaVersion = schemaVersionLookup("cloudscribe-core"); if (codeVersion == null) { await output("cloudscribe-core code version not found", false); } if (schemaVersion == null) { await output("cloudscribe-core schema version not found", false); } if ((codeVersion != null) && (schemaVersion != null)) { if (codeVersion == schemaVersion) { var message = string.Format( "cloudscribe-core schema is up to date at version: {0}", codeVersion ); await output(message, false); } else { var message = string.Format( "cloudscribe-core code version: {0} is out of sync with schema version: {1}", codeVersion, schemaVersion ); await output(message, false); } } int countryCount = await geoDataManager.GetCountryCount(); if (countryCount == 0) { await output("creating initial country data", true); List <GeoCountry> countries = InitialData.BuildCountryList(); foreach (GeoCountry c in countries) { await geoDataManager.Add(c); } await output("creating initial state/region data", true); List <GeoZone> states = InitialData.BuildStateList(); foreach (GeoZone s in states) { await geoDataManager.Add(s); } } List <ICurrency> dbCurrencies = await geoDataManager.GetAllCurrencies(); if (dbCurrencies.Count == 0) { await output("creating initial currency data", true); List <Currency> currencies = InitialData.BuildCurrencyList(); foreach (Currency c in currencies) { await geoDataManager.Add(c); } } //int languageCount = await geoDataManager.GetLanguageCount(); //if(languageCount == 0) //{ // await output("creating initial language data", true); // List<Language> langs = InitialData.BuildLanguageList(); // foreach(Language l in langs) // { // await geoDataManager.Add(l); // } //} int existingSiteCount = await siteManager.ExistingSiteCount(); await output( string.Format( "ExistingSiteCount {0}", //SetupResources.ExistingSiteCountMessage, existingSiteCount.ToString()), false); if (existingSiteCount == 0) { await output("CreatingSite", true); SiteSettings newSite = await siteManager.CreateNewSite(true); await output("CreatingRolesAndAdminUser", true); await siteManager.CreateRequiredRolesAndAdminUser(newSite); existingSiteCount = await siteManager.ExistingSiteCount(); if (existingSiteCount > 0) { await output(BuildHomeLink(), false); } } else { // check here if count of users is 0 // if something went wrong with creating admin user // setup page should try to correct it on subsequent runs // ie create an admin user if no users exist if (contextAccessor.HttpContext.Request.Host.HasValue) { var site = await siteManager.Fetch(contextAccessor.HttpContext.Request.Host.Value); if (site != null) { int roleCount = await siteManager.GetRoleCount(site.Id); if (roleCount == 0) { await output("CreatingRoles", true); await siteManager.EnsureRequiredRoles(site); } int userCount = await siteManager.GetUserCount(site.Id); if (userCount == 0) { await output("CreatingAdminUser", true); await siteManager.CreateAdminUser(site); } } } await output(BuildHomeLink(), false); } }