public override void Execute() { var eventAggregator = new EventAggregator(); var orderPublisher = new OrderPublisher(eventAggregator); var warehousePublisher = new WarehousePublisher(eventAggregator); var orderSubscriber = new OrderSubscriber(eventAggregator); var businessTrackingSubscriber = new BusinessTrackingSubscriber(eventAggregator); Console.WriteLine("Preparing order 1..."); orderPublisher.Publish("Order 1"); Console.WriteLine("\nPreparing small delivery..."); warehousePublisher.Publish("Small delivery to the warehouse."); Console.WriteLine("\nPreparing order 2..."); orderPublisher.Publish("Order 2"); Console.WriteLine("\nUnsubscribing order subscriber from further events..."); orderSubscriber.Unsubscribe(); Console.WriteLine("\nPreparing order 3..."); orderPublisher.Publish("Order 3"); }
public VarlikResult CancelTheOrder(long idMainOrder, long idUser) { var result = new VarlikResult(); using (var ctx = new VarlikContext()) { var mainOrder = ctx.MainOrderLog .FirstOrDefault(l => l.Id == idMainOrder && l.IdUser == idUser); if (mainOrder == null) { result.Status = ResultStatus.NoSuchObject; return(result); } if (mainOrder.IdTransactionState != TransactionStateEnum.Processing) { result.Status = ResultStatus.CannotBeCancelled; return(result); } //sub orders var subOrders = ctx.UserCoinTransactionOrder.Where(l => l.IdMainOrderLog == mainOrder.Id).ToList(); foreach (var item in subOrders) { item.IdTransactionState = TransactionStateEnum.CancelledByUser; } mainOrder.IdTransactionState = TransactionStateEnum.CancelledByUser; try { ctx.SaveChanges(); result.Success(); //push OrderPublisher orderPublisher = new OrderPublisher(); foreach (var item in subOrders) { orderPublisher.PublishOrder(item.IdCoinType, new TransactinOrderListDto() { CoinAmount = -1 * item.CoinAmount, CoinUnitPrice = item.CoinUnitPrice, IdTransactionType = item.IdTransactionType, Total = -1 * item.CoinAmount * item.CoinUnitPrice }); } } catch (Exception e) { } } return(result); }
public VarlikResult Save(UserCoinTransactionOrderDto userCoinTransactionOrderDto) { if (userCoinTransactionOrderDto == null) { var result = new VarlikResult(); result.Status = ResultStatus.MissingRequiredParamater; return(result); } userCoinTransactionOrderDto.CoinUnitPrice = Math.Abs(userCoinTransactionOrderDto.CoinUnitPrice); userCoinTransactionOrderDto.CoinAmount = Math.Abs(userCoinTransactionOrderDto.CoinAmount); var transactionManager = new UserCoinTransactionLogManager(); //get current max price of coin if (userCoinTransactionOrderDto.IdTransactionType == TransactionTypeEnum.CoinSales) { var maxPriceR = transactionManager.GetMaxPriceOfCoin(userCoinTransactionOrderDto.IdCoinType); if (maxPriceR.IsSuccess) { if (maxPriceR.Data > 0) { var limit = maxPriceR.Data * 20; if (userCoinTransactionOrderDto.CoinUnitPrice > limit) { var result = new VarlikResult(); result.Status = ResultStatus.AboveTheLimit; return(result); } } } } var idUser = IdentityHelper.Instance.CurrentUserId; userCoinTransactionOrderDto.IdUser = idUser; // does user have this address if (userCoinTransactionOrderDto.IdTransactionType == TransactionTypeEnum.FromWallet) { var userManager = new UserManager(); var hasAddressR = userManager.DoesUserHaveThisAddress(idUser, userCoinTransactionOrderDto.IdCoinType, userCoinTransactionOrderDto.ToWalletAddress); if (!hasAddressR.IsSuccess) { return(hasAddressR); } if (!hasAddressR.Data) { var result = new VarlikResult(); result.Status = ResultStatus.UserDoesNotHaveThisAddress; return(result); } } else if (userCoinTransactionOrderDto.IdTransactionType == TransactionTypeEnum.ToWallet) { var userManager = new UserManager(); var hasAddressR = userManager.DoesUserHaveThisAddress(idUser, userCoinTransactionOrderDto.IdCoinType, userCoinTransactionOrderDto.FromWalletAddress); if (!hasAddressR.IsSuccess || !hasAddressR.Data) { var result = new VarlikResult(); result.Status = ResultStatus.UserDoesNotHaveThisAddress; return(result); } } var push = new List <TransactinOrderListDto>(); var saveResult = _userCoinTransactionOrderOperation.MakeOrder(userCoinTransactionOrderDto, ref push); // push to order list if (saveResult.IsSuccess) { OrderPublisher orderPublisher = new OrderPublisher(); foreach (var transactinOrderListDto in push) { orderPublisher.PublishOrder(userCoinTransactionOrderDto.IdCoinType, transactinOrderListDto); } } //push to price list transactionManager.PushPrice(userCoinTransactionOrderDto.IdCoinType); return(saveResult); }