28 lines
847 B
C#
28 lines
847 B
C#
using Microsoft.EntityFrameworkCore;
|
|
|
|
public class PatientRegistryService : IPatientRegistryService
|
|
{
|
|
private readonly AppDbContext _db;
|
|
|
|
public PatientRegistryService(AppDbContext db) => _db = db;
|
|
|
|
public async Task<IReadOnlyList<PatientSearchResult>> SearchAsync(string query, int limit = 20)
|
|
{
|
|
var trimmed = query.Trim();
|
|
if (trimmed.Length < 2)
|
|
return Array.Empty<PatientSearchResult>();
|
|
|
|
var pattern = $"%{trimmed}%";
|
|
|
|
return await _db.Patients
|
|
.AsNoTracking()
|
|
.Where(p =>
|
|
EF.Functions.ILike(p.FullName, pattern) ||
|
|
EF.Functions.ILike(p.Mrn, pattern))
|
|
.OrderBy(p => p.FullName)
|
|
.Take(limit)
|
|
.Select(p => new PatientSearchResult(p.Id, p.FullName, p.Mrn))
|
|
.ToListAsync();
|
|
}
|
|
}
|