@veecode-platform/safira-cli
Version:
Generate a microservice project from your spec.
95 lines (94 loc) • 7.32 kB
JavaScript
"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;