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

View File

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

View File

@ -38,6 +38,13 @@ namespace Oqtane.Services
/// <returns></returns> /// <returns></returns>
Task<List<Package>> GetPackagesAsync(string type, string search, string price, string package, string sort); 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> /// <summary>
/// Returns a specific package /// Returns a specific package
/// </summary> /// </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}"); 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) public async Task<Package> GetPackageAsync(string packageId, string version)
{ {
return await PostJsonAsync<Package>($"{Apiurl}?packageid={packageId}&version={version}", null); return await PostJsonAsync<Package>($"{Apiurl}?packageid={packageId}&version={version}", null);

View File

@ -51,6 +51,25 @@ namespace Oqtane.Controllers
return packages; 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] [HttpPost]
[Authorize(Roles = RoleNames.Host)] [Authorize(Roles = RoleNames.Host)]
public async Task<Package> Post(string packageid, string version, string folder) public async Task<Package> Post(string packageid, string version, string folder)