public SearchResponseDTO <TeamSearchItemDTO> SearchTeams(SearchTeamParameterDTO parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            SearchResponseDTO <Team> result = SearchTeamsWithQuery(parameters);

            var items = result.Items.Select(i => new TeamSearchItemDTO
            {
                Id              = i.Id.ToString(),
                Name            = i.Name,
                Description     = i.Description,
                CompanyName     = i.Company?.Name,
                CompanyId       = i.CompanyId,
                CreatedOn       = i.CreatedOn,
                NumberOfMembers = i.Members.Count(),
                HourHiringRate  = GetTeamHiringRate(i.Members),
                Technologies    = _mapper.Map <IEnumerable <TechnologyDTO> >(i.Members.Select(m => m.PrimaryTechnology).Distinct()),
            });

            return(new SearchResponseDTO <TeamSearchItemDTO>
            {
                Items = items,
                TotalCount = result.TotalCount
            });
        }
        private SearchResponseDTO <Team> SearchTeamsWithQuery(SearchTeamParameterDTO parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            if (parameters.Page.HasValue && parameters.Page.Value < 0 ||
                parameters.PerPage.HasValue && parameters.PerPage.Value < 0)
            {
                throw new InvalidPaginationParametersException();
            }

            IQueryable <Team> query = GetTeamsSearchQuery(parameters);

            int totalCount = query.Count();

            if (parameters.Page.HasValue && parameters.Page != 0 && parameters.PerPage.HasValue)
            {
                query = query.Skip((parameters.Page.Value - 1) * parameters.PerPage.Value);
            }

            if (parameters.PerPage.HasValue)
            {
                query = query.Take(parameters.PerPage.Value);
            }

            List <Team> teams = query.ToList();

            return(new SearchResponseDTO <Team>
            {
                Items = teams,
                TotalCount = totalCount
            });
        }
Example #3
0
        public async Task <IActionResult> Filter([FromQuery] SearchTeamParameterDTO parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            parameters.CurrentUserCompanyId = (await GetCurrentUser()).CompanyId;
            SearchResponseDTO <TeamSearchItemDTO> result = _service.SearchTeams(parameters);

            return(Ok(result));
        }
        private IQueryable <Team> GetTeamsSearchQuery(SearchTeamParameterDTO parameters)
        {
            List <Technology> technologies = string.IsNullOrEmpty(parameters.Technologies) ?
                                             new List <Technology>() :
                                             parameters.Technologies.Split(',').Select(t => (Technology)Convert.ToInt32(t)).ToList();

            IQueryable <Team> query = _queryBuilder.SetBaseTeamsInfo()
                                      .SetCompanyId(parameters.CompanyId)
                                      .SetSearchTerm(parameters.SearchTerm)
                                      .SetTechnologies(technologies)
                                      .SetMyTeams(parameters.MyTeams, parameters.CurrentUserCompanyId)
                                      .SetNumberOfMembers(parameters.MinNumberOfMembers, parameters.MaxNumberOfMembers)
                                      .Build();

            return(query);
        }