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; } }
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"); }