diff --git a/eShopOnContainers.sln b/eShopOnContainers.sln
index ae44be741..07c183057 100644
--- a/eShopOnContainers.sln
+++ b/eShopOnContainers.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-VisualStudioVersion = 15.0.26730.8
+VisualStudioVersion = 15.0.26730.12
MinimumVisualStudioVersion = 10.0.40219.1
Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{FEA0C318-FFED-4D39-8781-265718CA43DD}"
ProjectSection(ProjectDependencies) = postProject
@@ -60,7 +60,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebSPA", "src\Web\WebSPA\We
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mobile Apps", "Mobile Apps", "{B7B1D395-4E06-4036-BE86-C216756B9367}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.UnitTests", "src\Mobile\eShopOnContainers\eShopOnContainers.UnitTests\eShopOnContainers.UnitTests.csproj", "{F7B6A162-BC4D-4924-B16A-713F9B0344E7}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "eShopOnContainers.UnitTests", "src\Mobile\eShopOnContainers\eShopOnContainers.UnitTests\eShopOnContainers.UnitTests.csproj", "{F7B6A162-BC4D-4924-B16A-713F9B0344E7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.TestRunner.Droid", "src\Mobile\eShopOnContainers\eShopOnContainers.TestRunner.Droid\eShopOnContainers.TestRunner.Droid.csproj", "{A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}"
EndProject
@@ -76,7 +76,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IntegrationTests", "test\Se
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.UITests", "src\Mobile\eShopOnContainers\eShopOnContainers.UITests\eShopOnContainers.UITests.csproj", "{E3B18084-842C-4B80-8E4A-A7E588EC3137}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Core", "src\Mobile\eShopOnContainers\eShopOnContainers.Core\eShopOnContainers.Core.csproj", "{67F9D3A8-F71E-4428-913F-C37AE82CDB24}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "eShopOnContainers.Core", "src\Mobile\eShopOnContainers\eShopOnContainers.Core\eShopOnContainers.Core.csproj", "{67F9D3A8-F71E-4428-913F-C37AE82CDB24}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTest", "test\Services\UnitTest\UnitTest.csproj", "{7796F5D8-31FC-45A4-B673-19DE5BA194CF}"
EndProject
@@ -132,6 +132,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Payment", "Payment", "{D5D3
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Payment.API", "src\Services\Payment\Payment.API\Payment.API.csproj", "{2A795FEA-2EB7-45F5-9B30-35E0810CB238}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebHost", "WebHost", "{3E51A82A-5DE1-482E-BA46-F4FF3138B41A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebHost.Customization", "src\BuildingBlocks\WebHostCustomization\WebHost.Customization\WebHost.Customization.csproj", "{BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Ad-Hoc|Any CPU = Ad-Hoc|Any CPU
@@ -1877,6 +1881,54 @@ Global
{2A795FEA-2EB7-45F5-9B30-35E0810CB238}.Release|x64.Build.0 = Release|Any CPU
{2A795FEA-2EB7-45F5-9B30-35E0810CB238}.Release|x86.ActiveCfg = Release|Any CPU
{2A795FEA-2EB7-45F5-9B30-35E0810CB238}.Release|x86.Build.0 = Release|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.AppStore|x64.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.AppStore|x86.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Debug|ARM.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Debug|x64.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Debug|x86.Build.0 = Debug|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Release|ARM.ActiveCfg = Release|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Release|ARM.Build.0 = Release|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Release|iPhone.Build.0 = Release|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Release|x64.ActiveCfg = Release|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Release|x64.Build.0 = Release|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Release|x86.ActiveCfg = Release|Any CPU
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1937,5 +1989,10 @@ Global
{6C6A69FE-A484-4E75-AFEC-827EA354AF46} = {0BD0DB92-2D98-44D9-9AC0-C59186D59B0B}
{D5D3841D-F282-4E60-B9CB-267A1BF2D893} = {91CF7717-08AB-4E65-B10E-0B426F01E2E8}
{2A795FEA-2EB7-45F5-9B30-35E0810CB238} = {D5D3841D-F282-4E60-B9CB-267A1BF2D893}
+ {3E51A82A-5DE1-482E-BA46-F4FF3138B41A} = {1EF3AC0F-F27C-46DD-AC53-D762D2C11C45}
+ {BF6AF4F9-684A-4EB3-8CF2-230AA2A03F98} = {3E51A82A-5DE1-482E-BA46-F4FF3138B41A}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {A6439048-F270-4A9E-A350-63C7BE2BB322}
EndGlobalSection
EndGlobal
diff --git a/src/BuildingBlocks/WebHostCustomization/WebHost.Customization/WebHost.Customization.csproj b/src/BuildingBlocks/WebHostCustomization/WebHost.Customization/WebHost.Customization.csproj
new file mode 100644
index 000000000..d9ddd56e9
--- /dev/null
+++ b/src/BuildingBlocks/WebHostCustomization/WebHost.Customization/WebHost.Customization.csproj
@@ -0,0 +1,11 @@
+
+
+
+ netcoreapp2.0
+
+
+
+
+
+
+
diff --git a/src/BuildingBlocks/WebHostCustomization/WebHost.Customization/WebHostExtensions.cs b/src/BuildingBlocks/WebHostCustomization/WebHost.Customization/WebHostExtensions.cs
new file mode 100644
index 000000000..ecaceeab0
--- /dev/null
+++ b/src/BuildingBlocks/WebHostCustomization/WebHost.Customization/WebHostExtensions.cs
@@ -0,0 +1,40 @@
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using System;
+
+namespace Microsoft.AspNetCore.Hosting
+{
+ public static class IWebHostExtensions
+ {
+ public static IWebHost MigrateDbContext(this IWebHost webHost, Action seeder) where TContext : DbContext
+ {
+ using (var scope = webHost.Services.CreateScope())
+ {
+ var services = scope.ServiceProvider;
+
+ var logger = services.GetRequiredService>();
+
+ var context = services.GetService();
+
+ try
+ {
+ logger.LogInformation($"Migrating database associated with context {typeof(TContext).Name}");
+
+ context.Database
+ .Migrate();
+
+ seeder(context,services);
+
+ logger.LogInformation($"Migrated database associated with context {typeof(TContext).Name}");
+ }
+ catch (Exception ex)
+ {
+ logger.LogError(ex, $"An error occurred while migrating the database used on context {typeof(TContext).Name}");
+ }
+ }
+
+ return webHost;
+ }
+ }
+}
diff --git a/src/Services/Catalog/Catalog.API/Catalog.API.csproj b/src/Services/Catalog/Catalog.API/Catalog.API.csproj
index de280179f..0d8c77efd 100644
--- a/src/Services/Catalog/Catalog.API/Catalog.API.csproj
+++ b/src/Services/Catalog/Catalog.API/Catalog.API.csproj
@@ -53,6 +53,7 @@
+
diff --git a/src/Services/Catalog/Catalog.API/Infrastructure/CatalogContextSeed.cs b/src/Services/Catalog/Catalog.API/Infrastructure/CatalogContextSeed.cs
index 6f71bd6cf..42ac7b740 100644
--- a/src/Services/Catalog/Catalog.API/Infrastructure/CatalogContextSeed.cs
+++ b/src/Services/Catalog/Catalog.API/Infrastructure/CatalogContextSeed.cs
@@ -1,15 +1,14 @@
namespace Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure
{
- using EntityFrameworkCore;
using Extensions.Logging;
using global::Catalog.API.Extensions;
- using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
- using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Model;
+ using Polly;
using System;
using System.Collections.Generic;
+ using System.Data.SqlClient;
using System.Globalization;
using System.IO;
using System.IO.Compression;
@@ -19,56 +18,48 @@
public class CatalogContextSeed
{
- public static async Task SeedAsync(IApplicationBuilder applicationBuilder, IHostingEnvironment env, ILoggerFactory loggerFactory, int? retry = 0)
+ public async Task SeedAsync(CatalogContext context,IHostingEnvironment env,IOptions settings,ILogger logger)
{
- var log = loggerFactory.CreateLogger("catalog seed");
+ var policy = CreatePolicy(logger, nameof(CatalogContextSeed));
- var context = (CatalogContext)applicationBuilder
- .ApplicationServices.GetService(typeof(CatalogContext));
-
- context.Database.Migrate();
-
- var settings = (CatalogSettings)applicationBuilder
- .ApplicationServices.GetRequiredService>().Value;
-
- var useCustomizationData = settings.UseCustomizationData;
- var contentRootPath = env.ContentRootPath;
- var picturePath = env.WebRootPath;
-
- if (!context.CatalogBrands.Any())
+ await policy.ExecuteAsync(async () =>
{
- context.CatalogBrands.AddRange(useCustomizationData
- ? GetCatalogBrandsFromFile(contentRootPath, log)
- : GetPreconfiguredCatalogBrands()
- );
+ var useCustomizationData = settings.Value.UseCustomizationData;
+ var contentRootPath = env.ContentRootPath;
+ var picturePath = env.WebRootPath;
- await context.SaveChangesAsync();
- }
+ if (!context.CatalogBrands.Any())
+ {
+ context.CatalogBrands.AddRange(useCustomizationData
+ ? GetCatalogBrandsFromFile(contentRootPath, logger)
+ : GetPreconfiguredCatalogBrands());
- if (!context.CatalogTypes.Any())
- {
- context.CatalogTypes.AddRange(useCustomizationData
- ? GetCatalogTypesFromFile(contentRootPath, log)
- : GetPreconfiguredCatalogTypes()
- );
+ await context.SaveChangesAsync();
+ }
- await context.SaveChangesAsync();
- }
+ if (!context.CatalogTypes.Any())
+ {
+ context.CatalogTypes.AddRange(useCustomizationData
+ ? GetCatalogTypesFromFile(contentRootPath, logger)
+ : GetPreconfiguredCatalogTypes());
- if (!context.CatalogItems.Any())
- {
- context.CatalogItems.AddRange(useCustomizationData
- ? GetCatalogItemsFromFile(contentRootPath, context, log)
- : GetPreconfiguredItems()
- );
+ await context.SaveChangesAsync();
+ }
- await context.SaveChangesAsync();
+ if (!context.CatalogItems.Any())
+ {
+ context.CatalogItems.AddRange(useCustomizationData
+ ? GetCatalogItemsFromFile(contentRootPath, context, logger)
+ : GetPreconfiguredItems());
- GetCatalogItemPictures(contentRootPath, picturePath);
- }
+ await context.SaveChangesAsync();
+
+ GetCatalogItemPictures(contentRootPath, picturePath);
+ }
+ });
}
- static IEnumerable GetCatalogBrandsFromFile(string contentRootPath, ILogger log)
+ private IEnumerable GetCatalogBrandsFromFile(string contentRootPath, ILogger logger)
{
string csvFileCatalogBrands = Path.Combine(contentRootPath, "Setup", "CatalogBrands.csv");
@@ -85,18 +76,18 @@
}
catch (Exception ex)
{
- log.LogError(ex.Message);
+ logger.LogError(ex.Message);
return GetPreconfiguredCatalogBrands();
}
return File.ReadAllLines(csvFileCatalogBrands)
.Skip(1) // skip header row
.SelectTry(x => CreateCatalogBrand(x))
- .OnCaughtException(ex => { log.LogError(ex.Message); return null; })
+ .OnCaughtException(ex => { logger.LogError(ex.Message); return null; })
.Where(x => x != null);
}
- static CatalogBrand CreateCatalogBrand(string brand)
+ private CatalogBrand CreateCatalogBrand(string brand)
{
brand = brand.Trim('"').Trim();
@@ -111,7 +102,7 @@
};
}
- static IEnumerable GetPreconfiguredCatalogBrands()
+ private IEnumerable GetPreconfiguredCatalogBrands()
{
return new List()
{
@@ -123,7 +114,7 @@
};
}
- static IEnumerable GetCatalogTypesFromFile(string contentRootPath, ILogger log)
+ private IEnumerable GetCatalogTypesFromFile(string contentRootPath, ILogger logger)
{
string csvFileCatalogTypes = Path.Combine(contentRootPath, "Setup", "CatalogTypes.csv");
@@ -140,18 +131,18 @@
}
catch (Exception ex)
{
- log.LogError(ex.Message);
+ logger.LogError(ex.Message);
return GetPreconfiguredCatalogTypes();
}
return File.ReadAllLines(csvFileCatalogTypes)
.Skip(1) // skip header row
.SelectTry(x => CreateCatalogType(x))
- .OnCaughtException(ex => { log.LogError(ex.Message); return null; })
+ .OnCaughtException(ex => { logger.LogError(ex.Message); return null; })
.Where(x => x != null);
}
- static CatalogType CreateCatalogType(string type)
+ private CatalogType CreateCatalogType(string type)
{
type = type.Trim('"').Trim();
@@ -166,7 +157,7 @@
};
}
- static IEnumerable GetPreconfiguredCatalogTypes()
+ private IEnumerable GetPreconfiguredCatalogTypes()
{
return new List()
{
@@ -177,7 +168,7 @@
};
}
- static IEnumerable GetCatalogItemsFromFile(string contentRootPath, CatalogContext context, ILogger log)
+ private IEnumerable GetCatalogItemsFromFile(string contentRootPath, CatalogContext context, ILogger logger)
{
string csvFileCatalogItems = Path.Combine(contentRootPath, "Setup", "CatalogItems.csv");
@@ -195,7 +186,7 @@
}
catch (Exception ex)
{
- log.LogError(ex.Message);
+ logger.LogError(ex.Message);
return GetPreconfiguredItems();
}
@@ -206,11 +197,11 @@
.Skip(1) // skip header row
.Select(row => Regex.Split(row, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)") )
.SelectTry(column => CreateCatalogItem(column, csvheaders, catalogTypeIdLookup, catalogBrandIdLookup))
- .OnCaughtException(ex => { log.LogError(ex.Message); return null; })
+ .OnCaughtException(ex => { logger.LogError(ex.Message); return null; })
.Where(x => x != null);
}
- static CatalogItem CreateCatalogItem(string[] column, string[] headers, Dictionary catalogTypeIdLookup, Dictionary catalogBrandIdLookup)
+ private CatalogItem CreateCatalogItem(string[] column, string[] headers, Dictionary catalogTypeIdLookup, Dictionary catalogBrandIdLookup)
{
if (column.Count() != headers.Count())
{
@@ -316,7 +307,7 @@
return catalogItem;
}
- static IEnumerable GetPreconfiguredItems()
+ private IEnumerable GetPreconfiguredItems()
{
return new List()
{
@@ -335,7 +326,7 @@
};
}
- static string[] GetHeaders(string csvfile, string[] requiredHeaders, string[] optionalHeaders = null)
+ private string[] GetHeaders(string csvfile, string[] requiredHeaders, string[] optionalHeaders = null)
{
string[] csvheaders = File.ReadLines(csvfile).First().ToLowerInvariant().Split(',');
@@ -363,7 +354,7 @@
return csvheaders;
}
- static void GetCatalogItemPictures(string contentRootPath, string picturePath)
+ private void GetCatalogItemPictures(string contentRootPath, string picturePath)
{
DirectoryInfo directory = new DirectoryInfo(picturePath);
foreach (FileInfo file in directory.GetFiles())
@@ -374,7 +365,18 @@
string zipFileCatalogItemPictures = Path.Combine(contentRootPath, "Setup", "CatalogItems.zip");
ZipFile.ExtractToDirectory(zipFileCatalogItemPictures, picturePath);
}
- }
-
+ private Policy CreatePolicy( ILogger logger, string prefix,int retries = 3)
+ {
+ return Policy.Handle().
+ WaitAndRetryAsync(
+ retryCount: retries,
+ sleepDurationProvider: retry => TimeSpan.FromSeconds(5),
+ onRetry: (exception, timeSpan, retry, ctx) =>
+ {
+ logger.LogTrace($"[{prefix}] Exception {exception.GetType().Name} with message ${exception.Message} detected on attempt {retry} of {retries}");
+ }
+ );
+ }
+ }
}
diff --git a/src/Services/Catalog/Catalog.API/Program.cs b/src/Services/Catalog/Catalog.API/Program.cs
index 2de3600b9..1eeeeb5ec 100644
--- a/src/Services/Catalog/Catalog.API/Program.cs
+++ b/src/Services/Catalog/Catalog.API/Program.cs
@@ -1,15 +1,31 @@
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
+using Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF;
+using Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure;
+using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
using System.IO;
-
namespace Microsoft.eShopOnContainers.Services.Catalog.API
{
public class Program
{
public static void Main(string[] args)
{
- BuildWebHost(args).Run();
+ BuildWebHost(args)
+ .MigrateDbContext((context,services)=>
+ {
+ var env = services.GetService();
+ var settings = services.GetService>();
+ var logger = services.GetService>();
+
+ new CatalogContextSeed()
+ .SeedAsync(context,env,settings,logger)
+ .Wait();
+
+ })
+ .MigrateDbContext((_,__)=> { })
+ .Run();
}
public static IWebHost BuildWebHost(string[] args) =>
diff --git a/src/Services/Catalog/Catalog.API/Startup.cs b/src/Services/Catalog/Catalog.API/Startup.cs
index 21b9ae1c8..8bfa347d2 100644
--- a/src/Services/Catalog/Catalog.API/Startup.cs
+++ b/src/Services/Catalog/Catalog.API/Startup.cs
@@ -9,7 +9,6 @@
using Microsoft.Azure.ServiceBus;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
- using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus;
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions;
using Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ;
@@ -24,15 +23,10 @@
using Microsoft.Extensions.HealthChecks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
- using Microsoft.WindowsAzure.Storage;
- using Microsoft.WindowsAzure.Storage.Auth;
- using Polly;
using RabbitMQ.Client;
using System;
using System.Data.Common;
- using System.Data.SqlClient;
using System.Reflection;
- using System.Threading.Tasks;
public class Startup
{
@@ -85,6 +79,13 @@
//Check Client vs. Server evaluation: https://docs.microsoft.com/en-us/ef/core/querying/client-eval
});
+ services.AddDbContext(options =>
+ {
+ options.UseSqlServer(Configuration["ConnectionString"], opts =>
+ opts.MigrationsAssembly("Catalog.API"));
+ });
+
+
services.Configure(Configuration);
// Add framework services.
@@ -184,43 +185,7 @@
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});
- var context = (CatalogContext)app
- .ApplicationServices.GetService(typeof(CatalogContext));
-
- WaitForSqlAvailabilityAsync(context, loggerFactory, app, env).Wait();
-
ConfigureEventBus(app);
-
- var integrationEventLogContext = new IntegrationEventLogContext(
- new DbContextOptionsBuilder()
- .UseSqlServer(Configuration["ConnectionString"], b => b.MigrationsAssembly("Catalog.API"))
- .Options);
-
- integrationEventLogContext.Database.Migrate();
- }
-
- private async Task WaitForSqlAvailabilityAsync(CatalogContext ctx, ILoggerFactory loggerFactory, IApplicationBuilder app, IHostingEnvironment env, int retries = 0)
- {
- var logger = loggerFactory.CreateLogger(nameof(Startup));
- var policy = CreatePolicy(retries, logger, nameof(WaitForSqlAvailabilityAsync));
- await policy.ExecuteAsync(async () =>
- {
- await CatalogContextSeed.SeedAsync(app, env, loggerFactory);
- });
-
- }
-
- private Policy CreatePolicy(int retries, ILogger logger, string prefix)
- {
- return Policy.Handle().
- WaitAndRetryAsync(
- retryCount: retries,
- sleepDurationProvider: retry => TimeSpan.FromSeconds(5),
- onRetry: (exception, timeSpan, retry, ctx) =>
- {
- logger.LogTrace($"[{prefix}] Exception {exception.GetType().Name} with message ${exception.Message} detected on attempt {retry} of {retries}");
- }
- );
}
private void RegisterEventBus(IServiceCollection services)
diff --git a/src/Services/Identity/Identity.API/AppSettings.cs b/src/Services/Identity/Identity.API/AppSettings.cs
index 78d848d41..1f45763fe 100644
--- a/src/Services/Identity/Identity.API/AppSettings.cs
+++ b/src/Services/Identity/Identity.API/AppSettings.cs
@@ -1,13 +1,9 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace eShopOnContainers.Identity
+namespace Microsoft.eShopOnContainers.Services.Identity.API
{
public class AppSettings
{
public string MvcClient { get; set; }
+
public bool UseCustomizationData { get; set; }
}
}
diff --git a/src/Services/Identity/Identity.API/Certificate/Certificate.cs b/src/Services/Identity/Identity.API/Certificate/Certificate.cs
index f779017fe..d20726d12 100644
--- a/src/Services/Identity/Identity.API/Certificate/Certificate.cs
+++ b/src/Services/Identity/Identity.API/Certificate/Certificate.cs
@@ -1,11 +1,8 @@
-// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
-
-using System.IO;
+using System.IO;
using System.Reflection;
using System.Security.Cryptography.X509Certificates;
-namespace Identity.API.Certificate
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Certificates
{
static class Certificate
{
diff --git a/src/Services/Identity/Identity.API/Configuration/Config.cs b/src/Services/Identity/Identity.API/Configuration/Config.cs
index 89d5c0dc7..969b86aa1 100644
--- a/src/Services/Identity/Identity.API/Configuration/Config.cs
+++ b/src/Services/Identity/Identity.API/Configuration/Config.cs
@@ -2,7 +2,7 @@
using IdentityServer4.Models;
using System.Collections.Generic;
-namespace Identity.API.Configuration
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Configuration
{
public class Config
{
diff --git a/src/Services/Identity/Identity.API/Controllers/AccountController.cs b/src/Services/Identity/Identity.API/Controllers/AccountController.cs
index 51e582ed7..79e9c247e 100644
--- a/src/Services/Identity/Identity.API/Controllers/AccountController.cs
+++ b/src/Services/Identity/Identity.API/Controllers/AccountController.cs
@@ -1,11 +1,5 @@
-// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
-
-
-using Identity.API.Models;
-using Identity.API.Models.AccountViewModels;
-using Identity.API.Services;
-using IdentityModel;
+using IdentityModel;
+using IdentityServer4;
using IdentityServer4.Models;
using IdentityServer4.Services;
using IdentityServer4.Stores;
@@ -13,6 +7,9 @@ using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
+using Microsoft.eShopOnContainers.Services.Identity.API.Models;
+using Microsoft.eShopOnContainers.Services.Identity.API.Models.AccountViewModels;
+using Microsoft.eShopOnContainers.Services.Identity.API.Services;
using Microsoft.Extensions.Logging;
using System;
using System.Linq;
@@ -20,7 +17,7 @@ using System.Security.Claims;
using System.Text.Encodings.Web;
using System.Threading.Tasks;
-namespace IdentityServer4.Quickstart.UI.Controllers
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Controllers
{
///
/// This sample controller implements a typical login/logout/provision workflow for local and external accounts.
diff --git a/src/Services/Identity/Identity.API/Controllers/ConsentController.cs b/src/Services/Identity/Identity.API/Controllers/ConsentController.cs
index a5687dd31..095440d6b 100644
--- a/src/Services/Identity/Identity.API/Controllers/ConsentController.cs
+++ b/src/Services/Identity/Identity.API/Controllers/ConsentController.cs
@@ -1,19 +1,13 @@
-// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
-
-
+using IdentityServer4.Models;
using IdentityServer4.Services;
+using IdentityServer4.Stores;
using Microsoft.AspNetCore.Mvc;
+using Microsoft.eShopOnContainers.Services.Identity.API.Models.AccountViewModels;
using Microsoft.Extensions.Logging;
using System.Linq;
using System.Threading.Tasks;
-using IdentityServer4.Models;
-using IdentityServer4.Stores;
-using IdentityServer4.Quickstart.UI.Models;
-using Identity.API.Models.AccountViewModels;
-using Identity.API.Services;
-namespace IdentityServer4.Quickstart.UI.Controllers
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Controllers
{
///
/// This controller implements the consent logic
diff --git a/src/Services/Identity/Identity.API/Controllers/HomeController.cs b/src/Services/Identity/Identity.API/Controllers/HomeController.cs
index f21ab65e0..66931b764 100644
--- a/src/Services/Identity/Identity.API/Controllers/HomeController.cs
+++ b/src/Services/Identity/Identity.API/Controllers/HomeController.cs
@@ -1,16 +1,12 @@
-// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
-
-
-using eShopOnContainers.Identity;
-using Identity.API.Services;
-using IdentityServer4.Quickstart.UI.Models;
+
using IdentityServer4.Services;
using Microsoft.AspNetCore.Mvc;
+using Microsoft.eShopOnContainers.Services.Identity.API.Models;
+using Microsoft.eShopOnContainers.Services.Identity.API.Services;
using Microsoft.Extensions.Options;
using System.Threading.Tasks;
-namespace IdentityServer4.Quickstart.UI.Controllers
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Controllers
{
public class HomeController : Controller
{
diff --git a/src/Services/Identity/Identity.API/Data/ApplicationDbContext.cs b/src/Services/Identity/Identity.API/Data/ApplicationDbContext.cs
index bbbe04962..aec67258c 100644
--- a/src/Services/Identity/Identity.API/Data/ApplicationDbContext.cs
+++ b/src/Services/Identity/Identity.API/Data/ApplicationDbContext.cs
@@ -1,8 +1,8 @@
-using Identity.API.Models;
-using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
+using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
+using Microsoft.eShopOnContainers.Services.Identity.API.Models;
-namespace Identity.API.Data
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Data
{
public class ApplicationDbContext : IdentityDbContext
{
diff --git a/src/Services/Identity/Identity.API/Data/ApplicationContextSeed.cs b/src/Services/Identity/Identity.API/Data/ApplicationDbContextSeed.cs
similarity index 77%
rename from src/Services/Identity/Identity.API/Data/ApplicationContextSeed.cs
rename to src/Services/Identity/Identity.API/Data/ApplicationDbContextSeed.cs
index d0099cc21..3dbf28171 100644
--- a/src/Services/Identity/Identity.API/Data/ApplicationContextSeed.cs
+++ b/src/Services/Identity/Identity.API/Data/ApplicationDbContextSeed.cs
@@ -1,56 +1,40 @@
-namespace Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Identity;
+using Microsoft.eShopOnContainers.Services.Identity.API.Extensions;
+using Microsoft.eShopOnContainers.Services.Identity.API.Models;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.IO.Compression;
+using System.Linq;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Data
{
- using AspNetCore.Identity;
- using EntityFrameworkCore;
- using Extensions.Logging;
- using global::eShopOnContainers.Identity;
- using global::Identity.API.Data;
- using global::Identity.API.Extensions;
- using global::Identity.API.Models;
- using Microsoft.AspNetCore.Builder;
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.Extensions.Options;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.IO.Compression;
- using System.Linq;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
-
- public class ApplicationContextSeed
- {
- private readonly IPasswordHasher _passwordHasher;
- public ApplicationContextSeed(IPasswordHasher passwordHasher)
- {
- _passwordHasher = passwordHasher;
- }
- public async Task SeedAsync(IApplicationBuilder applicationBuilder, IHostingEnvironment env, ILoggerFactory loggerFactory, int? retry = 0)
+ public class ApplicationDbContextSeed
+ {
+ private readonly IPasswordHasher _passwordHasher = new PasswordHasher();
+
+ public async Task SeedAsync(ApplicationDbContext context,IHostingEnvironment env,
+ ILogger logger, IOptions settings,int? retry = 0)
{
int retryForAvaiability = retry.Value;
+
try
{
- var log = loggerFactory.CreateLogger("application seed");
-
- var context = (ApplicationDbContext)applicationBuilder
- .ApplicationServices.GetService(typeof(ApplicationDbContext));
-
- context.Database.Migrate();
-
- var settings = (AppSettings)applicationBuilder
- .ApplicationServices.GetRequiredService>().Value;
-
- var useCustomizationData = settings.UseCustomizationData;
+ var useCustomizationData = settings.Value.UseCustomizationData;
var contentRootPath = env.ContentRootPath;
var webroot = env.WebRootPath;
if (!context.Users.Any())
{
context.Users.AddRange(useCustomizationData
- ? GetUsersFromFile(contentRootPath, log)
+ ? GetUsersFromFile(contentRootPath, logger)
: GetDefaultUser());
await context.SaveChangesAsync();
@@ -58,7 +42,7 @@
if (useCustomizationData)
{
- GetPreconfiguredImages(contentRootPath, webroot, log);
+ GetPreconfiguredImages(contentRootPath, webroot, logger);
}
}
catch (Exception ex)
@@ -66,14 +50,15 @@
if (retryForAvaiability < 10)
{
retryForAvaiability++;
- var log = loggerFactory.CreateLogger("catalog seed");
- log.LogError(ex.Message);
- await SeedAsync(applicationBuilder, env, loggerFactory, retryForAvaiability);
+
+ logger.LogError(ex.Message,$"There is an error migrating data for ApplicationDbContext");
+
+ await SeedAsync(context,env,logger,settings, retryForAvaiability);
}
}
}
- private IEnumerable GetUsersFromFile(string contentRootPath, ILogger log)
+ private IEnumerable GetUsersFromFile(string contentRootPath, ILogger logger)
{
string csvFileUsers = Path.Combine(contentRootPath, "Setup", "Users.csv");
@@ -95,7 +80,8 @@
}
catch (Exception ex)
{
- log.LogError(ex.Message);
+ logger.LogError(ex.Message);
+
return GetDefaultUser();
}
@@ -103,7 +89,7 @@
.Skip(1) // skip header column
.Select(row => Regex.Split(row, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)") )
.SelectTry(column => CreateApplicationUser(column, csvheaders))
- .OnCaughtException(ex => { log.LogError(ex.Message); return null; })
+ .OnCaughtException(ex => { logger.LogError(ex.Message); return null; })
.Where(x => x != null)
.ToList();
@@ -206,14 +192,14 @@
return csvheaders;
}
- static void GetPreconfiguredImages(string contentRootPath, string webroot, ILogger log)
+ static void GetPreconfiguredImages(string contentRootPath, string webroot, ILogger logger)
{
try
{
string imagesZipFile = Path.Combine(contentRootPath, "Setup", "images.zip");
if (!File.Exists(imagesZipFile))
{
- log.LogError($" zip file '{imagesZipFile}' does not exists.");
+ logger.LogError($" zip file '{imagesZipFile}' does not exists.");
return;
}
@@ -235,14 +221,14 @@
}
else
{
- log.LogWarning($"Skip file '{entry.Name}' in zipfile '{imagesZipFile}'");
+ logger.LogWarning($"Skip file '{entry.Name}' in zipfile '{imagesZipFile}'");
}
}
}
}
catch (Exception ex)
{
- log.LogError($"Exception in method GetPreconfiguredImages WebMVC. Exception Message={ex.Message}");
+ logger.LogError($"Exception in method GetPreconfiguredImages WebMVC. Exception Message={ex.Message}");
}
}
}
diff --git a/src/Services/Identity/Identity.API/Data/ConfigurationDbContextSeed.cs b/src/Services/Identity/Identity.API/Data/ConfigurationDbContextSeed.cs
new file mode 100644
index 000000000..bb41f0d0a
--- /dev/null
+++ b/src/Services/Identity/Identity.API/Data/ConfigurationDbContextSeed.cs
@@ -0,0 +1,56 @@
+using IdentityServer4.EntityFramework.DbContexts;
+using IdentityServer4.EntityFramework.Mappers;
+using Microsoft.eShopOnContainers.Services.Identity.API.Configuration;
+using Microsoft.Extensions.Configuration;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Data
+{
+ public class ConfigurationDbContextSeed
+ {
+ public async Task SeedAsync(ConfigurationDbContext context,IConfiguration configuration)
+ {
+
+ //callbacks urls from config:
+ var clientUrls = new Dictionary();
+
+ clientUrls.Add("Mvc", configuration.GetValue("MvcClient"));
+ clientUrls.Add("Spa", configuration.GetValue("SpaClient"));
+ clientUrls.Add("Xamarin", configuration.GetValue("XamarinCallback"));
+ clientUrls.Add("LocationsApi", configuration.GetValue("LocationApiClient"));
+ clientUrls.Add("MarketingApi", configuration.GetValue("MarketingApiClient"));
+ clientUrls.Add("BasketApi", configuration.GetValue("BasketApiClient"));
+ clientUrls.Add("OrderingApi", configuration.GetValue("OrderingApiClient"));
+
+ if (!context.Clients.Any())
+ {
+ foreach (var client in Config.GetClients(clientUrls))
+ {
+ await context.Clients.AddAsync(client.ToEntity());
+ }
+ await context.SaveChangesAsync();
+ }
+
+ if (!context.IdentityResources.Any())
+ {
+ foreach (var resource in Config.GetResources())
+ {
+ await context.IdentityResources.AddAsync(resource.ToEntity());
+ }
+ await context.SaveChangesAsync();
+ }
+
+ if (!context.ApiResources.Any())
+ {
+ foreach (var api in Config.GetApis())
+ {
+ await context.ApiResources.AddAsync(api.ToEntity());
+ }
+
+ await context.SaveChangesAsync();
+ }
+ }
+ }
+}
diff --git a/src/Services/Identity/Identity.API/Extensions/LinqSelectExtensions.cs b/src/Services/Identity/Identity.API/Extensions/LinqSelectExtensions.cs
index e3ff0a3c0..1061881af 100644
--- a/src/Services/Identity/Identity.API/Extensions/LinqSelectExtensions.cs
+++ b/src/Services/Identity/Identity.API/Extensions/LinqSelectExtensions.cs
@@ -2,7 +2,7 @@
using System.Collections.Generic;
using System.Linq;
-namespace Identity.API.Extensions
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Extensions
{
public static class LinqSelectExtensions
{
diff --git a/src/Services/Identity/Identity.API/Identity.API.csproj b/src/Services/Identity/Identity.API/Identity.API.csproj
index ae6aab44b..cee95b94f 100644
--- a/src/Services/Identity/Identity.API/Identity.API.csproj
+++ b/src/Services/Identity/Identity.API/Identity.API.csproj
@@ -43,6 +43,7 @@
+
diff --git a/src/Services/Identity/Identity.API/Migrations/20170912114036_Initial.Designer.cs b/src/Services/Identity/Identity.API/Migrations/20170912114036_Initial.Designer.cs
index 59f056335..0850b37b9 100644
--- a/src/Services/Identity/Identity.API/Migrations/20170912114036_Initial.Designer.cs
+++ b/src/Services/Identity/Identity.API/Migrations/20170912114036_Initial.Designer.cs
@@ -1,11 +1,9 @@
//
-using Identity.API.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage;
-using Microsoft.EntityFrameworkCore.Storage.Internal;
+using Microsoft.eShopOnContainers.Services.Identity.API.Data;
using System;
namespace Identity.API.Migrations
diff --git a/src/Services/Identity/Identity.API/Migrations/ApplicationDbContextModelSnapshot.cs b/src/Services/Identity/Identity.API/Migrations/ApplicationDbContextModelSnapshot.cs
index ff7e60e21..dcc87bc73 100644
--- a/src/Services/Identity/Identity.API/Migrations/ApplicationDbContextModelSnapshot.cs
+++ b/src/Services/Identity/Identity.API/Migrations/ApplicationDbContextModelSnapshot.cs
@@ -1,11 +1,8 @@
//
-using Identity.API.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage;
-using Microsoft.EntityFrameworkCore.Storage.Internal;
+using Microsoft.eShopOnContainers.Services.Identity.API.Data;
using System;
namespace Identity.API.Migrations
diff --git a/src/Services/Identity/Identity.API/Models/AccountViewModels/ConsentInputModel.cs b/src/Services/Identity/Identity.API/Models/AccountViewModels/ConsentInputModel.cs
index 89a2d90e7..633f37b89 100644
--- a/src/Services/Identity/Identity.API/Models/AccountViewModels/ConsentInputModel.cs
+++ b/src/Services/Identity/Identity.API/Models/AccountViewModels/ConsentInputModel.cs
@@ -1,10 +1,6 @@
-// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
+using System.Collections.Generic;
-
-using System.Collections.Generic;
-
-namespace Identity.API.Models.AccountViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.AccountViewModels
{
public class ConsentInputModel
{
diff --git a/src/Services/Identity/Identity.API/Models/AccountViewModels/ConsentViewModel.cs b/src/Services/Identity/Identity.API/Models/AccountViewModels/ConsentViewModel.cs
index e0df65555..c010f636f 100644
--- a/src/Services/Identity/Identity.API/Models/AccountViewModels/ConsentViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/AccountViewModels/ConsentViewModel.cs
@@ -1,12 +1,10 @@
-// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
-
+
using System.Collections.Generic;
using System.Linq;
using IdentityServer4.Models;
-namespace Identity.API.Models.AccountViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.AccountViewModels
{
public class ConsentViewModel : ConsentInputModel
{
diff --git a/src/Services/Identity/Identity.API/Models/AccountViewModels/ExternalLoginConfirmationViewModel.cs b/src/Services/Identity/Identity.API/Models/AccountViewModels/ExternalLoginConfirmationViewModel.cs
index 526f320ba..5d4f597a2 100644
--- a/src/Services/Identity/Identity.API/Models/AccountViewModels/ExternalLoginConfirmationViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/AccountViewModels/ExternalLoginConfirmationViewModel.cs
@@ -1,10 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Threading.Tasks;
+using System.ComponentModel.DataAnnotations;
-namespace Identity.API.Models.AccountViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.AccountViewModels
{
public class ExternalLoginConfirmationViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/AccountViewModels/ForgotPasswordViewModel.cs b/src/Services/Identity/Identity.API/Models/AccountViewModels/ForgotPasswordViewModel.cs
index fd00ca55f..f5dd3ab61 100644
--- a/src/Services/Identity/Identity.API/Models/AccountViewModels/ForgotPasswordViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/AccountViewModels/ForgotPasswordViewModel.cs
@@ -1,10 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Threading.Tasks;
+using System.ComponentModel.DataAnnotations;
-namespace Identity.API.Models.AccountViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.AccountViewModels
{
public class ForgotPasswordViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/AccountViewModels/LoggedOutViewModel.cs b/src/Services/Identity/Identity.API/Models/AccountViewModels/LoggedOutViewModel.cs
index d78c9e984..bd7f7c7bb 100644
--- a/src/Services/Identity/Identity.API/Models/AccountViewModels/LoggedOutViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/AccountViewModels/LoggedOutViewModel.cs
@@ -1,8 +1,4 @@
-// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
-
-
-namespace Identity.API.Models.AccountViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.AccountViewModels
{
public class LoggedOutViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/AccountViewModels/LoginViewModel.cs b/src/Services/Identity/Identity.API/Models/AccountViewModels/LoginViewModel.cs
index edb29a8d2..3b1926cc2 100644
--- a/src/Services/Identity/Identity.API/Models/AccountViewModels/LoginViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/AccountViewModels/LoginViewModel.cs
@@ -1,10 +1,6 @@
-// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
+using System.ComponentModel.DataAnnotations;
-
-using System.ComponentModel.DataAnnotations;
-
-namespace Identity.API.Models.AccountViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.AccountViewModels
{
public class LoginViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/AccountViewModels/LogoutViewModel.cs b/src/Services/Identity/Identity.API/Models/AccountViewModels/LogoutViewModel.cs
index fd5153288..d81dcd6ac 100644
--- a/src/Services/Identity/Identity.API/Models/AccountViewModels/LogoutViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/AccountViewModels/LogoutViewModel.cs
@@ -1,8 +1,4 @@
-// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
-
-
-namespace Identity.API.Models.AccountViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.AccountViewModels
{
public class LogoutViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/AccountViewModels/RegisterViewModel.cs b/src/Services/Identity/Identity.API/Models/AccountViewModels/RegisterViewModel.cs
index c84c1478d..df97bb965 100644
--- a/src/Services/Identity/Identity.API/Models/AccountViewModels/RegisterViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/AccountViewModels/RegisterViewModel.cs
@@ -1,10 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Threading.Tasks;
+using System.ComponentModel.DataAnnotations;
-namespace Identity.API.Models.AccountViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.AccountViewModels
{
public class RegisterViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/AccountViewModels/ResetPasswordViewModel.cs b/src/Services/Identity/Identity.API/Models/AccountViewModels/ResetPasswordViewModel.cs
index a90c4ca64..57edc44c3 100644
--- a/src/Services/Identity/Identity.API/Models/AccountViewModels/ResetPasswordViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/AccountViewModels/ResetPasswordViewModel.cs
@@ -1,10 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Threading.Tasks;
+using System.ComponentModel.DataAnnotations;
-namespace Identity.API.Models.AccountViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.AccountViewModels
{
public class ResetPasswordViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/AccountViewModels/SendCodeViewModel.cs b/src/Services/Identity/Identity.API/Models/AccountViewModels/SendCodeViewModel.cs
index b5efaed34..a6f316c48 100644
--- a/src/Services/Identity/Identity.API/Models/AccountViewModels/SendCodeViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/AccountViewModels/SendCodeViewModel.cs
@@ -1,10 +1,7 @@
-using System;
+using Microsoft.AspNetCore.Mvc.Rendering;
using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Mvc.Rendering;
-namespace Identity.API.Models.AccountViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.AccountViewModels
{
public class SendCodeViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/AccountViewModels/VerifyCodeViewModel.cs b/src/Services/Identity/Identity.API/Models/AccountViewModels/VerifyCodeViewModel.cs
index f0a18d663..83d075f9c 100644
--- a/src/Services/Identity/Identity.API/Models/AccountViewModels/VerifyCodeViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/AccountViewModels/VerifyCodeViewModel.cs
@@ -1,10 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Threading.Tasks;
+using System.ComponentModel.DataAnnotations;
-namespace Identity.API.Models.AccountViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.AccountViewModels
{
public class VerifyCodeViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/AccountViewModels/_LoginViewModel.cs b/src/Services/Identity/Identity.API/Models/AccountViewModels/_LoginViewModel.cs
deleted file mode 100644
index 63290cb8a..000000000
--- a/src/Services/Identity/Identity.API/Models/AccountViewModels/_LoginViewModel.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
-
-
-using System.Collections.Generic;
-
-namespace Identity.API.Models.AccountViewModels
-{
- //public class _LoginViewModel : LoginViewModel
- //{
- // public bool EnableLocalLogin { get; set; }
- // public IEnumerable ExternalProviders { get; set; }
- //}
-
- //public class ExternalProvider
- //{
- // public string DisplayName { get; set; }
- // public string AuthenticationScheme { get; set; }
- //}
-}
\ No newline at end of file
diff --git a/src/Services/Identity/Identity.API/Models/ApplicationUser.cs b/src/Services/Identity/Identity.API/Models/ApplicationUser.cs
index 1c1f7bda1..fa43017fc 100644
--- a/src/Services/Identity/Identity.API/Models/ApplicationUser.cs
+++ b/src/Services/Identity/Identity.API/Models/ApplicationUser.cs
@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.Identity;
using System.ComponentModel.DataAnnotations;
-namespace Identity.API.Models
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models
{
// Add profile data for application users by adding properties to the ApplicationUser class
public class ApplicationUser : IdentityUser
diff --git a/src/Services/Identity/Identity.API/Models/ErrorViewModel.cs b/src/Services/Identity/Identity.API/Models/ErrorViewModel.cs
index 379377aec..b101bca7a 100644
--- a/src/Services/Identity/Identity.API/Models/ErrorViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/ErrorViewModel.cs
@@ -4,7 +4,7 @@
using IdentityServer4.Models;
-namespace IdentityServer4.Quickstart.UI.Models
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models
{
public class ErrorViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/ManageViewModels/AddPhoneNumberViewModel.cs b/src/Services/Identity/Identity.API/Models/ManageViewModels/AddPhoneNumberViewModel.cs
index ada4b8a03..2a1cc49d0 100644
--- a/src/Services/Identity/Identity.API/Models/ManageViewModels/AddPhoneNumberViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/ManageViewModels/AddPhoneNumberViewModel.cs
@@ -1,10 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Threading.Tasks;
+using System.ComponentModel.DataAnnotations;
-namespace Identity.API.Models.ManageViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.ManageViewModels
{
public class AddPhoneNumberViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/ManageViewModels/ChangePasswordViewModel.cs b/src/Services/Identity/Identity.API/Models/ManageViewModels/ChangePasswordViewModel.cs
index b0df1b2af..fa9193c38 100644
--- a/src/Services/Identity/Identity.API/Models/ManageViewModels/ChangePasswordViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/ManageViewModels/ChangePasswordViewModel.cs
@@ -1,10 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Threading.Tasks;
+using System.ComponentModel.DataAnnotations;
-namespace Identity.API.Models.ManageViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.ManageViewModels
{
public class ChangePasswordViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/ManageViewModels/ConfigureTwoFactorViewModel.cs b/src/Services/Identity/Identity.API/Models/ManageViewModels/ConfigureTwoFactorViewModel.cs
index 5ed3b2925..15cf719fa 100644
--- a/src/Services/Identity/Identity.API/Models/ManageViewModels/ConfigureTwoFactorViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/ManageViewModels/ConfigureTwoFactorViewModel.cs
@@ -1,10 +1,7 @@
-using System;
+using Microsoft.AspNetCore.Mvc.Rendering;
using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Mvc.Rendering;
-namespace Identity.API.Models.ManageViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.ManageViewModels
{
public class ConfigureTwoFactorViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/ManageViewModels/FactorViewModel.cs b/src/Services/Identity/Identity.API/Models/ManageViewModels/FactorViewModel.cs
index 92eccf504..4a6d4497f 100644
--- a/src/Services/Identity/Identity.API/Models/ManageViewModels/FactorViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/ManageViewModels/FactorViewModel.cs
@@ -1,9 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace Identity.API.Models.ManageViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.ManageViewModels
{
public class FactorViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/ManageViewModels/IndexViewModel.cs b/src/Services/Identity/Identity.API/Models/ManageViewModels/IndexViewModel.cs
index f6e5b6874..b13bc18e3 100644
--- a/src/Services/Identity/Identity.API/Models/ManageViewModels/IndexViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/ManageViewModels/IndexViewModel.cs
@@ -1,10 +1,7 @@
-using System;
+using Microsoft.AspNetCore.Identity;
using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Identity;
-namespace Identity.API.Models.ManageViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.ManageViewModels
{
public class IndexViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/ManageViewModels/ManageLoginsViewModel.cs b/src/Services/Identity/Identity.API/Models/ManageViewModels/ManageLoginsViewModel.cs
index 1238585cd..0b24c3b7c 100644
--- a/src/Services/Identity/Identity.API/Models/ManageViewModels/ManageLoginsViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/ManageViewModels/ManageLoginsViewModel.cs
@@ -1,11 +1,8 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Http.Authentication;
+using Microsoft.AspNetCore.Http.Authentication;
using Microsoft.AspNetCore.Identity;
+using System.Collections.Generic;
-namespace Identity.API.Models.ManageViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.ManageViewModels
{
public class ManageLoginsViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/ManageViewModels/RemoveLoginViewModel.cs b/src/Services/Identity/Identity.API/Models/ManageViewModels/RemoveLoginViewModel.cs
index 546f0b1e8..c9171fcf3 100644
--- a/src/Services/Identity/Identity.API/Models/ManageViewModels/RemoveLoginViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/ManageViewModels/RemoveLoginViewModel.cs
@@ -1,10 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace Identity.API.Models.ManageViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.ManageViewModels
{
public class RemoveLoginViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/ManageViewModels/SetPasswordViewModel.cs b/src/Services/Identity/Identity.API/Models/ManageViewModels/SetPasswordViewModel.cs
index d824afc94..9d0711b08 100644
--- a/src/Services/Identity/Identity.API/Models/ManageViewModels/SetPasswordViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/ManageViewModels/SetPasswordViewModel.cs
@@ -1,10 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Threading.Tasks;
+using System.ComponentModel.DataAnnotations;
-namespace Identity.API.Models.ManageViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.ManageViewModels
{
public class SetPasswordViewModel
{
diff --git a/src/Services/Identity/Identity.API/Models/ManageViewModels/VerifyPhoneNumberViewModel.cs b/src/Services/Identity/Identity.API/Models/ManageViewModels/VerifyPhoneNumberViewModel.cs
index af7105a2e..fccf56e4e 100644
--- a/src/Services/Identity/Identity.API/Models/ManageViewModels/VerifyPhoneNumberViewModel.cs
+++ b/src/Services/Identity/Identity.API/Models/ManageViewModels/VerifyPhoneNumberViewModel.cs
@@ -1,10 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Threading.Tasks;
+using System.ComponentModel.DataAnnotations;
-namespace Identity.API.Models.ManageViewModels
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Models.ManageViewModels
{
public class VerifyPhoneNumberViewModel
{
diff --git a/src/Services/Identity/Identity.API/Program.cs b/src/Services/Identity/Identity.API/Program.cs
index 9802c36f1..0b32b4549 100644
--- a/src/Services/Identity/Identity.API/Program.cs
+++ b/src/Services/Identity/Identity.API/Program.cs
@@ -1,16 +1,39 @@
-using Microsoft.AspNetCore;
+using IdentityServer4.EntityFramework.DbContexts;
+using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
-using Microsoft.eShopOnContainers.Services.Identity;
+using Microsoft.eShopOnContainers.Services.Identity.API.Data;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
using System.IO;
-namespace eShopOnContainers.Identity
+namespace Microsoft.eShopOnContainers.Services.Identity.API
{
public class Program
{
public static void Main(string[] args)
{
- BuildWebHost(args).Run();
+ BuildWebHost(args)
+ .MigrateDbContext((_, __) => { })
+ .MigrateDbContext((context, services) =>
+ {
+ var env = services.GetService();
+ var logger = services.GetService>();
+ var settings = services.GetService>();
+
+ new ApplicationDbContextSeed()
+ .SeedAsync(context, env, logger, settings)
+ .Wait();
+ })
+ .MigrateDbContext((context,services)=>
+ {
+ var configuration = services.GetService();
+
+ new ConfigurationDbContextSeed()
+ .SeedAsync(context, configuration)
+ .Wait();
+ }).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
diff --git a/src/Services/Identity/Identity.API/Services/EFLoginService.cs b/src/Services/Identity/Identity.API/Services/EFLoginService.cs
index e1c2fe52e..63c4d4b7e 100644
--- a/src/Services/Identity/Identity.API/Services/EFLoginService.cs
+++ b/src/Services/Identity/Identity.API/Services/EFLoginService.cs
@@ -1,11 +1,8 @@
-using Identity.API.Models;
-using Microsoft.AspNetCore.Identity;
-using System;
-using System.Collections.Generic;
-using System.Linq;
+using Microsoft.AspNetCore.Identity;
+using Microsoft.eShopOnContainers.Services.Identity.API.Models;
using System.Threading.Tasks;
-namespace Identity.API.Services
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Services
{
public class EFLoginService : ILoginService
{
diff --git a/src/Services/Identity/Identity.API/Services/IEmailSender.cs b/src/Services/Identity/Identity.API/Services/IEmailSender.cs
index 2259641f8..95a4f99ee 100644
--- a/src/Services/Identity/Identity.API/Services/IEmailSender.cs
+++ b/src/Services/Identity/Identity.API/Services/IEmailSender.cs
@@ -1,9 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
+using System.Threading.Tasks;
-namespace Identity.API.Services
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Services
{
public interface IEmailSender
{
diff --git a/src/Services/Identity/Identity.API/Services/ILoginService.cs b/src/Services/Identity/Identity.API/Services/ILoginService.cs
index 5915b42ee..7bff7f272 100644
--- a/src/Services/Identity/Identity.API/Services/ILoginService.cs
+++ b/src/Services/Identity/Identity.API/Services/ILoginService.cs
@@ -1,9 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
+using System.Threading.Tasks;
-namespace Identity.API.Services
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Services
{
public interface ILoginService
{
diff --git a/src/Services/Identity/Identity.API/Services/IRedirectService.cs b/src/Services/Identity/Identity.API/Services/IRedirectService.cs
index 9dd277e2d..4ec8ea1fc 100644
--- a/src/Services/Identity/Identity.API/Services/IRedirectService.cs
+++ b/src/Services/Identity/Identity.API/Services/IRedirectService.cs
@@ -1,9 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace Identity.API.Services
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Services
{
public interface IRedirectService
{
diff --git a/src/Services/Identity/Identity.API/Services/ISmsSender.cs b/src/Services/Identity/Identity.API/Services/ISmsSender.cs
index 5c6bd2aae..f842e7ae9 100644
--- a/src/Services/Identity/Identity.API/Services/ISmsSender.cs
+++ b/src/Services/Identity/Identity.API/Services/ISmsSender.cs
@@ -1,9 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
+using System.Threading.Tasks;
-namespace Identity.API.Services
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Services
{
public interface ISmsSender
{
diff --git a/src/Services/Identity/Identity.API/Services/MessageServices.cs b/src/Services/Identity/Identity.API/Services/MessageServices.cs
index d9898cba4..18ab35a7c 100644
--- a/src/Services/Identity/Identity.API/Services/MessageServices.cs
+++ b/src/Services/Identity/Identity.API/Services/MessageServices.cs
@@ -1,9 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
+using System.Threading.Tasks;
-namespace Identity.API.Services
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Services
{
// This class is used by the application to send Email and SMS
// when you turn on two-factor authentication in ASP.NET Identity.
diff --git a/src/Services/Identity/Identity.API/Services/ProfileService.cs b/src/Services/Identity/Identity.API/Services/ProfileService.cs
index 71d10a777..204ac3119 100644
--- a/src/Services/Identity/Identity.API/Services/ProfileService.cs
+++ b/src/Services/Identity/Identity.API/Services/ProfileService.cs
@@ -1,15 +1,15 @@
-using IdentityServer4.Services;
+using IdentityModel;
+using IdentityServer4.Models;
+using IdentityServer4.Services;
+using Microsoft.AspNetCore.Identity;
+using Microsoft.eShopOnContainers.Services.Identity.API.Models;
using System;
using System.Collections.Generic;
using System.Linq;
-using System.Threading.Tasks;
-using IdentityServer4.Models;
-using Microsoft.AspNetCore.Identity;
-using Identity.API.Models;
using System.Security.Claims;
-using IdentityModel;
+using System.Threading.Tasks;
-namespace Identity.API.Services
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Services
{
public class ProfileService : IProfileService
{
diff --git a/src/Services/Identity/Identity.API/Services/RedirectService.cs b/src/Services/Identity/Identity.API/Services/RedirectService.cs
index 440272d39..bbe0ae976 100644
--- a/src/Services/Identity/Identity.API/Services/RedirectService.cs
+++ b/src/Services/Identity/Identity.API/Services/RedirectService.cs
@@ -1,10 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text.RegularExpressions;
-using System.Threading.Tasks;
+using System.Text.RegularExpressions;
-namespace Identity.API.Services
+namespace Microsoft.eShopOnContainers.Services.Identity.API.Services
{
public class RedirectService : IRedirectService
{
diff --git a/src/Services/Identity/Identity.API/Startup.cs b/src/Services/Identity/Identity.API/Startup.cs
index 28fa4da6c..8dc48d7ae 100644
--- a/src/Services/Identity/Identity.API/Startup.cs
+++ b/src/Services/Identity/Identity.API/Startup.cs
@@ -1,31 +1,23 @@
using Autofac;
using Autofac.Extensions.DependencyInjection;
-using eShopOnContainers.Identity;
-using Identity.API.Certificate;
-using Identity.API.Configuration;
-using Identity.API.Data;
-using Identity.API.Models;
-using Identity.API.Services;
-using IdentityServer4.EntityFramework.DbContexts;
-using IdentityServer4.EntityFramework.Mappers;
using IdentityServer4.Services;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Microsoft.eShopOnContainers.BuildingBlocks;
-using Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure;
+using Microsoft.eShopOnContainers.Services.Identity.API.Certificates;
+using Microsoft.eShopOnContainers.Services.Identity.API.Data;
+using Microsoft.eShopOnContainers.Services.Identity.API.Models;
+using Microsoft.eShopOnContainers.Services.Identity.API.Services;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.HealthChecks;
using Microsoft.Extensions.Logging;
using System;
-using System.Collections.Generic;
-using System.Linq;
using System.Reflection;
-using System.Threading.Tasks;
-namespace Microsoft.eShopOnContainers.Services.Identity
+namespace Microsoft.eShopOnContainers.Services.Identity.API
{
public class Startup
{
@@ -39,7 +31,6 @@ namespace Microsoft.eShopOnContainers.Services.Identity
// This method gets called by the runtime. Use this method to add services to the container.
public IServiceProvider ConfigureServices(IServiceCollection services)
{
-
// Add framework services.
services.AddDbContext(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
@@ -146,63 +137,6 @@ namespace Microsoft.eShopOnContainers.Services.Identity
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
-
- // Store idsrv grant config into db
- InitializeGrantStoreAndConfiguration(app).Wait();
-
- //Seed Data
- var hasher = new PasswordHasher();
- new ApplicationContextSeed(hasher).SeedAsync(app, env, loggerFactory).Wait();
- }
-
- private async Task InitializeGrantStoreAndConfiguration(IApplicationBuilder app)
- {
- //callbacks urls from config:
- Dictionary clientUrls = new Dictionary();
- clientUrls.Add("Mvc", Configuration.GetValue("MvcClient"));
- clientUrls.Add("Spa", Configuration.GetValue("SpaClient"));
- clientUrls.Add("Xamarin", Configuration.GetValue("XamarinCallback"));
- clientUrls.Add("LocationsApi", Configuration.GetValue("LocationApiClient"));
- clientUrls.Add("MarketingApi", Configuration.GetValue("MarketingApiClient"));
- clientUrls.Add("BasketApi", Configuration.GetValue("BasketApiClient"));
- clientUrls.Add("OrderingApi", Configuration.GetValue("OrderingApiClient"));
-
- using (var serviceScope = app.ApplicationServices.GetService().CreateScope())
- {
- serviceScope.ServiceProvider.GetRequiredService()
- .Database
- .Migrate();
-
- var context = serviceScope.ServiceProvider.GetRequiredService();
- context.Database.Migrate();
-
- if (!context.Clients.Any())
- {
- foreach (var client in Config.GetClients(clientUrls))
- {
- await context.Clients.AddAsync(client.ToEntity());
- }
- await context.SaveChangesAsync();
- }
-
- if (!context.IdentityResources.Any())
- {
- foreach (var resource in Config.GetResources())
- {
- await context.IdentityResources.AddAsync(resource.ToEntity());
- }
- await context.SaveChangesAsync();
- }
-
- if (!context.ApiResources.Any())
- {
- foreach (var api in Config.GetApis())
- {
- await context.ApiResources.AddAsync(api.ToEntity());
- }
- await context.SaveChangesAsync();
- }
- }
}
}
}
diff --git a/src/Services/Identity/Identity.API/Views/Account/LoggedOut.cshtml b/src/Services/Identity/Identity.API/Views/Account/LoggedOut.cshtml
index ea6fdbfbc..f843973f8 100644
--- a/src/Services/Identity/Identity.API/Views/Account/LoggedOut.cshtml
+++ b/src/Services/Identity/Identity.API/Views/Account/LoggedOut.cshtml
@@ -1,4 +1,4 @@
-@model Identity.API.Models.AccountViewModels.LoggedOutViewModel
+@model Microsoft.eShopOnContainers.Services.Identity.API.Models.AccountViewModels.LoggedOutViewModel