public IActionResult Search( [FromQuery] [SwaggerParameter("Pupil search criteria.", Required = true)] PupilsSearchRequest request, [FromRoute] [SwaggerParameter("The checking window to request pupil or pupils from", Required = true)] CheckingWindow checkingWindow) { if (!ModelState.IsValid) return BadRequest(ModelState); var pupils = _pupilService.QueryPupils(checkingWindow, request); var response = new GetResponse<IEnumerable<PupilRecord>> { Result = pupils, Error = new Error() }; return Ok(response); }
public List <PupilRecord> QueryPupils(CheckingWindow checkingWindow, PupilsSearchRequest query) { var repoQuery = _documentRepository.Get <PupilProxy>(GetCollection(checkingWindow)); if (!string.IsNullOrWhiteSpace(query.URN)) { repoQuery = repoQuery.Where(p => p.URN == query.URN); } if (!string.IsNullOrWhiteSpace(query.ID)) { repoQuery = repoQuery.Where(p => p.UPN.StartsWith(query.ID, StringComparison.InvariantCultureIgnoreCase) || p.ULN.StartsWith(query.ID, StringComparison.InvariantCultureIgnoreCase)); } if (!string.IsNullOrWhiteSpace(query.Name)) { var nameParts = query.Name.Split(' '); foreach (var namePart in nameParts) { repoQuery = repoQuery.Where(p => p.Forename.StartsWith(namePart, StringComparison.InvariantCultureIgnoreCase) || p.Surname.StartsWith(namePart, StringComparison.InvariantCultureIgnoreCase)); } } var dtos = repoQuery .Select(p => new PupilRecord { Id = p.id, ForeName = p.Forename, Surname = p.Surname, ULN = p.ULN, UPN = p.UPN, Gender = p.Gender, DateOfBirth = p.DOB }).Take(PageSize); return(dtos.ToList()); }