NodehistJ — система управления историческими данными FidoNet nodelist. Мульти-модульный Gradle-проект на Java 25 + Spring Boot 4.1.0.
nodehistj/ # Корень проекта (Groovy-билд)
├── nodehistj-historic-nodelists/ # Сервис исторических nodelists (/historic)
├── nodehistj-history-diff/ # Сервис diff и истории узлов (/diff)
├── nodehistj-download-nodelists/ # Сервис загрузки nodelists
├── lib/s3/ # Общая библиотека для S3-операций
├── config/checkstyle/ # Общие checkstyle-конфиги
└── build.gradle # Билд корня и подпроектов
Каждый модуль использует стандартную Maven-структуру: src/main/java, src/main/resources, src/test/java.
Пакет: ru.oldzoomer.<module_with_underscores>.
| Команда | Описание |
|---|---|
./gradlew build |
Сборка всех модулей + тесты |
./gradlew test |
Запуск unit-тестов |
./gradlew checkstyleMain |
Проверка стиля кода |
./gradlew :<module>:bootRun |
Запуск сервиса локально |
Локальная разработка требует запущенных бэкенд-сервисов:
docker compose -f compose-dev.yml up -d # MinIO, PostgreSQL, Redis, Redpanda
./gradlew :nodehistj-history-diff:bootRun # Запуск сервиса- 4 пробела для отступов, 120 символов — максимальная длина строки.
- Именование:
PascalCaseдля типов,camelCaseдля методов/параметров/полей. - Checkstyle — обязательная проверка (конфиг:
config/checkstyle/checkstyle.xml). - Lombok (
@RequiredArgsConstructor,@Builder,@Getterи т.д.) — для boilerplate. - MapStruct — для маппинга DTO ↔ Entity.
- Аннотации Spring Data JDBC (
@Table,@Column,@Id) — для маппинга сущностей.
- JUnit 5 + Spring Boot Test (
@SpringBootTest). - Запуск:
./gradlew testили./gradlew :<module>:test. - Именованный паттерн:
<MethodName>_<Scenario>_<ExpectedResult>.
Используйте префиксы:
| Префикс | Назначение |
|---|---|
Fix |
Исправление багов |
Refactoring |
Изменение структуры без смены поведения |
Test |
Изменения в тестах |
Bump |
Обновление зависимостей |
Merge |
Слияние PR |
Формат: Prefix: краткое описание (англ.).
- Связывайте PR с issue (если есть).
- Опишите контекст изменений и ожидаемое поведение.
- Dependabot-PRы обычно мерджатся без дополнительного ревью.
Модули взаимодействуют через PostgreSQL, Redis (кэш) и Redpanda/Kafka (асинхронные события). Каждая служба имеет свой
контекст API (/historic, /diff, /newest).