diff --git a/build.gradle.kts b/build.gradle.kts index 7c86792..8f863d8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,12 +16,12 @@ allprojects { group = "space.nstart.pcp" ext.set("kotlinVersion", "2.2.20") repositories { - maven { - url = uri("https://repo.nstart.cloud/repository/maven-proxy/") - } -// mavenCentral() -// mavenLocal() -// gradlePluginPortal() +// maven { +// url = uri("https://repo.nstart.cloud/repository/maven-proxy/") +// } + mavenCentral() + mavenLocal() + gradlePluginPortal() maven { url = uri("https://jitpack.io") } exclusiveContent { diff --git a/config-repo/application-dev.yaml b/config-repo/application-dev.yaml index 27e3027..4e14ccd 100644 --- a/config-repo/application-dev.yaml +++ b/config-repo/application-dev.yaml @@ -1,19 +1,19 @@ # TODO before merge request: вернуть старые адреса окружения. -# pcp.infra.postgres.host: 192.168.100.160 +# pcp.infra.postgres.host: 192.168.60.201 pcp: infra: postgres: - host: 192.168.100.160 + host: 192.168.60.201 port: 35400 kafka: - host: 192.168.100.160 + host: 192.168.60.201 port: 19092 network: - host: 192.168.100.160 + host: 192.168.60.201 ports: - config: 38888 + config: 8888 admin: 38889 route-processing: 8080 request: 8080 diff --git a/config-repo/application-docker-local.yaml b/config-repo/application-docker-local.yaml index 0e7349c..d11aa8a 100644 --- a/config-repo/application-docker-local.yaml +++ b/config-repo/application-docker-local.yaml @@ -56,7 +56,7 @@ spring: camunda: client: enabled: ${CAMUNDA_CLIENT_ENABLED:false} - grpc-address: http://localhost:26500 + grpc-address: http://192.168.60.201:26500 auth: method: none prefer-rest-over-grpc: false diff --git a/config-repo/application-local.yaml b/config-repo/application-local.yaml index ccd2cc3..41902f3 100644 --- a/config-repo/application-local.yaml +++ b/config-repo/application-local.yaml @@ -3,19 +3,19 @@ pcp: infra: postgres: - host: ${PCP_POSTGRES_HOST:localhost} + host: ${PCP_POSTGRES_HOST:192.168.60.201} port: ${PCP_POSTGRES_PORT:5432} kafka: - host: ${PCP_KAFKA_HOST:localhost} + host: ${PCP_KAFKA_HOST:192.168.60.201} port: ${PCP_KAFKA_PORT:29092} network: - host: ${PCP_NETWORK_HOST:localhost} + host: ${PCP_NETWORK_HOST:192.168.60.201} ports: - config: 38888 + config: 8888 admin: 7000 route-processing: 7004 request: 7005 diff --git a/config-repo/pcp-mission-planing-service.yaml b/config-repo/pcp-mission-planing-service.yaml index 0bfa911..dd0f3a8 100644 --- a/config-repo/pcp-mission-planing-service.yaml +++ b/config-repo/pcp-mission-planing-service.yaml @@ -75,7 +75,7 @@ spring: camunda: client: mode: self-managed - grpc-address: http://camunda.k8s.265.nstart.local:30901 + grpc-address: http://192.168.60.201:26500 auth: method: none prefer-rest-over-grpc: false @@ -136,7 +136,7 @@ spring: camunda: client: mode: self-managed - grpc-address: http://camunda.k8s.265.nstart.local:30901 + grpc-address: http://192.168.60.201:26500 auth: method: none prefer-rest-over-grpc: false diff --git a/config-repo/pcp-request-service.yaml b/config-repo/pcp-request-service.yaml index 1c30333..ef094a1 100644 --- a/config-repo/pcp-request-service.yaml +++ b/config-repo/pcp-request-service.yaml @@ -13,6 +13,7 @@ spring: client: instance: service-base-url: ${pcp.services.request} + service-path: /swagger/ui management-base-url: ${pcp.services.request} datasource: driver-class-name: org.postgresql.Driver diff --git a/config-repo/pcp-route-processing-service.yaml b/config-repo/pcp-route-processing-service.yaml index f17beee..0d3cf81 100644 --- a/config-repo/pcp-route-processing-service.yaml +++ b/config-repo/pcp-route-processing-service.yaml @@ -11,6 +11,7 @@ spring: client: instance: service-base-url: ${pcp.services.route-processing} + service-path: /swagger/ui management-base-url: ${pcp.services.route-processing} datasource: driver-class-name: org.postgresql.Driver diff --git a/config-repo/pcp-tgu-service.yaml b/config-repo/pcp-tgu-service.yaml index 637edf2..2c1494c 100644 --- a/config-repo/pcp-tgu-service.yaml +++ b/config-repo/pcp-tgu-service.yaml @@ -4,6 +4,7 @@ spring: client: instance: service-base-url: ${pcp.services.tgu} + service-path: /swagger/ui management-base-url: ${pcp.services.tgu} flyway: enabled: true @@ -13,7 +14,6 @@ spring: camunda: client: mode: self-managed - # grpc-address: http://camunda.k8s.265.nstart.local:30901 grpc-address: http://192.168.60.201:26500 auth: method: none @@ -25,6 +25,10 @@ management: exposure: include: health,info,metrics +springdoc: + swagger-ui: + path: /swagger/ui + planning: notification-before-start-minutes: 263 target-plan-duration-minutes: 180 @@ -43,7 +47,7 @@ topics: tgu: test-controller: - enabled: false + enabled: true classifier: platforms-url: https://ordinis.nstart.cloud/api/v1/spacecraft/records diff --git a/services/pcp-ballistics-service/src/main/resources/application.yaml b/services/pcp-ballistics-service/src/main/resources/application.yaml index 973f1d2..ae41013 100644 --- a/services/pcp-ballistics-service/src/main/resources/application.yaml +++ b/services/pcp-ballistics-service/src/main/resources/application.yaml @@ -7,7 +7,7 @@ spring: import: "configserver:" cloud: config: - uri: ${CONFIG_SERVER_URI:http://localhost:8888} + uri: ${CONFIG_SERVER_URI:http://192.168.60.201:8888} fail-fast: ${CONFIG_SERVER_FAIL_FAST:true} profile: ${SPRING_CLOUD_CONFIG_PROFILE:${SPRING_PROFILES_ACTIVE:${spring.profiles.default}}} label: ${SPRING_CLOUD_CONFIG_LABEL:dev} diff --git a/services/pcp-ballistics-service/src/test/resources/application.yaml b/services/pcp-ballistics-service/src/test/resources/application.yaml index d78417c..d83702c 100644 --- a/services/pcp-ballistics-service/src/test/resources/application.yaml +++ b/services/pcp-ballistics-service/src/test/resources/application.yaml @@ -8,7 +8,7 @@ spring: jackson: default-property-inclusion: non_null kafka: - bootstrap-servers: 192.168.60.68:29092 + bootstrap-servers: 192.168.1.8:29092 consumer: group-id: pcp-ballistics-service auto-offset-reset: earliest @@ -16,7 +16,7 @@ spring: default-topic: pcp.tle datasource: driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://192.168.60.68:5432/pcp_ballistics + url: jdbc:postgresql://192.168.1.8:5432/pcp_ballistics username: postgres password: password jpa: @@ -63,7 +63,7 @@ management: settings: calculation-interval: 28 - ic-service: http://192.168.60.68:9080 + ic-service: http://192.168.1.8:9080 server: port: 7003 diff --git a/services/pcp-complex-mission-service/src/main/resources/application.yaml b/services/pcp-complex-mission-service/src/main/resources/application.yaml index 20b63ff..a45def8 100644 --- a/services/pcp-complex-mission-service/src/main/resources/application.yaml +++ b/services/pcp-complex-mission-service/src/main/resources/application.yaml @@ -7,7 +7,7 @@ spring: import: "configserver:" cloud: config: - uri: ${CONFIG_SERVER_URI:http://localhost:8888} + uri: ${CONFIG_SERVER_URI:http://192.168.60.201:8888} fail-fast: ${CONFIG_SERVER_FAIL_FAST:true} profile: ${SPRING_CLOUD_CONFIG_PROFILE:${SPRING_PROFILES_ACTIVE:${spring.profiles.default}}} label: ${SPRING_CLOUD_CONFIG_LABEL:dev} @@ -20,7 +20,7 @@ spring: on-profile: local datasource: driver-class-name: org.postgresql.Driver - url: ${PCP_COMPLEX_MISSION_DATASOURCE_URL:jdbc:postgresql://${PCP_POSTGRES_HOST:localhost}:${PCP_POSTGRES_PORT:5432}/pcp_satellites} + url: ${PCP_COMPLEX_MISSION_DATASOURCE_URL:jdbc:postgresql://${PCP_POSTGRES_HOST:192.168.60.201}:${PCP_POSTGRES_PORT:5432}/pcp_satellites} username: ${PCP_COMPLEX_MISSION_DATASOURCE_USERNAME:postgres} password: ${PCP_COMPLEX_MISSION_DATASOURCE_PASSWORD:password} jpa: @@ -46,7 +46,7 @@ spring: on-profile: dev datasource: driver-class-name: org.postgresql.Driver - url: ${PCP_COMPLEX_MISSION_DATASOURCE_URL:jdbc:postgresql://192.168.100.160:35400/pcp_satellites} + url: ${PCP_COMPLEX_MISSION_DATASOURCE_URL:jdbc:postgresql://192.168.60.201:35400/pcp_satellites} username: ${PCP_COMPLEX_MISSION_DATASOURCE_USERNAME:postgres} password: ${PCP_COMPLEX_MISSION_DATASOURCE_PASSWORD:password} jpa: diff --git a/services/pcp-complex-mission-service/src/test/resources/application.yaml b/services/pcp-complex-mission-service/src/test/resources/application.yaml index 2254ca5..535a77a 100644 --- a/services/pcp-complex-mission-service/src/test/resources/application.yaml +++ b/services/pcp-complex-mission-service/src/test/resources/application.yaml @@ -18,9 +18,9 @@ spring: settings: calculation-interval: 3 - ballistics-service: http://localhost:7003 - earth-grid-service: http://localhost:7005 - complex-mission-service: http://localhost:7002 - stations-service: http://localhost:7009 - slots-service: http://localhost:7006 - coverage-scheme-service: http://localhost:7011 + ballistics-service: http://192.168.1.8:7003 + earth-grid-service: http://192.168.1.8:7005 + complex-mission-service: http://192.168.1.8:7002 + stations-service: http://192.168.1.8:7009 + slots-service: http://192.168.1.8:7006 + coverage-scheme-service: http://192.168.1.8:7011 diff --git a/services/pcp-coverage-scheme-service/src/main/kotlin/space/nstart/pcp/pcp_coverage_scheme_service/configuration/CoverageSchemeProperties.kt b/services/pcp-coverage-scheme-service/src/main/kotlin/space/nstart/pcp/pcp_coverage_scheme_service/configuration/CoverageSchemeProperties.kt index 1d6380c..45ffc00 100644 --- a/services/pcp-coverage-scheme-service/src/main/kotlin/space/nstart/pcp/pcp_coverage_scheme_service/configuration/CoverageSchemeProperties.kt +++ b/services/pcp-coverage-scheme-service/src/main/kotlin/space/nstart/pcp/pcp_coverage_scheme_service/configuration/CoverageSchemeProperties.kt @@ -4,8 +4,8 @@ import org.springframework.boot.context.properties.ConfigurationProperties @ConfigurationProperties("coverage-scheme") data class CoverageSchemeProperties( - val ballisticsServiceUrl: String = "http://localhost:7003", - val complexMissionServiceUrl: String = "http://localhost:7002", + val ballisticsServiceUrl: String = "http://192.168.1.8:7003", + val complexMissionServiceUrl: String = "http://192.168.1.8:7002", val satelliteCatalogServiceUrl: String = complexMissionServiceUrl, val defaultRollStepDegrees: Double = 5.0, val defaultMinimumTechnologyOverlap: Double = 0.05, diff --git a/services/pcp-coverage-scheme-service/src/main/resources/application.yaml b/services/pcp-coverage-scheme-service/src/main/resources/application.yaml index e07ab9f..67f8611 100644 --- a/services/pcp-coverage-scheme-service/src/main/resources/application.yaml +++ b/services/pcp-coverage-scheme-service/src/main/resources/application.yaml @@ -7,7 +7,7 @@ spring: import: "configserver:" cloud: config: - uri: ${CONFIG_SERVER_URI:http://localhost:8888} + uri: ${CONFIG_SERVER_URI:http://192.168.60.201:8888} fail-fast: ${CONFIG_SERVER_FAIL_FAST:true} profile: ${SPRING_CLOUD_CONFIG_PROFILE:${SPRING_PROFILES_ACTIVE:${spring.profiles.default}}} label: ${SPRING_CLOUD_CONFIG_LABEL:dev} diff --git a/services/pcp-dynamic-plan-service/src/main/resources/application.yaml b/services/pcp-dynamic-plan-service/src/main/resources/application.yaml index 9c2430b..a63d423 100644 --- a/services/pcp-dynamic-plan-service/src/main/resources/application.yaml +++ b/services/pcp-dynamic-plan-service/src/main/resources/application.yaml @@ -7,7 +7,7 @@ spring: import: "configserver:" cloud: config: - uri: ${CONFIG_SERVER_URI:http://192.168.100.160:38888} + uri: ${CONFIG_SERVER_URI:http://192.168.60.201:8888} fail-fast: ${CONFIG_SERVER_FAIL_FAST:true} profile: ${SPRING_CLOUD_CONFIG_PROFILE:${SPRING_PROFILES_ACTIVE:${spring.profiles.default}}} label: ${SPRING_CLOUD_CONFIG_LABEL:master} @@ -15,7 +15,7 @@ spring: # max-in-memory-size: 16MB datasource: driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://192.168.60.68:5432/complan + url: jdbc:postgresql://192.168.1.8:5432/complan username: postgres password: password jpa: diff --git a/services/pcp-mission-planing-service/src/main/resources/application.yaml b/services/pcp-mission-planing-service/src/main/resources/application.yaml index 33c1a3b..71fadd4 100644 --- a/services/pcp-mission-planing-service/src/main/resources/application.yaml +++ b/services/pcp-mission-planing-service/src/main/resources/application.yaml @@ -7,7 +7,7 @@ spring: import: "configserver:" cloud: config: - uri: ${CONFIG_SERVER_URI:http://localhost:8888} + uri: ${CONFIG_SERVER_URI:http://192.168.60.201:8888} fail-fast: ${CONFIG_SERVER_FAIL_FAST:true} profile: ${SPRING_CLOUD_CONFIG_PROFILE:${SPRING_PROFILES_ACTIVE:${spring.profiles.default}}} label: ${SPRING_CLOUD_CONFIG_LABEL:dev} diff --git a/services/pcp-mission-planing-service/src/test/resources/application.yaml b/services/pcp-mission-planing-service/src/test/resources/application.yaml index b2ba0b7..21dae27 100644 --- a/services/pcp-mission-planing-service/src/test/resources/application.yaml +++ b/services/pcp-mission-planing-service/src/test/resources/application.yaml @@ -23,7 +23,7 @@ camunda: enabled: false settings: - ballistics-service: http://localhost:7003 - complex-mission-service: http://localhost:7002 - satellite-catalog-service: http://localhost:7013 - stations-service: http://localhost:7009 + ballistics-service: http://192.168.1.8:7003 + complex-mission-service: http://192.168.1.8:7002 + satellite-catalog-service: http://192.168.1.8:7013 + stations-service: http://192.168.1.8:7009 diff --git a/services/pcp-request-service/src/main/kotlin/org/nstart/dep265/requestservice/config/KafkaProducerConfig.kt b/services/pcp-request-service/src/main/kotlin/org/nstart/dep265/requestservice/config/KafkaProducerConfig.kt index 78f6747..338ae21 100644 --- a/services/pcp-request-service/src/main/kotlin/org/nstart/dep265/requestservice/config/KafkaProducerConfig.kt +++ b/services/pcp-request-service/src/main/kotlin/org/nstart/dep265/requestservice/config/KafkaProducerConfig.kt @@ -15,7 +15,7 @@ class KafkaProducerConfig { @Bean @ConditionalOnMissingBean fun requestProducerFactory( - @Value("\${spring.kafka.bootstrap-servers:192.168.100.160:19092}") bootstrapServers: String, + @Value("\${spring.kafka.bootstrap-servers:192.168.1.8:19092}") bootstrapServers: String, ): ProducerFactory { return DefaultKafkaProducerFactory( mapOf( diff --git a/services/pcp-request-service/src/main/resources/application.yaml b/services/pcp-request-service/src/main/resources/application.yaml index c3632e3..50f2cbc 100644 --- a/services/pcp-request-service/src/main/resources/application.yaml +++ b/services/pcp-request-service/src/main/resources/application.yaml @@ -7,7 +7,7 @@ spring: import: "configserver:" cloud: config: - uri: ${CONFIG_SERVER_URI:http://localhost:8888} + uri: ${CONFIG_SERVER_URI:http://192.168.60.201:8888} fail-fast: ${CONFIG_SERVER_FAIL_FAST:true} profile: ${SPRING_CLOUD_CONFIG_PROFILE:${SPRING_PROFILES_ACTIVE:${spring.profiles.default}}} label: ${SPRING_CLOUD_CONFIG_LABEL:master} diff --git a/services/pcp-route-processing-service/src/main/resources/application.yml b/services/pcp-route-processing-service/src/main/resources/application.yml index 4d04f5e..f9aad41 100644 --- a/services/pcp-route-processing-service/src/main/resources/application.yml +++ b/services/pcp-route-processing-service/src/main/resources/application.yml @@ -13,7 +13,7 @@ spring: label: ${SPRING_CLOUD_CONFIG_LABEL:master} datasource: driver-class-name: org.postgresql.Driver - url: ${PCP_ROUTE_PROCESSING_DATASOURCE_URL:jdbc:postgresql://${PCP_POSTGRES_HOST:localhost}:${PCP_POSTGRES_PORT:5432}/pcp_route_processing} + url: ${PCP_ROUTE_PROCESSING_DATASOURCE_URL:jdbc:postgresql://${PCP_POSTGRES_HOST:192.168.1.8}:${PCP_POSTGRES_PORT:5432}/pcp_route_processing} username: ${PCP_ROUTE_PROCESSING_DATASOURCE_USERNAME:postgres} password: ${PCP_ROUTE_PROCESSING_DATASOURCE_PASSWORD:password} jpa: diff --git a/services/pcp-route-processing-service/src/main/resources/test-passport-message.json b/services/pcp-route-processing-service/src/main/resources/test-passport-message.json index 0ded04d..c0d5ef7 100644 --- a/services/pcp-route-processing-service/src/main/resources/test-passport-message.json +++ b/services/pcp-route-processing-service/src/main/resources/test-passport-message.json @@ -98,7 +98,7 @@ ], "assets": { "schema-calibration-vh": { - "href": "http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/calibration-s1a-iw-grd-vh-20250625t013854-20250625t013919-059796-076d15-002.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120818Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=26988c6a3490f71382ae9e61ff0d7b59aca32ec652993a785d24e8dd81e70939", + "href": "http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/calibration-s1a-iw-grd-vh-20250625t013854-20250625t013919-059796-076d15-002.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120818Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=26988c6a3490f71382ae9e61ff0d7b59aca32ec652993a785d24e8dd81e70939", "title": "xml", "description": null, "type": "application/xml", @@ -107,7 +107,7 @@ ] }, "schema-calibration-vv": { - "href": "http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/calibration-s1a-iw-grd-vv-20250625t013854-20250625t013919-059796-076d15-001.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120818Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=edd6957a0404ead07e7a31d0759db26b3a6ad33394247c177dc41a7abf5972d0", + "href": "http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/calibration-s1a-iw-grd-vv-20250625t013854-20250625t013919-059796-076d15-001.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120818Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=edd6957a0404ead07e7a31d0759db26b3a6ad33394247c177dc41a7abf5972d0", "title": "xml", "description": null, "type": "application/xml", @@ -116,7 +116,7 @@ ] }, "schema-noise-vh": { - "href": "http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/noise-s1a-iw-grd-vh-20250625t013854-20250625t013919-059796-076d15-002.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120818Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=3efe46114ed6dfeac898963510d3ba9c8b537c803b1fa69a5a03d5b462a1665c", + "href": "http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/noise-s1a-iw-grd-vh-20250625t013854-20250625t013919-059796-076d15-002.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120818Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=3efe46114ed6dfeac898963510d3ba9c8b537c803b1fa69a5a03d5b462a1665c", "title": "xml", "description": null, "type": "application/xml", @@ -125,7 +125,7 @@ ] }, "schema-noise-vv": { - "href": "http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/noise-s1a-iw-grd-vv-20250625t013854-20250625t013919-059796-076d15-001.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120818Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=0ca91479ba4132dbf13c2637f97567eb29ee9ca818009eaf501072995fe784ca", + "href": "http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/noise-s1a-iw-grd-vv-20250625t013854-20250625t013919-059796-076d15-001.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120818Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=0ca91479ba4132dbf13c2637f97567eb29ee9ca818009eaf501072995fe784ca", "title": "xml", "description": null, "type": "application/xml", @@ -134,7 +134,7 @@ ] }, "schema-product-vh": { - "href": "http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/s1a-iw-grd-vh-20250625t013854-20250625t013919-059796-076d15-002.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120819Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=39817f0b7610c0b20a23d0fae24e7183f0d3719ba6ab2f315c320c9c6530274f", + "href": "http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/s1a-iw-grd-vh-20250625t013854-20250625t013919-059796-076d15-002.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120819Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=39817f0b7610c0b20a23d0fae24e7183f0d3719ba6ab2f315c320c9c6530274f", "title": "xml", "description": null, "type": "application/xml", @@ -143,7 +143,7 @@ ] }, "schema-product-vv": { - "href": "http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/s1a-iw-grd-vv-20250625t013854-20250625t013919-059796-076d15-001.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120819Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=85d28bc2bb94724b4db7df84121d4252b423fa429204e4b25e06b9d725f3aeee", + "href": "http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/s1a-iw-grd-vv-20250625t013854-20250625t013919-059796-076d15-001.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120819Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=85d28bc2bb94724b4db7df84121d4252b423fa429204e4b25e06b9d725f3aeee", "title": "xml", "description": null, "type": "application/xml", @@ -152,7 +152,7 @@ ] }, "safe-manifest": { - "href": "http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/manifest.safe?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120819Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=dbb22d57d031a412e2b46273edf32cfcb7fbdae1fa1fcc74bdcaa39a5e086f53", + "href": "http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/manifest.safe?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120819Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=dbb22d57d031a412e2b46273edf32cfcb7fbdae1fa1fcc74bdcaa39a5e086f53", "title": "safe", "description": null, "type": "application/xml", @@ -161,7 +161,7 @@ ] }, "vh": { - "href": "http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/s1a-iw-grd-vh-20250625t013854-20250625t013919-059796-076d15-002_cog.tif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120824Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=dbecc9e04e976751e855f53e9a9a8db5d6365a30ac7ec116f31b0936ee375648", + "href": "http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/s1a-iw-grd-vh-20250625t013854-20250625t013919-059796-076d15-002_cog.tif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120824Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=dbecc9e04e976751e855f53e9a9a8db5d6365a30ac7ec116f31b0936ee375648", "title": "tif", "description": null, "type": "image/tiff; application=geotiff; profile=cloud-optimized", @@ -170,7 +170,7 @@ ] }, "vv": { - "href": "http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/s1a-iw-grd-vv-20250625t013854-20250625t013919-059796-076d15-001_cog.tif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120829Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=34cf1e5f5174b7cb5ca5d173ff699923819d5df28486436d972efa59ac9b1ddb", + "href": "http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/s1a-iw-grd-vv-20250625t013854-20250625t013919-059796-076d15-001_cog.tif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120829Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=34cf1e5f5174b7cb5ca5d173ff699923819d5df28486436d972efa59ac9b1ddb", "title": "tif", "description": null, "type": "image/tiff; application=geotiff; profile=cloud-optimized", @@ -179,7 +179,7 @@ ] }, "kml": { - "href": "http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/map-overlay.kml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120829Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=92f63b9f463041c4ed87b3cb508ba8c57fd2db8ea2d22026087ba57d2ef88f54", + "href": "http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/map-overlay.kml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120829Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=92f63b9f463041c4ed87b3cb508ba8c57fd2db8ea2d22026087ba57d2ef88f54", "title": "kml", "description": null, "type": "application/kml", @@ -188,7 +188,7 @@ ] }, "thumbnail": { - "href": "http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/quick-look.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120829Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=19bebb1e446add1d6e0898b4329d2a3e016f59087719ce2b51dff5c487835cb0", + "href": "http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/quick-look.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120829Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=19bebb1e446add1d6e0898b4329d2a3e016f59087719ce2b51dff5c487835cb0", "title": "png", "description": null, "type": "image/png", diff --git a/services/pcp-route-processing-service/src/test/resources/passport_example.json b/services/pcp-route-processing-service/src/test/resources/passport_example.json index 2c3e23f..0f26d6c 100644 --- a/services/pcp-route-processing-service/src/test/resources/passport_example.json +++ b/services/pcp-route-processing-service/src/test/resources/passport_example.json @@ -1 +1 @@ -{"type":"Feature","stac_version":"1.0.0","stac_extensions":null,"id":"S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE","collection":"S1A-GRDH","geometry":"POLYGON((67.675827 38.114815, 64.779434 38.514816, 65.094017 40.015545, 68.05294 39.616795, 67.675827 38.114815))","bbox":[64.779434,40.015545,68.05294,38.114815],"properties":{"datetime":"2026-03-31T12:08:30.570573Z","created":null,"updated":"2026-03-31T12:08:30.610660Z","platform":"sentinel-1a","instruments":null,"processing:level":"GRD","route:orbit_number":"59796","missionId":"S1A","sat:orbit_state":"Descending","polarisation":["VH","VV"],"rollAngle":[30.07864486915724,30.09378936608302],"visirAngle":[30.63331560676386,46.07086702096005],"intervalBegin":"2025-06-25T01:38:54.481190","intervalEnd":"2025-06-25T01:39:19.479675","resolutionRange":"1.000000e+01","resolutionAzimuth":"1.000000e+01"},"links":[{"rel":"self","type":"application/geo+json","href":"http://192.168.100.160:8085/collections/S1A-GRDH/items/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE"},{"rel":"parent","type":"application/json","href":"http://192.168.100.160:8085/collections/S1A-GRDH"},{"rel":"collection","type":"application/json","href":"http://192.168.100.160:8085/collections/S1A-GRDH"},{"rel":"root","type":"application/json","href":"http://192.168.100.160:8085/"}],"assets":{"schema-calibration-vh":{"href":"http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/calibration-s1a-iw-grd-vh-20250625t013854-20250625t013919-059796-076d15-002.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120818Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=26988c6a3490f71382ae9e61ff0d7b59aca32ec652993a785d24e8dd81e70939","type":"application/xml","title":"xml","description":null,"roles":["metadata"]},"schema-calibration-vv":{"href":"http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/calibration-s1a-iw-grd-vv-20250625t013854-20250625t013919-059796-076d15-001.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120818Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=edd6957a0404ead07e7a31d0759db26b3a6ad33394247c177dc41a7abf5972d0","type":"application/xml","title":"xml","description":null,"roles":["metadata"]},"schema-noise-vh":{"href":"http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/noise-s1a-iw-grd-vh-20250625t013854-20250625t013919-059796-076d15-002.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120818Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=3efe46114ed6dfeac898963510d3ba9c8b537c803b1fa69a5a03d5b462a1665c","type":"application/xml","title":"xml","description":null,"roles":["metadata"]},"schema-noise-vv":{"href":"http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/noise-s1a-iw-grd-vv-20250625t013854-20250625t013919-059796-076d15-001.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120818Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=0ca91479ba4132dbf13c2637f97567eb29ee9ca818009eaf501072995fe784ca","type":"application/xml","title":"xml","description":null,"roles":["metadata"]},"schema-product-vh":{"href":"http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/s1a-iw-grd-vh-20250625t013854-20250625t013919-059796-076d15-002.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120819Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=39817f0b7610c0b20a23d0fae24e7183f0d3719ba6ab2f315c320c9c6530274f","type":"application/xml","title":"xml","description":null,"roles":["metadata"]},"schema-product-vv":{"href":"http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/s1a-iw-grd-vv-20250625t013854-20250625t013919-059796-076d15-001.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120819Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=85d28bc2bb94724b4db7df84121d4252b423fa429204e4b25e06b9d725f3aeee","type":"application/xml","title":"xml","description":null,"roles":["metadata"]},"safe-manifest":{"href":"http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/manifest.safe?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120819Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=dbb22d57d031a412e2b46273edf32cfcb7fbdae1fa1fcc74bdcaa39a5e086f53","type":"application/xml","title":"safe","description":null,"roles":["metadata"]},"vh":{"href":"http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/s1a-iw-grd-vh-20250625t013854-20250625t013919-059796-076d15-002_cog.tif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120824Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=dbecc9e04e976751e855f53e9a9a8db5d6365a30ac7ec116f31b0936ee375648","type":"image/tiff; application=geotiff; profile=cloud-optimized","title":"tif","description":null,"roles":["visual"]},"vv":{"href":"http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/s1a-iw-grd-vv-20250625t013854-20250625t013919-059796-076d15-001_cog.tif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120829Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=34cf1e5f5174b7cb5ca5d173ff699923819d5df28486436d972efa59ac9b1ddb","type":"image/tiff; application=geotiff; profile=cloud-optimized","title":"tif","description":null,"roles":["visual"]},"kml":{"href":"http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/map-overlay.kml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120829Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=92f63b9f463041c4ed87b3cb508ba8c57fd2db8ea2d22026087ba57d2ef88f54","type":"application/kml","title":"kml","description":null,"roles":["metadata"]},"thumbnail":{"href":"http://192.168.100.160:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/quick-look.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120829Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=19bebb1e446add1d6e0898b4329d2a3e016f59087719ce2b51dff5c487835cb0","type":"image/png","title":"png","description":null,"roles":["thumbnail","overview"]}}} +{"type":"Feature","stac_version":"1.0.0","stac_extensions":null,"id":"S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE","collection":"S1A-GRDH","geometry":"POLYGON((67.675827 38.114815, 64.779434 38.514816, 65.094017 40.015545, 68.05294 39.616795, 67.675827 38.114815))","bbox":[64.779434,40.015545,68.05294,38.114815],"properties":{"datetime":"2026-03-31T12:08:30.570573Z","created":null,"updated":"2026-03-31T12:08:30.610660Z","platform":"sentinel-1a","instruments":null,"processing:level":"GRD","route:orbit_number":"59796","missionId":"S1A","sat:orbit_state":"Descending","polarisation":["VH","VV"],"rollAngle":[30.07864486915724,30.09378936608302],"visirAngle":[30.63331560676386,46.07086702096005],"intervalBegin":"2025-06-25T01:38:54.481190","intervalEnd":"2025-06-25T01:39:19.479675","resolutionRange":"1.000000e+01","resolutionAzimuth":"1.000000e+01"},"links":[{"rel":"self","type":"application/geo+json","href":"http://192.168.1.8:8085/collections/S1A-GRDH/items/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE"},{"rel":"parent","type":"application/json","href":"http://192.168.1.8:8085/collections/S1A-GRDH"},{"rel":"collection","type":"application/json","href":"http://192.168.1.8:8085/collections/S1A-GRDH"},{"rel":"root","type":"application/json","href":"http://192.168.1.8:8085/"}],"assets":{"schema-calibration-vh":{"href":"http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/calibration-s1a-iw-grd-vh-20250625t013854-20250625t013919-059796-076d15-002.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120818Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=26988c6a3490f71382ae9e61ff0d7b59aca32ec652993a785d24e8dd81e70939","type":"application/xml","title":"xml","description":null,"roles":["metadata"]},"schema-calibration-vv":{"href":"http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/calibration-s1a-iw-grd-vv-20250625t013854-20250625t013919-059796-076d15-001.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120818Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=edd6957a0404ead07e7a31d0759db26b3a6ad33394247c177dc41a7abf5972d0","type":"application/xml","title":"xml","description":null,"roles":["metadata"]},"schema-noise-vh":{"href":"http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/noise-s1a-iw-grd-vh-20250625t013854-20250625t013919-059796-076d15-002.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120818Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=3efe46114ed6dfeac898963510d3ba9c8b537c803b1fa69a5a03d5b462a1665c","type":"application/xml","title":"xml","description":null,"roles":["metadata"]},"schema-noise-vv":{"href":"http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/noise-s1a-iw-grd-vv-20250625t013854-20250625t013919-059796-076d15-001.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120818Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=0ca91479ba4132dbf13c2637f97567eb29ee9ca818009eaf501072995fe784ca","type":"application/xml","title":"xml","description":null,"roles":["metadata"]},"schema-product-vh":{"href":"http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/s1a-iw-grd-vh-20250625t013854-20250625t013919-059796-076d15-002.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120819Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=39817f0b7610c0b20a23d0fae24e7183f0d3719ba6ab2f315c320c9c6530274f","type":"application/xml","title":"xml","description":null,"roles":["metadata"]},"schema-product-vv":{"href":"http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/s1a-iw-grd-vv-20250625t013854-20250625t013919-059796-076d15-001.xml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120819Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=85d28bc2bb94724b4db7df84121d4252b423fa429204e4b25e06b9d725f3aeee","type":"application/xml","title":"xml","description":null,"roles":["metadata"]},"safe-manifest":{"href":"http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/manifest.safe?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120819Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=dbb22d57d031a412e2b46273edf32cfcb7fbdae1fa1fcc74bdcaa39a5e086f53","type":"application/xml","title":"safe","description":null,"roles":["metadata"]},"vh":{"href":"http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/s1a-iw-grd-vh-20250625t013854-20250625t013919-059796-076d15-002_cog.tif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120824Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=dbecc9e04e976751e855f53e9a9a8db5d6365a30ac7ec116f31b0936ee375648","type":"image/tiff; application=geotiff; profile=cloud-optimized","title":"tif","description":null,"roles":["visual"]},"vv":{"href":"http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/s1a-iw-grd-vv-20250625t013854-20250625t013919-059796-076d15-001_cog.tif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120829Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=34cf1e5f5174b7cb5ca5d173ff699923819d5df28486436d972efa59ac9b1ddb","type":"image/tiff; application=geotiff; profile=cloud-optimized","title":"tif","description":null,"roles":["visual"]},"kml":{"href":"http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/map-overlay.kml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120829Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=92f63b9f463041c4ed87b3cb508ba8c57fd2db8ea2d22026087ba57d2ef88f54","type":"application/kml","title":"kml","description":null,"roles":["metadata"]},"thumbnail":{"href":"http://192.168.1.8:9000/stac-data/S1A/S1A_IW_GRDH_1SDV_20250625T013854_20250625T013919_059796_076D15_B5C1.SAFE/quick-look.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20260331%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260331T120829Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=19bebb1e446add1d6e0898b4329d2a3e016f59087719ce2b51dff5c487835cb0","type":"image/png","title":"png","description":null,"roles":["thumbnail","overview"]}}} diff --git a/services/pcp-satellite-catalog-service/src/main/resources/application.yaml b/services/pcp-satellite-catalog-service/src/main/resources/application.yaml index 370d5bd..b361978 100644 --- a/services/pcp-satellite-catalog-service/src/main/resources/application.yaml +++ b/services/pcp-satellite-catalog-service/src/main/resources/application.yaml @@ -7,7 +7,7 @@ spring: import: "configserver:" cloud: config: - uri: ${CONFIG_SERVER_URI:http://localhost:8888} + uri: ${CONFIG_SERVER_URI:http://192.168.60.201:8888} fail-fast: ${CONFIG_SERVER_FAIL_FAST:true} profile: ${SPRING_CLOUD_CONFIG_PROFILE:${SPRING_PROFILES_ACTIVE:${spring.profiles.default}}} label: ${SPRING_CLOUD_CONFIG_LABEL:dev} diff --git a/services/pcp-srpring-boot-admin-server/src/main/resources/application.yaml b/services/pcp-srpring-boot-admin-server/src/main/resources/application.yaml index bcdb4e8..5c5e7cc 100644 --- a/services/pcp-srpring-boot-admin-server/src/main/resources/application.yaml +++ b/services/pcp-srpring-boot-admin-server/src/main/resources/application.yaml @@ -7,7 +7,7 @@ spring: import: "configserver:" cloud: config: - uri: ${CONFIG_SERVER_URI:http://localhost:8888} + uri: ${CONFIG_SERVER_URI:http://192.168.60.201:8888} fail-fast: ${CONFIG_SERVER_FAIL_FAST:true} profile: ${SPRING_CLOUD_CONFIG_PROFILE:${SPRING_PROFILES_ACTIVE:${spring.profiles.default}}} label: ${SPRING_CLOUD_CONFIG_LABEL:dev} diff --git a/services/pcp-stations-service/src/main/resources/application.yaml b/services/pcp-stations-service/src/main/resources/application.yaml index 3609f1e..d70b9b3 100644 --- a/services/pcp-stations-service/src/main/resources/application.yaml +++ b/services/pcp-stations-service/src/main/resources/application.yaml @@ -7,7 +7,7 @@ spring: import: "configserver:" cloud: config: - uri: ${CONFIG_SERVER_URI:http://localhost:8888} + uri: ${CONFIG_SERVER_URI:http://192.168.60.201:8888} fail-fast: ${CONFIG_SERVER_FAIL_FAST:true} profile: ${SPRING_CLOUD_CONFIG_PROFILE:${SPRING_PROFILES_ACTIVE:${spring.profiles.default}}} label: ${SPRING_CLOUD_CONFIG_LABEL:master} diff --git a/services/pcp-tgu-service/platforms.json b/services/pcp-tgu-service/platforms.json index c40d331..79cabcf 100644 --- a/services/pcp-tgu-service/platforms.json +++ b/services/pcp-tgu-service/platforms.json @@ -1 +1 @@ -[{"id":"4ae3e206-03ee-410e-aae5-96eb69435557","businessKey":"2013-030A","data":{"name":"Resurs-P No.1","orbit":{"type":"SSO","inclination_deg":97.27},"status":"LOST","country":"RU","mass_kg":5920,"mission":"RESURS_P","norad_id":39186,"operator":"Roscosmos / RSC Progress","decay_date":"2021-12-19","designator":"2013-030A","launch_date":"2013-06-25","spectrum_bands":["VIS","NIR"],"satellite_type_code":"OPT_HIRES_VIS"},"dataScope":"PUBLIC","validFrom":"2026-05-07T21:20:51.710841Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"7307c2f2-c92c-44fa-b864-10ffad2fe88c","businessKey":"2014-085A","data":{"name":"Resurs-P No.2","orbit":{"type":"SSO","inclination_deg":97.27},"status":"LOST","country":"RU","mass_kg":5920,"mission":"RESURS_P","norad_id":40360,"operator":"Roscosmos / RSC Progress","decay_date":"2022-04-13","designator":"2014-085A","launch_date":"2014-12-26","satellite_type_code":"OPT_HIRES_VIS"},"dataScope":"PUBLIC","validFrom":"2026-05-07T21:20:51.710841Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"17080530-8d5b-47bd-ab9c-f7151d492578","businessKey":"2026-Emissio1","data":{"name":"Emissio 1","orbit":{"type":"SSO","inclination_deg":97.5},"status":"OPERATIONAL","country":"RU","mass_kg":495,"norad_id":2,"operator":"НСТАРТ","designator":"2026-001E","spectrum_bands":["S_BAND"],"satellite_type_code":"OPT_HIRES_VIS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T13:59:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"2bc048fc-7788-46fd-b368-37ee1b8b1a7a","businessKey":"2026-Reflexio1","data":{"name":"Reflexio 1","orbit":{"type":"SSO","inclination_deg":97.5},"status":"OPERATIONAL","country":"RU","mass_kg":495,"norad_id":30,"operator":"НСТАРТ","designator":"2026-001R","spectrum_bands":["S_BAND"],"satellite_type_code":"OPT_HIRES_VIS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T13:59:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"933bbfd1-774b-440e-aa83-256936129e0a","businessKey":"2016-016A","data":{"name":"Resurs-P No.3","orbit":{"type":"SSO","inclination_deg":97.28},"status":"STANDBY","country":"RU","mass_kg":5920,"mission":"RESURS_P","norad_id":41386,"operator":"Roscosmos / RSC Progress","designator":"2016-016A","launch_date":"2016-03-13","spectrum_bands":["VIS","NIR"],"satellite_type_code":"OPT_HIRES_VIS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:05:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"da0bed3a-5557-452d-a235-53ca26080bca","businessKey":"2024-046A","data":{"name":"Resurs-P No.4","orbit":{"type":"SSO","inclination_deg":97.28},"status":"STANDBY","country":"RU","mass_kg":5920,"mission":"RESURS_P","operator":"Roscosmos / RSC Progress","designator":"2024-046A","launch_date":"2024-03-31","spectrum_bands":["VIS","NIR"],"satellite_type_code":"OPT_HIRES_VIS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:05:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"5293be80-4107-4bed-a8f1-4aeb8d833e03","businessKey":"1999-068A","data":{"name":"Terra (EOS AM-1)","orbit":{"type":"SSO","eccentricity":1.0E-4,"inclination_deg":98.2,"semimajor_axis_km":7083},"status":"STANDBY","country":"US","mass_kg":4864,"mission":"TERRA_AQUA","norad_id":25994,"operator":"NASA","designator":"1999-068A","launch_date":"1999-12-18","spectrum_bands":["VIS","NIR","SWIR","TIR"],"satellite_type_code":"OPT_MIDRES_MS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:05:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"1435cdcc-0b81-4761-9b4e-a4e991160156","businessKey":"2021-016A","data":{"name":"Arktika-M No.1","orbit":{"type":"HEO"},"status":"STANDBY","country":"RU","mass_kg":2200,"mission":"ARKTIKA_M","operator":"Roshydromet / Lavochkin Association","designator":"2021-016A","launch_date":"2021-02-28","spectrum_bands":["VIS","NIR","MWIR","TIR"],"satellite_type_code":"OPT_MIDRES_MS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:05:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"906b8317-72c7-436e-a582-d4e8df774430","businessKey":"2015-074A","data":{"name":"Elektro-L No.2","orbit":{"type":"GEO"},"status":"STANDBY","country":"RU","mass_kg":1740,"mission":"ELEKTRO_L","operator":"Roshydromet / Lavochkin Association","designator":"2015-074A","launch_date":"2015-12-11","spectrum_bands":["VIS","NIR","MWIR","TIR"],"satellite_type_code":"OPT_MIDRES_MS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:06:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"2cf4b26e-f44c-43eb-9155-9e412df8d0ba","businessKey":"2019-038A","data":{"name":"Meteor-M No.2-2","orbit":{"type":"SSO","inclination_deg":98.83},"status":"STANDBY","country":"RU","mass_kg":2900,"mission":"METEOR_M","operator":"Roshydromet / VNIIEM","designator":"2019-038A","launch_date":"2019-07-05","satellite_type_code":"OPT_MIDRES_MS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:06:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"ea2e466c-3c8a-4e2d-8c0e-d0634e7cda53","businessKey":"2014-037A","data":{"name":"Meteor-M No.2","orbit":{"type":"SSO","inclination_deg":98.86},"status":"STANDBY","country":"RU","mass_kg":2900,"mission":"METEOR_M","operator":"Roshydromet / VNIIEM","designator":"2014-037A","launch_date":"2014-07-08","spectrum_bands":["VIS","NIR","SWIR","TIR"],"satellite_type_code":"OPT_MIDRES_MS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:06:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"99c1d6d2-0e0d-4cb5-a7a8-7e8f934e22c2","businessKey":"2017-076A","data":{"name":"Kanopus-V No.5 (Grand)","orbit":{"type":"SSO","inclination_deg":97.45},"status":"STANDBY","country":"RU","mass_kg":473,"mission":"KANOPUS_V","operator":"Roscosmos / VNIIEM","designator":"2017-076A","launch_date":"2017-12-01","satellite_type_code":"OPT_HIRES_VIS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:06:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"5381755f-2397-4863-b4f3-55301e73b27a","businessKey":"2012-039A","data":{"name":"Kanopus-V No.1","orbit":{"type":"SSO","inclination_deg":97.43},"status":"STANDBY","country":"RU","mass_kg":473,"mission":"KANOPUS_V","norad_id":38707,"operator":"Roscosmos / VNIIEM","designator":"2012-039A","launch_date":"2012-07-22","spectrum_bands":["VIS","NIR"],"satellite_type_code":"OPT_HIRES_VIS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:06:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"f0fc5aad-5b4a-49b0-9ee6-0ab79327a7e6","businessKey":"2024-149E","data":{"name":"Kondor-FKA No.2","orbit":{"type":"SSO","inclination_deg":97.5},"status":"STANDBY","country":"RU","mass_kg":1050,"mission":"KONDOR_FKA","operator":"Roscosmos","designator":"2024-149E","launch_date":"2024-08-13","spectrum_bands":["S_BAND"],"satellite_type_code":"SAR_X_HIRES"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:06:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"54fbf999-b1c0-4868-a51c-eb7191f1e867","businessKey":"2014-016A","data":{"name":"Sentinel-1A","orbit":{"type":"SSO","eccentricity":1.0E-4,"inclination_deg":98.18,"semimajor_axis_km":7064},"status":"STANDBY","country":"FR","mass_kg":2300,"mission":"SENTINEL_1","norad_id":39634,"operator":"ESA / Copernicus","designator":"2014-016A","launch_date":"2014-04-03","spectrum_bands":["C_BAND"],"satellite_type_code":"SAR_X_HIRES"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:07:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"d5cf2788-cec5-43a1-9bda-ab3e8ec5c4aa","businessKey":"2015-028A","data":{"name":"Sentinel-2A","orbit":{"type":"SSO","inclination_deg":98.62,"semimajor_axis_km":7167},"status":"STANDBY","country":"FR","mass_kg":1140,"mission":"SENTINEL_2","norad_id":40697,"operator":"ESA / Copernicus","designator":"2015-028A","launch_date":"2015-06-23","spectrum_bands":["VIS","NIR","SWIR"],"satellite_type_code":"OPT_MIDRES_MS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:07:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}}] \ No newline at end of file +[{"id":"4ae3e206-03ee-410e-aae5-96eb69435557","businessKey":"2013-030A","data":{"name":"Resurs-P No.1","orbit":{"type":"SSO","inclination_deg":97.27},"status":"LOST","country":"RU","mass_kg":5920,"mission":"RESURS_P","norad_id":39186,"operator":"Roscosmos / RSC Progress","decay_date":"2021-12-19","designator":"2013-030A","launch_date":"2013-06-25","spectrum_bands":["VIS","NIR"],"satellite_type_code":"OPT_HIRES_VIS"},"dataScope":"PUBLIC","validFrom":"2026-05-07T21:20:51.710841Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"7307c2f2-c92c-44fa-b864-10ffad2fe88c","businessKey":"2014-085A","data":{"name":"Resurs-P No.2","orbit":{"type":"SSO","inclination_deg":97.27},"status":"LOST","country":"RU","mass_kg":5920,"mission":"RESURS_P","norad_id":40360,"operator":"Roscosmos / RSC Progress","decay_date":"2022-04-13","designator":"2014-085A","launch_date":"2014-12-26","satellite_type_code":"OPT_HIRES_VIS"},"dataScope":"PUBLIC","validFrom":"2026-05-07T21:20:51.710841Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"17080530-8d5b-47bd-ab9c-f7151d492578","businessKey":"2026-Emissio1","data":{"name":"Emissio 1","orbit":{"type":"SSO","inclination_deg":97.5},"status":"OPERATIONAL","country":"RU","mass_kg":495,"norad_id":2,"operator":"НСТАРТ","designator":"2026-001E","spectrum_bands":["S_BAND"],"satellite_type_code":"OPT_HIRES_VIS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T13:59:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"2bc048fc-7788-46fd-b368-37ee1b8b1a7a","businessKey":"2026-Reflexio1","data":{"name":"Reflexio 1","orbit":{"type":"SSO","inclination_deg":97.5},"status":"OPERATIONAL","country":"RU","mass_kg":495,"norad_id":30,"operator":"НСТАРТ","designator":"2026-001R","spectrum_bands":["S_BAND"],"satellite_type_code":"OPT_HIRES_VIS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T13:59:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"933bbfd1-774b-440e-aa83-256936129e0a","businessKey":"2016-016A","data":{"name":"Resurs-P No.3","orbit":{"type":"SSO","inclination_deg":97.28},"status":"STANDBY","country":"RU","mass_kg":5920,"mission":"RESURS_P","norad_id":41386,"operator":"Roscosmos / RSC Progress","designator":"2016-016A","launch_date":"2016-03-13","spectrum_bands":["VIS","NIR"],"satellite_type_code":"OPT_HIRES_VIS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:05:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"da0bed3a-5557-452d-a235-53ca26080bca","businessKey":"2024-046A","data":{"name":"Resurs-P No.4","orbit":{"type":"SSO","inclination_deg":97.28},"status":"STANDBY","country":"RU","mass_kg":5920,"mission":"RESURS_P","operator":"Roscosmos / RSC Progress","designator":"2024-046A","launch_date":"2024-03-31","spectrum_bands":["VIS","NIR"],"satellite_type_code":"OPT_HIRES_VIS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:05:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"5293be80-4107-4bed-a8f1-4aeb8d833e03","businessKey":"1999-068A","data":{"name":"Terra (EOS AM-1)","orbit":{"type":"SSO","eccentricity":1.0E-4,"inclination_deg":98.2,"semimajor_axis_km":7083},"status":"STANDBY","country":"US","mass_kg":4864,"mission":"TERRA_AQUA","norad_id":25994,"operator":"NASA","designator":"1999-068A","launch_date":"1999-12-18","spectrum_bands":["VIS","NIR","SWIR","TIR"],"satellite_type_code":"OPT_MIDRES_MS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:05:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"1435cdcc-0b81-4761-9b4e-a4e991160156","businessKey":"2021-016A","data":{"name":"Arktika-M No.1","orbit":{"type":"HEO"},"status":"STANDBY","country":"RU","mass_kg":2200,"mission":"ARKTIKA_M","operator":"Roshydromet / Lavochkin Association","designator":"2021-016A","launch_date":"2021-02-28","spectrum_bands":["VIS","NIR","MWIR","TIR"],"satellite_type_code":"OPT_MIDRES_MS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:05:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"906b8317-72c7-436e-a582-d4e8df774430","businessKey":"2015-074A","data":{"name":"Elektro-L No.2","orbit":{"type":"GEO"},"status":"STANDBY","country":"RU","mass_kg":1740,"mission":"ELEKTRO_L","operator":"Roshydromet / Lavochkin Association","designator":"2015-074A","launch_date":"2015-12-11","spectrum_bands":["VIS","NIR","MWIR","TIR"],"satellite_type_code":"OPT_MIDRES_MS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:06:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"2cf4b26e-f44c-43eb-9155-9e412df8d0ba","businessKey":"2019-038A","data":{"name":"Meteor-M No.2-2","orbit":{"type":"SSO","inclination_deg":98.83},"status":"STANDBY","country":"RU","mass_kg":2900,"mission":"METEOR_M","operator":"Roshydromet / VNIIEM","designator":"2019-038A","launch_date":"2019-07-05","satellite_type_code":"OPT_MIDRES_MS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:06:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"ea2e466c-3c8a-4e2d-8c0e-d0634e7cda53","businessKey":"2014-037A","data":{"name":"Meteor-M No.2","orbit":{"type":"SSO","inclination_deg":98.86},"status":"STANDBY","country":"RU","mass_kg":2900,"mission":"METEOR_M","operator":"Roshydromet / VNIIEM","designator":"2014-037A","launch_date":"2014-07-08","spectrum_bands":["VIS","NIR","SWIR","TIR"],"satellite_type_code":"OPT_MIDRES_MS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:06:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"99c1d6d2-0e0d-4cb5-a7a8-7e8f934e22c2","businessKey":"2017-076A","data":{"name":"Kanopus-V No.5 (Grand)","orbit":{"type":"SSO","inclination_deg":97.45},"status":"STANDBY","country":"RU","mass_kg":473,"mission":"KANOPUS_V","operator":"Roscosmos / VNIIEM","designator":"2017-076A","launch_date":"2017-12-01","satellite_type_code":"OPT_HIRES_VIS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:06:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"5381755f-2397-4863-b4f3-55301e73b27a","businessKey":"2012-039A","data":{"name":"Kanopus-V No.1","orbit":{"type":"SSO","inclination_deg":97.43},"status":"STANDBY","country":"RU","mass_kg":473,"mission":"KANOPUS_V","norad_id":38707,"operator":"Roscosmos / VNIIEM","designator":"2012-039A","launch_date":"2012-07-22","spectrum_bands":["VIS","NIR"],"satellite_type_code":"OPT_HIRES_VIS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:06:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"f0fc5aad-5b4a-49b0-9ee6-0ab79327a7e6","businessKey":"2024-149E","data":{"name":"Kondor-FKA No.2","orbit":{"type":"SSO","inclination_deg":97.5},"status":"OPERATIONAL","country":"RU","mass_kg":1050,"mission":"KONDOR_FKA","operator":"Roscosmos","designator":"2024-149E","launch_date":"2024-08-13","spectrum_bands":["S_BAND"],"satellite_type_code":"SAR_X_HIRES","norad_id":62138},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:06:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"b8c703b6-3882-49a4-a033-22df87b3fb3d","businessKey":"2024-149E-56756","data":{"name":"Kondor-FKA No.2","orbit":{"type":"SSO","inclination_deg":97.5},"status":"OPERATIONAL","country":"RU","mass_kg":1050,"mission":"KONDOR_FKA","operator":"Roscosmos","designator":"2024-149E-56756","launch_date":"2024-08-13","spectrum_bands":["S_BAND"],"satellite_type_code":"SAR_X_HIRES","norad_id":56756},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:06:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"54fbf999-b1c0-4868-a51c-eb7191f1e867","businessKey":"2014-016A","data":{"name":"Sentinel-1A","orbit":{"type":"SSO","eccentricity":1.0E-4,"inclination_deg":98.18,"semimajor_axis_km":7064},"status":"STANDBY","country":"FR","mass_kg":2300,"mission":"SENTINEL_1","norad_id":39634,"operator":"ESA / Copernicus","designator":"2014-016A","launch_date":"2014-04-03","spectrum_bands":["C_BAND"],"satellite_type_code":"SAR_X_HIRES"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:07:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}},{"id":"d5cf2788-cec5-43a1-9bda-ab3e8ec5c4aa","businessKey":"2015-028A","data":{"name":"Sentinel-2A","orbit":{"type":"SSO","inclination_deg":98.62,"semimajor_axis_km":7167},"status":"STANDBY","country":"FR","mass_kg":1140,"mission":"SENTINEL_2","norad_id":40697,"operator":"ESA / Copernicus","designator":"2015-028A","launch_date":"2015-06-23","spectrum_bands":["VIS","NIR","SWIR"],"satellite_type_code":"OPT_MIDRES_MS"},"dataScope":"PUBLIC","validFrom":"2026-05-21T15:07:00Z","validTo":"9999-12-31T23:59:59Z","_meta":{"locale":"en-US","defaultLocale":"ru-RU","asOf":"2026-05-25T14:37:45.200356844Z"}}] diff --git a/services/pcp-tgu-service/src/main/kotlin/space/nstart/pcp_tgu_service/config/CamundaJacksonConfig.kt b/services/pcp-tgu-service/src/main/kotlin/space/nstart/pcp_tgu_service/config/CamundaJacksonConfig.kt index 53bd21e..ecc1537 100644 --- a/services/pcp-tgu-service/src/main/kotlin/space/nstart/pcp_tgu_service/config/CamundaJacksonConfig.kt +++ b/services/pcp-tgu-service/src/main/kotlin/space/nstart/pcp_tgu_service/config/CamundaJacksonConfig.kt @@ -1,6 +1,7 @@ package space.nstart.pcp_tgu_service.config /** Настраивает Jackson-сериализацию для payload'ов клиента Camunda. */ +import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.SerializationFeature import com.fasterxml.jackson.databind.json.JsonMapper import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule @@ -13,15 +14,23 @@ import org.springframework.context.annotation.Configuration @Configuration class CamundaJacksonConfig { - /** Создаёт JSON mapper для Camunda с поддержкой Kotlin-классов и Java time типов. */ - @Bean("camundaJsonMapper") - fun camundaJsonMapper(): CamundaJsonMapper { - val objectMapper = JsonMapper.builder() + /** + * The service code still depends on Jackson 2 APIs, while the shared Boot 4 stack + * auto-configures Jackson 3 for WebFlux. Keep a dedicated Jackson 2 mapper for + * internal parsing and Camunda payloads until the module is migrated. + */ + @Bean + fun objectMapper(): ObjectMapper { + return JsonMapper.builder() .addModule(KotlinModule.Builder().build()) .addModule(JavaTimeModule()) .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) .build() + } + /** Создаёт JSON mapper для Camunda с поддержкой Kotlin-классов и Java time типов. */ + @Bean("camundaJsonMapper") + fun camundaJsonMapper(objectMapper: ObjectMapper): CamundaJsonMapper { return CamundaObjectMapper(objectMapper) } } diff --git a/services/pcp-tgu-service/src/main/kotlin/space/nstart/pcp_tgu_service/controller/TestTguController.kt b/services/pcp-tgu-service/src/main/kotlin/space/nstart/pcp_tgu_service/controller/TestTguController.kt index 981d761..03d105c 100644 --- a/services/pcp-tgu-service/src/main/kotlin/space/nstart/pcp_tgu_service/controller/TestTguController.kt +++ b/services/pcp-tgu-service/src/main/kotlin/space/nstart/pcp_tgu_service/controller/TestTguController.kt @@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RestController import reactor.core.publisher.Mono import reactor.core.scheduler.Schedulers +import space.nstart.pcp_tgu_service.domain.PlanDecision import space.nstart.pcp_tgu_service.dto.PlanDecisionMessage import space.nstart.pcp_tgu_service.dto.PlanResponse import space.nstart.pcp_tgu_service.dto.ProcessStartResponse @@ -19,8 +20,12 @@ import space.nstart.pcp_tgu_service.service.HandlePlanDecisionUseCase import space.nstart.pcp_tgu_service.service.IssueDuePlanWorker import space.nstart.pcp_tgu_service.service.PlanQueryService import space.nstart.pcp_tgu_service.service.PlanRecalculationJobService +import space.nstart.pcp_tgu_service.service.PlatformService import space.nstart.pcp_tgu_service.service.RebuildPlanScheduleUseCase +import space.nstart.pcp_tgu_service.service.TestPlanDecisionService import space.nstart.pcp_tgu_service.service.VisibilityRefreshJobService +import java.nio.file.Files +import java.nio.file.Path import java.time.LocalDateTime import java.util.UUID @@ -36,7 +41,9 @@ class TestTguController( private val rebuildPlanScheduleUseCase: RebuildPlanScheduleUseCase, private val issueDuePlanWorker: IssueDuePlanWorker, private val handlePlanDecisionUseCase: HandlePlanDecisionUseCase, + private val testPlanDecisionService: TestPlanDecisionService, private val externalPointsClient: ExternalPointsClient, + private val platformService: PlatformService, private val planQueryService: PlanQueryService ) { /** Ставит refresh job для КА. */ @@ -71,6 +78,30 @@ class TestTguController( handlePlanDecisionUseCase.handle(message) }.subscribeOn(Schedulers.boundedElastic()) + /** Генерирует ACCEPTED/REJECTED decision event для active attempt указанного persisted plan. */ + @PostMapping("/plans/{planId}/decision") + fun generatePlanDecision( + @PathVariable planId: UUID, + @RequestParam decision: PlanDecision, + @RequestParam(required = false) reason: String? + ): Mono = + Mono.fromCallable { + testPlanDecisionService.generateDecision(planId, decision, reason) + }.subscribeOn(Schedulers.boundedElastic()) + + /** Загружает cache аппаратов из файла с root-array payload НСИ вместо запроса в НСИ. */ + @PostMapping("/platforms/load-from-file") + fun loadPlatformsFromFile(@RequestParam("path") filePath: String): Mono = + Mono.fromCallable { + val path = Path.of(filePath).toAbsolutePath().normalize() + val platforms = platformService.loadPlatformsFromNsiPayload(Files.readString(path)) + TestPlatformsLoadResponse( + filePath = path.toString(), + loadedCount = platforms.size, + allowedCount = platformService.loadAllowedPlatforms().size + ) + }.subscribeOn(Schedulers.boundedElastic()) + /** Загружает raw payload окон видимости из баллистики для диагностики. */ @GetMapping("/external-points/{noradId}") fun getExternalPoints( @@ -93,3 +124,9 @@ class TestTguController( PlanResponse.from(planQueryService.getByPlanId(planId)) }.subscribeOn(Schedulers.boundedElastic()) } + +data class TestPlatformsLoadResponse( + val filePath: String, + val loadedCount: Int, + val allowedCount: Int +) diff --git a/services/pcp-tgu-service/src/main/kotlin/space/nstart/pcp_tgu_service/service/PlatformService.kt b/services/pcp-tgu-service/src/main/kotlin/space/nstart/pcp_tgu_service/service/PlatformService.kt index bfa8b5d..01f43b3 100644 --- a/services/pcp-tgu-service/src/main/kotlin/space/nstart/pcp_tgu_service/service/PlatformService.kt +++ b/services/pcp-tgu-service/src/main/kotlin/space/nstart/pcp_tgu_service/service/PlatformService.kt @@ -1,6 +1,7 @@ package space.nstart.pcp_tgu_service.service /** Загружает метаданные платформ КА и применяет простую in-memory фильтрацию. */ +import com.fasterxml.jackson.databind.ObjectMapper import space.nstart.pcp_tgu_service.config.ClassifierProperties import space.nstart.pcp_tgu_service.domain.PlatformCatalogItem import space.nstart.pcp_tgu_service.dto.NsiPlatformDto @@ -14,6 +15,7 @@ import java.time.Instant class PlatformService( private val platformsClassifierClient: PlatformsClassifierClient, private val classifierProperties: ClassifierProperties, + private val objectMapper: ObjectMapper, private val clock: Clock = Clock.systemUTC() ) { private val log = LoggerFactory.getLogger(javaClass) @@ -40,6 +42,13 @@ class PlatformService( now.isBefore(platform.validTo) } + /** Replaces the in-memory platform cache from a raw NSI response payload for test-only manual runs. */ + fun loadPlatformsFromNsiPayload(payloadJson: String): List = + synchronized(cacheLock) { + val platforms = objectMapper.readValue(payloadJson, Array::class.java).toList() + cachePlatforms(platforms, Instant.now(clock)) + } + private fun loadCachedPlatforms(): List { val now = Instant.now(clock) cachedPlatforms?.takeIf { cache -> cache.isActual(now) }?.let { cache -> return cache.platforms } @@ -54,7 +63,11 @@ class PlatformService( } private fun fetchAndCachePlatforms(now: Instant): List { - val platforms = platformsClassifierClient.fetchPlatforms() + return cachePlatforms(platformsClassifierClient.fetchPlatforms(), now) + } + + private fun cachePlatforms(platformDtos: List, now: Instant): List { + val platforms = platformDtos .mapNotNull { platform -> platform.toCatalogItem() } cachedPlatforms = PlatformsCache( diff --git a/services/pcp-tgu-service/src/main/kotlin/space/nstart/pcp_tgu_service/service/TestPlanDecisionService.kt b/services/pcp-tgu-service/src/main/kotlin/space/nstart/pcp_tgu_service/service/TestPlanDecisionService.kt new file mode 100644 index 0000000..fdd8b56 --- /dev/null +++ b/services/pcp-tgu-service/src/main/kotlin/space/nstart/pcp_tgu_service/service/TestPlanDecisionService.kt @@ -0,0 +1,80 @@ +package space.nstart.pcp_tgu_service.service + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty +import org.springframework.http.HttpStatus +import org.springframework.stereotype.Service +import org.springframework.web.server.ResponseStatusException +import space.nstart.pcp_tgu_service.domain.PlanDecision +import space.nstart.pcp_tgu_service.dto.PlanDecisionMessage +import space.nstart.pcp_tgu_service.entity.PlanIssueAttemptStatus +import space.nstart.pcp_tgu_service.repository.PlanIssueAttemptRepository +import space.nstart.pcp_tgu_service.repository.PlannedPlanRepository +import space.nstart.pcp_tgu_service.repository.SpacecraftPlanningStateJpaRepository +import java.time.LocalDateTime +import java.util.UUID + +/** + * Test-only helper: генерирует decision event для текущей active attempt persisted plan. + */ +@ConditionalOnProperty(prefix = "tgu.test-controller", name = ["enabled"], havingValue = "true") +@Service +class TestPlanDecisionService( + private val plannedPlanRepository: PlannedPlanRepository, + private val planIssueAttemptRepository: PlanIssueAttemptRepository, + private val spacecraftPlanningStateJpaRepository: SpacecraftPlanningStateJpaRepository, + private val handlePlanDecisionUseCase: HandlePlanDecisionUseCase +) { + /** + * Создаёт synthetic decision event и проводит его через тот же use case, что Kafka consumer. + */ + fun generateDecision(planId: UUID, decision: PlanDecision, reason: String?): PlanDecisionMessage { + val plan = plannedPlanRepository.findById(planId).orElse(null) + ?: throw ResponseStatusException(HttpStatus.NOT_FOUND, "Plan with planId=$planId was not found") + val state = spacecraftPlanningStateJpaRepository.findById(plan.spacecraftId).orElse(null) + ?: throw ResponseStatusException( + HttpStatus.CONFLICT, + "Planning state for spacecraftId=${plan.spacecraftId} was not found" + ) + if (state.activePlanId != planId || state.activeAttemptId == null) { + throw ResponseStatusException( + HttpStatus.CONFLICT, + "Plan $planId is not the active plan waiting for decision" + ) + } + + val attempt = planIssueAttemptRepository.findById(state.activeAttemptId!!).orElse(null) + ?: throw ResponseStatusException( + HttpStatus.CONFLICT, + "Active attempt ${state.activeAttemptId} for plan $planId was not found" + ) + if (attempt.planId != planId) { + throw ResponseStatusException( + HttpStatus.CONFLICT, + "Active attempt ${attempt.attemptId} does not belong to plan $planId" + ) + } + if (attempt.status !in ACTIVE_ATTEMPT_STATUSES) { + throw ResponseStatusException( + HttpStatus.CONFLICT, + "Attempt ${attempt.attemptId} is already terminal with status=${attempt.status}" + ) + } + + val message = PlanDecisionMessage( + eventId = UUID.randomUUID(), + spacecraftId = plan.spacecraftId, + planId = plan.planId, + attemptId = attempt.attemptId, + decision = decision, + decisionTime = LocalDateTime.now(), + reason = reason?.takeIf { it.isNotBlank() } ?: DEFAULT_REASON + ) + handlePlanDecisionUseCase.handle(message) + return message + } + + private companion object { + val ACTIVE_ATTEMPT_STATUSES = setOf(PlanIssueAttemptStatus.STARTING, PlanIssueAttemptStatus.STARTED) + const val DEFAULT_REASON = "TEST_CONTROLLER" + } +} diff --git a/services/pcp-tgu-service/src/main/resources/application.yml b/services/pcp-tgu-service/src/main/resources/application.yml index 903007d..b09fe15 100644 --- a/services/pcp-tgu-service/src/main/resources/application.yml +++ b/services/pcp-tgu-service/src/main/resources/application.yml @@ -7,7 +7,7 @@ spring: import: "configserver:" cloud: config: - uri: ${CONFIG_SERVER_URI:http://localhost:8888} + uri: ${CONFIG_SERVER_URI:http://192.168.60.201:8888} fail-fast: ${CONFIG_SERVER_FAIL_FAST:true} profile: ${SPRING_CLOUD_CONFIG_PROFILE:${SPRING_PROFILES_ACTIVE:${spring.profiles.default}}} label: ${SPRING_CLOUD_CONFIG_LABEL:master} diff --git a/services/pcp-tgu-service/src/test/kotlin/space/nstart/pcp_tgu_service/integration/api/ExternalPointsClientTest.kt b/services/pcp-tgu-service/src/test/kotlin/space/nstart/pcp_tgu_service/integration/api/ExternalPointsClientTest.kt index 90b7c7d..9b8b95c 100644 --- a/services/pcp-tgu-service/src/test/kotlin/space/nstart/pcp_tgu_service/integration/api/ExternalPointsClientTest.kt +++ b/services/pcp-tgu-service/src/test/kotlin/space/nstart/pcp_tgu_service/integration/api/ExternalPointsClientTest.kt @@ -1,5 +1,6 @@ package space.nstart.pcp_tgu_service.integration.api +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.sun.net.httpserver.HttpServer import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test @@ -57,7 +58,8 @@ class ExternalPointsClientTest { platformsUrl = "http://localhost", platformsCacheTtl = java.time.Duration.ofMinutes(15), allowedPlatformStatuses = setOf("OPERATIONAL", "STANDBY") - ) + ), + jacksonObjectMapper().findAndRegisterModules() ) { override fun loadPlatforms(status: String?): List = error("ExternalPointsClient must use loadAllowedPlatforms") diff --git a/services/pcp-tgu-service/src/test/kotlin/space/nstart/pcp_tgu_service/service/PlatformServiceTest.kt b/services/pcp-tgu-service/src/test/kotlin/space/nstart/pcp_tgu_service/service/PlatformServiceTest.kt index 4fbaece..9c5f16d 100644 --- a/services/pcp-tgu-service/src/test/kotlin/space/nstart/pcp_tgu_service/service/PlatformServiceTest.kt +++ b/services/pcp-tgu-service/src/test/kotlin/space/nstart/pcp_tgu_service/service/PlatformServiceTest.kt @@ -1,5 +1,6 @@ package space.nstart.pcp_tgu_service.service +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test import org.mockito.Mockito.mock @@ -121,6 +122,41 @@ class PlatformServiceTest { verify(client, times(1)).fetchPlatforms() } + @Test + fun `loadPlatformsFromNsiPayload replaces cached platforms from file payload`() { + val client = mock(PlatformsClassifierClient::class.java) + `when`(client.fetchPlatforms()).thenReturn( + listOf(platformDto(id = "from-nsi-id", status = "OPERATIONAL", noradId = 1L)) + ) + val service = service(client) + + val fromNsi = service.loadPlatforms() + val fromFile = service.loadPlatformsFromNsiPayload( + """ + [ + { + "id": "from-file-id", + "businessKey": "business-from-file-id", + "data": { + "name": "Satellite from-file-id", + "status": "OPERATIONAL", + "norad_id": 25544, + "mission": "MISSION" + }, + "validFrom": "2026-01-01T00:00:00Z", + "validTo": "2026-12-31T00:00:00Z" + } + ] + """.trimIndent() + ) + val cachedAfterFileLoad = service.loadPlatforms() + + assertEquals(listOf("from-nsi-id"), fromNsi.map { it.nsiId }) + assertEquals(listOf("from-file-id"), fromFile.map { it.nsiId }) + assertEquals(listOf("from-file-id"), cachedAfterFileLoad.map { it.nsiId }) + verify(client, times(1)).fetchPlatforms() + } + private fun service( client: PlatformsClassifierClient, clock: Clock = Clock.fixed(Instant.parse("2026-05-26T12:00:00Z"), ZoneOffset.UTC) @@ -132,6 +168,7 @@ class PlatformServiceTest { platformsCacheTtl = Duration.ofMinutes(15), allowedPlatformStatuses = setOf("OPERATIONAL") ), + objectMapper = jacksonObjectMapper().findAndRegisterModules(), clock = clock ) diff --git a/services/pcp-tgu-service/src/test/kotlin/space/nstart/pcp_tgu_service/service/TestPlanDecisionServiceTest.kt b/services/pcp-tgu-service/src/test/kotlin/space/nstart/pcp_tgu_service/service/TestPlanDecisionServiceTest.kt new file mode 100644 index 0000000..79ae4a6 --- /dev/null +++ b/services/pcp-tgu-service/src/test/kotlin/space/nstart/pcp_tgu_service/service/TestPlanDecisionServiceTest.kt @@ -0,0 +1,107 @@ +package space.nstart.pcp_tgu_service.service + +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertNotNull +import org.junit.jupiter.api.Assertions.assertThrows +import org.junit.jupiter.api.Test +import org.mockito.Mockito.mock +import org.mockito.Mockito.verify +import org.mockito.Mockito.verifyNoInteractions +import org.mockito.Mockito.`when` +import org.springframework.http.HttpStatus +import org.springframework.web.server.ResponseStatusException +import space.nstart.pcp_tgu_service.domain.PlanDecision +import space.nstart.pcp_tgu_service.dto.PlanDecisionMessage +import space.nstart.pcp_tgu_service.entity.PlanIssueAttemptEntity +import space.nstart.pcp_tgu_service.entity.PlanIssueAttemptStatus +import space.nstart.pcp_tgu_service.entity.PlannedPlanEntity +import space.nstart.pcp_tgu_service.entity.PlannedPlanStatus +import space.nstart.pcp_tgu_service.entity.SpacecraftPlanningStateEntity +import space.nstart.pcp_tgu_service.repository.PlanIssueAttemptRepository +import space.nstart.pcp_tgu_service.repository.PlannedPlanRepository +import space.nstart.pcp_tgu_service.repository.SpacecraftPlanningStateJpaRepository +import java.time.LocalDateTime +import java.util.Optional +import java.util.UUID + +class TestPlanDecisionServiceTest { + + @Test + fun `generate decision builds message for active attempt and delegates to use case`() { + val plan = plannedPlan() + val attempt = attempt(plan.planId, PlanIssueAttemptStatus.STARTED) + val state = SpacecraftPlanningStateEntity( + spacecraftId = plan.spacecraftId, + activePlanId = plan.planId, + activeAttemptId = attempt.attemptId + ) + val handlePlanDecisionUseCase = mock(HandlePlanDecisionUseCase::class.java) + val service = service(plan, attempt, state, handlePlanDecisionUseCase) + + val message = service.generateDecision(plan.planId, PlanDecision.ACCEPTED, "manual accept") + + assertNotNull(message.eventId) + assertEquals(plan.spacecraftId, message.spacecraftId) + assertEquals(plan.planId, message.planId) + assertEquals(attempt.attemptId, message.attemptId) + assertEquals(PlanDecision.ACCEPTED, message.decision) + assertEquals("manual accept", message.reason) + verify(handlePlanDecisionUseCase).handle(message) + } + + @Test + fun `generate decision rejects plan without active attempt`() { + val plan = plannedPlan() + val attempt = attempt(plan.planId, PlanIssueAttemptStatus.STARTED) + val state = SpacecraftPlanningStateEntity(spacecraftId = plan.spacecraftId) + val handlePlanDecisionUseCase = mock(HandlePlanDecisionUseCase::class.java) + val service = service(plan, attempt, state, handlePlanDecisionUseCase) + + val exception = assertThrows(ResponseStatusException::class.java) { + service.generateDecision(plan.planId, PlanDecision.REJECTED, null) + } + + assertEquals(HttpStatus.CONFLICT, exception.statusCode) + verifyNoInteractions(handlePlanDecisionUseCase) + } + + private fun service( + plan: PlannedPlanEntity, + attempt: PlanIssueAttemptEntity, + state: SpacecraftPlanningStateEntity, + handlePlanDecisionUseCase: HandlePlanDecisionUseCase + ): TestPlanDecisionService { + val plannedPlanRepository = mock(PlannedPlanRepository::class.java) + val planIssueAttemptRepository = mock(PlanIssueAttemptRepository::class.java) + val stateRepository = mock(SpacecraftPlanningStateJpaRepository::class.java) + + `when`(plannedPlanRepository.findById(plan.planId)).thenReturn(Optional.of(plan)) + `when`(planIssueAttemptRepository.findById(attempt.attemptId)).thenReturn(Optional.of(attempt)) + `when`(stateRepository.findById(plan.spacecraftId)).thenReturn(Optional.of(state)) + + return TestPlanDecisionService( + plannedPlanRepository = plannedPlanRepository, + planIssueAttemptRepository = planIssueAttemptRepository, + spacecraftPlanningStateJpaRepository = stateRepository, + handlePlanDecisionUseCase = handlePlanDecisionUseCase + ) + } + + private fun plannedPlan(): PlannedPlanEntity = + PlannedPlanEntity( + planId = UUID.randomUUID(), + spacecraftId = "25544", + startTime = LocalDateTime.now().plusHours(1), + endTime = LocalDateTime.now().plusHours(2), + kppId = "KPP-1", + status = PlannedPlanStatus.WAITING_DECISION + ) + + private fun attempt(planId: UUID, status: PlanIssueAttemptStatus): PlanIssueAttemptEntity = + PlanIssueAttemptEntity( + attemptId = UUID.randomUUID(), + planId = planId, + attemptNo = 1, + status = status + ) +} diff --git a/services/pcp-ui-service/src/main/kotlin/space/nstart/pcp/slots_service/configuration/CorsFilterComponent.kt b/services/pcp-ui-service/src/main/kotlin/space/nstart/pcp/slots_service/configuration/CorsFilterComponent.kt index 49da575..76a3560 100644 --- a/services/pcp-ui-service/src/main/kotlin/space/nstart/pcp/slots_service/configuration/CorsFilterComponent.kt +++ b/services/pcp-ui-service/src/main/kotlin/space/nstart/pcp/slots_service/configuration/CorsFilterComponent.kt @@ -48,8 +48,8 @@ class WebConfig : WebMvcConfigurer { .allowedOrigins( "http://localhost:3000", "http://localhost:8080", - "http://192.168.60.68:7008", - "http://192.168.60.68:8080" + "http://192.168.1.8:7008", + "http://192.168.1.8:8080" ) .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH") .allowedHeaders("*") @@ -66,7 +66,7 @@ class WebConfig : WebMvcConfigurer { // Разрешенные origin'ы allowedOriginPatterns = listOf( "http://localhost:*", - "http://192.168.60.68:*" + "http://192.168.1.8:*" ) // Разрешенные заголовки allowedHeaders = listOf( diff --git a/services/pcp-ui-service/src/main/resources/application.yaml b/services/pcp-ui-service/src/main/resources/application.yaml index 78562ba..f4d3e2c 100644 --- a/services/pcp-ui-service/src/main/resources/application.yaml +++ b/services/pcp-ui-service/src/main/resources/application.yaml @@ -7,7 +7,7 @@ spring: import: "configserver:" cloud: config: - uri: ${CONFIG_SERVER_URI:http://localhost:8888} + uri: ${CONFIG_SERVER_URI:http://192.168.60.201:8888} fail-fast: ${CONFIG_SERVER_FAIL_FAST:true} profile: ${SPRING_CLOUD_CONFIG_PROFILE:${SPRING_PROFILES_ACTIVE:${spring.profiles.default}}} label: ${SPRING_CLOUD_CONFIG_LABEL:dev} diff --git a/services/slots-service/src/main/resources/application.yaml b/services/slots-service/src/main/resources/application.yaml index c40df22..1195f0d 100644 --- a/services/slots-service/src/main/resources/application.yaml +++ b/services/slots-service/src/main/resources/application.yaml @@ -7,7 +7,7 @@ spring: import: "configserver:" cloud: config: - uri: ${CONFIG_SERVER_URI:http://localhost:8888} + uri: ${CONFIG_SERVER_URI:http://192.168.60.201:8888} fail-fast: ${CONFIG_SERVER_FAIL_FAST:true} profile: ${SPRING_CLOUD_CONFIG_PROFILE:${SPRING_PROFILES_ACTIVE:${spring.profiles.default}}} label: ${SPRING_CLOUD_CONFIG_LABEL:dev} diff --git a/services/slots-service/src/test/resources/application.yaml b/services/slots-service/src/test/resources/application.yaml index 9e63c51..3663c5d 100644 --- a/services/slots-service/src/test/resources/application.yaml +++ b/services/slots-service/src/test/resources/application.yaml @@ -9,7 +9,7 @@ spring: default-property-inclusion: non_null datasource: driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://192.168.100.160:35400/pcp_slots + url: jdbc:postgresql://192.168.1.8:35400/pcp_slots username: postgres password: password hikari: @@ -59,7 +59,7 @@ management: enabled: true settings: - earth-grid-service: http://192.168.60.68:7005 + earth-grid-service: http://192.168.1.8:7005 server: port: 7006 diff --git a/services/tle-monitoring-service/src/main/resources/application.yaml b/services/tle-monitoring-service/src/main/resources/application.yaml index 8a2dbbc..d73e9a2 100644 --- a/services/tle-monitoring-service/src/main/resources/application.yaml +++ b/services/tle-monitoring-service/src/main/resources/application.yaml @@ -7,7 +7,7 @@ spring: import: "configserver:" cloud: config: - uri: ${CONFIG_SERVER_URI:http://localhost:8888} + uri: ${CONFIG_SERVER_URI:http://192.168.60.201:8888} fail-fast: ${CONFIG_SERVER_FAIL_FAST:true} profile: ${SPRING_CLOUD_CONFIG_PROFILE:${SPRING_PROFILES_ACTIVE:${spring.profiles.default}}} label: ${SPRING_CLOUD_CONFIG_LABEL:dev} diff --git a/services/tle-monitoring-service/src/test/resources/application.yaml b/services/tle-monitoring-service/src/test/resources/application.yaml index 0ad1c2e..84d1ae2 100644 --- a/services/tle-monitoring-service/src/test/resources/application.yaml +++ b/services/tle-monitoring-service/src/test/resources/application.yaml @@ -5,7 +5,7 @@ spring: config: enabled: false kafka: - bootstrap-servers: 192.168.60.68:29092 + bootstrap-servers: 192.168.1.8:29092 consumer: group-id: pcp auto-offset-reset: earliest @@ -13,7 +13,7 @@ spring: default-topic: pcp.tle datasource: driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://192.168.60.68:5432/pcp_tle + url: jdbc:postgresql://192.168.1.8:5432/pcp_tle username: postgres password: password jpa: @@ -62,7 +62,7 @@ management: enabled: true settings: - complex-mission-service: http://192.168.60.68:7002 + complex-mission-service: http://192.168.1.8:7002 tle: polling: