public void Execute(NewTenantArgs args) { using (var conn = this.connectionFactory()) using (var session = SqlSession.Open(conn)) { var repo = new SqlRepository(session); var cmd = new NewTenantCommand(repo); var req = Mapper.Map <NewTenantRequest>(args); var res = cmd.Execute(req); res.MatchSome(x => { session.Commit(); Log.Information( "Created tenant {TenantName} with id {TenantId}", x.Tenant.Name, x.Tenant.Id); }); res.MatchNone(x => { session.Rollback(); Log.Error(x, "Failed to create tenant"); }); } }
public static Tenant Build(Guid id, NewTenantCommand command) { return(new Tenant { Id = id, Name = command.Name, Cnpj = command.Cnpj }); }
public List <IEvent> Register(Guid id, NewTenantCommand command) { var tenant = Tenant.Factory.Build(id, command); if (!tenant.IsValid()) { this.Notify(tenant.Notifications); return(null); } var user = tenant.RegisterUser(command.Username, command.Password); //TODO : Criar mecanismo de transação _tenantRepository.Create(tenant); _userRepository.Create(user); return(new List <IEvent> { new TenantRegistered(tenant) }); }
public static void Main(string[] args) { var newTenant = new NewTenantCommand { Name = "Yan Justino", Username = "******", Password = "******", Cnpj = "12345678901234" }; var id = _tentantQueryRepoisotry.NextId(); var events = _service.Register(id, newTenant); if (!_service.IsValid()) { Console.WriteLine(_service.StringfyNotifications()); } else { ApiService.Publishers.EventPublisher.Publish(events); } Console.Read(); }