private async Task <StaffReposSearchResult> Search(StaffSearchRequest request) { if (SearchStringIsAnEpaOrgId(request)) { var sr = await _staffLearnerRepository.SearchForLearnerByEpaOrgId(request); sr.DisplayEpao = true; return(sr); } var pageSize = 10; if (SearchStringIsAUln(request, out var uln)) { var sr = new StaffReposSearchResult { PageOfResults = await _staffLearnerRepository.SearchForLearnerByUln(uln, request.Page, pageSize), TotalCount = await _staffLearnerRepository.SearchForLearnerByUlnCount(uln) }; return(sr); } if (SearchStringIsACertificateReference(request)) { var sr = new StaffReposSearchResult { DisplayEpao = true, PageOfResults = await _staffLearnerRepository.SearchForLearnerByCertificateReference(request.SearchQuery) }; sr.TotalCount = sr.PageOfResults.Count(); return(sr); } return(new StaffReposSearchResult() { PageOfResults = new List <Domain.Entities.Learner>(), TotalCount = 0 }); }
public async Task <StaffReposSearchResult> SearchForLearnerByEpaOrgId(StaffSearchRequest searchRequest) { var searchResult = new StaffReposSearchResult { PageOfResults = (await _connection.QueryAsync <Learner>( @"SELECT org.EndPointAssessorOrganisationId, cert.Uln, JSON_VALUE(CertificateData, '$.LearnerGivenNames') AS GivenNames, JSON_VALUE(CertificateData, '$.LearnerFamilyName') AS FamilyName, cert.StandardCode AS StdCode, cert.UpdatedAt as LastUpdatedAt FROM Certificates cert INNER JOIN Organisations org ON org.Id = cert.OrganisationId WHERE org.EndPointAssessorOrganisationId = @epaOrgId ORDER BY cert.UpdatedAt DESC OFFSET @skip ROWS FETCH NEXT @take ROWS ONLY", new { epaOrgId = searchRequest.SearchQuery.ToLower(), skip = (searchRequest.Page - 1) * 10, take = 10 })) .ToList(), TotalCount = await _connection.ExecuteScalarAsync <int>(@"SELECT COUNT(1) FROM Certificates cert INNER JOIN Organisations org ON org.Id = cert.OrganisationId WHERE org.EndPointAssessorOrganisationId = @epaOrgId", new { epaOrgId = searchRequest.SearchQuery.ToLower() }) }; return(searchResult); }