Пример #1
0
        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)));
        }
Пример #2
0
        public async Task <IHttpActionResult> ChangeOrder(int orderId, OrderPostInfo model)
        {
            var success = await _ordersService.ChangeOrder(orderId, model);

            if (success)
            {
                return(Ok());
            }
            else
            {
                return(InternalServerError());
            }
        }
Пример #3
0
        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);
            }
        }