diff --git a/controller-runtime/src/main/kotlin/app/simplecloud/controller/runtime/server/ServerService.kt b/controller-runtime/src/main/kotlin/app/simplecloud/controller/runtime/server/ServerService.kt index 8b8e81b..a69a2cd 100644 --- a/controller-runtime/src/main/kotlin/app/simplecloud/controller/runtime/server/ServerService.kt +++ b/controller-runtime/src/main/kotlin/app/simplecloud/controller/runtime/server/ServerService.kt @@ -331,6 +331,14 @@ class ServerService( override suspend fun stopServer(request: StopServerRequest): ServerDefinition { val server = serverRepository.find(request.serverId) ?: throw StatusException(Status.NOT_FOUND.withDescription("No server was found matching this id.")) + + request.since?.let { sinceTimestamp -> + val sinceLocalDateTime = ProtobufTimestamp.toLocalDateTime(sinceTimestamp) + if (server.createdAt.isBefore(sinceLocalDateTime)) { + return server.toDefinition() + } + } + try { val stopped = stopServer(server.toDefinition(), request.stopCause) return stopped @@ -340,21 +348,30 @@ class ServerService( } override suspend fun stopServersByGroupWithTimeout(request: StopServersByGroupWithTimeoutRequest): StopServersByGroupResponse { - return stopServersByGroup(request.groupName, request.timeoutSeconds, request.stopCause) + val sinceLocalDateTime = request.since?.let { + ProtobufTimestamp.toLocalDateTime(it) + } + return stopServersByGroup(request.groupName, request.timeoutSeconds, request.stopCause, sinceLocalDateTime) } override suspend fun stopServersByGroup(request: StopServersByGroupRequest): StopServersByGroupResponse { - return stopServersByGroup(request.groupName, null, request.stopCause) + val sinceLocalDateTime = request.since?.let { + ProtobufTimestamp.toLocalDateTime(it) + } + return stopServersByGroup(request.groupName, null, request.stopCause, sinceLocalDateTime) } private suspend fun stopServersByGroup( groupName: String, timeout: Int?, - cause: ServerStopCause = ServerStopCause.NATURAL_STOP + cause: ServerStopCause = ServerStopCause.NATURAL_STOP, + since: LocalDateTime? = null ): StopServersByGroupResponse { val group = groupRepository.find(groupName) ?: throw StatusException(Status.NOT_FOUND.withDescription("No group was found matching this name. $groupName")) val groupServers = serverRepository.findServersByGroup(group.name) + .filter { since == null || it.createdAt.isAfter(since) } + if (groupServers.isEmpty()) { throw StatusException(Status.NOT_FOUND.withDescription("No server was found matching this group name. ${group.name}")) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c2116c1..e550a9e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ kotlin = "2.0.20" kotlin-coroutines = "1.9.0" shadow = "8.3.3" log4j = "2.20.0" -droplet-api = "0.0.1-dev.4d43f53" +droplet-api = "0.0.1-dev.16b322c" simplecloud-pubsub = "1.0.5" simplecloud-metrics = "1.0.0" jooq = "3.19.3"