Docker Fixes

This commit is contained in:
Tim Zöller 2025-11-29 12:28:58 +01:00
parent ac53f04e0a
commit 8f797a51f1
5 changed files with 69 additions and 6 deletions

View file

@ -44,7 +44,7 @@ services:
SPRING_JPA_HIBERNATE_DDL_AUTO: validate
SPRING_JPA_SHOW_SQL: ${JPA_SHOW_SQL:-false}
SPRING_JPA_PROPERTIES_HIBERNATE_FORMAT_SQL: ${JPA_FORMAT_SQL:-false}
SPRING_JPA_PROPERTIES_HIBERNATE_DIALECT: org.hibernate.spatial.dialect.postgis.PostgisDialect
SPRING_JPA_PROPERTIES_HIBERNATE_DIALECT: org.hibernate.dialect.PostgreSQLDialect
# Flyway Configuration
SPRING_FLYWAY_ENABLED: true
@ -55,8 +55,8 @@ services:
SERVER_PORT: ${APP_PORT:-8080}
# Application Configuration
APP_DOMAIN: ${APP_DOMAIN}
APP_BASE_URL: ${APP_BASE_URL}
FITPUB_DOMAIN: ${APP_DOMAIN}
FITPUB_BASE_URL: ${APP_BASE_URL}
# Security Configuration
JWT_SECRET: ${JWT_SECRET}

22
pom.xml
View file

@ -78,6 +78,7 @@
</dependency>
<!-- Testcontainers for Dev Services -->
<!-- These are excluded from production builds via Maven profile -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-testcontainers</artifactId>
@ -173,6 +174,27 @@
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
<!-- Exclude Testcontainers from production JAR -->
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-testcontainers</artifactId>
</exclude>
<exclude>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers</artifactId>
</exclude>
<exclude>
<groupId>org.testcontainers</groupId>
<artifactId>postgresql</artifactId>
</exclude>
<exclude>
<groupId>org.testcontainers</groupId>
<artifactId>jdbc</artifactId>
</exclude>
<exclude>
<groupId>org.testcontainers</groupId>
<artifactId>database-commons</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>

View file

@ -1,5 +1,6 @@
package org.operaton.fitpub.config;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -13,10 +14,11 @@ import org.testcontainers.utility.DockerImageName;
*
* This ensures development environment matches production (PostgreSQL + PostGIS).
*
* Only active when NOT running in production profile.
* Only active when NOT running in production profile AND Testcontainers is on the classpath.
*/
@Configuration(proxyBeanMethods = false)
@Profile("!prod")
@ConditionalOnClass(PostgreSQLContainer.class)
public class TestcontainersConfiguration {
/**

View file

@ -262,7 +262,35 @@ public class ActivityController {
// Build GeoJSON FeatureCollection
ActivityDTO dto = ActivityDTO.fromEntity(activity);
if (dto.getSimplifiedTrack() == null) {
// Use high-resolution track points if available, otherwise fall back to simplified track
java.util.List<java.util.List<Double>> coordinates = new java.util.ArrayList<>();
if (dto.getTrackPoints() != null && !dto.getTrackPoints().isEmpty()) {
// Use high-resolution track points
for (java.util.Map<String, Object> point : dto.getTrackPoints()) {
Double longitude = (Double) point.get("longitude");
Double latitude = (Double) point.get("latitude");
Double elevation = (Double) point.get("elevation");
if (longitude != null && latitude != null) {
if (elevation != null) {
coordinates.add(java.util.List.of(longitude, latitude, elevation));
} else {
coordinates.add(java.util.List.of(longitude, latitude));
}
}
}
} else if (dto.getSimplifiedTrack() != null) {
// Fall back to simplified track if high-res not available
@SuppressWarnings("unchecked")
java.util.List<java.util.List<Double>> simplifiedCoords =
(java.util.List<java.util.List<Double>>) dto.getSimplifiedTrack().get("coordinates");
if (simplifiedCoords != null) {
coordinates = simplifiedCoords;
}
}
if (coordinates.isEmpty()) {
// Return empty FeatureCollection if no track data
return ResponseEntity.ok(java.util.Map.of(
"type", "FeatureCollection",
@ -270,10 +298,15 @@ public class ActivityController {
));
}
// Create GeoJSON geometry
java.util.Map<String, Object> geometry = new java.util.LinkedHashMap<>();
geometry.put("type", "LineString");
geometry.put("coordinates", coordinates);
// Create GeoJSON Feature with the track
java.util.Map<String, Object> feature = new java.util.LinkedHashMap<>();
feature.put("type", "Feature");
feature.put("geometry", dto.getSimplifiedTrack());
feature.put("geometry", geometry);
// Add properties
java.util.Map<String, Object> properties = new java.util.LinkedHashMap<>();

View file

@ -2,6 +2,12 @@
# Activated with: java -jar fitpub.jar --spring.profiles.active=prod
spring:
# Disable Testcontainers auto-configuration in production
autoconfigure:
exclude:
- org.springframework.boot.testcontainers.service.connection.ContainerConnectionDetailsAutoConfiguration
- org.springframework.boot.testcontainers.lifecycle.TestcontainersLifecycleBeanPostProcessor
# Production datasource - must be configured via environment variables
datasource:
url: ${SPRING_DATASOURCE_URL}