Пример #1
0
        public async Task <Sale> CreateSaleAsync(int userId, int productId)
        {
            var user = await _userRepo.GetUserAsync(userId);

            var product = await _productRepo.GetProductAsync(productId);

            var sale = Sale.BuyProduct(user, product);

            // TODO: Seperate SaveChanges, refactor code (repo pattern?).
            try
            {
                await _userRepo.UpdateUserAsync(sale.Buyer.Id, sale.Buyer);

                await _productRepo.UpdateProductAsync(sale.Product.Id, sale.Product);

                await _db.Sales.AddAsync(sale);

                await _db.SaveChangesAsync();

                return(sale);
            }
            catch
            {
                // TODO: Seperate Savechanges can cause halve transactions.
                throw new TaskCanceledException("Sale has failed.");
            }
        }