public async Task <bool> AddItem(DocumentAddItemModel model) { try { //Это "немножко" плохой код; ввиду реализации всей инфраструктуры я потратил достаточное количество времени(для тестового задания). //Реализация методов обновления остатков должна быть заложена в репозиторий, что я не успеваю сделать :) //Тем не менее требуемый функционал реализован. var ctx = new StoreHouseContext(); var entityFrom = ctx.Stocks.SingleOrDefault(x => x.ProductId == model.Product.Id && x.WarehouseId == model.WarehouseFrom.Id); entityFrom.Value -= model.Value; ctx.Stocks.Update(entityFrom); var entityTo = ctx.Stocks.SingleOrDefault(x => x.ProductId == model.Product.Id && x.WarehouseId == model.WarehouseTo.Id); entityTo.Value += model.Value; ctx.Stocks.Update(entityTo); //плохой код закончен var warehouseFromItem = await _warehouseRepo.GetItemByid(model.WarehouseFrom.Id); //var warehouseFromStock = warehouseFromItem.Stocks.SingleOrDefault(x => x.ProductId == model.Product.Id); //warehouseFromStock.Value -= model.Value; //var warehouseToItem = await _warehouseRepo.GetItemByid(model.WarehouseTo.Id); //var warehouseToStock = warehouseFromItem.Stocks.SingleOrDefault(x => x.ProductId == model.Product.Id); //warehouseToStock.Value += model.Value; _documentsRepo.Add(new Documents { StockId = model.Product.Id, WarehouseFrom = model.WarehouseFrom.Id, WarehouseTo = model.WarehouseTo.Id, Value = model.Value }); ctx.SaveChanges();//сохранение контекста, вызванное плохим кодом выше _documentsRepo.SaveChanges(); return(true); } catch (Exception ex) { return(false); } }
public async Task <IActionResult> AddNewItem([FromBody] DocumentAddItemModel model) { //check availability to transact var allowToTransact = _warehousesService .PossibleToTransactFrom(model.WarehouseFrom.Id, model.Product.Id, model.Value); if (!allowToTransact.Result) { return(BadRequest("Balance of goods smaller than you requested to ship")); } try { return(Ok(await _documentsService.AddItem(model))); } catch (Exception ex) { return(BadRequest(ex.Message)); } }