GetAccountBusinessRulesForCommand(FetchAccountBusinessRules cmd)
        {
            //_logger.Info($"[GetAccountBusinessRulesForCommand]: Getting business rules for {cmd.AccountState.AccountNumber}.");
            if (RulesInFile == null)
            {
                Initialize();
            }
            try
            {
                var rules = RulesInFile
                            .Where(ruleMap =>
                                   // Look for rules associated to this command
                                   ruleMap.Command.GetType().Name.Equals(cmd.Command.GetType().Name) &&
                                   // which also either match this account
                                   (ruleMap.AccountNumber.Equals(cmd.AccountState.AccountNumber) ||
                                   // or all accounts under this portfolio
                                    ruleMap.Portfolio.Equals(cmd.PortfolioName) && ruleMap.ForAllAccounts ||
                                   // or all accounts under all portfolios for this client
                                    ruleMap.Client.Equals(cmd.Client) && ruleMap.Portfolio.Equals("*") &&
                                    ruleMap.ForAllAccounts)
                                   )
                            .Select(ruleMap => ruleMap.BusinessRule).ToImmutableList();

                var rulesFound = new List <IAccountBusinessRule>();

                rulesFound.AddRange(rules.ToList());
                // TODO need to make this dynamic using replection
                //And lastly add the command rule itself
                rulesFound.Add(new BillingAssessmentRule());

                AccountBusinessRulesHandlerRouter.Tell(
                    new MappedBusinessRules(cmd, rulesFound.ToList())
                    );
            }
            catch (Exception e)
            {
                _logger.Error($"{e.Message} {e.StackTrace}");
                throw;
            }
        }
Ejemplo n.º 2
0
        private void ConfigureActorSystem(Config config)
        {
            DemoActorSystem = ActorSystem.Create("demoSystem", config);

            DemoSystemSupervisor = DemoActorSystem.ActorOf(Props.Create <SystemSupervisor>(), "demoSupervisor");

            var statsDServer = config.GetString("Akka.StatsDServer");
            var statsDPort   = Convert.ToInt32(config.GetString("Akka.StatsDPort"));
            var statsDPrefix = config.GetString("Akka.StatsDPrefix");

            BusinessRulesFilename   = config.GetString("Akka.BusinessRulesFilename");
            CommandsToRulesFilename = config.GetString("Akka.CommandsToRulesFilename");

            Console.WriteLine($"(StatsD) Server: {statsDServer}");
            Console.WriteLine($"(StatsD) Port:   {statsDPort}");
            Console.WriteLine($"(StatsD) Prefix: {statsDPrefix}");


            ActorMonitoringExtension.RegisterMonitor(DemoActorSystem,
                                                     new ActorStatsDMonitor(statsDServer
                                                                            , statsDPort
                                                                            , statsDPrefix
                                                                            ));

            DemoSystemSupervisor.Tell(new BootUp("Starting Up"));

            Console.WriteLine($"(Business Rules) BusinessRulesFilename: {BusinessRulesFilename}");
            Console.WriteLine($"(Business Rules) CommandsToRulesFilename: {CommandsToRulesFilename}");


            AccountBusinessRulesMapperRouter = DemoActorSystem.ActorOf(Props.Create <AccountBusinessRulesMapper>(), "AccountBusinessRulesMapperRouter");
            AccountBusinessRulesMapperRouter.Tell(new BootUp("Get up!"));
            Console.WriteLine($"(Business Rules) AccountBusinessRulesMapperRouter spun up");

            AccountBusinessRulesHandlerRouter = DemoActorSystem.ActorOf(Props.Create <AccountBusinessRulesHandler>(), "AccountBusinessRulesHandlerRouter");
            AccountBusinessRulesHandlerRouter.Tell(new BootUp("Get up!"));
            Console.WriteLine($"(Business Rules) AccountBusinessRulesHandlerRouter spun up");
        }