Minor search provider enhancement. Minor UI updates.
This commit is contained in:
@@ -89,13 +89,13 @@ public abstract class SearchProvider<TItem, TCriteria, TSortField, TBaseQuery> :
|
||||
.Take(options.PageSize)
|
||||
.ToArrayAsync(cancellationToken);
|
||||
|
||||
Dictionary<int, TItem> items = await GetItems(ids);
|
||||
Dictionary<int, TItem> items = await GetItems(options.Criteria, ids);
|
||||
|
||||
return [.. ids.Select(uniqueId => items[uniqueId])];
|
||||
}
|
||||
else
|
||||
{
|
||||
IQueryable<TItem> selectQuery = GetSelectQuery(orderedQuery);
|
||||
IQueryable<TItem> selectQuery = GetSelectQuery(options.Criteria, orderedQuery);
|
||||
|
||||
return await selectQuery
|
||||
.Skip((options.PageNumber - 1) * options.PageSize)
|
||||
@@ -107,7 +107,7 @@ public abstract class SearchProvider<TItem, TCriteria, TSortField, TBaseQuery> :
|
||||
protected abstract Expression<Func<TBaseQuery, object?>> GetSortExpression(TSortField field);
|
||||
protected abstract IEnumerable<(Expression<Func<TBaseQuery, object>> Selector, SortDirection Dir)> GetDefaultSortChain();
|
||||
protected abstract IQueryable<int> GetSelectIdQuery(IOrderedQueryable<TBaseQuery> query);
|
||||
protected abstract IQueryable<TItem> GetSelectQuery(IOrderedQueryable<TBaseQuery> query);
|
||||
protected abstract Task<Dictionary<int, TItem>> GetItems(int[] ids);
|
||||
protected abstract IQueryable<TItem> GetSelectQuery(TCriteria criteria, IOrderedQueryable<TBaseQuery> query);
|
||||
protected abstract Task<Dictionary<int, TItem>> GetItems(TCriteria criteria, int[] ids);
|
||||
protected virtual Task PostLoadAsync(IList<TItem> items, CancellationToken cancellationToken) => Task.CompletedTask;
|
||||
}
|
||||
@@ -141,7 +141,7 @@ public class CircleSearchProvider(AppDbContext context) : SearchProvider<CircleS
|
||||
return query.Select(x => x.Circle.CircleId);
|
||||
}
|
||||
|
||||
protected override IQueryable<CircleSearchItem> GetSelectQuery(IOrderedQueryable<CircleQuery> query)
|
||||
protected override IQueryable<CircleSearchItem> GetSelectQuery(CircleSearchCriteria criteria, IOrderedQueryable<CircleQuery> query)
|
||||
{
|
||||
// Join to VoiceWorks by LatestProductId to fill HasImage / SalesDate
|
||||
var selected =
|
||||
@@ -213,7 +213,7 @@ public class CircleSearchProvider(AppDbContext context) : SearchProvider<CircleS
|
||||
return selected;
|
||||
}
|
||||
|
||||
protected override async Task<Dictionary<int, CircleSearchItem>> GetItems(int[] ids)
|
||||
protected override async Task<Dictionary<int, CircleSearchItem>> GetItems(CircleSearchCriteria criteria, int[] ids)
|
||||
{
|
||||
// Join to VoiceWorks by LatestProductId to fill HasImage / SalesDate
|
||||
var selected =
|
||||
|
||||
@@ -57,7 +57,7 @@ public class CreatorSearchProvider(AppDbContext context) : SearchProvider<Creato
|
||||
yield return (x => x.Name, SortDirection.Ascending);
|
||||
}
|
||||
|
||||
protected override IOrderedQueryable<CreatorSearchItem> GetSelectQuery(IOrderedQueryable<CreatorSearchItem> query)
|
||||
protected override IOrderedQueryable<CreatorSearchItem> GetSelectQuery(CreatorSearchCriteria criteria, IOrderedQueryable<CreatorSearchItem> query)
|
||||
{
|
||||
return query;
|
||||
}
|
||||
@@ -67,7 +67,7 @@ public class CreatorSearchProvider(AppDbContext context) : SearchProvider<Creato
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
protected override Task<Dictionary<int, CreatorSearchItem>> GetItems(int[] ids)
|
||||
protected override Task<Dictionary<int, CreatorSearchItem>> GetItems(CreatorSearchCriteria criteria, int[] ids)
|
||||
{
|
||||
return Task.FromResult(new Dictionary<int, CreatorSearchItem>());
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ public class TagSearchProvider(AppDbContext context) : SearchProvider<TagSearchI
|
||||
yield return (x => x.Name, SortDirection.Ascending);
|
||||
}
|
||||
|
||||
protected override IOrderedQueryable<TagSearchItem> GetSelectQuery(IOrderedQueryable<TagSearchItem> query)
|
||||
protected override IOrderedQueryable<TagSearchItem> GetSelectQuery(TagSearchCriteria criteria, IOrderedQueryable<TagSearchItem> query)
|
||||
{
|
||||
return query;
|
||||
}
|
||||
@@ -72,7 +72,7 @@ public class TagSearchProvider(AppDbContext context) : SearchProvider<TagSearchI
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
protected override Task<Dictionary<int, TagSearchItem>> GetItems(int[] ids)
|
||||
protected override Task<Dictionary<int, TagSearchItem>> GetItems(TagSearchCriteria criteria, int[] ids)
|
||||
{
|
||||
return Task.FromResult(new Dictionary<int, TagSearchItem>());
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using JSMR.Application.Common.Search;
|
||||
using JSMR.Application.Enums;
|
||||
using JSMR.Application.VoiceWorks.Queries.Search;
|
||||
using JSMR.Domain.Entities;
|
||||
using JSMR.Domain.Enums;
|
||||
@@ -355,7 +356,7 @@ public class VoiceWorkSearchProvider(AppDbContext context, IVoiceWorkFullTextSea
|
||||
return query.Select(x => x.VoiceWork.VoiceWorkId);
|
||||
}
|
||||
|
||||
protected override IQueryable<VoiceWorkSearchResult> GetSelectQuery(IOrderedQueryable<VoiceWorkQuery> query)
|
||||
protected override IQueryable<VoiceWorkSearchResult> GetSelectQuery(VoiceWorkSearchCriteria criteria, IOrderedQueryable<VoiceWorkQuery> query)
|
||||
{
|
||||
var result =
|
||||
from q in query
|
||||
@@ -368,9 +369,9 @@ public class VoiceWorkSearchProvider(AppDbContext context, IVoiceWorkFullTextSea
|
||||
VoiceWorkId = voiceWork.VoiceWorkId,
|
||||
ProductId = voiceWork.ProductId,
|
||||
OriginalProductId = voiceWork.OriginalProductId,
|
||||
ProductName = englishVoiceWork != null ? englishVoiceWork.ProductName : voiceWork.ProductName,
|
||||
ProductName = criteria.Locale == Locale.English && englishVoiceWork != null ? englishVoiceWork.ProductName : voiceWork.ProductName,
|
||||
ProductUrl = "http://www.dlsite.com/maniax/" + productLinkPage + "/=/product_id/" + voiceWork.ProductId + ".html",
|
||||
Description = englishVoiceWork != null ? englishVoiceWork.Description : voiceWork.Description,
|
||||
Description = criteria.Locale == Locale.English && englishVoiceWork != null ? englishVoiceWork.Description : voiceWork.Description,
|
||||
Favorite = voiceWork.Favorite,
|
||||
HasImage = voiceWork.HasImage,
|
||||
Maker = circle.Name,
|
||||
@@ -390,7 +391,7 @@ public class VoiceWorkSearchProvider(AppDbContext context, IVoiceWorkFullTextSea
|
||||
return result;
|
||||
}
|
||||
|
||||
protected override async Task<Dictionary<int, VoiceWorkSearchResult>> GetItems(int[] ids)
|
||||
protected override async Task<Dictionary<int, VoiceWorkSearchResult>> GetItems(VoiceWorkSearchCriteria criteria, int[] ids)
|
||||
{
|
||||
var result =
|
||||
from voiceWork in context.VoiceWorks.AsNoTracking()
|
||||
@@ -405,9 +406,9 @@ public class VoiceWorkSearchProvider(AppDbContext context, IVoiceWorkFullTextSea
|
||||
VoiceWorkId = voiceWork.VoiceWorkId,
|
||||
ProductId = voiceWork.ProductId,
|
||||
OriginalProductId = voiceWork.OriginalProductId,
|
||||
ProductName = englishVoiceWork != null ? englishVoiceWork.ProductName : voiceWork.ProductName,
|
||||
ProductName = criteria.Locale == Locale.English && englishVoiceWork != null ? englishVoiceWork.ProductName : voiceWork.ProductName,
|
||||
ProductUrl = "http://www.dlsite.com/maniax/" + productLinkPage + "/=/product_id/" + voiceWork.ProductId + ".html",
|
||||
Description = englishVoiceWork != null ? englishVoiceWork.Description : voiceWork.Description,
|
||||
Description = criteria.Locale == Locale.English && englishVoiceWork != null ? englishVoiceWork.Description : voiceWork.Description,
|
||||
Favorite = voiceWork.Favorite,
|
||||
HasImage = voiceWork.HasImage,
|
||||
Maker = circle.Name,
|
||||
|
||||
Reference in New Issue
Block a user