public AuctionListResponseModel GetActiveAuctions(AuctionListRequestModel request)
        {
            ValidateAuctionList(request);

            // note: kke: if the user is not logged in, cant use search functionality!
            if (m_permissionService.GetUserId().IsNotSpecified())
            {
                request.SearchValue = null;
            }

            (int startFrom, int endAt) = Pagination.GetOffsetAndSize(request);

            // Note: kke: load only active auctions.
            DateTime fromDate = DateTime.UtcNow;

            AuctionListResponseModel auctionsResponse = new AuctionListResponseModel()
            {
                Auctions  = m_auctionsRepository.GetActiveAuctions(request, startFrom, endAt, fromDate).ToList(),
                ItemCount = m_auctionsRepository.ActiveAuctionCount().Count()
            };

            Pagination.PaginateResponse(ref auctionsResponse, TableItem.DefaultSize, request.CurrentPage);

            return(auctionsResponse);
        }
        /// <summary>
        /// Validate auction list permissions and input values
        /// </summary>
        /// <param name="request"></param>
        private void ValidateAuctionList(AuctionListRequestModel request)
        {
            if (request.IsNotSpecified())
            {
                throw new WebApiException(HttpStatusCode.BadRequest, AuctionErrorMessages.MissingAuctionsInformation);
            }
            if (request.SortingDirection.IsNotSpecified())
            {
                throw new WebApiException(HttpStatusCode.BadRequest, AuctionErrorMessages.MissingAuctionsInformation);
            }
            if (request.OffsetStart < 0)
            {
                throw new WebApiException(HttpStatusCode.BadRequest, AuctionErrorMessages.MissingAuctionsInformation);
            }
            if (request.OffsetEnd.IsNotSpecified())
            {
                throw new WebApiException(HttpStatusCode.BadRequest, AuctionErrorMessages.MissingAuctionsInformation);
            }
            if (request.CurrentPage < 0)
            {
                throw new WebApiException(HttpStatusCode.BadRequest, AuctionErrorMessages.MissingAuctionsInformation);
            }
            if (request.SortingDirection != "asc" && request.SortingDirection != "desc")
            {
                throw new WebApiException(HttpStatusCode.BadRequest, AuctionErrorMessages.MissingAuctionsInformation);
            }

            // todo: kke: validate sort by columns list!
            // todo: kke: validate if smth else is not missing here!
            if (request.SortByColumn.IsNotSpecified())
            {
                throw new WebApiException(HttpStatusCode.BadRequest, AuctionErrorMessages.MissingAuctionsInformation);
            }
            List <string> allowedSortByColumns = new List <string> {
                "AuctionName", "AuctionStartingPrice", "AuctionStartDate", "AuctionEndDate"
            };

            if (allowedSortByColumns.Contains(request.SortByColumn) == false)
            {
                throw new WebApiException(HttpStatusCode.BadRequest, AuctionErrorMessages.MissingAuctionsInformation);
            }
        }
        public AuctionListResponseModel GetAllAuctions(AuctionListRequestModel request)
        {
            ValidateAuctionList(request);

            // TODO: kke: validate request.SearchValue to be valid value!

            (int startFrom, int endAt) = Pagination.GetOffsetAndSize(request);

            // Note: kke: load all possible auctions.
            DateTime fromDate = new DateTime(1900, 1, 1);

            AuctionListResponseModel auctionsResponse = new AuctionListResponseModel()
            {
                Auctions  = m_auctionsRepository.GetActiveAuctions(request, startFrom, endAt, fromDate).ToList(),
                ItemCount = m_auctionsRepository.AllAuctionCount().Count()
            };

            Pagination.PaginateResponse(ref auctionsResponse, TableItem.DefaultSize, request.CurrentPage);

            return(auctionsResponse);
        }
        public IEnumerable <AuctionListItemModel> GetActiveAuctions(AuctionListRequestModel request, int startFrom, int endAt, DateTime auctionsFromDate)
        {
            try
            {
                string convertedCategoryIds = request.TopCategoryIds.IsNotSpecified() ? null : string.Join(',', request.TopCategoryIds.Select(t => t.ToString()));
                string convertedTypeIds     = request.TypeIds.IsNotSpecified() ? null : string.Join(',', request.TypeIds.Select(t => t.ToString()));

                SqlParameter categoryIds = new SqlParameter
                {
                    ParameterName = "selectedCategories",
                    Direction     = ParameterDirection.Input,
                    Value         = HandleNull(convertedCategoryIds),
                    SqlDbType     = SqlDbType.Text
                };

                SqlParameter typeIds = new SqlParameter
                {
                    ParameterName = "selectedTypes",
                    Direction     = ParameterDirection.Input,
                    Value         = HandleNull(convertedTypeIds),
                    SqlDbType     = SqlDbType.Text
                };

                SqlParameter startPaginationFrom = new SqlParameter
                {
                    ParameterName = "start",
                    Direction     = ParameterDirection.Input,
                    Value         = startFrom,
                    SqlDbType     = SqlDbType.Int
                };

                SqlParameter endPaginationAt = new SqlParameter
                {
                    ParameterName = "end",
                    Direction     = ParameterDirection.Input,
                    Value         = endAt,
                    SqlDbType     = SqlDbType.Int
                };

                SqlParameter searchBy = new SqlParameter
                {
                    ParameterName = "searchValue",
                    Direction     = ParameterDirection.Input,
                    Value         = HandleNull(request.SearchValue),
                    SqlDbType     = SqlDbType.Text
                };

                SqlParameter loadFromDate = new SqlParameter
                {
                    ParameterName = "fromDate",
                    Direction     = ParameterDirection.Input,
                    Value         = auctionsFromDate,
                    SqlDbType     = SqlDbType.DateTime
                };

                return(m_context.Query <AuctionListItemModel>()
                       .FromSql("[dbo].[BID_GetAuctions] @selectedCategories, @selectedTypes, @start, @end, @searchValue, @fromDate", categoryIds, typeIds, startPaginationFrom, endPaginationAt, searchBy, loadFromDate));
            }
            catch (Exception ex)
            {
                throw new WebApiException(HttpStatusCode.BadRequest, AuctionErrorMessages.CouldNotFetchAuctionList, ex);
            }
        }
 public IActionResult GetAllAuctions([FromQuery] AuctionListRequestModel request)
 {
     return(Ok(m_auctionsService.GetAllAuctions(request)));
 }