Example #1
0
        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);
        }