private static void RunTemplateBuilders(string solutionDirectory, ApiTemplate template, IFileSystem fileSystem) { // dbcontext DbContextBuilder.CreateDbContext(solutionDirectory, template.Entities, template.DbContext.ContextName, template.DbContext.Provider, template.DbContext.DatabaseName); //entities foreach (var entity in template.Entities) { EntityBuilder.CreateEntity(solutionDirectory, entity, fileSystem); DtoBuilder.CreateDtos(solutionDirectory, entity); RepositoryBuilder.AddRepository(solutionDirectory, entity, template.DbContext); ValidatorBuilder.CreateValidators(solutionDirectory, entity); ProfileBuilder.CreateProfile(solutionDirectory, entity); ControllerBuilder.CreateController(solutionDirectory, entity, template.SwaggerConfig.AddSwaggerComments, template.AuthorizationSettings.Policies); FakesBuilder.CreateFakes(solutionDirectory, template.SolutionName, entity); ReadTestBuilder.CreateEntityReadTests(solutionDirectory, template.SolutionName, entity, template.DbContext.ContextName); GetTestBuilder.CreateEntityGetTests(solutionDirectory, template.SolutionName, entity, template.DbContext.ContextName, template.AuthorizationSettings.Policies); PostTestBuilder.CreateEntityWriteTests(solutionDirectory, entity, template.SolutionName, template.AuthorizationSettings.Policies); UpdateTestBuilder.CreateEntityUpdateTests(solutionDirectory, entity, template.SolutionName, template.DbContext.ContextName, template.AuthorizationSettings.Policies); DeleteIntegrationTestBuilder.CreateEntityDeleteTests(solutionDirectory, entity, template.SolutionName, template.DbContext.ContextName, template.AuthorizationSettings.Policies); DeleteTestBuilder.DeleteEntityWriteTests(solutionDirectory, entity, template.SolutionName, template.DbContext.ContextName); WebAppFactoryBuilder.CreateWebAppFactory(solutionDirectory, template.SolutionName, template.DbContext.ContextName, template.AddJwtAuthentication); } // environments Utilities.AddStartupEnvironmentsWithServices( solutionDirectory, template.SolutionName, template.DbContext.DatabaseName, template.Environments, template.SwaggerConfig, template.Port, template.AddJwtAuthentication ); //seeders SeederBuilder.AddSeeders(solutionDirectory, template.Entities, template.DbContext.ContextName); //services SwaggerBuilder.AddSwagger(solutionDirectory, template.SwaggerConfig, template.SolutionName, template.AddJwtAuthentication, template.AuthorizationSettings.Policies); if (template.AddJwtAuthentication) { InfrastructureIdentityServiceRegistrationBuilder.CreateInfrastructureIdentityServiceExtension(solutionDirectory, template.AuthorizationSettings.Policies, fileSystem); } //final ReadmeBuilder.CreateReadme(solutionDirectory, template.SolutionName, fileSystem); if (template.AddGit) { GitSetup(solutionDirectory); } }
public static void Run(string filePath, string buildSolutionDirectory, IFileSystem fileSystem) { try { GlobalSingleton instance = GlobalSingleton.GetInstance(); FileParsingHelper.RunInitialTemplateParsingGuards(filePath); var template = FileParsingHelper.GetTemplateFromFile <MicroTemplate>(filePath); WriteHelpText($"Your template file was parsed successfully."); foreach (var micro in template.Microservices) { FileParsingHelper.RunPrimaryKeyGuard(micro.Entities); } FileParsingHelper.RunSolutionNameAssignedGuard(template.SolutionName); // solution level stuff var solutionDirectory = $"{buildSolutionDirectory}{Path.DirectorySeparatorChar}{template.SolutionName}"; var srcDirectory = Path.Combine(solutionDirectory, "src"); fileSystem.Directory.CreateDirectory(srcDirectory); SolutionBuilder.BuildSolution(srcDirectory, template.SolutionName, fileSystem); // add all files based on the given template config RunMicroTemplateBuilders(srcDirectory, template.Microservices, template.Gateways, fileSystem); ReadmeBuilder.CreateReadme(solutionDirectory, template.SolutionName, fileSystem); if (template.AddGit) { GitSetup(solutionDirectory); } WriteFileCreatedUpdatedResponse(); WriteHelpHeader($"{Environment.NewLine}Your API is ready! Build something amazing."); StarGithubRequest(); } catch (Exception e) { if (e is FileAlreadyExistsException || e is DirectoryAlreadyExistsException || e is InvalidSolutionNameException || e is FileNotFoundException || e is InvalidDbProviderException || e is InvalidFileTypeException || e is EntityNotFoundException) { WriteError($"{e.Message}"); } else { WriteError($"An unhandled exception occurred when running the API command.\nThe error details are: \n{e.Message}"); } } }
private static void RunTemplateBuilders(string solutionDirectory, ApiTemplate template, IFileSystem fileSystem) { // dbcontext DbContextBuilder.CreateDbContext(solutionDirectory, template); //entities foreach (var entity in template.Entities) { EntityBuilder.CreateEntity(solutionDirectory, entity, fileSystem); DtoBuilder.CreateDtos(solutionDirectory, entity); RepositoryBuilder.AddRepository(solutionDirectory, entity, template.DbContext); ValidatorBuilder.CreateValidators(solutionDirectory, entity); ProfileBuilder.CreateProfile(solutionDirectory, entity); ControllerBuilder.CreateController(solutionDirectory, entity); FakesBuilder.CreateFakes(solutionDirectory, template, entity); ReadTestBuilder.CreateEntityReadTests(solutionDirectory, template, entity); GetTestBuilder.CreateEntityGetTests(solutionDirectory, template, entity); PostTestBuilder.CreateEntityWriteTests(solutionDirectory, template, entity); UpdateTestBuilder.CreateEntityUpdateTests(solutionDirectory, template, entity); DeleteTestBuilder.DeleteEntityWriteTests(solutionDirectory, template, entity); WebAppFactoryBuilder.CreateWebAppFactory(solutionDirectory, template, entity); } // environments AddStartupEnvironmentsWithServices(solutionDirectory, template); //seeders SeederBuilder.AddSeeders(solutionDirectory, template); //services SwaggerBuilder.AddSwagger(solutionDirectory, template); if (template.AuthSetup.AuthMethod == "JWT") { IdentityServicesModifier.SetIdentityOptions(solutionDirectory, template.AuthSetup); IdentitySeederBuilder.AddSeeders(solutionDirectory, template); IdentityRoleBuilder.CreateRoles(solutionDirectory, template.AuthSetup.Roles); RoleSeedBuilder.SeedRoles(solutionDirectory, template); } //final ReadmeBuilder.CreateReadme(solutionDirectory, template, fileSystem); if (template.AddGit) { GitSetup(solutionDirectory); } }
public static void Run(string filePath, string buildSolutionDirectory, IFileSystem fileSystem, Verbosity verbosity) { try { FileParsingHelper.RunInitialTemplateParsingGuards(filePath); var domainProject = FileParsingHelper.GetTemplateFromFile <DomainProject>(filePath); WriteHelpText($"Your template file was parsed successfully."); var domainDirectory = $"{buildSolutionDirectory}{Path.DirectorySeparatorChar}{domainProject.DomainName}"; fileSystem.Directory.CreateDirectory(domainDirectory); foreach (var template in domainProject.BoundedContexts) { ApiScaffolding.ScaffoldApi(domainDirectory, template, fileSystem, verbosity); } //final ReadmeBuilder.CreateReadme(domainDirectory, domainProject.DomainName, fileSystem); if (domainProject.AddGit) { Utilities.GitSetup(domainDirectory); } WriteHelpHeader($"{Environment.NewLine}Your domain project is ready! Build something amazing."); StarGithubRequest(); } catch (Exception e) { if (e is FileAlreadyExistsException || e is DirectoryAlreadyExistsException || e is InvalidSolutionNameException || e is FileNotFoundException || e is InvalidDbProviderException || e is InvalidFileTypeException || e is SolutiuonNameEntityMatchException) { WriteError($"{e.Message}"); } else { WriteError($"An unhandled exception occurred when running the API command.\nThe error details are: \n{e.Message}"); } } }
public static void CreateNewDomainProject(string domainDirectory, IFileSystem fileSystem, DomainProject domainProject) { fileSystem.Directory.CreateDirectory(domainDirectory); SolutionBuilder.BuildSolution(domainDirectory, domainProject.DomainName, fileSystem); // need this before boundaries to give them something to build against DockerBuilders.CreateDockerComposeSkeleton(domainDirectory, fileSystem); //Parallel.ForEach(domainProject.BoundedContexts, (template) => // ApiScaffolding.ScaffoldApi(domainDirectory, template, fileSystem, verbosity)); foreach (var bc in domainProject.BoundedContexts) { ApiScaffolding.ScaffoldApi(domainDirectory, bc, fileSystem); } // auth server if (domainProject.AuthServer != null) { AddAuthServerCommand.AddAuthServer(domainDirectory, fileSystem, domainProject.AuthServer); } // messages if (domainProject.Messages.Count > 0) { AddMessageCommand.AddMessages(domainDirectory, fileSystem, domainProject.Messages); } // migrations Utilities.RunDbMigrations(domainProject.BoundedContexts, domainDirectory); //final ReadmeBuilder.CreateReadme(domainDirectory, domainProject.DomainName, fileSystem); if (domainProject.AddGit) { Utilities.GitSetup(domainDirectory, domainProject.UseSystemGitUser); } }