public PizzaOrderMutation(IPizzaDetailService pizzaDetailService, IOrderDetailService orderDetailService)
        {
            Name = nameof(PizzaOrderMutation);
            FieldAsync <OrderDetailsType>(

                name: "createOrder",
                arguments: new QueryArguments(new QueryArgument <NonNullGraphType <OrderDetailsInputType> >
            {
                Name = "orderDetails"
            })
                , resolve:
                async context =>
            {
                var order                 = context.GetArgument <OrderDetailsModel>("orderDetails");
                var orderDetails          = new OrderDetail(order.AddressLine1, order.AddressLine2, order.MobileNumber, order.Amount);
                orderDetails              = await orderDetailService.CreateAsync(orderDetails);
                var pizzaDetails          = order.PizzaDetails.Select(x => new PizzaDetail(x.Name, x.Toppings, x.Price, x.Size, orderDetails.Id));
                pizzaDetails              = await pizzaDetailService.CreateBulkAsync(pizzaDetails, orderDetails.Id);
                orderDetails.PizzaDetails = pizzaDetails.ToList();
                return(orderDetails);
            });
            FieldAsync <OrderDetailsType>(
                name: "updateStatus",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IntGraphType> > {
                Name = "id"
            },
                    new QueryArgument <NonNullGraphType <OrderStatusEnumType> > {
                Name = "status"
            }
                    ),
                resolve: async context =>
            {
                int orderId             = context.GetArgument <int>("id");
                OrderStatus orderStatus = context.GetArgument <OrderStatus>("status");
                return(await orderDetailService.UpdateStatusAsync(orderId, orderStatus));
            }
                );


            FieldAsync <OrderDetailsType>(
                name: "deletePizzaDetails",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IntGraphType> > {
                Name = "pizzaDetailsId"
            }
                    ),
                resolve: async context =>
            {
                var pizzaDetailsId = context.GetArgument <int>("pizzaDetailsId");
                var orderId        = await pizzaDetailService.DeletePizzaDetailsAsync(pizzaDetailsId);
                return(await orderDetailService.GetOrderDetailAsync(orderId));
            }
                );
        }
Example #2
0
        public PizzaOrderQuery(IOrderDetailService orderDetailService, IPizzaDetailService pizzaDetailService)
        {
            Name = nameof(PizzaOrderQuery);
            FieldAsync <ListGraphType <OrderDetailsType> >(name: "newOrders", resolve:
                                                           async context => await orderDetailService.GetAllNewOrdersAsync()).AuthorizeWith(Constants.AuthPolicy.RestaurantPolicy);

            FieldAsync <PizzaDetailsType>("pizzaDetails", arguments: new QueryArguments(new QueryArgument <IntGraphType>
            {
                Name = "id"
            }), resolve: async context => await pizzaDetailService.GetPizzaDetail(context.GetArgument <int>("id")));

            FieldAsync <OrderDetailsType>("orderDetails", arguments: new QueryArguments(new QueryArgument <IntGraphType>
            {
                Name = "id"
            }), resolve: async context => await orderDetailService.GetOrderDetailAsync(context.GetArgument <int>("id")));

            Connection <OrderDetailsType>().Name("completedOrder")
            .Unidirectional()
            .PageSize(10)
            .Argument <CompletedOrderOrderByInputType>("orderBy", "pass in field and direction in which you want to sort data")
            .ResolveAsync(async context =>
            {
                var pagedRequested = new PagedRequest
                {
                    First   = context.First,
                    Last    = context.Last,
                    Before  = context.Before,
                    After   = context.After,
                    OrderBy = context.GetArgument <SortingDetails <CompletedOrderSortingFields> >("orderBy")
                };

                var pagedResponse = await orderDetailService.GetCompletedOrdersAsync(pagedRequested);
                var(startingCursor, endingCursor) =
                    CursorHelper.GetFirstAndLastCursor(pagedResponse.Nodes.Select(x => x.Id).ToList());
                var edge = pagedResponse.Nodes.Select(x => new Edge <OrderDetail>
                {
                    Cursor = CursorHelper.ToCursor(x.Id),
                    Node   = x
                }).ToList();
                var connection = new Connection <OrderDetail>
                {
                    Edges      = edge,
                    TotalCount = pagedResponse.TotalCount,
                    PageInfo   = new PageInfo
                    {
                        HasNextPage     = pagedResponse.HasNextPage,
                        HasPreviousPage = pagedResponse.HasPreviousPage,
                        EndCursor       = endingCursor,
                        StartCursor     = startingCursor
                    }
                };
                return(connection);
            });
        }
Example #3
0
 public OrderDetailsType(IPizzaDetailService pizzaDetailService)
 {
     Name = nameof(OrderDetailsType);
     Field(x => x.Id);
     Field(x => x.AddressLine1);
     Field(x => x.AddressLine2);
     Field(x => x.MobileNumber);
     Field(x => x.Amount);
     Field(x => x.Date);
     Field <OrderStatusEnumType>(name: "orderStatus", resolve: context => context.Source.OrderStatus);
     Field <ListGraphType <PizzaDetailsType> >(name: "pizzaDetails", resolve: context => pizzaDetailService.GetAllPizzaDetailsForOrder(context.Source.Id));
 }
Example #4
0
        public PizzaOrderMutation(IPizzaDetailService pizzaDetailService, IOrderDetailService orderDetailService)
        {
            this.pizzaDetailService = pizzaDetailService;
            this.orderDetailService = orderDetailService;

            Name = nameof(PizzaOrderMutation);

            FieldAsync <OrderDetailType>(name: "createOrder",
                                         arguments: new QueryArguments(
                                             new QueryArgument <NonNullGraphType <OrderDetailInputType> >()
            {
                Name = "orderDetail"
            }
                                             ),
                                         resolve: async context =>
            {
                // Get parameter from the GraphQL request
                var order       = context.GetArgument <OrderDetailModel>("orderDetail");
                var orderDetail = new OrderDetail(order.AddressLine1, order.AddressLine2, order.MobileNo, order.Amount);
                orderDetail     = await orderDetailService.CreateAsync(orderDetail);

                var pizzaDetails = order.PizzaDetails.Select(p => new PizzaDetail(p.Name, p.Toppings, p.Price, p.Size, orderDetail.Id));
                pizzaDetails     = await pizzaDetailService.CreateBulkAsync(pizzaDetails, orderDetail.Id);
                orderDetail.PizzaDetails.ToList();
                return(orderDetail);
            });

            FieldAsync <OrderDetailType>(name: "updateStatus",
                                         arguments: new QueryArguments(new QueryArgument <NonNullGraphType <IntGraphType> > {
                Name = "id"
            },
                                                                       new QueryArgument <NonNullGraphType <OrderStatusEnumType> > {
                Name = "status"
            }),
                                         resolve: async context =>
            {
                var orderId     = context.GetArgument <int>("id");
                var orderStatus = context.GetArgument <OrderStatus>("status");
                return(await orderDetailService.UpdateStatusAsync(orderId, orderStatus));
            });


            FieldAsync <OrderDetailType>(name: "deletePizzaDetail",
                                         arguments: new QueryArguments(new QueryArgument <NonNullGraphType <IntGraphType> > {
                Name = "id"
            }),
                                         resolve: async context =>
            {
                var pizzaDetailId = context.GetArgument <int>("id");
                var orderDetailId = await pizzaDetailService.DeletePizzaDetailsAsync(pizzaDetailId);
                return(await orderDetailService.GetOrderDetailAsync(orderDetailId));
            });
        }
Example #5
0

        
 public PizzaOrderQuery(IOrderDetailService orderDetailService, IPizzaDetailService pizzaDetailService)
 {
     Name = nameof(PizzaOrderQuery);
     FieldAsync <ListGraphType <OrderDetailsType> >(
         name: "neworder",
         resolve: async context => await orderDetailService.GetOrderDetailsAsync());
     this.pizzaDetailService = pizzaDetailService;
     FieldAsync <PizzaDetialsType>(
         name: "Pizzadetails",
         arguments: new QueryArguments(new QueryArgument <IntGraphType> {
         Name = "id"
     }),
         resolve: async context => await pizzaDetailService.GetPizzaDetailsAsync(context.GetArgument <int>("id")));
     FieldAsync <OrderDetailsType>(
         name: "orderDetails",
         arguments: new QueryArguments(new QueryArgument <IntGraphType> {
         Name = "id"
     }),
         resolve: async context => await orderDetailService.GetOrderDetailsAsync(context.GetArgument <int>("id")));
 }
Example #7
0
        public PizzaOrderQuery(IOrderDetailService orderDetailService, IPizzaDetailService pizzaDetailService)
        {
            this.service            = orderDetailService;
            this.pizzaDetailService = pizzaDetailService;
            Name = nameof(PizzaOrderQuery);
            FieldAsync <ListGraphType <OrderDetailType> >(name: "newOrders",
                                                          resolve: async context => await orderDetailService.GetAllNewOrdersAsync());


            FieldAsync <PizzaDetailType>(name: "pizzaDetails",
                                         arguments: new QueryArguments(new QueryArgument <NonNullGraphType <IntGraphType> >()
            {
                Name = "id"
            }),
                                         resolve: async context => await pizzaDetailService.GetPizzaDetailAsync(context.GetArgument <int>("id")));

            FieldAsync <OrderDetailType>(name: "orderDetails",
                                         arguments: new QueryArguments(new QueryArgument <NonNullGraphType <IntGraphType> >()
            {
                Name = "id"
            }),
                                         resolve: async context => await orderDetailService.GetOrderDetailAsync(context.GetArgument <int>("id"))).AuthorizeWith(AuthPolicy.RestaurantPolicy);

            Connection <OrderDetailType>()
            .Name("completedOrders")
            // .Unidirectional() exposes first and after
            .Bidirectional()
            .Argument <CompletedOrderOrderByInputType>("orderBy", "Pass field & direction on which you want to sort data")
            .ResolveAsync(async context =>
            {
                var pageRequest = new PageRequest
                {
                    First   = context.First,
                    Last    = context.Last,
                    After   = context.After,
                    Before  = context.Before,
                    OrderBy = context.GetArgument <SortingDetails <CompletedOrdersSortingFields> >("orderBy")
                };

                var pageResponse = await orderDetailService.GetCompletedOrdersAsync(pageRequest);

                (string startCursor, string endCursor) = CursorHelper.GetFirstAndLastCursor(pageResponse.Nodes.Select(x => x.Id));

                var edge = pageResponse.Nodes.Select(x => new Edge <OrderDetail>
                {
                    Cursor = CursorHelper.ToCursor(x.Id),
                    Node   = x
                }).ToList();

                var connection = new Connection <OrderDetail>()
                {
                    Edges      = edge,
                    TotalCount = pageResponse.TotalCount,
                    PageInfo   = new PageInfo
                    {
                        HasNextPage     = pageResponse.HasNextPage,
                        HasPreviousPage = pageResponse.HasPreviousPage,
                        StartCursor     = startCursor,
                        EndCursor       = endCursor
                    }
                };

                return(connection);
            });
        }