Пример #1
0
        public async Task <IActionResult> Post([FromBody] NewOrderDto newOrderDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            _orderId++;

            var pickupPosition = await GetByAddress(newOrderDto.PickUp);

            if (pickupPosition == null)
            {
                return(BadRequest($"address = \"{newOrderDto.PickUp}\"  not found"));
            }

            var dropoffPosition = await GetByAddress(newOrderDto.DropOff);

            if (dropoffPosition == null)
            {
                return(BadRequest($"address = \"{newOrderDto.DropOff}\" address not found"));
            }

            var newOrder = new Order
            {
                Id     = _orderId.ToString(),
                Status = OrderStatus.unassigned,
                Pickup = new GLocation
                {
                    Address  = newOrderDto.PickUp,
                    Position = pickupPosition,
                },
                Dropoff = new GLocation
                {
                    Address  = newOrderDto.DropOff,
                    Position = dropoffPosition,
                }
            };

            Orders.Add(newOrder);

            BrowserSocket.SendToAllAsync(new OrdersSocketMessage
            {
                Payload = Orders
            });

            MobileSocket.SendToAllMobileSockets(new OrderAvailablePayload
            {
                Payload = newOrder
            });

            return(Ok(newOrder));
        }
Пример #2
0
        public void Delete(string id)
        {
            var order = Orders.SingleOrDefault(o => o.Id == id.ToString());

            if (order == null)
            {
                return;
            }

            Orders.Remove(order);
            BrowserSocket.SendToAllAsync(new OrdersSocketMessage
            {
                Payload = Orders
            });
        }
Пример #3
0
        public async Task <IActionResult> Put(int id, [FromBody] Order updOrder)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            OrderStatus newStatus = updOrder.Status;
            var         order     = Orders.SingleOrDefault(o => o.Id == id.ToString());

            if (order == null)
            {
                return(NotFound());
            }

            var rule = StatusRules[order.Status];

            if (rule.IsOwned && order.Driver_id != updOrder.Driver_id)
            {
                return(BadRequest($"access denied"));
            }

            if (!rule.Next.Contains(newStatus))
            {
                return(BadRequest($"only {rule.ShowNext()} after {order.Status}"));
            }

            order.Status     = updOrder.Status;
            order.Driver_id  = updOrder.Driver_id;
            updOrder.Pickup  = order.Pickup;
            updOrder.Dropoff = order.Dropoff;
            updOrder.Id      = order.Id;

            BrowserSocket.SendToAllAsync(new OrdersSocketMessage
            {
                Payload = Orders
            });

            return(Ok(updOrder));
        }
Пример #4
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseMiddleware <ErrorLoggingMiddleware>();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseWebSockets();


            #region AcceptWebSocket
            app.Use(async(context, next) =>
            {
                if (context.Request.Path == "/mobile")
                {
                    if (!await MobileSocket.TryConnect(context))
                    {
                        context.Response.StatusCode = 400;
                    }
                }
                else if (context.Request.Path == "/browser")
                {
                    if (!await BrowserSocket.TryConnect(context))
                    {
                        context.Response.StatusCode = 400;
                    }
                }
                else
                {
                    await next();
                }
            });
            #endregion

            app.UseMvc();
        }