//[CacheOutput(ClientTimeSpan = 100, ServerTimeSpan = 100)]
        public HttpResponseMessage GetDonations([FromUri] PageResourseParameters pageResourceParameters)
        {
            try
            {
                var donationProgramsFromRepo = _rotaractRepository.GetDonationPrograms(pageResourceParameters);

                var paginationMetadata = new
                {
                    totalCount  = donationProgramsFromRepo.TotalCount,
                    pageSize    = donationProgramsFromRepo.PageSize,
                    currentPage = donationProgramsFromRepo.CurrentPage,
                    totalPages  = donationProgramsFromRepo.TotalPages
                };

                var shapedDonations = donationProgramsFromRepo
                                      .ShapeData(pageResourceParameters.Fields);

                var response = Request.CreateResponse(HttpStatusCode.OK, shapedDonations);
                response.Headers.Add("x-pagination",
                                     JsonSerializer.Serialize(paginationMetadata));
                response.Headers.Add("Access-Control-Expose-Headers", "x-pagination");
                return(response);
            }
            catch (Exception e)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, e));
            }
        }
        public PagedList <DonationProgram> GetDonationProgramsById(int UserId,
                                                                   PageResourseParameters pageResourseParameters)
        {
            if (pageResourseParameters == null)
            {
                throw new ArgumentNullException(nameof(pageResourseParameters));
            }

            //string allDonationsQuery = " SELECT dbo.DonationProgram_Audit.DonationProgramId,dbo.DonationProgram_Audit.DonationProgramName,dbo.DonationProgram_Audit.Description,dbo.DonationProgram_Audit.ImageRef,dbo.DonationProgram_Audit.StartDate,dbo.DonationProgram_Audit.EndDate,d.Amount AS Total" +
            //                " FROM dbo.DonationProgram_Audit"+
            //                " JOIN dbo.Donations d"+
            //                "    ON d.DonaitonProgram_auditId = dbo.DonationProgram_Audit.DonationProgram_AuditId"+
            //                " WHERE d.UserId = "+ UserId;

            string GroupSameDonationsQuery = "SELECT r.DonationProgramId,i.DonationProgramName,i.Description,i.ImageRef,i.StartDate,i.EndDate,r.Total " +
                                             " FROM dbo.DonationProgram_Audit i " +
                                             " JOIN( " +
                                             " SELECT  a.DonationProgramId, SUM(p.Amount) AS Total, MAX(a.Updated_at) AS Updated_at " +
                                             " FROM dbo.Donations p " +
                                             " JOIN dbo.DonationProgram_Audit a " +
                                             "    ON a.DonationProgram_AuditId = p.DonationProgram_AuditId " +
                                             " WHERE p.UserId = " + UserId +
                                             " GROUP BY a.DonationProgramId " +
                                             " ) r " +
                                             "    ON i.Updated_at = r.Updated_at ";


            // var collection = _context.Products as IQueryable<Product>;
            var collection = _context.DonationPrograms.SqlQuery(GroupSameDonationsQuery).ToList();

            return(PagedList <DonationProgram> .Create(collection,
                                                       pageResourseParameters.PageNumber,
                                                       pageResourseParameters.PageSize));
        }
        public PagedList <OrderDto> GetAllOrdersById(int UserId, PageResourseParameters pageResourseParameters)
        {
            if (pageResourseParameters == null)
            {
                throw new ArgumentNullException(nameof(pageResourseParameters));
            }

            List <OrderDto> orderDtos = new List <OrderDto>();

            List <Order> orders = _context.Orders.Where(n => n.UserId == UserId).OrderByDescending(p => p.DateStamp).ToList();

            for (int i = 0; i < orders.Count; i++)
            {
                OrderDto order = new OrderDto();
                order.UserId               = UserId;
                order.OrderId              = orders[i].OrderId;
                order.Status               = orders[i].Status;
                order.DateStamp            = orders[i].DateStamp.ToString("yyyy-MM-dd");
                order.TotalPrice           = orders[i].TotalPrice;
                order.ShippingDetailsModel = GetShippingDetailsDto(orders[i].OrderId);
                order.OrderItems           = GetOrderItemsDto(orders[i].Status, orders[i].OrderId);

                orderDtos.Add(order);
            }

            return(PagedList <OrderDto> .Create(orderDtos,
                                                pageResourseParameters.PageNumber,
                                                pageResourseParameters.PageSize));
        }
        //[CacheOutput(ClientTimeSpan = 30, ServerTimeSpan = 30)]
        public HttpResponseMessage GetProducts([FromUri] PageResourseParameters pageResourceParameters)
        {
            try
            {
                var productsFromRepo = _rotaractRepository.GetProducts(pageResourceParameters);

                var paginationMetadata = new
                {
                    totalCount  = productsFromRepo.TotalCount,
                    pageSize    = productsFromRepo.PageSize,
                    currentPage = productsFromRepo.CurrentPage,
                    totalPages  = productsFromRepo.TotalPages
                };


                IEnumerable <ProductsDto> products = new List <ProductsDto>();
                AutoMapper.Mapper.Map(productsFromRepo, products);

                var shapedProducts = products
                                     .ShapeData(pageResourceParameters.Fields);


                var response = Request.CreateResponse(HttpStatusCode.OK, shapedProducts);
                response.Headers.Add("x-pagination",
                                     JsonSerializer.Serialize(paginationMetadata));
                response.Headers.Add("Access-Control-Expose-Headers", "x-pagination");
                return(response);
            }
            catch (Exception e)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, e));
            }
        }
Example #5
0
        public HttpResponseMessage GetOrdersByUser([FromUri] PageResourseParameters pageResourceParameters)
        {
            try
            {
                var identity = (ClaimsIdentity)User.Identity;
                int userId   = Int32.Parse(identity.Claims.FirstOrDefault(c => c.Type == "UserId").Value);

                var ordersFromRepo = _rotaractRepository.GetAllOrdersById(userId, pageResourceParameters);

                var paginationMetadata = new
                {
                    totalCount  = ordersFromRepo.TotalCount,
                    pageSize    = ordersFromRepo.PageSize,
                    currentPage = ordersFromRepo.CurrentPage,
                    totalPages  = ordersFromRepo.TotalPages
                };

                var shapedOrders = ordersFromRepo
                                   .ShapeData(pageResourceParameters.Fields);

                var response = Request.CreateResponse(HttpStatusCode.OK, shapedOrders);
                response.Headers.Add("x-pagination",
                                     JsonSerializer.Serialize(paginationMetadata));
                response.Headers.Add("Access-Control-Expose-Headers", "x-pagination");
                return(response);
            }
            catch (Exception e)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, e));
            }
        }
        public PagedList <Product> GetProducts(PageResourseParameters pageResourseParameters)
        {
            if (pageResourseParameters == null)
            {
                throw new ArgumentNullException(nameof(pageResourseParameters));
            }

            var collection = _context.Products.ToList();

            return(PagedList <Product> .Create(collection,
                                               pageResourseParameters.PageNumber,
                                               pageResourseParameters.PageSize));
        }
        public void GetDonations_ShouldReturnPaginatedListOfDonationPrograms()
        {
            //expected
            var expected = new List <DonationProgram>()
            {
                new DonationProgram {
                    DonationProgramId   = 1,
                    DonationProgramName = "One",
                    Description         = "Maxim one",
                    ImageRef            = "An image ref",
                    StartDate           = DateTime.Now,
                    EndDate             = DateTime.Now,
                    Total = 111
                },
                new DonationProgram
                {
                    DonationProgramId   = 2,
                    DonationProgramName = "Two",
                    Description         = "Maxim two",
                    ImageRef            = "An image refs",
                    StartDate           = DateTime.Now,
                    EndDate             = DateTime.Now,
                    Total = 112
                }
            };

            //mock repo with pagination
            var pageParameters = new PageResourseParameters();
            var mockRepo       = new Mock <IRotaractRepository>();

            var mockList = new PagedList <DonationProgram>(expected, 2, 1, 1);

            mockRepo.Setup(d => d.GetDonationPrograms(pageParameters)).Returns(mockList);

            //Arrange
            DonationController donationController = new DonationController(mockRepo.Object)
            {
                Request       = new System.Net.Http.HttpRequestMessage(),
                Configuration = new HttpConfiguration()
            };

            //Act
            var result = donationController.GetDonations(pageParameters);

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(HttpResponseMessage));
            Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
            Assert.IsTrue(result.Headers.Contains("x-pagination"));
        }
        public PagedList <DonationProgram> GetDonationPrograms(PageResourseParameters pageResourseParameters)
        {
            if (pageResourseParameters == null)
            {
                throw new ArgumentNullException(nameof(pageResourseParameters));
            }

            // var collection = _context.Products as IQueryable<Product>;
            var collection = _context.DonationPrograms.OrderByDescending(d => d.StartDate).ToList();

            return(PagedList <DonationProgram> .Create(collection,
                                                       pageResourseParameters.PageNumber,
                                                       pageResourseParameters.PageSize));
        }
        public PagedList <DonationProgram> GetActiveDonationPrograms(PageResourseParameters pageResourseParameters)
        {
            if (pageResourseParameters == null)
            {
                throw new ArgumentNullException(nameof(pageResourseParameters));
            }

            DateTime today      = DateTime.Now;
            var      collection = _context.DonationPrograms.Where(n => n.StartDate <= today && n.EndDate >= today).ToList();

            return(PagedList <DonationProgram> .Create(collection,
                                                       pageResourseParameters.PageNumber,
                                                       pageResourseParameters.PageSize));
        }
        public void GetOrdersByStatus_ShouldRetrieveOrdersByStatus()
        {
            var user = new List <User>
            {
                new User
                {
                    UserId         = 112,
                    Username       = "******",
                    FirstName      = "Frank",
                    LastName       = "Sinatra",
                    DistrictNumber = 1,
                    Email          = "*****@*****.**",
                    Password       = "******",
                    Role           = "Customer"
                }
            };

            var shippingDetails = new List <ShippingDetailsDto>
            {
                new ShippingDetailsDto
                {
                    Country        = "USA",
                    City           = "San Francisco",
                    PostalCode     = 911,
                    AddressLine    = "Californication RHCP",
                    CountyOrRegion = "California",
                    FirstName      = "Frank",
                    LastName       = "Sinatra",
                    PhoneNumber    = 12345678
                }
            };

            var product = new List <Product>
            {
                new Product
                {
                    ProductId   = 1,
                    Name        = "Microphone",
                    Description = "Rotaract personalized microphone",
                    ImageRef    = "img ref",
                    Inventory   = 5,
                    Price       = 1250
                }
            };

            var orderItems = new List <OrderItemDto>
            {
                new OrderItemDto
                {
                    product  = product[0],
                    Quantity = 1
                }
            };

            var orders = new List <OrderDto>
            {
                new OrderDto
                {
                    UserId               = user[0].UserId,
                    OrderId              = 2,
                    OrderItems           = orderItems,
                    ShippingDetailsModel = shippingDetails[0],
                    DateStamp            = "01.12.2020",
                    Status               = "PENDING",
                    TotalPrice           = orderItems[0].product.Price * orderItems[0].Quantity
                }
            };

            //mock repo with pagination
            var pageParameters = new PageResourseParameters();
            var mockRepo       = new Mock <IRotaractRepository>();

            var          mockList = new PagedList <OrderDto>(orders, 1, 1, 1);
            const string status   = "PENDING";

            mockRepo.Setup(o => o.GetAllOrdersByStatus(status, pageParameters)).Returns(mockList);

            //Arrange
            OrderController orderController = new OrderController(mockRepo.Object)
            {
                Request       = new System.Net.Http.HttpRequestMessage(),
                Configuration = new HttpConfiguration()
            };

            //Act
            var result = orderController.GetOrdersByStatus(status, pageParameters);

            //Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(HttpResponseMessage));
            Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
            Assert.IsTrue(result.Headers.Contains("x-pagination"));
        }