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)); }
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 }); }
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)); }
// 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(); }