Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Common springdoc mvc webflux #1896

Merged
merged 10 commits into from
Jun 14, 2022
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package tech.jhipster.lite.generator.server.springboot.mvc.springdoc.application;
package tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.application;

import org.springframework.stereotype.Service;
import tech.jhipster.lite.generator.project.domain.Project;
import tech.jhipster.lite.generator.server.springboot.mvc.springdoc.domain.SpringdocService;
import tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocService;

@Service
public class SpringdocApplicationService {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain;

import tech.jhipster.lite.generator.buildtool.generic.domain.Dependency;
import tech.jhipster.lite.generator.module.domain.javadependency.ArtifactId;
import tech.jhipster.lite.generator.module.domain.javadependency.DependencyId;
import tech.jhipster.lite.generator.module.domain.javadependency.GroupId;

public class Springdoc {

protected static final DependencyId WEBFLUX_DEPENDENCY_ID = new DependencyId(
new GroupId("org.springframework.boot"),
new ArtifactId("spring-boot-starter-webflux")
);

private Springdoc() {}

public static Dependency springdocDependencyForMvc() {
return Dependency
.builder()
.groupId("org.springdoc")
.artifactId("springdoc-openapi-ui")
.version("\\${springdoc-openapi-ui.version}")
.build();
}

public static Dependency springdocDependencyForWebflux() {
return Dependency
.builder()
.groupId("org.springdoc")
.artifactId("springdoc-openapi-webflux-ui")
.version("\\${springdoc-openapi-ui.version}")
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tech.jhipster.lite.generator.server.springboot.mvc.springdoc.domain;
package tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain;

public class SpringdocConstants {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,38 +1,61 @@
package tech.jhipster.lite.generator.server.springboot.mvc.springdoc.domain;

import static tech.jhipster.lite.common.domain.FileUtils.*;
import static tech.jhipster.lite.generator.project.domain.Constants.*;
import static tech.jhipster.lite.generator.project.domain.DefaultConfig.*;
import static tech.jhipster.lite.generator.server.springboot.mvc.springdoc.domain.SpringdocConstants.*;
package tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain;

import static tech.jhipster.lite.common.domain.FileUtils.getPath;
import static tech.jhipster.lite.generator.project.domain.Constants.MAIN_JAVA;
import static tech.jhipster.lite.generator.project.domain.DefaultConfig.BASE_NAME;
import static tech.jhipster.lite.generator.project.domain.DefaultConfig.PACKAGE_NAME;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.Springdoc.WEBFLUX_DEPENDENCY_ID;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.Springdoc.springdocDependencyForMvc;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.Springdoc.springdocDependencyForWebflux;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.API_DESCRIPTION_CONFIG_KEY;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.API_EXT_DOC_DESCRIPTION_CONFIG_KEY;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.API_EXT_DOC_URL_CONFIG_KEY;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.API_LICENSE_NAME_CONFIG_KEY;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.API_LICENSE_URL_CONFIG_KEY;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.API_TITLE_CONFIG_KEY;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.DEFAULT_API_DESCRIPTION;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.DEFAULT_API_TITLE;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.DEFAULT_EXT_DOC_DESCRIPTION;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.DEFAULT_EXT_DOC_URL;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.DEFAULT_LICENSE_NAME;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.DEFAULT_LICENSE_URL;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.DEFAULT_SWAGGER_UI_SORT_VALUE;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.DEFAULT_TRY_OUT_ENABLED;

import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
import tech.jhipster.lite.common.domain.WordUtils;
import tech.jhipster.lite.error.domain.GeneratorException;
import tech.jhipster.lite.generator.buildtool.generic.domain.BuildToolService;
import tech.jhipster.lite.generator.buildtool.generic.domain.Dependency;
import tech.jhipster.lite.generator.module.domain.javadependency.ProjectJavaDependenciesRepository;
import tech.jhipster.lite.generator.module.domain.properties.JHipsterProjectFolder;
import tech.jhipster.lite.generator.project.domain.Project;
import tech.jhipster.lite.generator.project.domain.ProjectFile;
import tech.jhipster.lite.generator.project.domain.ProjectRepository;
import tech.jhipster.lite.generator.server.springboot.common.domain.SpringBootCommonService;

public class SpringdocDomainService implements SpringdocService {

private static final String SOURCE = "server/springboot/mvc/springdoc";
private static final String SOURCE = "server/springboot/apidocumentation/springdoc";
private static final String DESTINATION = "technical/infrastructure/primary/springdoc";

private final BuildToolService buildToolService;
private final ProjectRepository projectRepository;
private final SpringBootCommonService springBootCommonService;
private final ProjectJavaDependenciesRepository projectJavaDependenciesRepository;

public SpringdocDomainService(
BuildToolService buildToolService,
ProjectRepository projectRepository,
SpringBootCommonService springBootCommonService
SpringBootCommonService springBootCommonService,
ProjectJavaDependenciesRepository projectJavaDependenciesRepository
) {
this.buildToolService = buildToolService;
this.projectRepository = projectRepository;
this.springBootCommonService = springBootCommonService;
this.projectJavaDependenciesRepository = projectJavaDependenciesRepository;
}

@Override
Expand All @@ -55,7 +78,15 @@ public void addSpringdocDependency(Project project) {
.ifPresentOrElse(
version -> {
buildToolService.addProperty(project, "springdoc-openapi-ui.version", version);
buildToolService.addDependency(project, Springdoc.springdocDependency());
Dependency dependency;
dependency =
projectJavaDependenciesRepository
.get(new JHipsterProjectFolder(project.getFolder()))
.dependencies()
.get(WEBFLUX_DEPENDENCY_ID)
.map(d -> springdocDependencyForWebflux())
.orElse(springdocDependencyForMvc());
buildToolService.addDependency(project, dependency);
},
() -> {
throw new GeneratorException("Springdoc Openapi version not found");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tech.jhipster.lite.generator.server.springboot.mvc.springdoc.domain;
package tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain;

import tech.jhipster.lite.generator.project.domain.Project;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,36 @@
package tech.jhipster.lite.generator.server.springboot.mvc.springdoc.infrastructure.config;
package tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.infrastructure.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import tech.jhipster.lite.generator.buildtool.generic.domain.BuildToolService;
import tech.jhipster.lite.generator.module.domain.javadependency.ProjectJavaDependenciesRepository;
import tech.jhipster.lite.generator.project.domain.ProjectRepository;
import tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocDomainService;
import tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocService;
import tech.jhipster.lite.generator.server.springboot.common.domain.SpringBootCommonService;
import tech.jhipster.lite.generator.server.springboot.mvc.springdoc.domain.SpringdocDomainService;
import tech.jhipster.lite.generator.server.springboot.mvc.springdoc.domain.SpringdocService;

@Configuration
public class SpringdocBeanConfiguration {

private final BuildToolService buildToolService;
private final ProjectRepository projectRepository;
private final SpringBootCommonService springBootCommonService;
private final ProjectJavaDependenciesRepository projectJavaDependenciesRepository;

public SpringdocBeanConfiguration(
BuildToolService buildToolService,
ProjectRepository projectRepository,
SpringBootCommonService springBootCommonService
SpringBootCommonService springBootCommonService,
ProjectJavaDependenciesRepository projectJavaDependenciesRepository
) {
this.buildToolService = buildToolService;
this.projectRepository = projectRepository;
this.springBootCommonService = springBootCommonService;
this.projectJavaDependenciesRepository = projectJavaDependenciesRepository;
}

@Bean
public SpringdocService springdocService() {
return new SpringdocDomainService(buildToolService, projectRepository, springBootCommonService);
return new SpringdocDomainService(buildToolService, projectRepository, springBootCommonService, projectJavaDependenciesRepository);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tech.jhipster.lite.generator.server.springboot.mvc.springdoc.infrastructure.primary.rest;
package tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.infrastructure.primary.rest;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
Expand All @@ -10,7 +10,7 @@
import tech.jhipster.lite.generator.project.domain.GeneratorAction;
import tech.jhipster.lite.generator.project.domain.Project;
import tech.jhipster.lite.generator.project.infrastructure.primary.dto.ProjectDTO;
import tech.jhipster.lite.generator.server.springboot.mvc.springdoc.application.SpringdocApplicationService;
import tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.application.SpringdocApplicationService;
import tech.jhipster.lite.technical.infrastructure.primary.annotation.GeneratorStep;

@RestController
Expand All @@ -27,7 +27,7 @@ public SpringdocResource(SpringdocApplicationService springdocApplicationService
@ApiResponse(responseCode = "500", description = "An error occurred while adding springdoc-openapi")
@PostMapping("/init")
@GeneratorStep(id = GeneratorAction.SPRINGDOC_OPENAPI)
@Tag(name = "Spring Boot - MVC")
@Tag(name = "Spring Boot - API Documentation")
public void init(@RequestBody ProjectDTO projectDTO) {
Project project = ProjectDTO.toProject(projectDTO);
this.springdocApplicationService.init(project);
Expand All @@ -37,7 +37,7 @@ public void init(@RequestBody ProjectDTO projectDTO) {
@ApiResponse(responseCode = "500", description = "An error occurred while adding springdoc-openapi with Security JWT")
@PostMapping("/init-with-security-jwt")
@GeneratorStep(id = GeneratorAction.SPRINGDOC_OPENAPI_WITH_SECURIITY_JWT)
@Tag(name = "Spring Boot - MVC - Security")
@Tag(name = "Spring Boot - API Documentation - Security")
public void initWithSecurityJWT(@RequestBody ProjectDTO projectDTO) {
Project project = ProjectDTO.toProject(projectDTO);
this.springdocApplicationService.initWithSecurityJWT(project);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
@tech.jhipster.lite.BusinessContext
package tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc;

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static tech.jhipster.lite.TestUtils.*;
import static tech.jhipster.lite.TestUtils.tmpProject;
import static tech.jhipster.lite.TestUtils.tmpProjectWithBuildGradle;
import static tech.jhipster.lite.TestUtils.tmpProjectWithPomXml;

import java.util.List;
import java.util.Optional;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,13 @@
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static tech.jhipster.lite.TestUtils.*;
import static tech.jhipster.lite.TestUtils.tmpProject;
import static tech.jhipster.lite.TestUtils.tmpProjectWithPomXml;
import static tech.jhipster.lite.common.domain.FileUtils.getPath;
import static tech.jhipster.lite.generator.buildtool.maven.domain.Maven.*;
import static tech.jhipster.lite.generator.buildtool.maven.domain.Maven.GROUP_ID_BEGIN;
import static tech.jhipster.lite.generator.buildtool.maven.domain.Maven.GROUP_ID_END;
import static tech.jhipster.lite.generator.buildtool.maven.domain.Maven.NAME_BEGIN;
import static tech.jhipster.lite.generator.buildtool.maven.domain.Maven.NAME_END;
import static tech.jhipster.lite.generator.project.domain.Constants.POM_XML;

import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
package tech.jhipster.lite.generator.server.springboot.mvc.springdoc.application;
package tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.application;

import static tech.jhipster.lite.TestUtils.tmpProject;
import static tech.jhipster.lite.generator.project.domain.DefaultConfig.BASE_NAME;
import static tech.jhipster.lite.generator.server.springboot.mvc.springdoc.application.SpringdocAssert.SPRINGDOC_CONFIGURATION_JAVA;
import static tech.jhipster.lite.generator.server.springboot.mvc.springdoc.application.SpringdocAssert.assertDependencies;
import static tech.jhipster.lite.generator.server.springboot.mvc.springdoc.application.SpringdocAssert.assertFileContent;
import static tech.jhipster.lite.generator.server.springboot.mvc.springdoc.application.SpringdocAssert.assertJavaFiles;
import static tech.jhipster.lite.generator.server.springboot.mvc.springdoc.application.SpringdocAssert.assertJavaFilesWithSecurityJWT;
import static tech.jhipster.lite.generator.server.springboot.mvc.springdoc.application.SpringdocAssert.assertProperties;
import static tech.jhipster.lite.generator.server.springboot.mvc.springdoc.domain.SpringdocConstants.API_DESCRIPTION_CONFIG_KEY;
import static tech.jhipster.lite.generator.server.springboot.mvc.springdoc.domain.SpringdocConstants.API_EXT_DOC_DESCRIPTION_CONFIG_KEY;
import static tech.jhipster.lite.generator.server.springboot.mvc.springdoc.domain.SpringdocConstants.API_EXT_DOC_URL_CONFIG_KEY;
import static tech.jhipster.lite.generator.server.springboot.mvc.springdoc.domain.SpringdocConstants.API_LICENSE_NAME_CONFIG_KEY;
import static tech.jhipster.lite.generator.server.springboot.mvc.springdoc.domain.SpringdocConstants.API_LICENSE_URL_CONFIG_KEY;
import static tech.jhipster.lite.generator.server.springboot.mvc.springdoc.domain.SpringdocConstants.API_TITLE_CONFIG_KEY;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.application.SpringdocAssert.SPRINGDOC_CONFIGURATION_JAVA;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.application.SpringdocAssert.assertDependencies;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.application.SpringdocAssert.assertFileContent;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.application.SpringdocAssert.assertJavaFiles;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.application.SpringdocAssert.assertJavaFilesWithSecurityJWT;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.application.SpringdocAssert.assertProperties;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.API_DESCRIPTION_CONFIG_KEY;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.API_EXT_DOC_DESCRIPTION_CONFIG_KEY;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.API_EXT_DOC_URL_CONFIG_KEY;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.API_LICENSE_NAME_CONFIG_KEY;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.API_LICENSE_URL_CONFIG_KEY;
import static tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.domain.SpringdocConstants.API_TITLE_CONFIG_KEY;

import java.util.HashMap;
import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tech.jhipster.lite.generator.server.springboot.mvc.springdoc.application;
package tech.jhipster.lite.generator.server.springboot.apidocumentation.springdoc.application;

import static tech.jhipster.lite.TestUtils.assertFileExist;
import static tech.jhipster.lite.common.domain.FileUtils.getPath;
Expand Down
Loading