From 17f45645ffca63ee441541e71f861389338fd19a Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Tue, 7 Apr 2026 23:41:05 +0200 Subject: [PATCH] feat: add runtime repository interfaces and RuntimeOrchestrator - EnvironmentRepository, AppRepository, AppVersionRepository, DeploymentRepository - RuntimeOrchestrator interface with ContainerRequest and ContainerStatus Co-Authored-By: Claude Opus 4.6 (1M context) --- .../server/core/runtime/AppRepository.java | 13 +++++++++++++ .../core/runtime/AppVersionRepository.java | 12 ++++++++++++ .../server/core/runtime/ContainerRequest.java | 15 +++++++++++++++ .../server/core/runtime/ContainerStatus.java | 7 +++++++ .../core/runtime/DeploymentRepository.java | 16 ++++++++++++++++ .../core/runtime/EnvironmentRepository.java | 15 +++++++++++++++ .../server/core/runtime/RuntimeOrchestrator.java | 12 ++++++++++++ 7 files changed, 90 insertions(+) create mode 100644 cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppRepository.java create mode 100644 cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersionRepository.java create mode 100644 cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerRequest.java create mode 100644 cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerStatus.java create mode 100644 cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentRepository.java create mode 100644 cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/EnvironmentRepository.java create mode 100644 cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeOrchestrator.java diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppRepository.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppRepository.java new file mode 100644 index 00000000..6e602dda --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppRepository.java @@ -0,0 +1,13 @@ +package com.cameleer3.server.core.runtime; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +public interface AppRepository { + List findByEnvironmentId(UUID environmentId); + Optional findById(UUID id); + Optional findByEnvironmentIdAndSlug(UUID environmentId, String slug); + UUID create(UUID environmentId, String slug, String displayName); + void delete(UUID id); +} 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 new file mode 100644 index 00000000..290f7a33 --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersionRepository.java @@ -0,0 +1,12 @@ +package com.cameleer3.server.core.runtime; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +public interface AppVersionRepository { + List findByAppId(UUID appId); + Optional findById(UUID id); + int findMaxVersion(UUID appId); + UUID create(UUID appId, int version, String jarPath, String jarChecksum, String jarFilename, Long jarSizeBytes); +} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerRequest.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerRequest.java new file mode 100644 index 00000000..4e8a6c0e --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerRequest.java @@ -0,0 +1,15 @@ +package com.cameleer3.server.core.runtime; + +import java.util.Map; + +public record ContainerRequest( + String containerName, + String baseImage, + String jarPath, + String network, + Map envVars, + Map labels, + long memoryLimitBytes, + int cpuShares, + int healthCheckPort +) {} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerStatus.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerStatus.java new file mode 100644 index 00000000..eb7e7bec --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerStatus.java @@ -0,0 +1,7 @@ +package com.cameleer3.server.core.runtime; + +public record ContainerStatus(String state, boolean running, int exitCode, String error) { + public static ContainerStatus notFound() { + return new ContainerStatus("not_found", false, -1, "Container not found"); + } +} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentRepository.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentRepository.java new file mode 100644 index 00000000..af98584a --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentRepository.java @@ -0,0 +1,16 @@ +package com.cameleer3.server.core.runtime; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +public interface DeploymentRepository { + List findByAppId(UUID appId); + List findByEnvironmentId(UUID environmentId); + Optional findById(UUID id); + Optional findActiveByAppIdAndEnvironmentId(UUID appId, UUID environmentId); + UUID create(UUID appId, UUID appVersionId, UUID environmentId, String containerName); + void updateStatus(UUID id, DeploymentStatus status, String containerId, String errorMessage); + void markDeployed(UUID id); + void markStopped(UUID id); +} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/EnvironmentRepository.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/EnvironmentRepository.java new file mode 100644 index 00000000..07665b84 --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/EnvironmentRepository.java @@ -0,0 +1,15 @@ +package com.cameleer3.server.core.runtime; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +public interface EnvironmentRepository { + List findAll(); + Optional findById(UUID id); + Optional findBySlug(String slug); + UUID create(String slug, String displayName); + void updateDisplayName(UUID id, String displayName); + void updateStatus(UUID id, EnvironmentStatus status); + void delete(UUID id); +} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeOrchestrator.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeOrchestrator.java new file mode 100644 index 00000000..e9dc67c2 --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeOrchestrator.java @@ -0,0 +1,12 @@ +package com.cameleer3.server.core.runtime; + +import java.util.stream.Stream; + +public interface RuntimeOrchestrator { + boolean isEnabled(); + String startContainer(ContainerRequest request); + void stopContainer(String containerId); + void removeContainer(String containerId); + ContainerStatus getContainerStatus(String containerId); + Stream getLogs(String containerId, int tailLines); +}