public IActionResult DeleteConfirmed(Guid id)
        {
            AppUser user = _userManager.FindByNameAsync(User.Identity.Name).Result;

            if (user == null || user.Exchanges.Count <= 0)
            {
                return(RedirectToAction(nameof(Index)));
            }
            //            ExchangeUserModel userExchange = user.Exchanges.Where(e => e.Id == id).FirstOrDefault();

            Exchange exchange = _exchangeRepository.FindBy(e => e.Id == id).FirstOrDefault();

            if (exchange == null || exchange.Sender.Id != user.Id)
            {
                return(RedirectToAction(nameof(Index)));
            }

            ExchangeUserModel userExchangeModel = _exchangeUserModelRepository.FindBy(eu => eu.Exchange.Id == exchange.Id && eu.AppUser.Id == user.Id).FirstOrDefault();

            if (userExchangeModel == null)
            {
                return(RedirectToAction(nameof(Index)));
            }

            if (exchange.Sender.Id == user.Id || user.IsModerator)
            {
                for (int i = 0; i < exchange.Products.Count; i++)
                {
                    if (exchange.Products.Count > 0)
                    {
                        exchange.Products[i].Exchange = null;
                        _productRepository.Update(exchange.Products[i]);
                    }
                }

                for (int i = 0; i < exchange.Offers.Count; i++)
                {
                    if (exchange.Offers.Count > 0)
                    {
                        for (int j = 0; j < exchange.Offers[i].Products.Count; j++)
                        {
                            exchange.Offers[i].Products[j].Offer    = null;
                            exchange.Offers[i].Products[j].Exchange = null;
                            _productRepository.Update(exchange.Offers[i].Products[j]);
                        }
                        _offerRepository.Delete(exchange.Offers[i].Id);
                    }
                }

                user.Exchanges.Remove(userExchangeModel);

                _exchangeRepository.Delete(exchange.Id);
                _userManager.UpdateAsync(user);
            }
            return(RedirectToAction(nameof(Index)));
        }
        public IActionResult Create([Bind("ExchangeNotes,PhotoUrl,Products")] Exchange exchange)
        {
            if (ModelState.IsValid)
            {
                var user = _userManager.FindByNameAsync(User.Identity.Name).Result;
                exchange.Sender   = user; // current user
                exchange.SenderId = user.Id;
                exchange.Status   = ExchangeStatus.Created;

                exchange.Products = exchange.Products.Where(p => !string.IsNullOrEmpty(p.Name) && !string.IsNullOrEmpty(p.Price)).ToList();

                foreach (Product p in exchange.Products)
                {
                    p.OriginCountry = exchange.Sender.Country;
                }

                _exchangeRepository.Insert(exchange);

                //foreach()

                ExchangeUserModel exchangeUserModel = new ExchangeUserModel
                {
                    UserExchangeRole = UserExchangeRole.Sender,
                    Exchange         = exchange,
                    AppUser          = user,
                    UpdatedAt        = DateTime.Now
                };

                user.Exchanges.Add(exchangeUserModel);

                _exchangeUserModelRepository.Insert(exchangeUserModel);
                _userManager.UpdateAsync(user);

                return(RedirectToAction(nameof(Index)));
            }
            return(View(exchange));
        }