public static void CreateController(string solutionDirectory, Entity entity, bool AddSwaggerComments) { try { var classPath = ClassPathHelper.ControllerClassPath(solutionDirectory, $"{Utilities.GetControllerName(entity.Plural)}.cs"); if (!Directory.Exists(classPath.ClassDirectory)) { Directory.CreateDirectory(classPath.ClassDirectory); } if (File.Exists(classPath.FullClassPath)) { throw new FileAlreadyExistsException(classPath.FullClassPath); } using (FileStream fs = File.Create(classPath.FullClassPath)) { var data = GetControllerFileText(classPath.ClassNamespace, entity, AddSwaggerComments); fs.Write(Encoding.UTF8.GetBytes(data)); } GlobalSingleton.AddCreatedFile(classPath.FullClassPath.Replace($"{solutionDirectory}{Path.DirectorySeparatorChar}", "")); } catch (FileAlreadyExistsException e) { WriteError(e.Message); throw; } catch (Exception e) { WriteError($"An unhandled exception occurred when running the API command.\nThe error details are: \n{e.Message}"); throw; } }
public static void CreateController(string solutionDirectory, Entity entity, bool AddSwaggerComments, List <Policy> policies, string projectBaseName = "") { try { var classPath = ClassPathHelper.ControllerClassPath(solutionDirectory, $"{Utilities.GetControllerName(entity.Plural)}.cs", projectBaseName, "v1"); if (!Directory.Exists(classPath.ClassDirectory)) { Directory.CreateDirectory(classPath.ClassDirectory); } if (File.Exists(classPath.FullClassPath)) { throw new FileAlreadyExistsException(classPath.FullClassPath); } using (FileStream fs = File.Create(classPath.FullClassPath)) { var data = GetControllerFileText(classPath.ClassNamespace, entity, AddSwaggerComments, policies, solutionDirectory, projectBaseName); fs.Write(Encoding.UTF8.GetBytes(data)); } } catch (FileAlreadyExistsException e) { WriteError(e.Message); throw; } catch (Exception e) { WriteError($"An unhandled exception occurred when running the API command.\nThe error details are: \n{e.Message}"); throw; } }
public static void CreateController(string solutionDirectory, string srcDirectory, string entityName, string entityPlural, string projectBaseName, bool isProtected, IFileSystem fileSystem) { var classPath = ClassPathHelper.ControllerClassPath(srcDirectory, $"{Utilities.GetControllerName(entityPlural)}.cs", projectBaseName, "v1"); var fileText = GetControllerFileText(classPath.ClassNamespace, entityName, entityPlural, solutionDirectory, srcDirectory, projectBaseName, isProtected); Utilities.CreateFile(classPath, fileText, fileSystem); }
public static void RemoveDirectory(string solutionDirectory) { var classPath = ClassPathHelper.ControllerClassPath(solutionDirectory, ""); // deleting directory, so I don't need to give a meaningful filename if (!Directory.Exists(classPath.ClassDirectory)) { throw new DirectoryNotFoundException($"The `{classPath.ClassDirectory}` directory could not be found."); } var dir = new DirectoryInfo(classPath.ClassDirectory); dir.Delete(true); }
public static void RemoveController(string solutionDirectory) { var classPath = ClassPathHelper.ControllerClassPath(solutionDirectory, "AuthController.cs", ""); if (!Directory.Exists(classPath.ClassDirectory)) { throw new DirectoryNotFoundException($"The `{classPath.ClassDirectory}` directory could not be found."); } if (!File.Exists(classPath.FullClassPath)) { throw new FileNotFoundException($"The `{classPath.FullClassPath}` file could not be found."); } File.Delete(classPath.FullClassPath); }
public static void CreateController(string solutionDirectory, string entityName, string entityPlural, string projectBaseName) { var classPath = ClassPathHelper.ControllerClassPath(solutionDirectory, $"{Utilities.GetControllerName(entityPlural)}.cs", projectBaseName, "v1"); if (!Directory.Exists(classPath.ClassDirectory)) { Directory.CreateDirectory(classPath.ClassDirectory); } if (File.Exists(classPath.FullClassPath)) { throw new FileAlreadyExistsException(classPath.FullClassPath); } using FileStream fs = File.Create(classPath.FullClassPath); var data = GetControllerFileText(classPath.ClassNamespace, entityName, entityPlural, solutionDirectory, projectBaseName); fs.Write(Encoding.UTF8.GetBytes(data)); }
private static void BuildWebApiProject(string solutionDirectory, IFileSystem fileSystem) { var webApiProjectClassPath = ClassPathHelper.WebApiProjectClassPath(solutionDirectory); WebApiCsProjBuilder.CreateWebApiCsProj(solutionDirectory); Utilities.ExecuteProcess("dotnet", $@"sln add ""{webApiProjectClassPath.FullClassPath}"" --solution-folder {"Api"}", solutionDirectory); // base folders Directory.CreateDirectory(ClassPathHelper.ControllerClassPath(solutionDirectory, "").ClassDirectory); Directory.CreateDirectory(ClassPathHelper.WebApiExtensionsClassPath(solutionDirectory, "").ClassDirectory); Directory.CreateDirectory(ClassPathHelper.WebApiMiddlewareClassPath(solutionDirectory, "").ClassDirectory); WebApiServiceExtensionsBuilder.CreateWebApiServiceExtension(solutionDirectory, fileSystem); WebApiAppExtensionsBuilder.CreateWebApiAppExtension(solutionDirectory, fileSystem); ErrorHandlerMiddlewareBuilder.CreateErrorHandlerMiddleware(solutionDirectory, fileSystem); AppSettingsBuilder.CreateAppSettings(solutionDirectory); LaunchSettingsBuilder.CreateLaunchSettings(solutionDirectory, fileSystem); WebApiProgramBuilder.CreateWebApiProgram(solutionDirectory, fileSystem); StartupBuilder.CreateStartup(solutionDirectory, "Startup", null); }
private static void BuildWebApiProject(string solutionDirectory, string projectDirectory, string projectBaseName, bool useJwtAuth, string dbName, IFileSystem fileSystem) { var solutionFolder = projectDirectory.Replace(solutionDirectory, "").Replace(Path.DirectorySeparatorChar.ToString(), ""); var webApiProjectClassPath = ClassPathHelper.WebApiProjectClassPath(projectDirectory, projectBaseName); WebApiCsProjBuilder.CreateWebApiCsProj(projectDirectory, projectBaseName); Utilities.ExecuteProcess("dotnet", $@"sln add ""{webApiProjectClassPath.FullClassPath}"" --solution-folder {solutionFolder}", solutionDirectory); // base folders Directory.CreateDirectory(ClassPathHelper.ControllerClassPath(projectDirectory, "", projectBaseName, "v1").ClassDirectory); Directory.CreateDirectory(ClassPathHelper.WebApiExtensionsClassPath(projectDirectory, "", projectBaseName).ClassDirectory); Directory.CreateDirectory(ClassPathHelper.WebApiMiddlewareClassPath(projectDirectory, "", projectBaseName).ClassDirectory); WebApiServiceExtensionsBuilder.CreateWebApiServiceExtension(projectDirectory, projectBaseName, fileSystem); WebApiAppExtensionsBuilder.CreateWebApiAppExtension(projectDirectory, projectBaseName, fileSystem); ErrorHandlerMiddlewareBuilder.CreateErrorHandlerMiddleware(projectDirectory, projectBaseName, fileSystem); WebApiAppSettingsBuilder.CreateAppSettings(projectDirectory, new ApiEnvironment(), dbName, projectBaseName); // empty environment so i can get a blank with all the right keys. don't care about values as they get overriden by env specific settings WebApiLaunchSettingsBuilder.CreateLaunchSettings(projectDirectory, projectBaseName, fileSystem); ProgramBuilder.CreateWebApiProgram(projectDirectory, projectBaseName, fileSystem); StartupBuilder.CreateWebApiStartup(projectDirectory, "Production", useJwtAuth, projectBaseName); }
private static void BuildWebApiProject(string solutionDirectory, string srcDirectory, string projectBaseName, bool useJwtAuth, string dbProvider, string dbName, IFileSystem fileSystem) { var solutionFolder = srcDirectory.GetSolutionFolder(solutionDirectory); var webApiProjectClassPath = ClassPathHelper.WebApiProjectClassPath(srcDirectory, projectBaseName); WebApiCsProjBuilder.CreateWebApiCsProj(srcDirectory, projectBaseName, dbProvider); Utilities.ExecuteProcess("dotnet", $@"sln add ""{webApiProjectClassPath.FullClassPath}"" --solution-folder {solutionFolder}", solutionDirectory); // base folders Directory.CreateDirectory(ClassPathHelper.ControllerClassPath(srcDirectory, "", projectBaseName, "v1").ClassDirectory); Directory.CreateDirectory(ClassPathHelper.WebApiServiceExtensionsClassPath(srcDirectory, "", projectBaseName).ClassDirectory); Directory.CreateDirectory(ClassPathHelper.WebApiMiddlewareClassPath(srcDirectory, "", projectBaseName).ClassDirectory); // additional from what was other projects Directory.CreateDirectory(ClassPathHelper.DtoClassPath(solutionDirectory, "", "", projectBaseName).ClassDirectory); Directory.CreateDirectory(ClassPathHelper.ExceptionsClassPath(srcDirectory, "").ClassDirectory); Directory.CreateDirectory(ClassPathHelper.WrappersClassPath(srcDirectory, "", projectBaseName).ClassDirectory); Directory.CreateDirectory(ClassPathHelper.SharedDtoClassPath(solutionDirectory, "").ClassDirectory); Directory.CreateDirectory(ClassPathHelper.DbContextClassPath(srcDirectory, "", projectBaseName).ClassDirectory); Directory.CreateDirectory(ClassPathHelper.DummySeederClassPath(srcDirectory, "", projectBaseName).ClassDirectory); WebApiServiceExtensionsBuilder.CreateApiVersioningServiceExtension(srcDirectory, projectBaseName, fileSystem); WebApiServiceExtensionsBuilder.CreateCorsServiceExtension(srcDirectory, projectBaseName, fileSystem); WebApiServiceExtensionsBuilder.CreateWebApiServiceExtension(srcDirectory, projectBaseName, fileSystem); ErrorHandlerFilterAttributeBuilder.CreateErrorHandlerFilterAttribute(srcDirectory, projectBaseName, fileSystem); AppSettingsBuilder.CreateWebApiAppSettings(srcDirectory, dbName, projectBaseName); WebApiLaunchSettingsBuilder.CreateLaunchSettings(srcDirectory, projectBaseName, fileSystem); ProgramBuilder.CreateWebApiProgram(srcDirectory, projectBaseName, fileSystem); StartupBuilder.CreateWebApiStartup(srcDirectory, useJwtAuth, projectBaseName, fileSystem); LocalConfigBuilder.CreateLocalConfig(srcDirectory, projectBaseName, fileSystem); LoggingConfigurationBuilder.CreateConfigFile(srcDirectory, projectBaseName, fileSystem); InfrastructureServiceRegistrationBuilder.CreateInfrastructureServiceExtension(srcDirectory, projectBaseName, fileSystem); BasePaginationParametersBuilder.CreateBasePaginationParameters(solutionDirectory, projectBaseName, fileSystem); PagedListBuilder.CreatePagedList(srcDirectory, projectBaseName, fileSystem); CoreExceptionsBuilder.CreateExceptions(solutionDirectory, projectBaseName, fileSystem); Utilities.AddProjectReference(webApiProjectClassPath, @"..\..\..\SharedKernel\SharedKernel.csproj"); }
public void ControllerClassPath_returns_accurate_path() { var path = ClassPathHelper.ControllerClassPath("", "ProductName.cs"); path.ClassDirectory.Should().Be(Path.Combine("WebApi", "Controllers", "v1")); }
public static void AddEndpoint(string srcDirectory, FeatureType featureType, Entity entity, bool addSwaggerComments, Feature feature, string projectBaseName) { var classPath = ClassPathHelper.ControllerClassPath(srcDirectory, $"{Utilities.GetControllerName(entity.Plural)}.cs", projectBaseName, "v1"); if (!Directory.Exists(classPath.ClassDirectory)) { Directory.CreateDirectory(classPath.ClassDirectory); } if (!File.Exists(classPath.FullClassPath)) { throw new FileNotFoundException($"The `{classPath.FullClassPath}` file could not be found."); } var tempPath = $"{classPath.FullClassPath}temp"; using (var input = File.OpenText(classPath.FullClassPath)) { using (var output = new StreamWriter(tempPath)) { string line; while (null != (line = input.ReadLine())) { var newText = $"{line}"; if (line.Contains($"// endpoint marker")) { var endpoint = ""; if (featureType == FeatureType.GetList) { endpoint = GetListEndpointBuilder.GetEndpointTextForGetList(entity, addSwaggerComments, feature); } else if (featureType == FeatureType.GetRecord) { endpoint = GetRecordEndpointBuilder.GetEndpointTextForGetRecord(entity, addSwaggerComments, feature); } else if (featureType == FeatureType.AddRecord) { endpoint = CreateRecordEndpointBuilder.GetEndpointTextForCreateRecord(entity, addSwaggerComments, feature); } else if (featureType == FeatureType.AddListByFk) { endpoint = CreateRecordEndpointBuilder.GetEndpointTextForCreateList(entity, addSwaggerComments, feature); } else if (featureType == FeatureType.DeleteRecord) { endpoint = DeleteRecordEndpointBuilder.GetEndpointTextForDeleteRecord(entity, addSwaggerComments, feature); } else if (featureType == FeatureType.UpdateRecord) { endpoint = PutRecordEndpointBuilder.GetEndpointTextForPutRecord(entity, addSwaggerComments, feature); } else if (featureType == FeatureType.PatchRecord) { endpoint = PatchRecordEndpointBuilder.GetEndpointTextForPatchRecord(entity, addSwaggerComments, feature); } newText = $"{endpoint}{Environment.NewLine}{Environment.NewLine}{newText}"; } output.WriteLine(newText); } } } // delete the old file and set the name of the new one to the original name File.Delete(classPath.FullClassPath); File.Move(tempPath, classPath.FullClassPath); }