Example #1
0
        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));
        }
Example #2
0
 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);