UNPKG

@veecode-platform/safira-cli

Version:

Generate a microservice project from your spec.

95 lines (94 loc) 7.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SpringGeneratorImpl = void 0; const tslib_1 = require("tslib"); const fs_1 = require("fs"); const uuid = tslib_1.__importStar(require("uuid")); const file_system_utils_1 = require("../../../utils/file-system-utils"); const spring_initializr_1 = require("./spring-initializr"); const codegen_springboot_1 = require("./codegen-springboot"); const package_manager_enum_1 = require("../package-manager-enum"); const application_properties_1 = require("../application-properties"); const docker_file_1 = require("../../template/docker-file"); const namespace_file_1 = require("../../template/namespace-file"); const service_file_1 = require("../../template/service-file"); const deployment_1 = require("../../template/deployment"); const decompress_1 = tslib_1.__importDefault(require("decompress")); const spring_dependency_updater_1 = require("./spring-dependency-updater"); const create_test_file_1 = require("../../template/java/spring/create-test-file"); const safira_settings_1 = require("../../../safira-project/safira-settings"); const string_utils_1 = require("../../../utils/string-utils"); const controller_creator_1 = require("../../template/java/spring/controller-creator"); const database_utils_1 = require("../../../database/database-utils"); class SpringGeneratorImpl { async generate(param) { const openapiFullPath = file_system_utils_1.FileSystemUtils.fullPath(param.openapiFilePath); const random = uuid.v4(); const tmpFolder = file_system_utils_1.FileSystemUtils.buildPath(param.projectSafiraPath, "tmp"); const tmpKeyFolder = file_system_utils_1.FileSystemUtils.buildPath(tmpFolder, random); console.log("Destiny folder : " + param.newProjectRoot); console.log("Safira folder : " + param.projectSafiraPath); console.log("Tmp folder : " + tmpKeyFolder); const zipFolder = file_system_utils_1.FileSystemUtils.buildPath(tmpKeyFolder, "spring-initializr"); const zipFile = file_system_utils_1.FileSystemUtils.buildPath(zipFolder, `${param.projectName}.zip`); file_system_utils_1.FileSystemUtils.createFolder(zipFolder); await new Promise((resolve, reject) => { new spring_initializr_1.SpringInitializrService().getInitializr(param.projectName, param.javaSpringbootVersion, { packageName: param.javaPackage, description: param.projectDescription, type: param.javaPackManager }, param.dataBase) .pipe((0, fs_1.createWriteStream)(zipFile)) .on("close", async () => { await (0, decompress_1.default)(zipFile, param.projectPath); resolve("SUCCESS"); }) .on("error", err => { console.error(err); reject(err); }); }); console.log("FINISH SpringInitializrService process"); const openapiGenerated = file_system_utils_1.FileSystemUtils.buildPath(tmpKeyFolder, "openapi-project"); file_system_utils_1.FileSystemUtils.createFolder(openapiGenerated); console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> openapiGenerated: " + openapiGenerated); console.log("START SwaggerCodegenCli process"); const codegen = new codegen_springboot_1.CodegenSpringboot(); console.log("FINISH SwaggerCodegenCli process"); file_system_utils_1.FileSystemUtils.chmod(file_system_utils_1.FileSystemUtils.buildPath(param.projectPath, param.javaPackManager === package_manager_enum_1.PackageManager.gradle ? "gradlew" : "mvnw"), 0o755); const swaggerSrcFolder = file_system_utils_1.FileSystemUtils.buildPath(openapiGenerated, "src", "main", "java"); const destinyMainFolder = file_system_utils_1.FileSystemUtils.buildPath(param.projectPath, "src", "main"); const destinySrcFolder = file_system_utils_1.FileSystemUtils.buildPath(param.projectPath, "src", "main", "java"); console.log("copy folder " + swaggerSrcFolder + " to " + destinySrcFolder); file_system_utils_1.FileSystemUtils.createFolder(destinyMainFolder); file_system_utils_1.FileSystemUtils.copyFolderRecursiveSync(swaggerSrcFolder, destinyMainFolder); file_system_utils_1.FileSystemUtils.deleteFolder(tmpFolder); const resourcesFile = file_system_utils_1.FileSystemUtils.buildPath(param.projectPath, "src", "main", "resources"); const properties = new application_properties_1.DefaultApplicationProperties(); const springProperties = [ { key: "server.port", value: param.applicationPort }, { key: "spring.application.name", value: param.projectName }, { key: "management.endpoint.health.probes.enabled", value: "true" }, { key: "management.health.livenessState.enabled", value: "true" }, { key: "management.health.readinessState.enabled", value: "true" }, ]; if (param.useDataBase) { springProperties.push({ key: "spring.datasource.url", value: `jdbc:${param.dataBase}://${param.dataBaseUrl}` }, { key: "spring.datasource.driver-class-name", value: database_utils_1.DatabaseUtils.getDriverClass(param.dataBase) }, { key: "spring.datasource.username", value: param.dataBaseUser }, { key: "spring.datasource.password", value: param.dataBasePassword }); } await properties.addProperties(resourcesFile, springProperties); const dockerFolder = file_system_utils_1.FileSystemUtils.buildPath(param.projectSafiraPath, "docker"); file_system_utils_1.FileSystemUtils.createFolder(dockerFolder); docker_file_1.DockerFileJava.instance.create(param.javaPackManager, param.language, param.projectName, dockerFolder); const k8sFolder = file_system_utils_1.FileSystemUtils.buildPath(param.projectSafiraPath, "k8s"); console.log("create k8sFolder: " + k8sFolder); file_system_utils_1.FileSystemUtils.createFolder(k8sFolder); new namespace_file_1.NamespaceFile().create(param.kubernetesNamespace, k8sFolder); new service_file_1.ServiceFile().create(param.kubernetesNamespace, param.projectName, param.applicationPort, param.applicationPort, k8sFolder); new deployment_1.DeploymentFile().create(param.kubernetesNamespace, param.projectName, param.applicationPort, param.dockerRegistry, k8sFolder); new controller_creator_1.SpringControllerCreator().create(param.projectPath); new spring_dependency_updater_1.SpringDependencyUpdater().update(param.projectPath, param.javaPackManager); new create_test_file_1.SpringTestFile().create(param.projectPath); const apiPackage = safira_settings_1.SafiraSettings.instance(file_system_utils_1.FileSystemUtils.buildPath(param.projectPath, ".safira")).loadSettingsFile().project.java.package; const packageAsPath = string_utils_1.StringUtils.replaceAll(apiPackage, ".", file_system_utils_1.FileSystemUtils.getFileSeparator()); const serviceFolder = file_system_utils_1.FileSystemUtils.buildPath(param.projectPath, "src", "main", "java", packageAsPath, "service"); file_system_utils_1.FileSystemUtils.createFolder(serviceFolder); console.log(`See all controllers at: ${param.javaPackage}.api`); } } exports.SpringGeneratorImpl = SpringGeneratorImpl;