/
ProductSitemapUrlProvider.cs
44 lines (37 loc) · 1.33 KB
/
ProductSitemapUrlProvider.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using DotnetSitemapGenerator;
using Microsoft.EntityFrameworkCore;
using Shopping.Models;
namespace Shopping.Sitemap.Providers;
public class ProductSitemapUrlProvider : ISitemapUrlProvider
{
private readonly Database _db;
private readonly LinkGenerator _linkGenerator;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ILogger<ProductSitemapUrlProvider> _logger;
public ProductSitemapUrlProvider(
Database db,
LinkGenerator linkGenerator,
IHttpContextAccessor httpContextAccessor,
ILogger<ProductSitemapUrlProvider> logger)
{
_db = db;
_linkGenerator = linkGenerator;
_httpContextAccessor = httpContextAccessor;
_logger = logger;
}
public async Task<IReadOnlyCollection<SitemapNode>> GetNodes()
{
var elements = new List<SitemapNode>();
var products = await _db.Products.OrderBy(x => x.Id).ToListAsync();
foreach (var product in products)
{
var url = _linkGenerator.GetUriByPage(
_httpContextAccessor.HttpContext!,
page: "/Products",
values: new { product.Id, product.Slug });
_logger.LogInformation("Adding product: {URL}", url);
elements.Add(new SitemapNode(url));
}
return elements;
}
}