Exemple #1
0
        public SearchResponse Search(string searchTerm)
        {
            if (string.IsNullOrWhiteSpace(searchTerm) || searchTerm.Trim().Length < 2)
            {
                return(new SearchResponse());
            }

            IEnumerable <DomainObjects.Advisor.Advisor> advisors = null;
            IEnumerable <DomainObjects.Asset.Asset>     assets   = null;

            Parallel.Invoke(() => advisors = AdvisorBusiness.ListByName(searchTerm), () => assets = AssetBusiness.ListByNameOrCode(searchTerm));

            if (!assets.Any() && !advisors.Any())
            {
                return(new SearchResponse());
            }

            var response = new SearchResponse();

            foreach (DomainObjects.Advisor.Advisor advisor in advisors)
            {
                response.Advisors.Add(new SearchResponse.AdvisorResult()
                {
                    Id          = advisor.Id,
                    Description = advisor.Description,
                    Name        = advisor.Name,
                    UrlGuid     = advisor.UrlGuid.ToString()
                });
            }
            foreach (DomainObjects.Asset.Asset asset in assets)
            {
                response.Assets.Add(new SearchResponse.AssetResult()
                {
                    Id                = asset.Id,
                    Code              = asset.Code,
                    Name              = asset.Name,
                    MarketCap         = asset.MarketCap,
                    CirculatingSupply = asset.CirculatingSupply
                });
            }
            response.Advisors = response.Advisors.OrderBy(c => c.Name).ToList();
            response.Assets   = response.Assets.OrderByDescending(c => c.MarketCap).ThenBy(c => c.Name).ToList();
            return(response);
        }