Skip to content

Commit aa761c8

Browse files
authored
Merge pull request #42 from Geta/fix-suggestions
Fix suggestions
2 parents 46b2f47 + 832326c commit aa761c8

File tree

7 files changed

+68
-39
lines changed

7 files changed

+68
-39
lines changed

src/Geta.NotFoundHandler.Admin/Areas/Geta.NotFoundHandler.Admin/Pages/Components/Pager/Default.cshtml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<nav aria-label="Table pagination">
44
<ul class="pagination">
55
<li class="page-item @(Model.HasPreviousPage ? string.Empty : "disabled")">
6-
<a class="page-link" href="?page=@Model.PageUrl(Model.PageNumber-1)" aria-label="Previous">
6+
<a class="page-link" href="@Model.PageUrl(Model.PageNumber-1)" aria-label="Previous">
77
<span aria-hidden="true">&laquo;</span>
88
</a>
99
</li>
@@ -13,7 +13,7 @@
1313
<li class="page-item"><a class="page-link" href="@Model.PageUrl(i)">@i</a></li>
1414
}
1515
<li class="page-item @(Model.HasNextPage ? string.Empty : "disabled")">
16-
<a class="page-link" href="?page=@Model.PageUrl(Model.PageNumber+1)" aria-label="Next">
16+
<a class="page-link" href="@Model.PageUrl(Model.PageNumber+1)" aria-label="Next">
1717
<span aria-hidden="true">&raquo;</span>
1818
</a>
1919
</li>

src/Geta.NotFoundHandler.Admin/Areas/Geta.NotFoundHandler.Admin/Pages/Suggestions.cshtml.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,16 @@ public IActionResult OnPostIgnore(string oldUrl)
5353

5454
private void Load()
5555
{
56-
var items = _suggestionService.GetAllSummaries().Select(x => new SuggestionRedirectModel
56+
var summaries = _suggestionService.GetSummaries(Paging.PageNumber, Paging.PageSize);
57+
var redirectModels = summaries.Select(x => new SuggestionRedirectModel
5758
{
5859
OldUrl = x.OldUrl,
5960
Count = x.Count,
6061
Referers = x.Referers
61-
}).ToPagedList(Paging.PageNumber, Paging.PageSize);
62-
Message = $"Based on the logged 404 errors, there are {items.TotalItemCount} custom redirect suggestions.";
63-
Items = items;
62+
});
63+
64+
Message = $"Based on the logged 404 errors, there are {summaries.TotalItemCount} custom redirect suggestions.";
65+
Items = new StaticPagedList<SuggestionRedirectModel>(redirectModels, summaries);
6466
}
6567
}
6668
}

src/Geta.NotFoundHandler/Core/Suggestions/DefaultSuggestionService.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
// Copyright (c) Geta Digital. All rights reserved.
22
// Licensed under Apache-2.0. See the LICENSE file in the project root for more information
33

4-
using System.Collections.Generic;
54
using Geta.NotFoundHandler.Core.Redirects;
65
using Geta.NotFoundHandler.Data;
6+
using X.PagedList;
77

88
namespace Geta.NotFoundHandler.Core.Suggestions
99
{
@@ -23,9 +23,9 @@ public DefaultSuggestionService(
2323
_suggestionRepository = suggestionRepository;
2424
}
2525

26-
public IEnumerable<SuggestionSummary> GetAllSummaries()
26+
public IPagedList<SuggestionSummary> GetSummaries(int page, int pageSize)
2727
{
28-
return _suggestionLoader.GetAllSummaries();
28+
return _suggestionLoader.GetSummaries(page, pageSize);
2929
}
3030

3131
public void AddRedirect(SuggestionRedirect suggestionRedirect)

src/Geta.NotFoundHandler/Core/Suggestions/ISuggestionService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
// Copyright (c) Geta Digital. All rights reserved.
22
// Licensed under Apache-2.0. See the LICENSE file in the project root for more information
33

4-
using System.Collections.Generic;
4+
using X.PagedList;
55

66
namespace Geta.NotFoundHandler.Core.Suggestions
77
{
88
public interface ISuggestionService
99
{
10-
IEnumerable<SuggestionSummary> GetAllSummaries();
10+
IPagedList<SuggestionSummary> GetSummaries(int page, int pageSize);
1111
void AddRedirect(SuggestionRedirect suggestionRedirect);
1212
void IgnoreSuggestion(string oldUrl);
1313
void DeleteAll();
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
// Copyright (c) Geta Digital. All rights reserved.
22
// Licensed under Apache-2.0. See the LICENSE file in the project root for more information
33

4-
using System.Collections.Generic;
54
using Geta.NotFoundHandler.Core.Suggestions;
5+
using X.PagedList;
66

77
namespace Geta.NotFoundHandler.Data
88
{
99
public interface ISuggestionLoader
1010
{
11-
IEnumerable<SuggestionSummary> GetAllSummaries();
11+
IPagedList<SuggestionSummary> GetSummaries(int page, int pageSize);
1212
}
1313
}

src/Geta.NotFoundHandler/Data/SqlSuggestionRepository.cs

Lines changed: 52 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Data;
77
using System.Linq;
88
using Geta.NotFoundHandler.Core.Suggestions;
9+
using X.PagedList;
910

1011
namespace Geta.NotFoundHandler.Data
1112
{
@@ -20,39 +21,46 @@ public SqlSuggestionRepository(IDataExecutor dataExecutor)
2021
_dataExecutor = dataExecutor;
2122
}
2223

23-
public IEnumerable<SuggestionSummary> GetAllSummaries()
24+
public IPagedList<SuggestionSummary> GetSummaries(int page, int pageSize)
2425
{
25-
var summaries = new List<SuggestionSummary>();
26-
var table = GetAllSuggestions();
26+
var table = GetSuggestionsPaged(page, pageSize);
27+
var summaries = CreateSuggestionSummaries(table);
28+
var count = CountSummaries();
29+
30+
return new StaticPagedList<SuggestionSummary>(summaries, page, pageSize, count);
31+
}
2732

28-
var suggestionsCountTable = table.DefaultView.ToTable(true, "OldUrlCount", "OldUrl");
33+
private IEnumerable<SuggestionSummary> CreateSuggestionSummaries(DataTable table)
34+
{
35+
var summaries = new List<SuggestionSummary>();
2936

30-
foreach (DataRow row in suggestionsCountTable.Rows)
37+
foreach (DataRow row in table.Rows)
3138
{
32-
var oldUrl = row["OldUrl"].ToString();
33-
39+
var oldUrl = row[0].ToString();
3440
var summary = new SuggestionSummary
3541
{
36-
OldUrl = oldUrl, Count = Convert.ToInt32(row["OldUrlCount"]), Referers = GetReferers(oldUrl, table).ToList()
42+
OldUrl = oldUrl,
43+
Count = Convert.ToInt32(row[1]),
44+
Referers = GetReferers(oldUrl).ToList()
3745
};
3846
summaries.Add(summary);
3947
}
4048

4149
return summaries;
4250
}
4351

44-
private static IEnumerable<RefererSummary> GetReferers(string url, DataTable table)
52+
private IEnumerable<RefererSummary> GetReferers(string url)
4553
{
4654
var referers = new List<RefererSummary>();
4755

48-
var referrersTable = table.Select($"OldUrl = '{url.Replace("'", "''")}'" ,"RefererCount DESC");
49-
if (referrersTable.Length == 0) return referers;
56+
var table = GetSuggestionReferers(url);
57+
if (table == null) return referers;
5058

5159
var unknownReferers = 0;
52-
foreach (var row in referrersTable)
60+
foreach (DataRow row in table.Rows)
5361
{
54-
var referer = row["Referer"].ToString() ?? string.Empty;
55-
var count = Convert.ToInt32(row["RefererCount"].ToString());
62+
var referer = row[0].ToString() ?? string.Empty;
63+
var count = Convert.ToInt32(row[1].ToString());
5664
if (referer.Trim() != string.Empty
5765
&& !referer.Contains("(null)"))
5866
{
@@ -123,20 +131,38 @@ public void Save(string oldUrl, string referer, DateTime requestedOn)
123131
_dataExecutor.ExecuteNonQuery(sqlCommand, requestedParam, refererParam, oldUrlParam);
124132
}
125133

126-
private DataTable GetAllSuggestions()
134+
private DataTable GetSuggestionsPaged(int? page, int? pageSize)
127135
{
128-
var sqlCommand = $@"
129-
SELECT c.OldUrlCount, c.OldUrl, r.Referer, COUNT(r.Referer) as RefererCount
130-
FROM
131-
(SELECT
132-
COUNT([OldUrl]) as OldUrlCount
133-
,[OldUrl]
134-
FROM {SuggestionsTable}
135-
GROUP BY [OldUrl]) c
136-
INNER JOIN {SuggestionsTable} r ON c.OldUrl = r.OldUrl
137-
GROUP by c.OldUrlCount, c.OldUrl, r.Referer
138-
ORDER BY OldUrlCount desc";
136+
var sqlCommand =
137+
$"SELECT [OldUrl], COUNT(*) as Requests FROM {SuggestionsTable} GROUP BY [OldUrl] order by Requests desc";
138+
139+
if (page.HasValue && pageSize.HasValue)
140+
{
141+
page = Math.Max(1, page.Value);
142+
var skip = (page.Value - 1) * pageSize.Value;
143+
144+
sqlCommand += $" OFFSET {skip} ROWS FETCH NEXT {pageSize.Value} ROWS ONLY";
145+
}
146+
139147
return _dataExecutor.ExecuteQuery(sqlCommand);
140148
}
149+
150+
private int CountSummaries()
151+
{
152+
var sqlCommand = $"SELECT COUNT([ID]) FROM {SuggestionsTable}";
153+
154+
return _dataExecutor.ExecuteScalar(sqlCommand);
155+
}
156+
157+
public DataTable GetSuggestionReferers(string url)
158+
{
159+
var sqlCommand =
160+
$"SELECT [Referer], COUNT(*) as Requests FROM {SuggestionsTable} where [OldUrl] = @oldUrl GROUP BY [Referer] order by Requests desc";
161+
162+
var oldUrlParam = _dataExecutor.CreateParameter("oldUrl", DbType.String, 2000);
163+
oldUrlParam.Value = url;
164+
165+
return _dataExecutor.ExecuteQuery(sqlCommand, oldUrlParam);
166+
}
141167
}
142168
}

src/Geta.NotFoundHandler/Geta.NotFoundHandler.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
<ItemGroup>
2929
<PackageReference Include="Microsoft.Data.SqlClient" Version="2.1.1" />
30+
<PackageReference Include="X.PagedList" Version="8.0.7" />
3031
</ItemGroup>
3132

3233
</Project>

0 commit comments

Comments
 (0)