Skip to content

Commit f1e1421

Browse files
committed
index page finished
1 parent 2b747c5 commit f1e1421

File tree

11 files changed

+184
-22
lines changed

11 files changed

+184
-22
lines changed
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
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.00,
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.00,
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.00,
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.00,
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.00,
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.00,
128+
CategoryId = 1
129+
}
130+
};
131+
}
132+
}
133+
}

AspnetRunBasics/Pages/Index.cshtml

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -31,25 +31,9 @@
3131
</a>
3232
</div>
3333
</div>
34-
<div class="col-12 col-md-3">
35-
<div class="card">
36-
<div class="card-header bg-success text-white text-uppercase">
37-
<i class="fa fa-heart"></i> Top product
38-
</div>
39-
<img class="img-fluid border-0" src="https://dummyimage.com/600x400/55595c/fff" alt="Card image cap">
40-
<div class="card-body">
41-
<h4 class="card-title text-center"><a href="product.html" title="View Product">Product title</a></h4>
42-
<div class="row">
43-
<div class="col">
44-
<p class="btn btn-danger btn-block">99.00 $</p>
45-
</div>
46-
<div class="col">
47-
<a href="product.html" class="btn btn-success btn-block">View</a>
48-
</div>
49-
</div>
50-
</div>
51-
</div>
52-
</div>
34+
35+
<partial name="_TopProductPartial" model="Model.ProductList.FirstOrDefault()" />
36+
5337
</div>
5438
</div>
5539

@@ -62,7 +46,7 @@
6246
</div>
6347
<div class="card-body">
6448
<div class="row">
65-
@foreach (var product in Model.ProductList)
49+
@foreach (var product in Model.ProductList.Take(4))
6650
{
6751
<partial name="_ProductItemPartial" model="@product" />
6852
}
@@ -82,7 +66,7 @@
8266
</div>
8367
<div class="card-body">
8468
<div class="row">
85-
@foreach (var product in Model.ProductList)
69+
@foreach (var product in Model.ProductList.TakeLast(4))
8670
{
8771
<partial name="_ProductItemPartial" model="@product" />
8872
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
@model Product
2+
3+
<div class="col-12 col-md-3">
4+
<div class="card">
5+
<div class="card-header bg-success text-white text-uppercase">
6+
<i class="fa fa-heart"></i> Top product
7+
</div>
8+
<a asp-page="ProductDetail" asp-route-productId="@Model.Id"><img asp-append-version="true" class="img-fluid border-0" src="~/images/product/@Model.ImageFile" alt="Card image cap"></a>
9+
<div class="card-body">
10+
<h4 class="card-title text-center"><a asp-page="ProductDetail" asp-route-productId="@Model.Id" title="View Product">@Model.Name</a></h4>
11+
<div class="row">
12+
<div class="col">
13+
<p class="btn btn-danger btn-block">@Model.Price $</p>
14+
</div>
15+
<div class="col">
16+
<a asp-page="ProductDetail" asp-route-productId="@Model.Id" class="btn btn-success btn-block">View</a>
17+
</div>
18+
</div>
19+
</div>
20+
</div>
21+
</div>

AspnetRunBasics/Program.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using System.Threading.Tasks;
5+
using AspnetRunBasics.Data;
56
using Microsoft.AspNetCore.Hosting;
67
using Microsoft.Extensions.Configuration;
8+
using Microsoft.Extensions.DependencyInjection;
79
using Microsoft.Extensions.Hosting;
810
using Microsoft.Extensions.Logging;
911

@@ -13,7 +15,9 @@ public class Program
1315
{
1416
public static void Main(string[] args)
1517
{
16-
CreateHostBuilder(args).Build().Run();
18+
var host = CreateHostBuilder(args).Build();
19+
SeedDatabase(host);
20+
host.Run();
1721
}
1822

1923
public static IHostBuilder CreateHostBuilder(string[] args) =>
@@ -22,5 +26,25 @@ public static IHostBuilder CreateHostBuilder(string[] args) =>
2226
{
2327
webBuilder.UseStartup<Startup>();
2428
});
29+
30+
private static void SeedDatabase(IHost host)
31+
{
32+
using (var scope = host.Services.CreateScope())
33+
{
34+
var services = scope.ServiceProvider;
35+
var loggerFactory = services.GetRequiredService<ILoggerFactory>();
36+
37+
try
38+
{
39+
var aspnetRunContext = services.GetRequiredService<AspnetRunContext>();
40+
AspnetRunContextSeed.SeedAsync(aspnetRunContext, loggerFactory).Wait();
41+
}
42+
catch (Exception exception)
43+
{
44+
var logger = loggerFactory.CreateLogger<Program>();
45+
logger.LogError(exception, "An error occurred seeding the DB.");
46+
}
47+
}
48+
}
2549
}
2650
}
11.4 KB
Loading
8.84 KB
Loading
9.19 KB
Loading
4.11 KB
Loading
5.57 KB
Loading
7.87 KB
Loading

0 commit comments

Comments
 (0)