Skip to content

Commit

Permalink
Merge pull request #1896 from Bolo89/common-springdoc-mvc-webflux
Browse files Browse the repository at this point in the history
Common springdoc mvc webflux
  • Loading branch information
pascalgrimaud authored Jun 14, 2022
2 parents f6519c5 + 82917bc commit be56e91
Show file tree
Hide file tree
Showing 22 changed files with 338 additions and 203 deletions.
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

0 comments on commit be56e91

Please sign in to comment.