Refactor EkaerHistory filtering; add count endpoint
Refactored GetEkaerHistories to use a new GetByFilter method in EkaerHistoryDbTable for SQL-compatible, flag-based filtering. Added GetEkaerHistoryCount endpoint and supporting CountByFilterAsync method. Improved status partitioning logic and clarified related comments.
This commit is contained in:
parent
b7a38c3efb
commit
3bde0b4063
|
|
@ -273,19 +273,14 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Controllers
|
|||
public async Task<List<EkaerHistory>> GetEkaerHistories(EkaerHistoryFilter ekaerHistoryFilter)
|
||||
{
|
||||
_logger.Detail($"GetEkaerHistories invoked; ekaerHistoryFilter: {ekaerHistoryFilter}");
|
||||
return await ctx.EkaerHistories.GetByFilter(ekaerHistoryFilter).ToListAsync();
|
||||
}
|
||||
|
||||
// Szerver-oldali szűrés (a tabokhoz) a StatusId int-oszlopon — a helper-ek nem fordulnak SQL-re,
|
||||
// ezért közvetlen StatusId-összehasonlítás. All / ismeretlen → minden.
|
||||
IQueryable<EkaerHistory> query = ctx.EkaerHistories.GetAll();
|
||||
query = ekaerHistoryFilter switch
|
||||
{
|
||||
EkaerHistoryFilter.ToSubmit => query.Where(eh => eh.StatusId != (int)EkaerStatus.Sent && eh.StatusId != (int)EkaerStatus.SentWithMissingData),
|
||||
EkaerHistoryFilter.Sent => query.Where(eh => eh.StatusId == (int)EkaerStatus.Sent),
|
||||
EkaerHistoryFilter.NeedsCompletion => query.Where(eh => eh.StatusId == (int)EkaerStatus.SentWithMissingData),
|
||||
_ => query,
|
||||
};
|
||||
|
||||
return await query.ToListAsync();
|
||||
[SignalR(SignalRTags.GetEkaerHistoryCount)]
|
||||
public async Task<int> GetEkaerHistoryCount(EkaerHistoryFilter ekaerHistoryFilter)
|
||||
{
|
||||
_logger.Detail($"GetEkaerHistoryCount invoked; ekaerHistoryFilter: {ekaerHistoryFilter}");
|
||||
return await ctx.EkaerHistories.CountByFilterAsync(ekaerHistoryFilter);
|
||||
}
|
||||
|
||||
[SignalR(SignalRTags.GetEkaerHistoryById)]
|
||||
|
|
|
|||
|
|
@ -20,4 +20,27 @@ public class EkaerHistoryDbTable : MgDbTableBase<EkaerHistory>
|
|||
|
||||
public Task<EkaerHistory> GetByIdAsync(int id) => GetAll().FirstOrDefaultAsync(p => p.Id == id);
|
||||
public IQueryable<EkaerHistory> GetByForeignKey(int foreignKey) => GetAll().Where(p => p.ForeignKey == foreignKey);
|
||||
|
||||
// A NAV-nál lévő partíciók fix StatusId-k; minden más (a jövőbeni új státuszok is) „beküldésre váró".
|
||||
private static readonly int[] ToSubmitStatusIds = [.. Enum.GetValues<EkaerStatus>().Select(s => (int)s).Except([(int)EkaerStatus.Sent, (int)EkaerStatus.SentWithMissingData])];
|
||||
|
||||
/// <summary>Flag-alapú szűrés a tabokhoz/count-hoz. <see cref="EkaerHistoryFilter.All"/> (= 0) → minden;
|
||||
/// egyébként a beállított flag-ek diszjunkt StatusId-partícióinak UNIÓJA (IN). A státusz-helperek (IsSent stb.)
|
||||
/// nem fordulnak SQL-re, ezért közvetlen StatusId-halmazzal szűrünk.</summary>
|
||||
public IQueryable<EkaerHistory> GetByFilter(EkaerHistoryFilter filter)
|
||||
{
|
||||
// HasFlag(All) mindig true (0 bit), ezért előbb az All-ágat zárjuk rövidre.
|
||||
if (filter == EkaerHistoryFilter.All) return GetAll();
|
||||
|
||||
var statusIds = new List<int>();
|
||||
if (filter.HasFlag(EkaerHistoryFilter.ToSubmit)) statusIds.AddRange(ToSubmitStatusIds);
|
||||
if (filter.HasFlag(EkaerHistoryFilter.Sent)) statusIds.Add((int)EkaerStatus.Sent);
|
||||
if (filter.HasFlag(EkaerHistoryFilter.NeedsCompletion)) statusIds.Add((int)EkaerStatus.SentWithMissingData);
|
||||
|
||||
return GetAll().Where(eh => statusIds.Contains(eh.StatusId));
|
||||
}
|
||||
|
||||
// A CountAsync kétértelmű (a System.Linq.Async ÉS a LinqToDB is hozza ugyanazt a nevet, no-arg hívásnál mindkettő illik)
|
||||
// → explicit a LinqToDB-é. (A ToListAsync nem ütközik, azt a hívó közvetlenül használhatja.)
|
||||
public Task<int> CountByFilterAsync(EkaerHistoryFilter filter) => LinqToDB.AsyncExtensions.CountAsync(GetByFilter(filter));
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue