public async Task <IActionResult> PostOrder([FromBody] OrderPostInfo orderInfo) { DateTime generateTime = DateTime.Now; // 生成 GUID 并取前四位作为密码 string password = Guid.NewGuid().ToString().Split('-')[1]; List <File> filesList = new List <File>(); // 判断传来的 fileId 是否存在,存在则建立与 order 实体的所属关系 foreach (var fileId in orderInfo.files) { var file = await _context.File.SingleOrDefaultAsync(m => m.ID == fileId); if (file != null && file.Order == null) { filesList.Add(file); } } if (filesList.Count < 1) { return(BadRequest()); } Order order = new Order { GenerateTime = generateTime, Password = password, Files = filesList }; // 与数据库同步 _context.Order.Add(order); await _context.SaveChangesAsync(); return(Ok(new OrderReturnInfo(order, true))); }
public async Task <IHttpActionResult> ChangeOrder(int orderId, OrderPostInfo model) { var success = await _ordersService.ChangeOrder(orderId, model); if (success) { return(Ok()); } else { return(InternalServerError()); } }
public async Task <bool> ChangeOrder(int id, OrderPostInfo model) { var order = await _db.Orders.FindAsync(id); if (order == null) { return(false); } order.ChildrenNames = model.ChildrenNames; order.Datetime = model.Datetime; order.Address = model.Address.Line; order.Location = model.Address.Location; // Update presents var presentsInDb = order.Presents.Select(o => new PresentInfoForEdit { Id = o.Id, Name = o.Name, BuyBySanta = o.BuyBySanta }); var presentsToRemove = presentsInDb.Except(model.Presents, new ChangedPresentsComparer()); var presentsToEdit = presentsInDb.Intersect(model.Presents, new ChangedPresentsComparer()); var presentsToAdd = model.Presents.Except(presentsInDb, new ChangedPresentsComparer()); foreach (var present in presentsToRemove) { var presentInDb = order.Presents.FirstOrDefault(p => p.Id == present.Id); _db.Presents.Remove(presentInDb); } foreach (var present in presentsToEdit) { var presentInDb = _db.Presents.FirstOrDefault(p => p.Id == present.Id); presentInDb.Name = present.Name; presentInDb.BuyBySanta = present.BuyBySanta; } foreach (var present in presentsToAdd) { _db.Presents.Add(new Present { Name = present.Name, BuyBySanta = present.BuyBySanta, OrderId = order.Id }); } try { var itemsAffected = await _db.SaveChangesAsync(); if (itemsAffected == 0) { return(false); } return(true); } catch (DbEntityValidationException) { return(false); } }