private bool IsNoDisciplinesAndNoYearsOfExpFilters(RequestSearchUsers req) { return( req.Filter.Disciplines == null && (req.Filter.YearsOfExps == null || !req.Filter.YearsOfExps.Any()) ); }
public async Task <IActionResult> SearchUsers([FromBody] RequestSearchUsers req) { if (req == null) { return(StatusCode(StatusCodes.Status400BadRequest, new BadRequestException("The given user is null / Request Body cannot be read"))); } try { var rowsPerPage = 50; var users = await usersRepository.GetAllUserResourcesOnFilter(req, rowsPerPage); if (users == null || !users.Any()) { var error = new NotFoundException("No users data found"); return(StatusCode(StatusCodes.Status404NotFound, new CustomException <NotFoundException>(error).GetException())); } bool isLastPage = (users.Count() <= rowsPerPage); if (!isLastPage) { var usersList = users.ToList(); usersList.RemoveAt(rowsPerPage); users = usersList; } var usersSummary = mapper.Map <IEnumerable <UserResource>, IEnumerable <UserSummary> >(users); var extra = new { requestBody = req, size = usersSummary.Count(), isLastPage = isLastPage, maxPages = users.Select(u => u.MaxPages).FirstOrDefault() }; var response = new OkResponse <IEnumerable <UserSummary> >(usersSummary, "Everything is Ok", extra); return(StatusCode(StatusCodes.Status200OK, response)); } catch (Exception err) { var errMessage = $"Source: {err.Source}\n Message: {err.Message}\n StackTrace: {err.StackTrace}\n"; if (err is SqlException) { var error = new InternalServerException(errMessage); return(StatusCode(StatusCodes.Status500InternalServerError, new CustomException <InternalServerException>(error).GetException())); } else { var error = new BadRequestException(errMessage); return(StatusCode(StatusCodes.Status400BadRequest, new CustomException <BadRequestException>(error).GetException())); } } }
public async Task <IEnumerable <UserResource> > GetAllUserResourcesOnFilter(RequestSearchUsers req, int rowsPerPage) { if (req.Filter == null || (IsNoDisciplinesAndNoYearsOfExpFilters(req) && IsNoLocationFilter(req))) { return(await GetAllUserResources(req.SearchWord, req.OrderKey, req.Order, req.Page, rowsPerPage)); } using var connection = new SqlConnection(connectionString); var filteredLocations = await GetFilteredLocations(connection, req.Filter.Locations); var filteredUtilization = GetFilteredUtilization(req.Filter.Utilization); var filteredDisciplinesSkills = await GetFilteredDisciplines(connection, req.Filter.Disciplines); var filteredYearsOfExps = await GetFilteredYearsOfExps(connection, req.Filter.YearsOfExps); var sql = IsNoDisciplinesAndNoYearsOfExpFilters(req) ? GetSqlForOnlyLocationFilter() : GetSqlForMoreThanTwoFilters(); connection.Open(); var users = await connection.QueryAsync <UserResource>(sql, new { Provinces = filteredLocations["provinces"], Cities = filteredLocations["cities"], Disciplines = filteredDisciplinesSkills["disciplines"], Skills = filteredDisciplinesSkills["skills"], SearchWord = GetFilteredSearchWord(req.SearchWord), YearsOfExps = filteredYearsOfExps, EndDate = GetFilteredEndDate(req.Filter.EndDate), StartDate = GetFilteredStartDate(req.Filter.StartDate), UtilMin = filteredUtilization.Min, UtilMax = filteredUtilization.Max, PageNumber = (req.Page == 0) ? 1 : req.Page, RowsPerPage = rowsPerPage, OrderKey = GetFilteredOrderKey(req.OrderKey), Order = GetFilteredOrder(req.Order) }); connection.Close(); return(users); // return GetSorted(users, req.OrderKey, req.Order); }
private bool IsNoLocationFilter(RequestSearchUsers req) { return(req.Filter.Locations == null || !req.Filter.Locations.Any()); }