|
| 1 | +using AspnetRunBasics.Entities; |
| 2 | +using Microsoft.Extensions.Logging; |
| 3 | +using System; |
| 4 | +using System.Collections.Generic; |
| 5 | +using System.Linq; |
| 6 | +using System.Threading.Tasks; |
| 7 | + |
| 8 | +namespace AspnetRunBasics.Data |
| 9 | +{ |
| 10 | + public class AspnetRunContextSeed |
| 11 | + { |
| 12 | + public static async Task SeedAsync(AspnetRunContext aspnetrunContext, ILoggerFactory loggerFactory, int? retry = 0) |
| 13 | + { |
| 14 | + int retryForAvailability = retry.Value; |
| 15 | + |
| 16 | + try |
| 17 | + { |
| 18 | + // TODO: Only run this if using a real database |
| 19 | + // aspnetrunContext.Database.Migrate(); |
| 20 | + // aspnetrunContext.Database.EnsureCreated(); |
| 21 | + |
| 22 | + if (!aspnetrunContext.Categories.Any()) |
| 23 | + { |
| 24 | + aspnetrunContext.Categories.AddRange(GetPreconfiguredCategories()); |
| 25 | + await aspnetrunContext.SaveChangesAsync(); |
| 26 | + } |
| 27 | + |
| 28 | + if (!aspnetrunContext.Products.Any()) |
| 29 | + { |
| 30 | + aspnetrunContext.Products.AddRange(GetPreconfiguredProducts()); |
| 31 | + await aspnetrunContext.SaveChangesAsync(); |
| 32 | + } |
| 33 | + } |
| 34 | + catch (Exception exception) |
| 35 | + { |
| 36 | + if (retryForAvailability < 10) |
| 37 | + { |
| 38 | + retryForAvailability++; |
| 39 | + var log = loggerFactory.CreateLogger<AspnetRunContextSeed>(); |
| 40 | + log.LogError(exception.Message); |
| 41 | + await SeedAsync(aspnetrunContext, loggerFactory, retryForAvailability); |
| 42 | + } |
| 43 | + throw; |
| 44 | + } |
| 45 | + } |
| 46 | + |
| 47 | + private static IEnumerable<Category> GetPreconfiguredCategories() |
| 48 | + { |
| 49 | + return new List<Category>() |
| 50 | + { |
| 51 | + new Category() |
| 52 | + { |
| 53 | + Name = "White Appliances", |
| 54 | + Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat.", |
| 55 | + ImageName = "one" |
| 56 | + }, |
| 57 | + new Category() |
| 58 | + { |
| 59 | + Name = "Smart Watches", |
| 60 | + Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat.", |
| 61 | + ImageName = "two" |
| 62 | + }, |
| 63 | + new Category() |
| 64 | + { |
| 65 | + Name = "Home & Kitchen", |
| 66 | + Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat.", |
| 67 | + ImageName = "tree" |
| 68 | + } |
| 69 | + }; |
| 70 | + } |
| 71 | + |
| 72 | + private static IEnumerable<Product> GetPreconfiguredProducts() |
| 73 | + { |
| 74 | + return new List<Product>() |
| 75 | + { |
| 76 | + new Product() |
| 77 | + { |
| 78 | + Name = "IPhone X", |
| 79 | + Summary = "This phone is the company's biggest change to its flagship smartphone in years. It includes a borderless.", |
| 80 | + Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.", |
| 81 | + ImageFile = "product-1.png", |
| 82 | + Price = 950.00M, |
| 83 | + CategoryId = 1 |
| 84 | + }, |
| 85 | + new Product() |
| 86 | + { |
| 87 | + Name = "Samsung 10", |
| 88 | + Summary = "This phone is the company's biggest change to its flagship smartphone in years. It includes a borderless.", |
| 89 | + Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.", |
| 90 | + ImageFile = "product-2.png", |
| 91 | + Price = 840.00M, |
| 92 | + CategoryId = 1 |
| 93 | + }, |
| 94 | + new Product() |
| 95 | + { |
| 96 | + Name = "Huawei Plus", |
| 97 | + Summary = "This phone is the company's biggest change to its flagship smartphone in years. It includes a borderless.", |
| 98 | + Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.", |
| 99 | + ImageFile = "product-3.png", |
| 100 | + Price = 650.00M, |
| 101 | + CategoryId = 2 |
| 102 | + }, |
| 103 | + new Product() |
| 104 | + { |
| 105 | + Name = "Xiaomi Mi 9", |
| 106 | + Summary = "This phone is the company's biggest change to its flagship smartphone in years. It includes a borderless.", |
| 107 | + Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.", |
| 108 | + ImageFile = "product-4.png", |
| 109 | + Price = 470.00M, |
| 110 | + CategoryId = 1 |
| 111 | + }, |
| 112 | + new Product() |
| 113 | + { |
| 114 | + Name = "HTC U11+ Plus", |
| 115 | + Summary = "This phone is the company's biggest change to its flagship smartphone in years. It includes a borderless.", |
| 116 | + Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.", |
| 117 | + ImageFile = "product-5.png", |
| 118 | + Price = 380.00M, |
| 119 | + CategoryId = 1 |
| 120 | + }, |
| 121 | + new Product() |
| 122 | + { |
| 123 | + Name = "LG G7 ThinQ", |
| 124 | + Summary = "This phone is the company's biggest change to its flagship smartphone in years. It includes a borderless.", |
| 125 | + Description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut, tenetur natus doloremque laborum quos iste ipsum rerum obcaecati impedit odit illo dolorum ab tempora nihil dicta earum fugiat. Temporibus, voluptatibus.", |
| 126 | + ImageFile = "product-6.png", |
| 127 | + Price = 240.00M, |
| 128 | + CategoryId = 1 |
| 129 | + } |
| 130 | + }; |
| 131 | + } |
| 132 | + } |
| 133 | +} |
0 commit comments