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());
        }