Skip to content

Commit

Permalink
Merge pull request #1735 from qmonmert/feature/1652
Browse files Browse the repository at this point in the history
[Angular] health page
  • Loading branch information
pascalgrimaud committed Jun 15, 2022
2 parents 0e0bea3 + 322f448 commit daf5225
Show file tree
Hide file tree
Showing 54 changed files with 1,103 additions and 91 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package tech.jhipster.lite.generator.client.angular.admin.health.application;

import org.springframework.stereotype.Service;
import tech.jhipster.lite.generator.client.angular.admin.health.domain.AngularHealthService;
import tech.jhipster.lite.generator.project.domain.Project;

@Service
public class AngularHealthApplicationService {

private final AngularHealthService angularHealthService;

public AngularHealthApplicationService(AngularHealthService angularHealthService) {
this.angularHealthService = angularHealthService;
}

public void addHealthAngular(Project project) {
angularHealthService.addHealthAngular(project);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package tech.jhipster.lite.generator.client.angular.admin.health.domain;

import java.util.Map;

public class AngularHealth {

private AngularHealth() {}

public static Map<String, String> angularHealthFiles() {
String primaryAppAdmin = "app/admin";
String primaryAppConfig = "app/config";
String primaryAppHealth = "app/admin/health";
String primaryAppHealthModal = "app/admin/health/modal";
return Map.ofEntries(
Map.entry("admin-routing.module.ts", primaryAppAdmin),
Map.entry("admin-routing.module.spec.ts", primaryAppAdmin),
Map.entry("application-config.service.spec.ts", primaryAppConfig),
Map.entry("application-config.service.ts", primaryAppConfig),
Map.entry("health.component.css", primaryAppHealth),
Map.entry("health.component.html", primaryAppHealth),
Map.entry("health.component.ts", primaryAppHealth),
Map.entry("health.component.spec.ts", primaryAppHealth),
Map.entry("health.model.ts", primaryAppHealth),
Map.entry("health.module.ts", primaryAppHealth),
Map.entry("health.route.ts", primaryAppHealth),
Map.entry("health.service.spec.ts", primaryAppHealth),
Map.entry("health.service.ts", primaryAppHealth),
Map.entry("health-modal.component.css", primaryAppHealthModal),
Map.entry("health-modal.component.html", primaryAppHealthModal),
Map.entry("health-modal.component.ts", primaryAppHealthModal),
Map.entry("health-modal.component.spec.ts", primaryAppHealthModal)
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package tech.jhipster.lite.generator.client.angular.admin.health.domain;

import static tech.jhipster.lite.common.domain.FileUtils.getPath;
import static tech.jhipster.lite.generator.client.angular.core.domain.Angular.*;
import static tech.jhipster.lite.generator.project.domain.Constants.MAIN_WEBAPP;
import static tech.jhipster.lite.generator.project.domain.DefaultConfig.BASE_NAME;

import java.util.List;
import tech.jhipster.lite.generator.project.domain.Project;
import tech.jhipster.lite.generator.project.domain.ProjectFile;
import tech.jhipster.lite.generator.project.domain.ProjectRepository;

public class AngularHealthDomainService implements AngularHealthService {

public static final String SOURCE = "client/angular/admin";
public static final String SOURCE_WEBAPP = "client/angular/admin/src/main/webapp";
private static final String APP = "src/main/webapp/app";

private final ProjectRepository projectRepository;

public AngularHealthDomainService(ProjectRepository projectRepository) {
this.projectRepository = projectRepository;
}

@Override
public void addHealthAngular(Project project) {
addAppHealthFiles(project);
}

private void addAppHealthFiles(Project project) {
project.addDefaultConfig(BASE_NAME);

addHealthFiles(project);
updateAngularFilesForHealth(project);
}

private void addHealthFiles(Project project) {
project.addDefaultConfig(BASE_NAME);

List<ProjectFile> files = AngularHealth
.angularHealthFiles()
.entrySet()
.stream()
.map(entry ->
ProjectFile
.forProject(project)
.withSource(getPath(SOURCE_WEBAPP, entry.getValue()), entry.getKey())
.withDestinationFolder(getPath(MAIN_WEBAPP, entry.getValue()))
)
.toList();
projectRepository.template(files);
}

private void updateAngularFilesForHealth(Project project) {
String oldHtml = "// jhipster-needle-angular-route";
String newHtml =
"""
{
path: 'admin',
loadChildren: () => import('./admin/admin-routing.module').then(m => m.AdminRoutingModule),
},
// jhipster-needle-angular-route""";
projectRepository.replaceText(project, APP, APP_ROUTING_MODULE, oldHtml, newHtml);

oldHtml = "<!-- jhipster-needle-angular-menu -->";
newHtml = """
<a routerLink="admin/health" mat-menu-item><span>Health</span></a>
<!-- jhipster-needle-angular-menu -->""";
projectRepository.replaceText(project, APP, APP_COMPONENT_HTML, oldHtml, newHtml);

oldHtml = "// jhipster-needle-angular-menu";
newHtml =
"""
it('should navigate on admin endpoint', () => {
router.navigateByUrl('/admin');
});
// jhipster-needle-angular-menu""";
projectRepository.replaceText(project, APP, APP_ROUTING_MODULE_SPEC, oldHtml, newHtml);

oldHtml = "// jhipster-needle-angular-menu";
newHtml =
"""
it('should navigate on health endpoint', () => {
router.navigateByUrl('/health');
});
// jhipster-needle-angular-menu""";
projectRepository.replaceText(project, APP, ADMIN_ROUTING_MODULE_SPEC, oldHtml, newHtml);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package tech.jhipster.lite.generator.client.angular.admin.health.domain;

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

public interface AngularHealthService {
void addHealthAngular(Project project);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package tech.jhipster.lite.generator.client.angular.admin.health.infrastructure.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import tech.jhipster.lite.generator.client.angular.admin.health.domain.AngularHealthDomainService;
import tech.jhipster.lite.generator.client.angular.admin.health.domain.AngularHealthService;
import tech.jhipster.lite.generator.project.domain.ProjectRepository;

@Configuration
public class AngularHealthBeanConfiguration {

private final ProjectRepository projectRepository;

public AngularHealthBeanConfiguration(ProjectRepository projectRepository) {
this.projectRepository = projectRepository;
}

@Bean
public AngularHealthService angularHealthService() {
return new AngularHealthDomainService(projectRepository);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package tech.jhipster.lite.generator.client.angular.admin.health.infrastructure.primary.rest;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import tech.jhipster.lite.generator.client.angular.admin.health.application.AngularHealthApplicationService;
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.technical.infrastructure.primary.annotation.GeneratorStep;

@RestController
@RequestMapping("/api/clients/angular/admin-pages/health")
@Tag(name = "Angular")
class AngularHealthResource {

private final AngularHealthApplicationService angularHealthApplicationService;

public AngularHealthResource(AngularHealthApplicationService angularHealthApplicationService) {
this.angularHealthApplicationService = angularHealthApplicationService;
}

@Operation(summary = "Angular Health")
@ApiResponse(responseCode = "500", description = "An error occurred while adding Angular Health")
@PostMapping
@GeneratorStep(id = GeneratorAction.ANGULAR_HEALTH)
public void addHealthAngular(@RequestBody ProjectDTO projectDTO) {
Project project = ProjectDTO.toProject(projectDTO);
angularHealthApplicationService.addHealthAngular(project);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
@tech.jhipster.lite.BusinessContext
package tech.jhipster.lite.generator.client.angular.admin.health;
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,21 @@ public void addAllowedCommonJsDependenciesAngularJson(Project project, String li
writeInFile(fullFilePath, newFileContent, project);
}

@Override
public List<String> getAngularModules() {
return List.of(
"BrowserAnimationsModule",
"HttpClientModule",
"MatMenuModule",
"MatToolbarModule",
"MatIconModule",
"MatButtonModule",
"MatButtonToggleModule",
"BrowserModule",
"AppRoutingModule"
);
}

private String getFileContent(String fullFilePath) {
String fileContent;
try {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package tech.jhipster.lite.generator.client.angular.common.domain;

import java.util.List;
import tech.jhipster.lite.generator.project.domain.Project;

public interface AngularCommonService {
Expand All @@ -20,4 +21,6 @@ public interface AngularCommonService {
void addTest(Project project, String specTsFilePath, String testToAdd, String afterTestName);

void addAllowedCommonJsDependenciesAngularJson(Project project, String libToAdd);

List<String> getAngularModules();
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public class Angular {
public static final String APP_COMPONENT_SPEC = "app.component.spec.ts";
public static final String APP_COMPONENT_HTML = "app.component.html";
public static final String APP_COMPONENT_CSS = "app.component.css";
public static final String ADMIN_ROUTING_MODULE_SPEC = "admin/admin-routing.module.spec.ts";

private Angular() {}

Expand Down Expand Up @@ -63,7 +64,7 @@ public static Map<String, String> scripts() {
}

public static List<String> files() {
return List.of("angular.json", "jest.conf.js", "tsconfig.app.json", "tsconfig.json", "tsconfig.spec.json");
return List.of("angular.json", "jest.conf.js", "proxy.conf.json", "tsconfig.app.json", "tsconfig.json", "tsconfig.spec.json");
}

public static Map<String, String> angularFiles() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@ public static List<String> jwtDependencies() {
return List.of("ngx-webstorage");
}

public static Map<String, String> jwtFiles() {
return Map.ofEntries(Map.entry("proxy.conf.json", ""));
}

public static Map<String, String> angularJwtFiles() {
String primaryAppAuth = "app/auth";
String primaryAppLogin = "app/login";
Expand Down

0 comments on commit daf5225

Please sign in to comment.