From a28fd0b35255d83222604bf43d3db5ae314788bd Mon Sep 17 00:00:00 2001 From: "Zimin A.N." Date: Sun, 3 May 2026 00:41:53 +0300 Subject: [PATCH] feat: Maven multimodule scaffolding for Ordinis MDM service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 10 модулей (domain, validation, events-api, outbox, rest-api, app, read-api, projection-writer, cuod-bundle, migrations) - Parent pom + BOM с Spring Boot 3.4.2, Spring Cloud 2024.0.0, Vault Config 4.2.0 - ordinis-app: Spring Boot main с Actuator/Prometheus/Logstash JSON encoder/OpenTelemetry/Cloud Config/Vault skeleton - ordinis-migrations: Liquibase changelogs (dictionary_definitions/records, audit_log, outbox_events, idempotency_keys, EXCLUSION CONSTRAINT через btree_gist) - Multi-stage Dockerfiles для app и migrations --- .gitignore | 23 +++ README.md | 56 +++++++ ordinis-app/Dockerfile | 18 +++ ordinis-app/pom.xml | 77 ++++++++++ .../ordinis/app/OrdinisApplication.java | 14 ++ .../ordinis/app/web/HealthController.java | 26 ++++ .../src/main/resources/application.yml | 70 +++++++++ .../src/main/resources/logback-spring.xml | 38 +++++ ordinis-cuod-bundle/pom.xml | 27 ++++ ordinis-domain/pom.xml | 40 +++++ ordinis-events-api/pom.xml | 23 +++ ordinis-migrations/Dockerfile | 11 ++ ordinis-migrations/pom.xml | 25 ++++ .../db/changelog/changes/0001-extensions.xml | 21 +++ .../changes/0002-dictionary-definitions.xml | 52 +++++++ .../changes/0003-dictionary-records.xml | 78 ++++++++++ .../db/changelog/changes/0004-audit-log.xml | 49 ++++++ .../changelog/changes/0005-outbox-events.xml | 55 +++++++ .../changes/0006-idempotency-keys.xml | 32 ++++ .../main/resources/db/changelog/master.xml | 15 ++ ordinis-outbox/pom.xml | 35 +++++ ordinis-projection-writer/pom.xml | 70 +++++++++ ordinis-read-api/pom.xml | 66 +++++++++ ordinis-rest-api/pom.xml | 39 +++++ ordinis-validation/pom.xml | 31 ++++ pom.xml | 139 ++++++++++++++++++ 26 files changed, 1130 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 ordinis-app/Dockerfile create mode 100644 ordinis-app/pom.xml create mode 100644 ordinis-app/src/main/java/cloud/nstart/terravault/ordinis/app/OrdinisApplication.java create mode 100644 ordinis-app/src/main/java/cloud/nstart/terravault/ordinis/app/web/HealthController.java create mode 100644 ordinis-app/src/main/resources/application.yml create mode 100644 ordinis-app/src/main/resources/logback-spring.xml create mode 100644 ordinis-cuod-bundle/pom.xml create mode 100644 ordinis-domain/pom.xml create mode 100644 ordinis-events-api/pom.xml create mode 100644 ordinis-migrations/Dockerfile create mode 100644 ordinis-migrations/pom.xml create mode 100644 ordinis-migrations/src/main/resources/db/changelog/changes/0001-extensions.xml create mode 100644 ordinis-migrations/src/main/resources/db/changelog/changes/0002-dictionary-definitions.xml create mode 100644 ordinis-migrations/src/main/resources/db/changelog/changes/0003-dictionary-records.xml create mode 100644 ordinis-migrations/src/main/resources/db/changelog/changes/0004-audit-log.xml create mode 100644 ordinis-migrations/src/main/resources/db/changelog/changes/0005-outbox-events.xml create mode 100644 ordinis-migrations/src/main/resources/db/changelog/changes/0006-idempotency-keys.xml create mode 100644 ordinis-migrations/src/main/resources/db/changelog/master.xml create mode 100644 ordinis-outbox/pom.xml create mode 100644 ordinis-projection-writer/pom.xml create mode 100644 ordinis-read-api/pom.xml create mode 100644 ordinis-rest-api/pom.xml create mode 100644 ordinis-validation/pom.xml create mode 100644 pom.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2bdc03d --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +target/ +*.class +*.jar +*.war +*.iml +.idea/ +.vscode/ +.DS_Store +*.bak + +# Maven +dependency-reduced-pom.xml + +# Spring Boot +*.tmp +HELP.md + +# Logs +*.log + +# Sensitive +*.pem +*.key diff --git a/README.md b/README.md new file mode 100644 index 0000000..1310c42 --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ +# Ordinis + +MDM сервис для НСИ ЦУОД ОДХ (Оперативное и Долговременное Хранение). Часть линейки **Terravault**. Ордо/порядок (от лат. *ordo*) — упорядоченные классификаторы и справочные данные. + +ЦУОД — anchor-клиент v1, второй клиент = свой config bundle, без code change. + +## Maven multimodule + +``` +ordinis/ +├── ordinis-domain JPA entities, JSONB types, bitemporal model +├── ordinis-validation JSON Schema validator (networknt) +├── ordinis-events-api DTO для Kafka (semver shared module) +├── ordinis-outbox Outbox pattern + @Scheduled poller +├── ordinis-rest-api Admin write API (CRUD, bundle import) +├── ordinis-app Spring Boot main: writer side +├── ordinis-read-api Read service (PG replica + scope filtering) +├── ordinis-projection-writer Опц.: Kafka → Redis projection (feature-flagged) +├── ordinis-cuod-bundle ЦУОД config: JSON Schema, seed, Grafana dashboards +└── ordinis-migrations Liquibase changelogs → Helm pre-upgrade Job (1-shot) +``` + +## Стек + +- Java 21, Spring Boot 3.4 +- PostgreSQL 18 + PostGIS 3.6 + btree_gist (EXCLUSION CONSTRAINT) +- Apache Kafka 4.2 (KRaft, SASL SCRAM-SHA-512) +- Hibernate Envers (tx-time) + valid_from/valid_to (effective-time) — bitemporal +- Liquibase +- Spring Cloud Config + Spring Cloud Vault (Kubernetes auth) +- Micrometer + Prometheus +- LogstashEncoder JSON stdout → Loki через Alloy +- OpenTelemetry → Tempo (OTLP gRPC) + +## Архитектурные принципы + +- **Generic dictionary engine + ЦУОД config bundle** (Approach B). Engine не знает про "КА"/"наземные станции" — узнаёт через JSON Schema из bundle +- **Bitemporal**: Envers для tx-time + valid_from/valid_to для effective-time + EXCLUSION CONSTRAINT +- **3 scope-топика Kafka** (`public/internal/restricted`) — изоляция через ACL, не через filter в consumer +- **System boundary**: 3 deployable делят БД (master+replica). Внешние consumers — только REST/Kafka, никогда прямо в БД +- **Tiered performance**: 1k RPS из коробки (PG replica + Caffeine). 10k+ RPS включается per-dictionary через Redis projection +- **Audit log** в БД (compliance), технические логи в Loki + +## Build + +```bash +mvn clean install # все модули +mvn -pl ordinis-app -am package -DskipTests # только app + transitive +docker build -f ordinis-app/Dockerfile -t ordinis-app:0.1.0 . +docker build -f ordinis-migrations/Dockerfile -t ordinis-migrations:0.1.0 ordinis-migrations/ +``` + +## Связанные репо + +- [terravault/ordinis-infra](https://git.nstart.cloud/2-6/2-6-4/terravault/ordinis-infra) — k8s манифесты, helm values +- [terravault/ordinis-config](https://git.nstart.cloud/2-6/2-6-4/terravault/ordinis-config) — Spring Cloud Config (feature flags, business params) diff --git a/ordinis-app/Dockerfile b/ordinis-app/Dockerfile new file mode 100644 index 0000000..dd771fd --- /dev/null +++ b/ordinis-app/Dockerfile @@ -0,0 +1,18 @@ +# Multi-stage build для ordinis-app +FROM maven:3.9.9-eclipse-temurin-21 AS build +WORKDIR /build +COPY pom.xml ./ +COPY ordinis-domain ./ordinis-domain +COPY ordinis-validation ./ordinis-validation +COPY ordinis-events-api ./ordinis-events-api +COPY ordinis-outbox ./ordinis-outbox +COPY ordinis-rest-api ./ordinis-rest-api +COPY ordinis-cuod-bundle ./ordinis-cuod-bundle +COPY ordinis-app ./ordinis-app +RUN mvn -B -pl ordinis-app -am package -DskipTests + +FROM eclipse-temurin:21-jre +WORKDIR /app +COPY --from=build /build/ordinis-app/target/*.jar /app/app.jar +EXPOSE 8080 +ENTRYPOINT ["java", "-XX:+UseZGC", "-XX:MaxRAMPercentage=75", "-jar", "/app/app.jar"] diff --git a/ordinis-app/pom.xml b/ordinis-app/pom.xml new file mode 100644 index 0000000..ccc9473 --- /dev/null +++ b/ordinis-app/pom.xml @@ -0,0 +1,77 @@ + + + 4.0.0 + + + cloud.nstart.terravault.ordinis + ordinis-parent + 0.1.0-SNAPSHOT + + + ordinis-app + Ordinis :: App (writer) + Spring Boot main для writer side: REST admin + outbox publisher + ЦУОД bundle. + + + + cloud.nstart.terravault.ordinis + ordinis-rest-api + + + cloud.nstart.terravault.ordinis + ordinis-cuod-bundle + + + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-registry-prometheus + + + net.logstash.logback + logstash-logback-encoder + + + + + io.opentelemetry.instrumentation + opentelemetry-spring-boot-starter + + + + + org.springframework.cloud + spring-cloud-starter-config + + + org.springframework.cloud + spring-cloud-starter-vault-config + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/ordinis-app/src/main/java/cloud/nstart/terravault/ordinis/app/OrdinisApplication.java b/ordinis-app/src/main/java/cloud/nstart/terravault/ordinis/app/OrdinisApplication.java new file mode 100644 index 0000000..327a0c7 --- /dev/null +++ b/ordinis-app/src/main/java/cloud/nstart/terravault/ordinis/app/OrdinisApplication.java @@ -0,0 +1,14 @@ +package cloud.nstart.terravault.ordinis.app; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; + +@SpringBootApplication(scanBasePackages = "cloud.nstart.terravault.ordinis") +@EnableScheduling +public class OrdinisApplication { + + public static void main(String[] args) { + SpringApplication.run(OrdinisApplication.class, args); + } +} diff --git a/ordinis-app/src/main/java/cloud/nstart/terravault/ordinis/app/web/HealthController.java b/ordinis-app/src/main/java/cloud/nstart/terravault/ordinis/app/web/HealthController.java new file mode 100644 index 0000000..6aead62 --- /dev/null +++ b/ordinis-app/src/main/java/cloud/nstart/terravault/ordinis/app/web/HealthController.java @@ -0,0 +1,26 @@ +package cloud.nstart.terravault.ordinis.app.web; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +@RestController +public class HealthController { + + @Value("${spring.application.name:ordinis-app}") + private String appName; + + @Value("${ENVIRONMENT:dev}") + private String environment; + + @GetMapping("/") + public Map root() { + return Map.of( + "service", appName, + "environment", environment, + "status", "ok" + ); + } +} diff --git a/ordinis-app/src/main/resources/application.yml b/ordinis-app/src/main/resources/application.yml new file mode 100644 index 0000000..a5d439f --- /dev/null +++ b/ordinis-app/src/main/resources/application.yml @@ -0,0 +1,70 @@ +spring: + application: + name: ordinis-app + config: + import: + - "optional:configserver:${SPRING_CLOUD_CONFIG_URI:http://localhost:8888}" + - "optional:vault://" + cloud: + vault: + enabled: ${VAULT_ENABLED:false} + uri: ${VAULT_URI:http://vault.config:8200} + authentication: KUBERNETES + kubernetes: + role: ordinis-app + service-account-token-file: /var/run/secrets/kubernetes.io/serviceaccount/token + kv: + enabled: true + backend: secret + application-name: ordinis/cuod + config: + enabled: ${CONFIG_SERVER_ENABLED:false} + +server: + port: 8080 + shutdown: graceful + +management: + endpoints: + web: + exposure: + include: health,info,prometheus,refresh,metrics,env + base-path: /actuator + endpoint: + health: + probes: + enabled: true + show-details: when-authorized + group: + liveness: + include: livenessState + readiness: + include: readinessState,db,kafka + prometheus: + metrics: + export: + enabled: true + metrics: + tags: + application: ${spring.application.name} + environment: ${ENVIRONMENT:dev} + +# Defaults; реальные значения подъедутся из Spring Cloud Config + Vault +otel: + exporter: + otlp: + endpoint: ${OTEL_EXPORTER_OTLP_ENDPOINT:http://tempo.monitoring:4317} + protocol: grpc + resource: + attributes: + service.name: ${spring.application.name} + service.namespace: ordinis + deployment.environment: ${ENVIRONMENT:dev} + traces: + sampler: parentbased_traceidratio + sampler.arg: ${ORDINIS_TRACING_SAMPLING:0.1} + +logging: + level: + root: INFO + cloud.nstart.terravault.ordinis: DEBUG diff --git a/ordinis-app/src/main/resources/logback-spring.xml b/ordinis-app/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..a97f146 --- /dev/null +++ b/ordinis-app/src/main/resources/logback-spring.xml @@ -0,0 +1,38 @@ + + + + + + + + trace_id + span_id + scope + dictionary + request_id + user_id + {"service":"${appName}","environment":"${environment}"} + + + + + + %d{HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n + + + + + + + + + + + + + + + + + + diff --git a/ordinis-cuod-bundle/pom.xml b/ordinis-cuod-bundle/pom.xml new file mode 100644 index 0000000..1577f96 --- /dev/null +++ b/ordinis-cuod-bundle/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + + + cloud.nstart.terravault.ordinis + ordinis-parent + 0.1.0-SNAPSHOT + + + ordinis-cuod-bundle + Ordinis :: ЦУОД Bundle + ЦУОД-specific config bundle: JSON Schema справочников (КА, satellite_type, ground_station), seed данные, Grafana dashboards. + + + + org.springframework.boot + spring-boot-starter + + + cloud.nstart.terravault.ordinis + ordinis-domain + + + diff --git a/ordinis-domain/pom.xml b/ordinis-domain/pom.xml new file mode 100644 index 0000000..3378adc --- /dev/null +++ b/ordinis-domain/pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + + + cloud.nstart.terravault.ordinis + ordinis-parent + 0.1.0-SNAPSHOT + + + ordinis-domain + Ordinis :: Domain + JPA entities, JSONB types, базовый bitemporal model. + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + io.hypersistence + hypersistence-utils-hibernate-63 + + + org.hibernate.orm + hibernate-envers + + + net.postgis + postgis-jdbc + + + org.postgresql + postgresql + runtime + + + diff --git a/ordinis-events-api/pom.xml b/ordinis-events-api/pom.xml new file mode 100644 index 0000000..56406e2 --- /dev/null +++ b/ordinis-events-api/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + + cloud.nstart.terravault.ordinis + ordinis-parent + 0.1.0-SNAPSHOT + + + ordinis-events-api + Ordinis :: Events API + DTO модели Kafka событий + semver. Подключается consumers (геопортал, Альтум). + + + + com.fasterxml.jackson.core + jackson-annotations + + + diff --git a/ordinis-migrations/Dockerfile b/ordinis-migrations/Dockerfile new file mode 100644 index 0000000..ec856a2 --- /dev/null +++ b/ordinis-migrations/Dockerfile @@ -0,0 +1,11 @@ +# Liquibase migration image — запускается Helm pre-upgrade Job (1-shot, без Spring Boot) +FROM liquibase/liquibase:4.27.0 + +USER root +COPY src/main/resources/db/changelog /liquibase/changelog +USER liquibase + +ENV LIQUIBASE_COMMAND_CHANGELOG_FILE=/liquibase/changelog/master.xml + +# Helm Job переопределяет JDBC URL через ENV +# CMD: ["update"] (default из base image работает с LIQUIBASE_COMMAND_*) diff --git a/ordinis-migrations/pom.xml b/ordinis-migrations/pom.xml new file mode 100644 index 0000000..a5ae1cc --- /dev/null +++ b/ordinis-migrations/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + + cloud.nstart.terravault.ordinis + ordinis-parent + 0.1.0-SNAPSHOT + + + ordinis-migrations + jar + Ordinis :: Migrations + Liquibase changelogs для Helm pre-upgrade Job. Собирается в отдельный Docker image (без Spring Boot). + + + + + src/main/resources + + + + diff --git a/ordinis-migrations/src/main/resources/db/changelog/changes/0001-extensions.xml b/ordinis-migrations/src/main/resources/db/changelog/changes/0001-extensions.xml new file mode 100644 index 0000000..dae613a --- /dev/null +++ b/ordinis-migrations/src/main/resources/db/changelog/changes/0001-extensions.xml @@ -0,0 +1,21 @@ + + + + + Verify required PostgreSQL extensions are present (created by CNPG initdb). + + + SELECT EXISTS (SELECT 1 FROM pg_extension WHERE extname = 'postgis') + + + SELECT EXISTS (SELECT 1 FROM pg_extension WHERE extname = 'btree_gist') + + + SELECT 1; + + + diff --git a/ordinis-migrations/src/main/resources/db/changelog/changes/0002-dictionary-definitions.xml b/ordinis-migrations/src/main/resources/db/changelog/changes/0002-dictionary-definitions.xml new file mode 100644 index 0000000..643d87a --- /dev/null +++ b/ordinis-migrations/src/main/resources/db/changelog/changes/0002-dictionary-definitions.xml @@ -0,0 +1,52 @@ + + + + + Каталог справочников: имя, JSON Schema, scope, версия. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALTER TABLE dictionary_definitions + ADD CONSTRAINT dictionary_definitions_scope_check + CHECK (scope IN ('public', 'internal', 'restricted')); + + + + + + + + diff --git a/ordinis-migrations/src/main/resources/db/changelog/changes/0003-dictionary-records.xml b/ordinis-migrations/src/main/resources/db/changelog/changes/0003-dictionary-records.xml new file mode 100644 index 0000000..e0bb355 --- /dev/null +++ b/ordinis-migrations/src/main/resources/db/changelog/changes/0003-dictionary-records.xml @@ -0,0 +1,78 @@ + + + + + Bitemporal dictionary records: tx-time через Envers, effective-time через valid_from/valid_to. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALTER TABLE dictionary_records + ADD CONSTRAINT dictionary_records_scope_check + CHECK (data_scope IN ('public', 'internal', 'restricted')); + + + + + ALTER TABLE dictionary_records + ADD CONSTRAINT dictionary_records_no_overlap + EXCLUDE USING GIST ( + dictionary_id WITH =, + business_key WITH =, + tstzrange(valid_from, valid_to, '[)') WITH && + ); + + + + + + + + + + + + + + + + + + CREATE INDEX idx_dict_records_geometry ON dictionary_records USING GIST (geometry); + CREATE INDEX idx_dict_records_data_gin ON dictionary_records USING GIN (data jsonb_path_ops); + + + + diff --git a/ordinis-migrations/src/main/resources/db/changelog/changes/0004-audit-log.xml b/ordinis-migrations/src/main/resources/db/changelog/changes/0004-audit-log.xml new file mode 100644 index 0000000..5047aaa --- /dev/null +++ b/ordinis-migrations/src/main/resources/db/changelog/changes/0004-audit-log.xml @@ -0,0 +1,49 @@ + + + + + Юридически значимый audit log. Source of truth для compliance, отдельно от Loki. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ordinis-migrations/src/main/resources/db/changelog/changes/0005-outbox-events.xml b/ordinis-migrations/src/main/resources/db/changelog/changes/0005-outbox-events.xml new file mode 100644 index 0000000..99a5086 --- /dev/null +++ b/ordinis-migrations/src/main/resources/db/changelog/changes/0005-outbox-events.xml @@ -0,0 +1,55 @@ + + + + + Outbox pattern: события публикуются в Kafka @Scheduled poller'ом. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CREATE INDEX idx_outbox_unpublished ON outbox_events (created_at) + WHERE published_at IS NULL; + + + + diff --git a/ordinis-migrations/src/main/resources/db/changelog/changes/0006-idempotency-keys.xml b/ordinis-migrations/src/main/resources/db/changelog/changes/0006-idempotency-keys.xml new file mode 100644 index 0000000..06d6635 --- /dev/null +++ b/ordinis-migrations/src/main/resources/db/changelog/changes/0006-idempotency-keys.xml @@ -0,0 +1,32 @@ + + + + + Idempotency keys для exactly-once семантики write API. Retention 30 дней через cleanup job. + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ordinis-migrations/src/main/resources/db/changelog/master.xml b/ordinis-migrations/src/main/resources/db/changelog/master.xml new file mode 100644 index 0000000..c247420 --- /dev/null +++ b/ordinis-migrations/src/main/resources/db/changelog/master.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + diff --git a/ordinis-outbox/pom.xml b/ordinis-outbox/pom.xml new file mode 100644 index 0000000..751dc49 --- /dev/null +++ b/ordinis-outbox/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + + cloud.nstart.terravault.ordinis + ordinis-parent + 0.1.0-SNAPSHOT + + + ordinis-outbox + Ordinis :: Outbox + Outbox pattern + @Scheduled poller для надёжной публикации в Kafka. + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.kafka + spring-kafka + + + cloud.nstart.terravault.ordinis + ordinis-domain + + + cloud.nstart.terravault.ordinis + ordinis-events-api + + + diff --git a/ordinis-projection-writer/pom.xml b/ordinis-projection-writer/pom.xml new file mode 100644 index 0000000..cced791 --- /dev/null +++ b/ordinis-projection-writer/pom.xml @@ -0,0 +1,70 @@ + + + 4.0.0 + + + cloud.nstart.terravault.ordinis + ordinis-parent + 0.1.0-SNAPSHOT + + + ordinis-projection-writer + Ordinis :: Projection Writer + Подписывается на Kafka scope-топики, проецирует в Redis. Опциональный сервис, feature-flagged per dictionary. + + + + cloud.nstart.terravault.ordinis + ordinis-events-api + + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.springframework.kafka + spring-kafka + + + io.micrometer + micrometer-registry-prometheus + + + net.logstash.logback + logstash-logback-encoder + + + io.opentelemetry.instrumentation + opentelemetry-spring-boot-starter + + + + org.springframework.cloud + spring-cloud-starter-config + + + org.springframework.cloud + spring-cloud-starter-vault-config + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/ordinis-read-api/pom.xml b/ordinis-read-api/pom.xml new file mode 100644 index 0000000..e46e166 --- /dev/null +++ b/ordinis-read-api/pom.xml @@ -0,0 +1,66 @@ + + + 4.0.0 + + + cloud.nstart.terravault.ordinis + ordinis-parent + 0.1.0-SNAPSHOT + + + ordinis-read-api + Ordinis :: Read API + Read service для внешних consumers (геопортал, Альтум). Читает с PG replica с scope filtering. + + + + cloud.nstart.terravault.ordinis + ordinis-domain + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-registry-prometheus + + + net.logstash.logback + logstash-logback-encoder + + + io.opentelemetry.instrumentation + opentelemetry-spring-boot-starter + + + + org.springframework.cloud + spring-cloud-starter-config + + + org.springframework.cloud + spring-cloud-starter-vault-config + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/ordinis-rest-api/pom.xml b/ordinis-rest-api/pom.xml new file mode 100644 index 0000000..c5831da --- /dev/null +++ b/ordinis-rest-api/pom.xml @@ -0,0 +1,39 @@ + + + 4.0.0 + + + cloud.nstart.terravault.ordinis + ordinis-parent + 0.1.0-SNAPSHOT + + + ordinis-rest-api + Ordinis :: REST API + Admin write API: CRUD справочников, импорт bundle. + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-validation + + + cloud.nstart.terravault.ordinis + ordinis-domain + + + cloud.nstart.terravault.ordinis + ordinis-validation + + + cloud.nstart.terravault.ordinis + ordinis-outbox + + + diff --git a/ordinis-validation/pom.xml b/ordinis-validation/pom.xml new file mode 100644 index 0000000..9db86e5 --- /dev/null +++ b/ordinis-validation/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + + cloud.nstart.terravault.ordinis + ordinis-parent + 0.1.0-SNAPSHOT + + + ordinis-validation + Ordinis :: Validation + JSON Schema validation для dictionary records. + + + + org.springframework.boot + spring-boot-starter + + + com.networknt + json-schema-validator + + + cloud.nstart.terravault.ordinis + ordinis-domain + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..c2e9e37 --- /dev/null +++ b/pom.xml @@ -0,0 +1,139 @@ + + + 4.0.0 + + cloud.nstart.terravault.ordinis + ordinis-parent + 0.1.0-SNAPSHOT + pom + + Ordinis (parent) + MDM сервис для НСИ ЦУОД ОДХ. Часть линейки Terravault. + + + org.springframework.boot + spring-boot-starter-parent + 3.4.2 + + + + + ordinis-domain + ordinis-validation + ordinis-events-api + ordinis-outbox + ordinis-rest-api + ordinis-app + ordinis-read-api + ordinis-projection-writer + ordinis-cuod-bundle + ordinis-migrations + + + + 21 + 21 + 21 + UTF-8 + + 2024.0.0 + 4.2.0 + 3.9.0 + 1.5.4 + 2024.1.0 + 8.0 + 2.10.0 + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + cloud.nstart.terravault.ordinis + ordinis-domain + ${project.version} + + + cloud.nstart.terravault.ordinis + ordinis-validation + ${project.version} + + + cloud.nstart.terravault.ordinis + ordinis-events-api + ${project.version} + + + cloud.nstart.terravault.ordinis + ordinis-outbox + ${project.version} + + + cloud.nstart.terravault.ordinis + ordinis-rest-api + ${project.version} + + + cloud.nstart.terravault.ordinis + ordinis-cuod-bundle + ${project.version} + + + + + io.hypersistence + hypersistence-utils-hibernate-63 + ${hypersistence-utils.version} + + + com.networknt + json-schema-validator + ${json-schema-validator.version} + + + net.postgis + postgis-jdbc + ${postgis-jdbc.version} + + + net.logstash.logback + logstash-logback-encoder + ${logstash-logback.version} + + + io.opentelemetry.instrumentation + opentelemetry-spring-boot-starter + ${opentelemetry-instrumentation.version} + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + +