Esempio n. 1
0
 private bool IsNoDisciplinesAndNoYearsOfExpFilters(RequestSearchUsers req)
 {
     return(
         req.Filter.Disciplines == null &&
         (req.Filter.YearsOfExps == null || !req.Filter.YearsOfExps.Any())
         );
 }
Esempio n. 2
0
        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()));
                }
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
 private bool IsNoLocationFilter(RequestSearchUsers req)
 {
     return(req.Filter.Locations == null || !req.Filter.Locations.Any());
 }