46 lines
1.8 KiB
C#
46 lines
1.8 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using mws.backend.dotnet.application.Common;
|
|
using mws.backend.dotnet.application.Common.Repositories;
|
|
using mws.backend.dotnet.application.MasterData;
|
|
using mws.backend.dotnet.domain.MasterData;
|
|
|
|
namespace mws.backend.dotnet.infrastructure.Persistence.Repositories;
|
|
|
|
public class MasterDataRepository(AppDbContext db) : RepositoryBase<MasterDataEntry>(db), IMasterDataRepository
|
|
{
|
|
public Task<PagedResult<MasterDataEntry>> GetAllAsync(MasterDataFilter filter, int page, int pageSize, CancellationToken ct = default)
|
|
{
|
|
var query = Set.AsQueryable();
|
|
|
|
if (!string.IsNullOrWhiteSpace(filter.Group))
|
|
{
|
|
query = query.Where(m => m.Group == filter.Group);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(filter.Term))
|
|
{
|
|
var lower = filter.Term.Trim().ToLower();
|
|
query = query.Where(m => m.Label.ToLower().Contains(lower) || m.Value.ToLower().Contains(lower));
|
|
}
|
|
|
|
if (filter.IsActive is { } active)
|
|
{
|
|
query = query.Where(m => m.IsActive == active);
|
|
}
|
|
|
|
return query.OrderBy(m => m.Group).ThenBy(m => m.SortOrder).ThenBy(m => m.Label)
|
|
.ToPagedResultAsync(page, pageSize, ct);
|
|
}
|
|
|
|
public Task<List<MasterDataEntry>> GetActiveByGroupAsync(string group, CancellationToken ct = default) =>
|
|
Set.Where(m => m.Group == group && m.IsActive)
|
|
.OrderBy(m => m.SortOrder).ThenBy(m => m.Label)
|
|
.ToListAsync(ct);
|
|
|
|
public Task<MasterDataEntry?> GetByIdAsync(Guid id, CancellationToken ct = default) =>
|
|
Set.FirstOrDefaultAsync(m => m.Id == id, ct);
|
|
|
|
public Task<bool> ExistsAsync(string group, string value, Guid? excludeId, CancellationToken ct = default) =>
|
|
Set.AnyAsync(m => m.Group == group && m.Value == value && (excludeId == null || m.Id != excludeId), ct);
|
|
}
|