Esempio n. 1
0
        public ActionResult <PagedResponseDTO <RentResponseDTO> > Get([FromQuery] RentSearch search)
        {
            try
            {
                var rents = _getRents.Execute(search);

                return(Ok(rents));
            }
            catch (Exception)
            {
                return(StatusCode(500, "Server error"));
            }
        }
        public PagedResponseDTO <RentResponseDTO> Execute(RentSearch request)
        {
            var query = AiContext.Rents
                        .Where(x => x.IsDeleted == 0)
                        .AsQueryable();

            if (request.Model != null)
            {
                query = query
                        .Where(x => x.Vehicle.Model.ToLower().Contains(request.Model.ToLower()));
            }
            if (request.Username != null)
            {
                query = query
                        .Where(x => x.User.Username.ToLower().Contains(request.Username.ToLower()));
            }
            if (request.Email != null)
            {
                query = query
                        .Where(x => x.Customer.Email.ToLower().Contains(request.Email.ToLower()));
            }
            if (request.Brand != null)
            {
                query = query
                        .Where(x => x.Vehicle.Brand.Name.ToLower().Contains(request.Brand.ToLower()));
            }

            /* Pagination
             * Current page is sent threw query string, if there is no value for it's default value is 1
             * Same goes for PerPage
             * Paged response coctains Current page, Totall pages and data in current page and sends it back threw API
             */
            var totallCount = query.Count();
            var currentPage = request.CurrentPage.HasValue ? request.CurrentPage.GetValueOrDefault() : 1;
            var perPage     = request.PerPage.HasValue ? request.PerPage.GetValueOrDefault() : 3;
            var pagesCount  = (int)Math.Ceiling((double)totallCount / perPage);

            query = query.Skip((currentPage - 1) * perPage).Take(perPage);
            var response = new PagedResponseDTO <RentResponseDTO>
            {
                CurrentPage = currentPage,
                PageCount   = pagesCount,
                TotallCount = totallCount,
                Data        = query
                              .Select(x => new RentResponseDTO
                {
                    Id                = x.Id,
                    UserId            = x.UserId,
                    CustomerId        = x.CustomerId,
                    LocationId        = x.LocationId,
                    DropLocationId    = x.DropLocationId,
                    VehicleId         = x.VehicleId,
                    StatusId          = x.StatusId,
                    VehicleModel      = x.Vehicle.Model,
                    RentStatus        = x.RentStatus.Name,
                    VehicleCostPerDay = x.VehicleCostPerDay,
                    FirstName         = x.FirstName,
                    LastName          = x.LastName,
                    Email             = x.Email,
                    TotallPrice       = x.TotallPrice,
                    PickDate          = x.PickDate,
                    DropDate          = x.DropDate,
                    PickAdress        = x.PickAdress,
                    DropAdress        = x.DropAdress,
                    RentExtraAddons   = AiContext.RentExtraAddons
                                        .Where(re => re.RentId == x.Id)
                                        .Select(re => new RentExtraAddonResponseDTO
                    {
                        ExtraAddonId   = re.ExtraAddonId,
                        ExtraAddonName = re.ExtraAddon.Name,
                        Price          = re.ExtraAddon.Price
                    })
                })
            };

            return(response);
        }