public async Task <StockTicker> UpdateAsync(StockTicker stockTickers, CancellationToken ct) { var updatedStockTickerEntry = _context.StockTickers.Update(stockTickers.ToModel()); await _context.SaveChangesAsync(ct); return(updatedStockTickerEntry.Entity.ToServiceModel()); }
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")); }
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 }); } }
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 }); } }
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 } }); } }
public void SaveAndUpdateContext() { _context.SaveChangesAsync(); }
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 } }); } }
public async Task Save() { await _dbContext.SaveChangesAsync(); }