public async Task <IActionResult> Create(CreateMachineViewModel model, CancellationToken ct) { ct.ThrowIfCancellationRequested(); if (ModelState.IsValid) { var machine = await _machineService.CreateMachine(model, ct); await _context.Entry(machine) .Collection(d => d.Drinks) .Query() .Include(d => d.Drink) .ThenInclude(i => i.Image) .LoadAsync(ct); await _context.Entry(machine) .Collection(c => c.Coins) .Query() .Include(c => c.Coin) .ThenInclude(i => i.Image) .LoadAsync(ct); await _adminHub.Clients.All.AddMachine(machine); return(RedirectToAction(nameof(Index), "Admin")); } return(View(model)); }
public IActionResult Create(CreateMachineViewModel model) { if (model.BrandId <= 0 || _brand.GetById(model.BrandId) == null) { return(BadRequest("Message")); } return(Ok(_machine.Create(_mapper.Map <Machine>(model)))); }
public async Task <Machine> CreateMachine(CreateMachineViewModel model, CancellationToken сt = default) { сt.ThrowIfCancellationRequested(); await using var tran = await _db.Database.BeginTransactionAsync(сt); try { var machine = new Machine { Name = model.MachineName }; var machineDrinks = new List <MachineDrink>(model.DrinkIds.Sum(s => s.Quantity)); foreach (var drinkViewModel in model.DrinkIds) { for (int i = 0; i < drinkViewModel.Quantity; i++) { machineDrinks.Add(new MachineDrink { DrinkId = drinkViewModel.DrinkId }); } } machine.Drinks = machineDrinks; var machineCoins = new List <MachineCoin>(model.CoinIds.Sum(s => s.Quantity)); foreach (var coinViewModel in model.CoinIds) { for (int i = 0; i < coinViewModel.Quantity; i++) { machineCoins.Add(new MachineCoin() { CoinId = coinViewModel.CoinId, CoinState = 0 }); } } machine.Coins = machineCoins; await _db.Machines.AddAsync(machine, сt); var savedCount = await _db.SaveChangesAsync(сt); _logger.LogInformation("saved elements count in Machine entity = {count}", savedCount); await tran.CommitAsync(сt); return(machine); } catch (TaskCanceledException e) { _logger.LogWarning(e, "Machine Add Operation was cancelled."); return(default);