using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.eShopWeb.ApplicationCore.Entities;
using Microsoft.Extensions.Logging;
namespace Microsoft.eShopWeb.Infrastructure.Data;
public class CatalogContextSeed
{
public static async Task SeedAsync(CatalogContext catalogContext,
ILogger logger,
int retry = 0)
{
var retryForAvailability = retry;
try
{
if (catalogContext.Database.IsSqlServer())
{
catalogContext.Database.Migrate();
}
if (!await catalogContext.CatalogBrands.AnyAsync())
{
await catalogContext.CatalogBrands.AddRangeAsync(
GetPreconfiguredCatalogBrands());
await catalogContext.SaveChangesAsync();
}
if (!await catalogContext.CatalogTypes.AnyAsync())
{
await catalogContext.CatalogTypes.AddRangeAsync(
GetPreconfiguredCatalogTypes());
await catalogContext.SaveChangesAsync();
}
if (!await catalogContext.CatalogItems.AnyAsync())
{
await catalogContext.CatalogItems.AddRangeAsync(
GetPreconfiguredItems());
await catalogContext.SaveChangesAsync();
}
}
catch (Exception ex)
{
if (retryForAvailability >= 10) throw;
retryForAvailability++;
logger.LogError(ex.Message);
await SeedAsync(catalogContext, logger, retryForAvailability);
throw;
}
}
static IEnumerable<CatalogBrand> GetPreconfiguredCatalogBrands()
{
return new List<CatalogBrand>
{
new("Azure"),
new(".NET"),
new("Visual Studio"),
new("SQL Server"),
new("Other")
};
}
static IEnumerable<CatalogType> GetPreconfiguredCatalogTypes()
{
return new List<CatalogType>
{
new("Mug"),
new("T-Shirt"),
new("Sheet"),
new("USB Memory Stick")
};
}
static IEnumerable<CatalogItem> GetPreconfiguredItems()
{
return new List<CatalogItem>
{
new(2,2, ".NET Bot Black Sweatshirt", ".NET Bot Black Sweatshirt", 19.5M, "http://catalogbaseurltobereplaced/images/products/1.png"),
new(1,2, ".NET Black & White Mug", ".NET Black & White Mug", 8.50M, "http://catalogbaseurltobereplaced/images/products/2.png"),
new(2,5, "Prism White T-Shirt", "Prism White T-Shirt", 12, "http://catalogbaseurltobereplaced/images/products/3.png"),
new(2,2, ".NET Foundation Sweatshirt", ".NET Foundation Sweatshirt", 12, "http://catalogbaseurltobereplaced/images/products/4.png"),
new(3,5, "Roslyn Red Sheet", "Roslyn Red Sheet", 8.5M, "http://catalogbaseurltobereplaced/images/products/5.png"),
new(2,2, ".NET Blue Sweatshirt", ".NET Blue Sweatshirt", 12, "http://catalogbaseurltobereplaced/images/products/6.png"),
new(2,5, "Roslyn Red T-Shirt", "Roslyn Red T-Shirt", 12, "http://catalogbaseurltobereplaced/images/products/7.png"),
new(2,5, "Kudu Purple Sweatshirt", "Kudu Purple Sweatshirt", 8.5M, "http://catalogbaseurltobereplaced/images/products/8.png"),
new(1,5, "Cup<T> White Mug", "Cup<T> White Mug", 12, "http://catalogbaseurltobereplaced/images/products/9.png"),
new(3,2, ".NET Foundation Sheet", ".NET Foundation Sheet", 12, "http://catalogbaseurltobereplaced/images/products/10.png"),
new(3,2, "Cup<T> Sheet", "Cup<T> Sheet", 8.5M, "http://catalogbaseurltobereplaced/images/products/11.png"),
new(2,5, "Prism White TShirt", "Prism White TShirt", 12, "http://catalogbaseurltobereplaced/images/products/12.png")
};
}
}