optimize package update queries

This commit is contained in:
sbwalker 2023-08-25 15:42:45 -04:00
parent 417c8d7874
commit bdd1ba05e8
5 changed files with 45 additions and 7 deletions

View File

@ -37,7 +37,7 @@ else
</div>
</div>
<Pager Items="@_moduleDefinitions.Where(item => item.Categories.Contains(_category))">
<Pager Items="@_moduleDefinitions">
<Header>
<th style="width: 1px;">&nbsp;</th>
<th style="width: 1px;">&nbsp;</th>
@ -99,6 +99,7 @@ else
}
@code {
private List<ModuleDefinition> _allModuleDefinitions;
private List<ModuleDefinition> _moduleDefinitions;
private List<Package> _packages;
private List<string> _categories = new List<string>();
@ -110,9 +111,9 @@ else
{
try
{
_moduleDefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(PageState.Site.SiteId);
_packages = await PackageService.GetPackagesAsync("module");
_categories = _moduleDefinitions.SelectMany(m => m.Categories.Split(',')).Distinct().ToList();
_allModuleDefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(PageState.Site.SiteId);
_categories = _allModuleDefinitions.SelectMany(m => m.Categories.Split(',')).Distinct().ToList();
await LoadModuleDefinitions();
}
catch (Exception ex)
{
@ -124,6 +125,12 @@ else
}
}
private async Task LoadModuleDefinitions()
{
_moduleDefinitions = _allModuleDefinitions.Where(item => item.Categories.Contains(_category)).ToList();
_packages = await PackageService.GetPackagesAsync(_moduleDefinitions.Select(item => item.PackageName).ToList());
}
private string PurchaseLink(string packagename)
{
string link = "";
@ -205,9 +212,9 @@ else
}
}
private void CategoryChanged(ChangeEventArgs e)
private async Task CategoryChanged(ChangeEventArgs e)
{
_category = (string)e.Value;
StateHasChanged();
await LoadModuleDefinitions();
}
}

View File

@ -79,7 +79,7 @@ else
try
{
_themes = await ThemeService.GetThemesAsync();
_packages = await PackageService.GetPackagesAsync("theme");
_packages = await PackageService.GetPackagesAsync(_themes.Select(item => item.PackageName).ToList());
}
catch (Exception ex)
{

View File

@ -38,6 +38,13 @@ namespace Oqtane.Services
/// <returns></returns>
Task<List<Package>> GetPackagesAsync(string type, string search, string price, string package, string sort);
/// <summary>
/// Returns a list of packages matching the list of package names
/// </summary>
/// <param name="names"></param>
/// <returns></returns>
Task<List<Package>> GetPackagesAsync(List<string> packagenames);
/// <summary>
/// Returns a specific package
/// </summary>

View File

@ -31,6 +31,11 @@ namespace Oqtane.Services
return await GetJsonAsync<List<Package>>($"{Apiurl}?type={type}&search={WebUtility.UrlEncode(search)}&price={price}&package={package}&sort={sort}");
}
public async Task<List<Package>> GetPackagesAsync(List<string> packagenames)
{
return await GetJsonAsync<List<Package>>($"{Apiurl}/list/?names={string.Join(",", packagenames)}");
}
public async Task<Package> GetPackageAsync(string packageId, string version)
{
return await PostJsonAsync<Package>($"{Apiurl}?packageid={packageId}&version={version}", null);

View File

@ -51,6 +51,25 @@ namespace Oqtane.Controllers
return packages;
}
// GET: api/<controller>/list/?names=x,y,z
[HttpGet("list")]
public async Task<IEnumerable<Package>> GetPackages(string names)
{
// get packages
List<Package> packages = new List<Package>();
var url = _configManager.GetSetting("PackageRegistryUrl", Constants.PackageRegistryUrl);
if (!string.IsNullOrEmpty(url) && !string.IsNullOrEmpty(names))
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Referer", HttpContext.Request.Scheme + "://" + HttpContext.Request.Host.Value);
client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(Constants.PackageId, Constants.Version));
packages = await GetJson<List<Package>>(client, url + $"/api/registry/list/?id={_configManager.GetInstallationId()}&version={Constants.Version}&list={names}");
}
}
return packages;
}
[HttpPost]
[Authorize(Roles = RoleNames.Host)]
public async Task<Package> Post(string packageid, string version, string folder)