public async Task <StockTicker> UpdateAsync(StockTicker stockTickers, CancellationToken ct)
        {
            var updatedStockTickerEntry = _context.StockTickers.Update(stockTickers.ToModel());
            await _context.SaveChangesAsync(ct);

            return(updatedStockTickerEntry.Entity.ToServiceModel());
        }
示例#2
0
        public async Task <IActionResult> AddStockToPortfolio(Stock stock)
        {
            Company company = await GetCompanyInfo(stock.Symbol);

            stock.Symbol      = company.Symbol;
            stock.CompanyName = company.CompanyName;

            if (ModelState.IsValid)
            {
                _context.Stock.Add(stock);
                await _context.SaveChangesAsync();
            }
            return(RedirectToAction("Home"));
        }
示例#3
0
 public async Task SaveStocks(List <Stock> stocks)
 {
     try
     {
         foreach (var stock in stocks)
         {
             var existingStock = _context.Stocks.FirstOrDefault(x => x.Symbol == stock.Symbol);
             if (existingStock == null)
             {
                 ValidateStockDcf(stock);
                 await AddStock(stock);
             }
             else
             {
                 ValidateStockDcf(stock);
                 await UpdateStock(stock, existingStock);
             }
         }
         await _context.SaveChangesAsync();
     }
     catch (Exception ex)
     {
         _logger.WriteError("Error saving DCF list to DB", ex);
     }
     _logger.WriteInformation("Saved data to DB");
 }
 private async Task DecreaseStock(OrderCreatedMessage message, List <Product> dbProducts)
 {
     dbProducts.ForEach(dbProduct =>
     {
         var quantity = message.Products
                        .FirstOrDefault(messageProduct => messageProduct.ProductId == dbProduct.Id)?
                        .Quantity ?? default;
         dbProduct.StockQuantity -= quantity;
     });
     await _dbContext.SaveChangesAsync();
 }
        public async Task <IncreaseStockResponseModel> Handle(IncreaseStockCommand request, CancellationToken cancellationToken)
        {
            var stock = await _dbContext.Stocks.FirstOrDefaultAsync(x => x.ProductId == request.IncreaseStockRequest.ProductId);

            if (stock == null)
            {
                throw new System.Exception("Product not found!");
            }

            stock.Quantity += request.IncreaseStockRequest.Quantity;
            _dbContext.Stocks.Attach(stock);
            _dbContext.Entry(stock).Property(x => x.Quantity).IsModified = true;
            await _dbContext.SaveChangesAsync();

            return(_mapping.Map <Infrastructure.Entities.Stock, IncreaseStockResponseModel>(stock));
        }
        internal async Task CreateUser(string username, string password)
        {
            //var response = await Db.User.Where(Q => Q.Username == username).FirstOrDefaultAsync();

            //if(response != null)
            //{
            //    return ;
            //}

            var hash = Hashing.HashPassword(password, 12);

            Db.User.Add(new User
            {
                UserId   = Guid.NewGuid(),
                Username = username,
                Password = hash
            });
            await Db.SaveChangesAsync();
        }
        public async Task Consume(ConsumeContext <IUpdateStockEventModel> context)
        {
            var stock = await _dbContext.Stocks.FirstOrDefaultAsync(x => x.ProductId == context.Message.ProductId);

            if (stock == null)
            {
                await context.Publish <IOrderFailedEventModel>(new
                {
                    context.Message.OrderId
                });

                throw new Exception("Product not found!");
            }

            stock.Quantity -= context.Message.Quantity;
            if (stock.Quantity < 0)
            {
                await context.Publish <IOrderFailedEventModel>(new
                {
                    context.Message.OrderId
                });

                throw new Exception("Quantity must be greater than or equal to zero!");
            }

            _dbContext.Stocks.Attach(stock);
            _dbContext.Entry(stock).Property(x => x.Quantity).IsModified = true;
            if (await _dbContext.SaveChangesAsync() > 0)
            {
                await context.Publish <ICreateShipmentEventModel>(new
                {
                    context.Message.OrderId,
                    ShipmentType = (int)ShipmentType.MNG
                });
            }
            else
            {
                await context.Publish <IOrderFailedEventModel>(new
                {
                    context.Message.OrderId
                });
            }
        }
示例#8
0
        public async Task Handle(OrderWalletPayErrorMessage message)
        {
            _logger.LogWarning($"OrderWalletPayError message was received. Order Id = {message.OrderId}");
            var productIds = message.Products
                             .Select(x => x.ProductId)
                             .ToList();

            var dbProducts = await _dbContext.Products
                             .Where(product => productIds.Contains(product.Id))
                             .ToListAsync();

            dbProducts.ForEach(dbProduct =>
            {
                var quantity = message.Products
                               .FirstOrDefault(messageProduct => messageProduct.ProductId == dbProduct.Id)?
                               .Quantity ?? default;
                dbProduct.StockQuantity += quantity;
            });
            await _dbContext.SaveChangesAsync();
        }
        public async Task HandleAsync(CreateStockForProduct command)
        {
            var stock = new Entities.Stock
            {
                ProductId = command.ProductId,
                Quantity  = command.Quantity
            };

            context.Stocks.Add(stock);

            await context.SaveChangesAsync();

            var @event = new StockForProductCreated
            {
                Id        = stock.Id,
                ProductId = stock.ProductId,
                Quantity  = stock.Quantity
            };

            await bus.PublishAsync(@event, "price");
        }
        public async Task ConsumeAsync(UpdateStockEvent context, CancellationToken cancellationToken)
        {
            var stock = await _dbContext.Stocks.FirstOrDefaultAsync(x => x.ProductId == context.ProductId);

            if (stock == null)
            {
                await _bus.PubSub.PublishAsync(new OrderFailedEvent
                {
                    OrderId = context.OrderId
                });

                throw new Exception("Product not found!");
            }

            stock.Quantity -= context.Quantity;
            if (stock.Quantity < 0)
            {
                await _bus.PubSub.PublishAsync(new OrderFailedEvent
                {
                    OrderId = context.OrderId
                });

                throw new Exception("Quantity must be greater than or equal to zero!");
            }

            _dbContext.Stocks.Attach(stock);
            _dbContext.Entry(stock).Property(x => x.Quantity).IsModified = true;

            if (await _dbContext.SaveChangesAsync() > 0)
            {
                await _bus.PubSub.PublishAsync(new CreateShipmentEvent
                {
                    ShipmentType = (int)ShipmentType.MNG,
                    OrderId      = context.OrderId
                });
            }
        }
示例#11
0
        public static async Task Run([CosmosDBTrigger("StockBackend", "StockTransaction", ConnectionStringSetting = "CosmosDBConnection", LeaseCollectionName = "leases", LeaseDatabaseName = "StockLease", LeasesCollectionThroughput = 400, CreateLeaseCollectionIfNotExists = true)]
                                     JArray input,
                                     IBinder binder,
                                     ILogger log)
        {
            if (input == null || input.Count <= 0)
            {
                return;
            }

            // StockDocument へデシリアライズ
            var documents = input.ToObject <StockDocument[]>();

            // 在庫情報を SQL DB に書き込む
            var entities = documents.SelectMany(x => x.Items.Select(xs => new StockEntity
            {
                DocumentId      = x.Id,
                TransactionId   = x.TransactionId,
                TransactionDate = x.TransactionDate,
                TransactionType = x.TransactionType,
                LocationCode    = x.LocationCode,
                CompanyCode     = x.CompanyCode,
                StoreCode       = x.StoreCode,
                TerminalCode    = x.TerminalCode,
                LineNo          = xs.LineNo,
                ItemCode        = xs.ItemCode,
                Quantity        = xs.Quantity
            }));

            using (var context = new StockDbContext())
            {
                await context.Stocks.AddRangeAsync(entities);

                await context.SaveChangesAsync();
            }

            // SignalR Service への接続文字列がセットされている場合のみ有効化
            if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("SignalRConnection", EnvironmentVariableTarget.Process)))
            {
                var signalRMessages = binder.Bind <IAsyncCollector <SignalRMessage> >(new SignalRAttribute {
                    ConnectionStringSetting = "SignalRConnection", HubName = "monitor"
                });

                // 変更通知を SignalR で送信する
                foreach (var group in documents.GroupBy(x => new { x.CompanyCode, x.StoreCode }))
                {
                    await signalRMessages.AddAsync(new SignalRMessage
                    {
                        Target    = "update",
                        Arguments = new object[] { group.Key.CompanyCode, group.Key.StoreCode }
                    });
                }
            }

            // Application Insights に通知
            foreach (var document in documents)
            {
                _telemetryClient.TrackTrace("End Stock Processor", new Dictionary <string, string> {
                    { "ActivityId", document.ActivityId }
                });
            }
        }
示例#12
0
 public void SaveAndUpdateContext()
 {
     _context.SaveChangesAsync();
 }
示例#13
0
        public static async Task Run([CosmosDBTrigger("StockBackend", "StockTransaction", ConnectionStringSetting = "CosmosDBConnection", LeaseCollectionName = "leases", LeaseDatabaseName = "StockBackend",
                                                      LeasesCollectionThroughput = 400, CreateLeaseCollectionIfNotExists = true, FeedPollDelay = 500)]
                                     JArray input,
                                     IBinder binder,
                                     ILogger log)
        {
            if (input == null || input.Count <= 0)
            {
                return;
            }

            // StockDocument �փf�V���A���C�Y
            var documents = input.ToObject <StockDocument[]>();

            // �݌ɏ��� SQL DB �ɏ�������
            var entities = documents.SelectMany(x => x.Items.Select(xs => new StockEntity
            {
                DocumentId      = x.Id,
                TransactionId   = x.TransactionId,
                TransactionDate = x.TransactionDate,
                TransactionType = x.TransactionType,
                LocationCode    = x.LocationCode,
                CompanyCode     = x.CompanyCode,
                StoreCode       = x.StoreCode,
                TerminalCode    = x.TerminalCode,
                LineNo          = xs.LineNo,
                ItemCode        = xs.ItemCode,
                Quantity        = -xs.Quantity
            }));

            using (var context = new StockDbContext())
            {
                await context.Stocks.AddRangeAsync(entities);

                await context.SaveChangesAsync();
            }

            // SignalR Service �ւ̐ڑ������񂪃Z�b�g����Ă���ꍇ�̂ݗL����
            if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("SignalRConnection", EnvironmentVariableTarget.Process)))
            {
                var signalRMessages = binder.Bind <IAsyncCollector <SignalRMessage> >(new SignalRAttribute {
                    ConnectionStringSetting = "SignalRConnection", HubName = "monitor"
                });

                // �ύX�ʒm�� SignalR �ő��M����
                foreach (var document in documents)
                {
                    foreach (var item in document.Items)
                    {
                        await signalRMessages.AddAsync(new SignalRMessage
                        {
                            Target    = "update",
                            Arguments = new object[] { document.TerminalCode, item.ItemCode }
                        });
                    }
                }
            }

            // Application Insights �ɒʒm
            foreach (var document in documents)
            {
                _telemetryClient.TrackTrace("End Stock Processor", new Dictionary <string, string> {
                    { "ActivityId", document.ActivityId }
                });
            }
        }
示例#14
0
 public async Task Save()
 {
     await _dbContext.SaveChangesAsync();
 }