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(db), IMasterDataRepository { public Task> 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> 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 GetByIdAsync(Guid id, CancellationToken ct = default) => Set.FirstOrDefaultAsync(m => m.Id == id, ct); public Task 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); }