#112 converting some httpclient usages in main page to db queries

This commit is contained in:
Hamid Reza Mohammadi 2021-05-09 19:10:57 +04:30
parent 1389f7b473
commit ee7e05d611
3 changed files with 89 additions and 109 deletions

View File

@ -44,6 +44,9 @@ namespace GanjooRazor.Pages
/// </summary>
private readonly IAppUserService _appUserService;
/// <summary>
/// ganjoor service
/// </summary>
private readonly IGanjoorService _ganjoorService;
/// <summary>
@ -475,11 +478,12 @@ namespace GanjooRazor.Pages
var cacheKey = $"/api/ganjoor/poets?includeBio={includeBio}";
if(!_memoryCache.TryGetValue(cacheKey, out List<GanjoorPoetViewModel> poets))
{
var response = await _httpClient.GetAsync($"{APIRoot.Url}/api/ganjoor/poets?includeBio={includeBio}");
response.EnsureSuccessStatusCode();
poets = JArray.Parse(await response.Content.ReadAsStringAsync()).ToObject<List<GanjoorPoetViewModel>>();
_memoryCache.Set(cacheKey, poets);
var resPoets = await _ganjoorService.GetPoets(true, false);
if(!string.IsNullOrEmpty(resPoets.ExceptionString))
{
poets = new List<GanjoorPoetViewModel>(resPoets.Result);
_memoryCache.Set(cacheKey, poets);
}
}
Poets = poets;
@ -505,26 +509,23 @@ namespace GanjooRazor.Pages
if (!string.IsNullOrEmpty(Request.Query["p"]))
{
var pageUrlResponse = await _httpClient.GetAsync($"{APIRoot.Url}/api/ganjoor/pageurl?id={Request.Query["p"]}");
pageUrlResponse.EnsureSuccessStatusCode();
var pageUrl = JsonConvert.DeserializeObject<string>(await pageUrlResponse.Content.ReadAsStringAsync());
return Redirect(pageUrl);
var pageUrlRes = await _ganjoorService.GetPageUrlById(int.Parse(Request.Query["p"]));
return Redirect(pageUrlRes.Result);
}
await preparePoets(false);
if (!IsHomePage)
{
var pageQuery = await _httpClient.GetAsync($"{APIRoot.Url}/api/ganjoor/page?url={Request.Path}");
if (!pageQuery.IsSuccessStatusCode)
var pageRes = await _ganjoorService.GetPageByUrl(Request.Path, true);
if(!string.IsNullOrEmpty(pageRes.ExceptionString))
{
if (pageQuery.StatusCode == HttpStatusCode.NotFound)
if(pageRes.Result == null)
{
return NotFound();
}
}
pageQuery.EnsureSuccessStatusCode();
GanjoorPage = JObject.Parse(await pageQuery.Content.ReadAsStringAsync()).ToObject<GanjoorPageCompleteViewModel>();
GanjoorPage = pageRes.Result;
GanjoorPage.HtmlText = GanjoorPage.HtmlText.Replace("https://ganjoor.net/", "/").Replace("http://ganjoor.net/", "/");
switch (GanjoorPage.GanjoorPageType)
{
@ -545,14 +546,7 @@ namespace GanjooRazor.Pages
if (IsPoemPage)
{
var bannerQuery = await _httpClient.GetAsync($"{APIRoot.Url}/api/ganjoor/site/banner");
bannerQuery.EnsureSuccessStatusCode();
string bannerResponse = await bannerQuery.Content.ReadAsStringAsync();
if (!string.IsNullOrEmpty(bannerResponse))
{
Banner = JObject.Parse(bannerResponse).ToObject<GanjoorSiteBannerViewModel>();
}
Banner = (await _ganjoorService.GetARandomActiveSiteBanner()).Result;
}
}

View File

@ -35,17 +35,20 @@ namespace GanjooRazor.Pages
string metre = Request.Query["v"];
string rhyme = Request.Query["g"];
string url = $"{APIRoot.Url}/api/ganjoor/poems/similar?PageNumber={pageNumber}&PageSize=20&metre={metre}&rhyme={rhyme}";
var response = await _httpClient.GetAsync(url);
if (!response.IsSuccessStatusCode)
{
LastError = await response.Content.ReadAsStringAsync();
return;
}
response.EnsureSuccessStatusCode();
var poemsRes =
(
await _ganjoorService.GetSimilarPoems
(
new PagingParameterModel()
{
PageNumber = pageNumber,
PageSize = 20
},
metre,
rhyme,
null
)
).Result;
GanjoorPage.Title = "شعرهای ";
@ -60,13 +63,12 @@ namespace GanjooRazor.Pages
string htmlText = "";
var poems = JArray.Parse(await response.Content.ReadAsStringAsync()).ToObject<List<GanjoorPoemCompleteViewModel>>();
foreach (var poem in poems)
foreach (var poem in poemsRes.Items)
{
htmlText += $"<div class=\"sitem\" id=\"post-{poem.Id}\">{Environment.NewLine}<h2><a href=\"{poem.FullUrl}\" rel=\"bookmark\">{poem.FullTitle}</a>{Environment.NewLine}</h2>{Environment.NewLine}" +
$"<div class=\"spacer\">&nbsp;</div>{Environment.NewLine}"
@ -83,41 +85,34 @@ namespace GanjooRazor.Pages
htmlText += "<p style=\"text-align: center;\">";
string paginnationMetadata = response.Headers.GetValues("paging-headers").FirstOrDefault();
if (!string.IsNullOrEmpty(paginnationMetadata))
PaginationMetadata paginationMetadata = poemsRes.PagingMeta;
if (paginationMetadata.totalPages > 1)
{
PaginationMetadata paginationMetadata = JsonConvert.DeserializeObject<PaginationMetadata>(paginnationMetadata);
if (paginationMetadata.totalPages > 1)
GanjoorPage.Title += $" - صفحهٔ {pageNumber.ToPersianNumbers()}";
if (paginationMetadata.currentPage > 3)
{
GanjoorPage.Title += $" - صفحهٔ {pageNumber.ToPersianNumbers()}";
if (paginationMetadata.currentPage > 3)
htmlText += $"[<a href=\"/simi/?v={Uri.EscapeUriString(metre)}&g={Uri.EscapeUriString(rhyme)}&page=1\">صفحهٔ اول</a>] …";
}
for (int i = (paginationMetadata.currentPage - 2); i <= (paginationMetadata.currentPage + 2); i++)
{
if (i >= 1 && i <= paginationMetadata.totalPages)
{
htmlText += $"[<a href=\"/simi/?v={Uri.EscapeUriString(metre)}&g={Uri.EscapeUriString(rhyme)}&page=1\">صفحهٔ اول</a>] …";
}
for (int i = (paginationMetadata.currentPage - 2); i <= (paginationMetadata.currentPage + 2); i++)
{
if (i >= 1 && i <= paginationMetadata.totalPages)
htmlText += " [";
if (i == paginationMetadata.currentPage)
{
htmlText += " [";
if (i == paginationMetadata.currentPage)
{
htmlText += i.ToPersianNumbers();
}
else
{
htmlText += $"<a href=\"/simi/?v={Uri.EscapeUriString(metre)}&g={Uri.EscapeUriString(rhyme)}&page={i}\">{i.ToPersianNumbers()}</a>";
}
htmlText += "] ";
htmlText += i.ToPersianNumbers();
}
else
{
htmlText += $"<a href=\"/simi/?v={Uri.EscapeUriString(metre)}&g={Uri.EscapeUriString(rhyme)}&page={i}\">{i.ToPersianNumbers()}</a>";
}
htmlText += "] ";
}
if (paginationMetadata.totalPages > (paginationMetadata.currentPage + 2))
{
htmlText += $"… [<a href=\"/simi/?v={Uri.EscapeUriString(metre)}&g={Uri.EscapeUriString(rhyme)}&page={paginationMetadata.totalPages}\">صفحهٔ آخر</a>]";
}
}
if (paginationMetadata.totalPages > (paginationMetadata.currentPage + 2))
{
htmlText += $"… [<a href=\"/simi/?v={Uri.EscapeUriString(metre)}&g={Uri.EscapeUriString(rhyme)}&page={paginationMetadata.totalPages}\">صفحهٔ آخر</a>]";
}
}

View File

@ -31,17 +31,17 @@ namespace GanjooRazor.Pages
string metre = Request.Query["v"];
int poetId = string.IsNullOrEmpty(Request.Query["a"]) ? 0 : int.Parse(Request.Query["a"]);
string url = $"{APIRoot.Url}/api/ganjoor/poems/similar?PageNumber={pageNumber}&PageSize=20&metre={metre}&poetId={poetId}";
var response = await _httpClient.GetAsync(url);
if (!response.IsSuccessStatusCode)
{
LastError = await response.Content.ReadAsStringAsync();
return;
}
response.EnsureSuccessStatusCode();
var poemsRes = await _ganjoorService.GetSimilarPoems
(
new PagingParameterModel()
{
PageNumber = pageNumber,
PageSize = 20
},
metre: metre,
rhyme: null,
poetId: poetId
);
GanjoorPage.Title = "شعرهای ";
if (poetId != 0)
@ -65,13 +65,9 @@ namespace GanjooRazor.Pages
htmlText += $"</div>{Environment.NewLine}";
}
var poems = JArray.Parse(await response.Content.ReadAsStringAsync()).ToObject<List<GanjoorPoemCompleteViewModel>>();
foreach (var poem in poems)
foreach (var poem in poemsRes.Result.Items)
{
htmlText += $"<div class=\"sitem\" id=\"post-{poem.Id}\">{Environment.NewLine}<h2><a href=\"{poem.FullUrl}\" rel=\"bookmark\">{poem.FullTitle}</a>{Environment.NewLine}</h2>{Environment.NewLine}" +
$"<div class=\"spacer\">&nbsp;</div>{Environment.NewLine}"
@ -88,42 +84,37 @@ namespace GanjooRazor.Pages
htmlText += "<p style=\"text-align: center;\">";
string paginnationMetadata = response.Headers.GetValues("paging-headers").FirstOrDefault();
if (!string.IsNullOrEmpty(paginnationMetadata))
PaginationMetadata paginationMetadata = poemsRes.Result.PagingMeta;
string queryPoetId = poetId == 0 ? "" : $"&a={poetId}";
if (paginationMetadata.totalPages > 1)
{
GanjoorPage.Title += $" - صفحهٔ {pageNumber.ToPersianNumbers()}";
PaginationMetadata paginationMetadata = JsonConvert.DeserializeObject<PaginationMetadata>(paginnationMetadata);
string queryPoetId = poetId == 0 ? "" : $"&a={poetId}";
if (paginationMetadata.totalPages > 1)
if (paginationMetadata.currentPage > 3)
{
GanjoorPage.Title += $" - صفحهٔ {pageNumber.ToPersianNumbers()}";
if (paginationMetadata.currentPage > 3)
htmlText += $"[<a href=\"/vazn/?v={Uri.EscapeUriString(metre)}&page=1{queryPoetId}\">صفحهٔ اول</a>] …";
}
for (int i = (paginationMetadata.currentPage - 2); i <= (paginationMetadata.currentPage + 2); i++)
{
if (i >= 1 && i <= paginationMetadata.totalPages)
{
htmlText += $"[<a href=\"/vazn/?v={Uri.EscapeUriString(metre)}&page=1{queryPoetId}\">صفحهٔ اول</a>] …";
}
for (int i = (paginationMetadata.currentPage - 2); i <= (paginationMetadata.currentPage + 2); i++)
{
if (i >= 1 && i <= paginationMetadata.totalPages)
htmlText += " [";
if (i == paginationMetadata.currentPage)
{
htmlText += " [";
if (i == paginationMetadata.currentPage)
{
htmlText += i.ToPersianNumbers();
}
else
{
htmlText += $"<a href=\"/vazn/?v={Uri.EscapeUriString(metre)}&page={i}{queryPoetId}\">{i.ToPersianNumbers()}</a>";
}
htmlText += "] ";
htmlText += i.ToPersianNumbers();
}
else
{
htmlText += $"<a href=\"/vazn/?v={Uri.EscapeUriString(metre)}&page={i}{queryPoetId}\">{i.ToPersianNumbers()}</a>";
}
htmlText += "] ";
}
if (paginationMetadata.totalPages > (paginationMetadata.currentPage + 2))
{
htmlText += $"… [<a href=\"/vazn/?v={Uri.EscapeUriString(metre)}&page={paginationMetadata.totalPages}{queryPoetId}\">صفحهٔ آخر</a>]";
}
}
if (paginationMetadata.totalPages > (paginationMetadata.currentPage + 2))
{
htmlText += $"… [<a href=\"/vazn/?v={Uri.EscapeUriString(metre)}&page={paginationMetadata.totalPages}{queryPoetId}\">صفحهٔ آخر</a>]";
}
}