@veecode-platform/safira-cli
Version:
Generate a microservice project from your spec.
44 lines (43 loc) • 3.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SpringControllerCreator = void 0;
const generate_file_1 = require("../../generate-file");
const file_system_utils_1 = require("../../../../utils/file-system-utils");
const safira_settings_1 = require("../../../../safira-project/safira-settings");
const string_utils_1 = require("../../../../utils/string-utils");
const api_implementation_1 = require("../../../java/api-implementation");
const interface_1 = require("../../../../engine/java/interface");
const javax_validation_1 = require("../javax-validation");
class SpringControllerCreator extends generate_file_1.GenerateFileTemplate {
create(projectPath) {
const controllerTemplates = file_system_utils_1.FileSystemUtils.buildPath(generate_file_1.GenerateFileTemplate.templatesFolder, "java", "spring", "controller");
const controllerMustache = file_system_utils_1.FileSystemUtils.buildPath(controllerTemplates, "controller.java.mustache");
const apiPackage = safira_settings_1.SafiraSettings.instance(file_system_utils_1.FileSystemUtils.buildPath(projectPath, ".safira")).loadSettingsFile().project.java.package;
const packageAsPath = string_utils_1.StringUtils.replaceAll(apiPackage, ".", file_system_utils_1.FileSystemUtils.getFileSeparator());
const apisFolder = file_system_utils_1.FileSystemUtils.buildPath(projectPath, "src", "main", "java", packageAsPath, "api");
const controllerFolder = file_system_utils_1.FileSystemUtils.buildPath(projectPath, "src", "main", "java", packageAsPath, "controller");
file_system_utils_1.FileSystemUtils.createFolder(controllerFolder);
const regex = /@(\w+)/g;
for (const file of file_system_utils_1.FileSystemUtils.readDir(apisFolder)
.filter(file => file.endsWith("Api.java"))) {
const interfaceName = file.replace(".java", "");
const className = file.replace("Api.java", "");
const apiPath = file_system_utils_1.FileSystemUtils.buildPath(apisFolder, file);
const interfaceContent = file_system_utils_1.FileSystemUtils.loadFile(apiPath);
const interfaceObject = new interface_1.JavaInterfaceObject(interfaceContent);
const methods = interfaceObject.methods.map(met => met.replace(api_implementation_1.SpringMethodExtract.instance.getRemoveAnnotationsTemplate(), ""));
const importParams = ["org.springframework.web.bind.annotation.RestController", `${apiPackage}.api.${interfaceName}`];
const params = {
package: `${apiPackage}.controller`,
className: className,
interface: interfaceName,
methods: methods,
imports: [...importParams, ...interfaceObject.imports.filter(dep => !dep.includes("*")), ...javax_validation_1.JavaValidationImports.instance.findImports(methods)],
};
const controllerFile = file_system_utils_1.FileSystemUtils.buildPath(controllerFolder, `${className}Controller.java`);
if (!file_system_utils_1.FileSystemUtils.exists(controllerFile))
super.writeFile(controllerFile, controllerMustache, params);
}
}
}
exports.SpringControllerCreator = SpringControllerCreator;