From f4bbc1f65f572f3a3c727409df5b4997750ed82a Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Sun, 12 Apr 2026 13:01:24 +0200 Subject: [PATCH] feat: add detected_runtime_type and detected_main_class to app_versions Flyway V10 migration adds the two nullable columns. AppVersion record, AppVersionRepository interface, and PostgresAppVersionRepository are updated to carry and persist detected runtime information. Co-Authored-By: Claude Sonnet 4.6 --- .../app/storage/PostgresAppVersionRepository.java | 12 ++++++++++-- .../migration/V10__app_version_runtime_detection.sql | 2 ++ .../cameleer3/server/core/runtime/AppVersion.java | 3 ++- .../server/core/runtime/AppVersionRepository.java | 1 + 4 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 cameleer3-server-app/src/main/resources/db/migration/V10__app_version_runtime_detection.sql diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAppVersionRepository.java b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAppVersionRepository.java index 3e947f70..9db54f2f 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAppVersionRepository.java +++ b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAppVersionRepository.java @@ -21,14 +21,14 @@ public class PostgresAppVersionRepository implements AppVersionRepository { @Override public List findByAppId(UUID appId) { return jdbc.query( - "SELECT id, app_id, version, jar_path, jar_checksum, jar_filename, jar_size_bytes, uploaded_at FROM app_versions WHERE app_id = ? ORDER BY version DESC", + "SELECT id, app_id, version, jar_path, jar_checksum, jar_filename, jar_size_bytes, detected_runtime_type, detected_main_class, uploaded_at FROM app_versions WHERE app_id = ? ORDER BY version DESC", (rs, rowNum) -> mapRow(rs), appId); } @Override public Optional findById(UUID id) { var results = jdbc.query( - "SELECT id, app_id, version, jar_path, jar_checksum, jar_filename, jar_size_bytes, uploaded_at FROM app_versions WHERE id = ?", + "SELECT id, app_id, version, jar_path, jar_checksum, jar_filename, jar_size_bytes, detected_runtime_type, detected_main_class, uploaded_at FROM app_versions WHERE id = ?", (rs, rowNum) -> mapRow(rs), id); return results.isEmpty() ? Optional.empty() : Optional.of(results.get(0)); } @@ -54,6 +54,12 @@ public class PostgresAppVersionRepository implements AppVersionRepository { jdbc.update("DELETE FROM app_versions WHERE id = ?", id); } + @Override + public void updateDetectedRuntime(UUID id, String detectedRuntimeType, String detectedMainClass) { + jdbc.update("UPDATE app_versions SET detected_runtime_type = ?, detected_main_class = ? WHERE id = ?", + detectedRuntimeType, detectedMainClass, id); + } + private AppVersion mapRow(ResultSet rs) throws SQLException { Long sizeBytes = rs.getLong("jar_size_bytes"); if (rs.wasNull()) sizeBytes = null; @@ -65,6 +71,8 @@ public class PostgresAppVersionRepository implements AppVersionRepository { rs.getString("jar_checksum"), rs.getString("jar_filename"), sizeBytes, + rs.getString("detected_runtime_type"), + rs.getString("detected_main_class"), rs.getTimestamp("uploaded_at").toInstant() ); } diff --git a/cameleer3-server-app/src/main/resources/db/migration/V10__app_version_runtime_detection.sql b/cameleer3-server-app/src/main/resources/db/migration/V10__app_version_runtime_detection.sql new file mode 100644 index 00000000..6ad5b3c0 --- /dev/null +++ b/cameleer3-server-app/src/main/resources/db/migration/V10__app_version_runtime_detection.sql @@ -0,0 +1,2 @@ +ALTER TABLE app_versions ADD COLUMN detected_runtime_type VARCHAR; +ALTER TABLE app_versions ADD COLUMN detected_main_class VARCHAR; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersion.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersion.java index 93c516f2..4e5fef2d 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersion.java +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersion.java @@ -4,4 +4,5 @@ import java.time.Instant; import java.util.UUID; public record AppVersion(UUID id, UUID appId, int version, String jarPath, String jarChecksum, - String jarFilename, Long jarSizeBytes, Instant uploadedAt) {} + String jarFilename, Long jarSizeBytes, String detectedRuntimeType, + String detectedMainClass, Instant uploadedAt) {} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersionRepository.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersionRepository.java index acb98ca4..c3344955 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersionRepository.java +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersionRepository.java @@ -10,4 +10,5 @@ public interface AppVersionRepository { int findMaxVersion(UUID appId); UUID create(UUID appId, int version, String jarPath, String jarChecksum, String jarFilename, Long jarSizeBytes); void delete(UUID id); + void updateDetectedRuntime(UUID id, String detectedRuntimeType, String detectedMainClass); }