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