예제 #1
0
        /// <summary>
        /// Gets a paginated list of reservations.
        /// </summary>
        /// <param name="queryResource">Paginating, sorting and searching query parameters.</param>
        /// <returns>Paginated list of reservations.</returns>
        public PagedResponse <List <ReservationResource> > ListAsync(QueryResource queryResource)
        {
            try
            {
                if (queryResource == null)
                {
                    throw new ArgumentNullException(nameof(queryResource));
                }

                var reservations = _reservationRepository.DbSet()
                                   .Include(r => r.Contact)
                                   .Include(r => r.Place)
                                   .Select(r => r);

                if (!string.IsNullOrWhiteSpace(queryResource.SearchBy))
                {
                    reservations = reservations.Where(c =>
                                                      c.Contact.Name.ToLower().Contains(queryResource.SearchBy.Trim().ToLower()) ||
                                                      c.Place.Name.ToLower().Contains(queryResource.SearchBy.Trim().ToLower()));
                }

                reservations = reservations.ApplyOrderToReservation(queryResource.SortOrder);

                var pagedResponse = PagedResponse <Reservation> .ToPagedResponse(
                    reservations, queryResource.PageNumber, queryResource.PageSize);

                return(_mapper.Map <PagedResponse <List <ReservationResource> > >(pagedResponse));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return(new PagedResponse <List <ReservationResource> >(
                           ex.Message, queryResource.PageNumber, queryResource.PageSize));
            }
        }