From 6b5f0cf58a71c558de8a6748d4c3cb3ec7fdaeb4 Mon Sep 17 00:00:00 2001 From: Thilo Schwarz Date: Sat, 4 Jul 2026 20:41:17 +0200 Subject: [PATCH] Refactor codebase: - Add Markdown documentation (`CLAUDE.md`) outlining the technical stack and project structure. - Introduce Google Checkstyle (`google_custom_checks.xml`) for code formatting and validation. - Rename `HomeController` to `UiController` for consistency. - Replace package `repository` with `jpa` for clarity in data access layer. - Add `logback.xml` for enhanced logging configuration. - Refactor Javadoc generation logic in `JavadocService`. --- CLAUDE.md | 33 ++ pom.xml | 12 + src/checkstyle/google_custom_checks.xml | 484 ++++++++++++++++++ ...eApplication.java => JdvsApplication.java} | 12 +- .../GitRepositoryRepository.java | 2 +- .../thischwa/jdvs/service/JavadocService.java | 13 +- .../jdvs/service/RepoConfigLoader.java | 3 +- .../jdvs/service/UpdateScheduler.java | 2 +- ...{HomeController.java => UiController.java} | 4 +- .../codes/thischwa/jdvs/web/WebConfig.java | 6 +- .../db/changelog/001-init-schema.yaml | 2 +- src/main/resources/logback.xml | 21 + 12 files changed, 574 insertions(+), 20 deletions(-) create mode 100644 CLAUDE.md create mode 100644 src/checkstyle/google_custom_checks.xml rename src/main/java/codes/thischwa/jdvs/{JavadocViewerServiceApplication.java => JdvsApplication.java} (51%) rename src/main/java/codes/thischwa/jdvs/{repository => jpa}/GitRepositoryRepository.java (87%) rename src/main/java/codes/thischwa/jdvs/web/{HomeController.java => UiController.java} (82%) create mode 100644 src/main/resources/logback.xml diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..dd8ebd9 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,33 @@ +# JavadocViewerService + +## Tech Stack + +- **Java 21** +- **Spring Boot 4.x** (spring-boot-starter-parent) + - Spring MVC (spring-boot-starter-web) + - Spring Data JPA (spring-boot-starter-data-jpa) + - Thymeleaf (spring-boot-starter-thymeleaf) + - Bean Validation (spring-boot-starter-validation) + - Liquibase (spring-boot-starter-liquibase) +- **H2** — file-based embedded database (`./database/jdvsdb`) +- **Lombok** — boilerplate reduction (`@Data`, `@RequiredArgsConstructor`, `@Slf4j`) +- **JGit 7.x** — Git operations (clone, fetch, tag resolution) +- **Jackson YAML** — parsing of `jdvs.yml` config file +- **Maven** — build tool + +## Configuration + +- `application.yml` — base configuration (datasource, JPA, default jdvs properties) +- `jdvs.yml` — external runtime config (repositories, property overrides); imported via `spring.config.import` + +## Package Structure + +- `codes.thischwa.jdvs.config` — `@ConfigurationProperties` beans +- `codes.thischwa.jdvs.service` — business logic (Git, Javadoc generation, scheduling) +- `codes.thischwa.jdvs.jpa` — Spring Data repositories +- `codes.thischwa.jdvs.model` — JPA entities +- `codes.thischwa.jdvs.web` — MVC controllers and `WebMvcConfigurer` + +## Coding + +The generated code follows the principles of clean architecture and follows the SOLID principles. It is designed to be modular, testable, and maintainable. The code is written in a way that promotes readability and reduces complexity. It uses modern Java features and best practices to ensure efficient and reliable operation. To formate the code use che checkstyle definition in [google_custom_checks.xml](src/checkstyle/google_custom_checks.xml). Each changing of code must be verified with compiling. \ No newline at end of file diff --git a/pom.xml b/pom.xml index b423d18..d03205c 100644 --- a/pom.xml +++ b/pom.xml @@ -95,6 +95,18 @@ + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.projectlombok + lombok + + + + org.springframework.boot spring-boot-maven-plugin diff --git a/src/checkstyle/google_custom_checks.xml b/src/checkstyle/google_custom_checks.xml new file mode 100644 index 0000000..1ef6e6e --- /dev/null +++ b/src/checkstyle/google_custom_checks.xml @@ -0,0 +1,484 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/codes/thischwa/jdvs/JavadocViewerServiceApplication.java b/src/main/java/codes/thischwa/jdvs/JdvsApplication.java similarity index 51% rename from src/main/java/codes/thischwa/jdvs/JavadocViewerServiceApplication.java rename to src/main/java/codes/thischwa/jdvs/JdvsApplication.java index 6a1ef3b..ea933f4 100644 --- a/src/main/java/codes/thischwa/jdvs/JavadocViewerServiceApplication.java +++ b/src/main/java/codes/thischwa/jdvs/JdvsApplication.java @@ -1,13 +1,21 @@ package codes.thischwa.jdvs; +import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableScheduling -public class JavadocViewerServiceApplication { +@Slf4j +public class JdvsApplication { public static void main(String[] args) { - SpringApplication.run(JavadocViewerServiceApplication.class, args); + + try { + SpringApplication.run(JdvsApplication.class, args); + } catch (Exception e) { + log.error("Unexpected exception, Spring Boot stops! Message: {}", e.getMessage()); + System.exit(10); + } } } diff --git a/src/main/java/codes/thischwa/jdvs/repository/GitRepositoryRepository.java b/src/main/java/codes/thischwa/jdvs/jpa/GitRepositoryRepository.java similarity index 87% rename from src/main/java/codes/thischwa/jdvs/repository/GitRepositoryRepository.java rename to src/main/java/codes/thischwa/jdvs/jpa/GitRepositoryRepository.java index c443ac0..51bb1a6 100644 --- a/src/main/java/codes/thischwa/jdvs/repository/GitRepositoryRepository.java +++ b/src/main/java/codes/thischwa/jdvs/jpa/GitRepositoryRepository.java @@ -1,4 +1,4 @@ -package codes.thischwa.jdvs.repository; +package codes.thischwa.jdvs.jpa; import codes.thischwa.jdvs.model.GitRepository; import java.util.Optional; diff --git a/src/main/java/codes/thischwa/jdvs/service/JavadocService.java b/src/main/java/codes/thischwa/jdvs/service/JavadocService.java index 2e5cee4..e73a760 100644 --- a/src/main/java/codes/thischwa/jdvs/service/JavadocService.java +++ b/src/main/java/codes/thischwa/jdvs/service/JavadocService.java @@ -18,6 +18,12 @@ import org.springframework.stereotype.Service; @Slf4j public class JavadocService { private final JdvsConfig jdvsConfig; + // Possible standard paths for Javadoc + private final String[] possiblePaths = { + "target/reports/apidocs", + "target/site/apidocs", + "target/apidocs" + }; public boolean generateJavadoc(String projectName, File repoDir) { File outputDir = Path.of(jdvsConfig.getBaseDir(), "javadoc", projectName).toFile(); @@ -39,13 +45,6 @@ public class JavadocService { } private void copyGeneratedJavadoc(File repoDir, File targetDir) { - // Possible standard paths for Javadoc - String[] possiblePaths = { - "target/reports/apidocs", - "target/site/apidocs", - "target/apidocs" - }; - for (String relPath : possiblePaths) { File sourceDir = new File(repoDir, relPath); if (sourceDir.exists() && sourceDir.isDirectory()) { diff --git a/src/main/java/codes/thischwa/jdvs/service/RepoConfigLoader.java b/src/main/java/codes/thischwa/jdvs/service/RepoConfigLoader.java index b8aa595..b78acc9 100644 --- a/src/main/java/codes/thischwa/jdvs/service/RepoConfigLoader.java +++ b/src/main/java/codes/thischwa/jdvs/service/RepoConfigLoader.java @@ -1,9 +1,8 @@ package codes.thischwa.jdvs.service; import codes.thischwa.jdvs.config.JdvsConfig; +import codes.thischwa.jdvs.jpa.GitRepositoryRepository; import codes.thischwa.jdvs.model.GitRepository; -import codes.thischwa.jdvs.repository.GitRepositoryRepository; -import java.io.File; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; diff --git a/src/main/java/codes/thischwa/jdvs/service/UpdateScheduler.java b/src/main/java/codes/thischwa/jdvs/service/UpdateScheduler.java index 116ddd8..aefc183 100644 --- a/src/main/java/codes/thischwa/jdvs/service/UpdateScheduler.java +++ b/src/main/java/codes/thischwa/jdvs/service/UpdateScheduler.java @@ -1,8 +1,8 @@ package codes.thischwa.jdvs.service; import codes.thischwa.jdvs.config.JdvsConfig; +import codes.thischwa.jdvs.jpa.GitRepositoryRepository; import codes.thischwa.jdvs.model.GitRepository; -import codes.thischwa.jdvs.repository.GitRepositoryRepository; import java.io.File; import java.io.IOException; import java.nio.file.Files; diff --git a/src/main/java/codes/thischwa/jdvs/web/HomeController.java b/src/main/java/codes/thischwa/jdvs/web/UiController.java similarity index 82% rename from src/main/java/codes/thischwa/jdvs/web/HomeController.java rename to src/main/java/codes/thischwa/jdvs/web/UiController.java index 1e679ee..c66b649 100644 --- a/src/main/java/codes/thischwa/jdvs/web/HomeController.java +++ b/src/main/java/codes/thischwa/jdvs/web/UiController.java @@ -1,6 +1,6 @@ package codes.thischwa.jdvs.web; -import codes.thischwa.jdvs.repository.GitRepositoryRepository; +import codes.thischwa.jdvs.jpa.GitRepositoryRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -8,7 +8,7 @@ import org.springframework.web.bind.annotation.GetMapping; @Controller @RequiredArgsConstructor -public class HomeController { +public class UiController { private final GitRepositoryRepository repository; @GetMapping("/") diff --git a/src/main/java/codes/thischwa/jdvs/web/WebConfig.java b/src/main/java/codes/thischwa/jdvs/web/WebConfig.java index 118173b..e5d686c 100644 --- a/src/main/java/codes/thischwa/jdvs/web/WebConfig.java +++ b/src/main/java/codes/thischwa/jdvs/web/WebConfig.java @@ -2,18 +2,16 @@ package codes.thischwa.jdvs.web; import codes.thischwa.jdvs.config.JdvsConfig; import java.nio.file.Path; +import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration +@RequiredArgsConstructor public class WebConfig implements WebMvcConfigurer { private final JdvsConfig jdvsConfig; - public WebConfig(JdvsConfig jdvsConfig) { - this.jdvsConfig = jdvsConfig; - } - @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { String javadocPath = Path.of(jdvsConfig.getBaseDir(), "javadoc").toAbsolutePath().toUri().toString(); diff --git a/src/main/resources/db/changelog/001-init-schema.yaml b/src/main/resources/db/changelog/001-init-schema.yaml index e4734bb..694230a 100644 --- a/src/main/resources/db/changelog/001-init-schema.yaml +++ b/src/main/resources/db/changelog/001-init-schema.yaml @@ -1,7 +1,7 @@ databaseChangeLog: - changeSet: id: 1 - author: junie + author: th-schwarz changes: - createTable: tableName: git_repository diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 0000000..1c5fb72 --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,21 @@ + + + + + + %d{HH:mm:ss.SSS} [%t] %-5level %logger{50} - %msg%n + + + + + + + + + + + + + + \ No newline at end of file