From 2084dabf6b839d9454718259b20a106a5fb41a4a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 12 Jan 2026 15:06:52 +0000 Subject: [PATCH 1/2] chore(closes OPEN-8576): expose delete project endpoint --- .stats.yml | 6 +- .../models/projects/ProjectDeleteParams.kt | 229 ++++++++++++++++++ .../api/services/async/ProjectServiceAsync.kt | 72 ++++++ .../services/async/ProjectServiceAsyncImpl.kt | 38 +++ .../api/services/blocking/ProjectService.kt | 65 +++++ .../services/blocking/ProjectServiceImpl.kt | 33 +++ .../projects/ProjectDeleteParamsTest.kt | 24 ++ .../services/async/ProjectServiceAsyncTest.kt | 14 ++ .../services/blocking/ProjectServiceTest.kt | 12 + 9 files changed, 490 insertions(+), 3 deletions(-) create mode 100644 openlayer-java-core/src/main/kotlin/com/openlayer/api/models/projects/ProjectDeleteParams.kt create mode 100644 openlayer-java-core/src/test/kotlin/com/openlayer/api/models/projects/ProjectDeleteParamsTest.kt diff --git a/.stats.yml b/.stats.yml index f925a83b..04a3a0e4 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,3 +1,3 @@ -configured_endpoints: 25 -openapi_spec_hash: 4eff18b3478c98a9b257ac27fdeb6b49 -config_hash: b415187e3925c414fb2597cdd0a11859 +configured_endpoints: 26 +openapi_spec_hash: 6f6cb98b7755d18274dd51e857508336 +config_hash: cc9a32249c08143687799eb8de187d6a diff --git a/openlayer-java-core/src/main/kotlin/com/openlayer/api/models/projects/ProjectDeleteParams.kt b/openlayer-java-core/src/main/kotlin/com/openlayer/api/models/projects/ProjectDeleteParams.kt new file mode 100644 index 00000000..960ec915 --- /dev/null +++ b/openlayer-java-core/src/main/kotlin/com/openlayer/api/models/projects/ProjectDeleteParams.kt @@ -0,0 +1,229 @@ +// File generated from our OpenAPI spec by Stainless. + +package com.openlayer.api.models.projects + +import com.openlayer.api.core.JsonValue +import com.openlayer.api.core.Params +import com.openlayer.api.core.http.Headers +import com.openlayer.api.core.http.QueryParams +import com.openlayer.api.core.toImmutable +import java.util.Objects +import java.util.Optional +import kotlin.jvm.optionals.getOrNull + +/** Delete a project by its ID. */ +class ProjectDeleteParams +private constructor( + private val projectId: String?, + private val additionalHeaders: Headers, + private val additionalQueryParams: QueryParams, + private val additionalBodyProperties: Map, +) : Params { + + fun projectId(): Optional = Optional.ofNullable(projectId) + + /** Additional body properties to send with the request. */ + fun _additionalBodyProperties(): Map = additionalBodyProperties + + /** Additional headers to send with the request. */ + fun _additionalHeaders(): Headers = additionalHeaders + + /** Additional query param to send with the request. */ + fun _additionalQueryParams(): QueryParams = additionalQueryParams + + fun toBuilder() = Builder().from(this) + + companion object { + + @JvmStatic fun none(): ProjectDeleteParams = builder().build() + + /** Returns a mutable builder for constructing an instance of [ProjectDeleteParams]. */ + @JvmStatic fun builder() = Builder() + } + + /** A builder for [ProjectDeleteParams]. */ + class Builder internal constructor() { + + private var projectId: String? = null + private var additionalHeaders: Headers.Builder = Headers.builder() + private var additionalQueryParams: QueryParams.Builder = QueryParams.builder() + private var additionalBodyProperties: MutableMap = mutableMapOf() + + @JvmSynthetic + internal fun from(projectDeleteParams: ProjectDeleteParams) = apply { + projectId = projectDeleteParams.projectId + additionalHeaders = projectDeleteParams.additionalHeaders.toBuilder() + additionalQueryParams = projectDeleteParams.additionalQueryParams.toBuilder() + additionalBodyProperties = projectDeleteParams.additionalBodyProperties.toMutableMap() + } + + fun projectId(projectId: String?) = apply { this.projectId = projectId } + + /** Alias for calling [Builder.projectId] with `projectId.orElse(null)`. */ + fun projectId(projectId: Optional) = projectId(projectId.getOrNull()) + + fun additionalHeaders(additionalHeaders: Headers) = apply { + this.additionalHeaders.clear() + putAllAdditionalHeaders(additionalHeaders) + } + + fun additionalHeaders(additionalHeaders: Map>) = apply { + this.additionalHeaders.clear() + putAllAdditionalHeaders(additionalHeaders) + } + + fun putAdditionalHeader(name: String, value: String) = apply { + additionalHeaders.put(name, value) + } + + fun putAdditionalHeaders(name: String, values: Iterable) = apply { + additionalHeaders.put(name, values) + } + + fun putAllAdditionalHeaders(additionalHeaders: Headers) = apply { + this.additionalHeaders.putAll(additionalHeaders) + } + + fun putAllAdditionalHeaders(additionalHeaders: Map>) = apply { + this.additionalHeaders.putAll(additionalHeaders) + } + + fun replaceAdditionalHeaders(name: String, value: String) = apply { + additionalHeaders.replace(name, value) + } + + fun replaceAdditionalHeaders(name: String, values: Iterable) = apply { + additionalHeaders.replace(name, values) + } + + fun replaceAllAdditionalHeaders(additionalHeaders: Headers) = apply { + this.additionalHeaders.replaceAll(additionalHeaders) + } + + fun replaceAllAdditionalHeaders(additionalHeaders: Map>) = apply { + this.additionalHeaders.replaceAll(additionalHeaders) + } + + fun removeAdditionalHeaders(name: String) = apply { additionalHeaders.remove(name) } + + fun removeAllAdditionalHeaders(names: Set) = apply { + additionalHeaders.removeAll(names) + } + + fun additionalQueryParams(additionalQueryParams: QueryParams) = apply { + this.additionalQueryParams.clear() + putAllAdditionalQueryParams(additionalQueryParams) + } + + fun additionalQueryParams(additionalQueryParams: Map>) = apply { + this.additionalQueryParams.clear() + putAllAdditionalQueryParams(additionalQueryParams) + } + + fun putAdditionalQueryParam(key: String, value: String) = apply { + additionalQueryParams.put(key, value) + } + + fun putAdditionalQueryParams(key: String, values: Iterable) = apply { + additionalQueryParams.put(key, values) + } + + fun putAllAdditionalQueryParams(additionalQueryParams: QueryParams) = apply { + this.additionalQueryParams.putAll(additionalQueryParams) + } + + fun putAllAdditionalQueryParams(additionalQueryParams: Map>) = + apply { + this.additionalQueryParams.putAll(additionalQueryParams) + } + + fun replaceAdditionalQueryParams(key: String, value: String) = apply { + additionalQueryParams.replace(key, value) + } + + fun replaceAdditionalQueryParams(key: String, values: Iterable) = apply { + additionalQueryParams.replace(key, values) + } + + fun replaceAllAdditionalQueryParams(additionalQueryParams: QueryParams) = apply { + this.additionalQueryParams.replaceAll(additionalQueryParams) + } + + fun replaceAllAdditionalQueryParams(additionalQueryParams: Map>) = + apply { + this.additionalQueryParams.replaceAll(additionalQueryParams) + } + + fun removeAdditionalQueryParams(key: String) = apply { additionalQueryParams.remove(key) } + + fun removeAllAdditionalQueryParams(keys: Set) = apply { + additionalQueryParams.removeAll(keys) + } + + fun additionalBodyProperties(additionalBodyProperties: Map) = apply { + this.additionalBodyProperties.clear() + putAllAdditionalBodyProperties(additionalBodyProperties) + } + + fun putAdditionalBodyProperty(key: String, value: JsonValue) = apply { + additionalBodyProperties.put(key, value) + } + + fun putAllAdditionalBodyProperties(additionalBodyProperties: Map) = + apply { + this.additionalBodyProperties.putAll(additionalBodyProperties) + } + + fun removeAdditionalBodyProperty(key: String) = apply { + additionalBodyProperties.remove(key) + } + + fun removeAllAdditionalBodyProperties(keys: Set) = apply { + keys.forEach(::removeAdditionalBodyProperty) + } + + /** + * Returns an immutable instance of [ProjectDeleteParams]. + * + * Further updates to this [Builder] will not mutate the returned instance. + */ + fun build(): ProjectDeleteParams = + ProjectDeleteParams( + projectId, + additionalHeaders.build(), + additionalQueryParams.build(), + additionalBodyProperties.toImmutable(), + ) + } + + fun _body(): Optional> = + Optional.ofNullable(additionalBodyProperties.ifEmpty { null }) + + fun _pathParam(index: Int): String = + when (index) { + 0 -> projectId ?: "" + else -> "" + } + + override fun _headers(): Headers = additionalHeaders + + override fun _queryParams(): QueryParams = additionalQueryParams + + override fun equals(other: Any?): Boolean { + if (this === other) { + return true + } + + return other is ProjectDeleteParams && + projectId == other.projectId && + additionalHeaders == other.additionalHeaders && + additionalQueryParams == other.additionalQueryParams && + additionalBodyProperties == other.additionalBodyProperties + } + + override fun hashCode(): Int = + Objects.hash(projectId, additionalHeaders, additionalQueryParams, additionalBodyProperties) + + override fun toString() = + "ProjectDeleteParams{projectId=$projectId, additionalHeaders=$additionalHeaders, additionalQueryParams=$additionalQueryParams, additionalBodyProperties=$additionalBodyProperties}" +} diff --git a/openlayer-java-core/src/main/kotlin/com/openlayer/api/services/async/ProjectServiceAsync.kt b/openlayer-java-core/src/main/kotlin/com/openlayer/api/services/async/ProjectServiceAsync.kt index 5fb8edc8..ade97e35 100644 --- a/openlayer-java-core/src/main/kotlin/com/openlayer/api/services/async/ProjectServiceAsync.kt +++ b/openlayer-java-core/src/main/kotlin/com/openlayer/api/services/async/ProjectServiceAsync.kt @@ -4,9 +4,11 @@ package com.openlayer.api.services.async import com.openlayer.api.core.ClientOptions import com.openlayer.api.core.RequestOptions +import com.openlayer.api.core.http.HttpResponse import com.openlayer.api.core.http.HttpResponseFor import com.openlayer.api.models.projects.ProjectCreateParams import com.openlayer.api.models.projects.ProjectCreateResponse +import com.openlayer.api.models.projects.ProjectDeleteParams import com.openlayer.api.models.projects.ProjectListParams import com.openlayer.api.models.projects.ProjectListResponse import com.openlayer.api.services.async.projects.CommitServiceAsync @@ -63,6 +65,38 @@ interface ProjectServiceAsync { fun list(requestOptions: RequestOptions): CompletableFuture = list(ProjectListParams.none(), requestOptions) + /** Delete a project by its ID. */ + fun delete(projectId: String): CompletableFuture = + delete(projectId, ProjectDeleteParams.none()) + + /** @see delete */ + fun delete( + projectId: String, + params: ProjectDeleteParams = ProjectDeleteParams.none(), + requestOptions: RequestOptions = RequestOptions.none(), + ): CompletableFuture = + delete(params.toBuilder().projectId(projectId).build(), requestOptions) + + /** @see delete */ + fun delete( + projectId: String, + params: ProjectDeleteParams = ProjectDeleteParams.none(), + ): CompletableFuture = delete(projectId, params, RequestOptions.none()) + + /** @see delete */ + fun delete( + params: ProjectDeleteParams, + requestOptions: RequestOptions = RequestOptions.none(), + ): CompletableFuture + + /** @see delete */ + fun delete(params: ProjectDeleteParams): CompletableFuture = + delete(params, RequestOptions.none()) + + /** @see delete */ + fun delete(projectId: String, requestOptions: RequestOptions): CompletableFuture = + delete(projectId, ProjectDeleteParams.none(), requestOptions) + /** * A view of [ProjectServiceAsync] that provides access to raw HTTP responses for each method. */ @@ -122,5 +156,43 @@ interface ProjectServiceAsync { requestOptions: RequestOptions ): CompletableFuture> = list(ProjectListParams.none(), requestOptions) + + /** + * Returns a raw HTTP response for `delete /projects/{projectId}`, but is otherwise the same + * as [ProjectServiceAsync.delete]. + */ + fun delete(projectId: String): CompletableFuture = + delete(projectId, ProjectDeleteParams.none()) + + /** @see delete */ + fun delete( + projectId: String, + params: ProjectDeleteParams = ProjectDeleteParams.none(), + requestOptions: RequestOptions = RequestOptions.none(), + ): CompletableFuture = + delete(params.toBuilder().projectId(projectId).build(), requestOptions) + + /** @see delete */ + fun delete( + projectId: String, + params: ProjectDeleteParams = ProjectDeleteParams.none(), + ): CompletableFuture = delete(projectId, params, RequestOptions.none()) + + /** @see delete */ + fun delete( + params: ProjectDeleteParams, + requestOptions: RequestOptions = RequestOptions.none(), + ): CompletableFuture + + /** @see delete */ + fun delete(params: ProjectDeleteParams): CompletableFuture = + delete(params, RequestOptions.none()) + + /** @see delete */ + fun delete( + projectId: String, + requestOptions: RequestOptions, + ): CompletableFuture = + delete(projectId, ProjectDeleteParams.none(), requestOptions) } } diff --git a/openlayer-java-core/src/main/kotlin/com/openlayer/api/services/async/ProjectServiceAsyncImpl.kt b/openlayer-java-core/src/main/kotlin/com/openlayer/api/services/async/ProjectServiceAsyncImpl.kt index b578c6d5..372e2f64 100644 --- a/openlayer-java-core/src/main/kotlin/com/openlayer/api/services/async/ProjectServiceAsyncImpl.kt +++ b/openlayer-java-core/src/main/kotlin/com/openlayer/api/services/async/ProjectServiceAsyncImpl.kt @@ -4,6 +4,8 @@ package com.openlayer.api.services.async import com.openlayer.api.core.ClientOptions import com.openlayer.api.core.RequestOptions +import com.openlayer.api.core.checkRequired +import com.openlayer.api.core.handlers.emptyHandler import com.openlayer.api.core.handlers.errorBodyHandler import com.openlayer.api.core.handlers.errorHandler import com.openlayer.api.core.handlers.jsonHandler @@ -17,6 +19,7 @@ import com.openlayer.api.core.http.parseable import com.openlayer.api.core.prepareAsync import com.openlayer.api.models.projects.ProjectCreateParams import com.openlayer.api.models.projects.ProjectCreateResponse +import com.openlayer.api.models.projects.ProjectDeleteParams import com.openlayer.api.models.projects.ProjectListParams import com.openlayer.api.models.projects.ProjectListResponse import com.openlayer.api.services.async.projects.CommitServiceAsync @@ -27,6 +30,7 @@ import com.openlayer.api.services.async.projects.TestServiceAsync import com.openlayer.api.services.async.projects.TestServiceAsyncImpl import java.util.concurrent.CompletableFuture import java.util.function.Consumer +import kotlin.jvm.optionals.getOrNull class ProjectServiceAsyncImpl internal constructor(private val clientOptions: ClientOptions) : ProjectServiceAsync { @@ -68,6 +72,13 @@ class ProjectServiceAsyncImpl internal constructor(private val clientOptions: Cl // get /projects withRawResponse().list(params, requestOptions).thenApply { it.parse() } + override fun delete( + params: ProjectDeleteParams, + requestOptions: RequestOptions, + ): CompletableFuture = + // delete /projects/{projectId} + withRawResponse().delete(params, requestOptions).thenAccept {} + class WithRawResponseImpl internal constructor(private val clientOptions: ClientOptions) : ProjectServiceAsync.WithRawResponse { @@ -160,5 +171,32 @@ class ProjectServiceAsyncImpl internal constructor(private val clientOptions: Cl } } } + + private val deleteHandler: Handler = emptyHandler() + + override fun delete( + params: ProjectDeleteParams, + requestOptions: RequestOptions, + ): CompletableFuture { + // We check here instead of in the params builder because this can be specified + // positionally or in the params class. + checkRequired("projectId", params.projectId().getOrNull()) + val request = + HttpRequest.builder() + .method(HttpMethod.DELETE) + .baseUrl(clientOptions.baseUrl()) + .addPathSegments("projects", params._pathParam(0)) + .apply { params._body().ifPresent { body(json(clientOptions.jsonMapper, it)) } } + .build() + .prepareAsync(clientOptions, params) + val requestOptions = requestOptions.applyDefaults(RequestOptions.from(clientOptions)) + return request + .thenComposeAsync { clientOptions.httpClient.executeAsync(it, requestOptions) } + .thenApply { response -> + errorHandler.handle(response).parseable { + response.use { deleteHandler.handle(it) } + } + } + } } } diff --git a/openlayer-java-core/src/main/kotlin/com/openlayer/api/services/blocking/ProjectService.kt b/openlayer-java-core/src/main/kotlin/com/openlayer/api/services/blocking/ProjectService.kt index fd4b6cf2..3897b856 100644 --- a/openlayer-java-core/src/main/kotlin/com/openlayer/api/services/blocking/ProjectService.kt +++ b/openlayer-java-core/src/main/kotlin/com/openlayer/api/services/blocking/ProjectService.kt @@ -5,9 +5,11 @@ package com.openlayer.api.services.blocking import com.google.errorprone.annotations.MustBeClosed import com.openlayer.api.core.ClientOptions import com.openlayer.api.core.RequestOptions +import com.openlayer.api.core.http.HttpResponse import com.openlayer.api.core.http.HttpResponseFor import com.openlayer.api.models.projects.ProjectCreateParams import com.openlayer.api.models.projects.ProjectCreateResponse +import com.openlayer.api.models.projects.ProjectDeleteParams import com.openlayer.api.models.projects.ProjectListParams import com.openlayer.api.models.projects.ProjectListResponse import com.openlayer.api.services.blocking.projects.CommitService @@ -62,6 +64,30 @@ interface ProjectService { fun list(requestOptions: RequestOptions): ProjectListResponse = list(ProjectListParams.none(), requestOptions) + /** Delete a project by its ID. */ + fun delete(projectId: String) = delete(projectId, ProjectDeleteParams.none()) + + /** @see delete */ + fun delete( + projectId: String, + params: ProjectDeleteParams = ProjectDeleteParams.none(), + requestOptions: RequestOptions = RequestOptions.none(), + ) = delete(params.toBuilder().projectId(projectId).build(), requestOptions) + + /** @see delete */ + fun delete(projectId: String, params: ProjectDeleteParams = ProjectDeleteParams.none()) = + delete(projectId, params, RequestOptions.none()) + + /** @see delete */ + fun delete(params: ProjectDeleteParams, requestOptions: RequestOptions = RequestOptions.none()) + + /** @see delete */ + fun delete(params: ProjectDeleteParams) = delete(params, RequestOptions.none()) + + /** @see delete */ + fun delete(projectId: String, requestOptions: RequestOptions) = + delete(projectId, ProjectDeleteParams.none(), requestOptions) + /** A view of [ProjectService] that provides access to raw HTTP responses for each method. */ interface WithRawResponse { @@ -117,5 +143,44 @@ interface ProjectService { @MustBeClosed fun list(requestOptions: RequestOptions): HttpResponseFor = list(ProjectListParams.none(), requestOptions) + + /** + * Returns a raw HTTP response for `delete /projects/{projectId}`, but is otherwise the same + * as [ProjectService.delete]. + */ + @MustBeClosed + fun delete(projectId: String): HttpResponse = delete(projectId, ProjectDeleteParams.none()) + + /** @see delete */ + @MustBeClosed + fun delete( + projectId: String, + params: ProjectDeleteParams = ProjectDeleteParams.none(), + requestOptions: RequestOptions = RequestOptions.none(), + ): HttpResponse = delete(params.toBuilder().projectId(projectId).build(), requestOptions) + + /** @see delete */ + @MustBeClosed + fun delete( + projectId: String, + params: ProjectDeleteParams = ProjectDeleteParams.none(), + ): HttpResponse = delete(projectId, params, RequestOptions.none()) + + /** @see delete */ + @MustBeClosed + fun delete( + params: ProjectDeleteParams, + requestOptions: RequestOptions = RequestOptions.none(), + ): HttpResponse + + /** @see delete */ + @MustBeClosed + fun delete(params: ProjectDeleteParams): HttpResponse = + delete(params, RequestOptions.none()) + + /** @see delete */ + @MustBeClosed + fun delete(projectId: String, requestOptions: RequestOptions): HttpResponse = + delete(projectId, ProjectDeleteParams.none(), requestOptions) } } diff --git a/openlayer-java-core/src/main/kotlin/com/openlayer/api/services/blocking/ProjectServiceImpl.kt b/openlayer-java-core/src/main/kotlin/com/openlayer/api/services/blocking/ProjectServiceImpl.kt index a77e89a8..3a27528d 100644 --- a/openlayer-java-core/src/main/kotlin/com/openlayer/api/services/blocking/ProjectServiceImpl.kt +++ b/openlayer-java-core/src/main/kotlin/com/openlayer/api/services/blocking/ProjectServiceImpl.kt @@ -4,6 +4,8 @@ package com.openlayer.api.services.blocking import com.openlayer.api.core.ClientOptions import com.openlayer.api.core.RequestOptions +import com.openlayer.api.core.checkRequired +import com.openlayer.api.core.handlers.emptyHandler import com.openlayer.api.core.handlers.errorBodyHandler import com.openlayer.api.core.handlers.errorHandler import com.openlayer.api.core.handlers.jsonHandler @@ -17,6 +19,7 @@ import com.openlayer.api.core.http.parseable import com.openlayer.api.core.prepare import com.openlayer.api.models.projects.ProjectCreateParams import com.openlayer.api.models.projects.ProjectCreateResponse +import com.openlayer.api.models.projects.ProjectDeleteParams import com.openlayer.api.models.projects.ProjectListParams import com.openlayer.api.models.projects.ProjectListResponse import com.openlayer.api.services.blocking.projects.CommitService @@ -26,6 +29,7 @@ import com.openlayer.api.services.blocking.projects.InferencePipelineServiceImpl import com.openlayer.api.services.blocking.projects.TestService import com.openlayer.api.services.blocking.projects.TestServiceImpl import java.util.function.Consumer +import kotlin.jvm.optionals.getOrNull class ProjectServiceImpl internal constructor(private val clientOptions: ClientOptions) : ProjectService { @@ -67,6 +71,11 @@ class ProjectServiceImpl internal constructor(private val clientOptions: ClientO // get /projects withRawResponse().list(params, requestOptions).parse() + override fun delete(params: ProjectDeleteParams, requestOptions: RequestOptions) { + // delete /projects/{projectId} + withRawResponse().delete(params, requestOptions) + } + class WithRawResponseImpl internal constructor(private val clientOptions: ClientOptions) : ProjectService.WithRawResponse { @@ -153,5 +162,29 @@ class ProjectServiceImpl internal constructor(private val clientOptions: ClientO } } } + + private val deleteHandler: Handler = emptyHandler() + + override fun delete( + params: ProjectDeleteParams, + requestOptions: RequestOptions, + ): HttpResponse { + // We check here instead of in the params builder because this can be specified + // positionally or in the params class. + checkRequired("projectId", params.projectId().getOrNull()) + val request = + HttpRequest.builder() + .method(HttpMethod.DELETE) + .baseUrl(clientOptions.baseUrl()) + .addPathSegments("projects", params._pathParam(0)) + .apply { params._body().ifPresent { body(json(clientOptions.jsonMapper, it)) } } + .build() + .prepare(clientOptions, params) + val requestOptions = requestOptions.applyDefaults(RequestOptions.from(clientOptions)) + val response = clientOptions.httpClient.execute(request, requestOptions) + return errorHandler.handle(response).parseable { + response.use { deleteHandler.handle(it) } + } + } } } diff --git a/openlayer-java-core/src/test/kotlin/com/openlayer/api/models/projects/ProjectDeleteParamsTest.kt b/openlayer-java-core/src/test/kotlin/com/openlayer/api/models/projects/ProjectDeleteParamsTest.kt new file mode 100644 index 00000000..28801c09 --- /dev/null +++ b/openlayer-java-core/src/test/kotlin/com/openlayer/api/models/projects/ProjectDeleteParamsTest.kt @@ -0,0 +1,24 @@ +// File generated from our OpenAPI spec by Stainless. + +package com.openlayer.api.models.projects + +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Test + +internal class ProjectDeleteParamsTest { + + @Test + fun create() { + ProjectDeleteParams.builder().projectId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e").build() + } + + @Test + fun pathParams() { + val params = + ProjectDeleteParams.builder().projectId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e").build() + + assertThat(params._pathParam(0)).isEqualTo("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e") + // out-of-bound path param + assertThat(params._pathParam(1)).isEqualTo("") + } +} diff --git a/openlayer-java-core/src/test/kotlin/com/openlayer/api/services/async/ProjectServiceAsyncTest.kt b/openlayer-java-core/src/test/kotlin/com/openlayer/api/services/async/ProjectServiceAsyncTest.kt index 4685622f..551a79dc 100644 --- a/openlayer-java-core/src/test/kotlin/com/openlayer/api/services/async/ProjectServiceAsyncTest.kt +++ b/openlayer-java-core/src/test/kotlin/com/openlayer/api/services/async/ProjectServiceAsyncTest.kt @@ -91,4 +91,18 @@ internal class ProjectServiceAsyncTest { val projects = projectsFuture.get() projects.validate() } + + @Test + fun delete() { + val client = + OpenlayerOkHttpClientAsync.builder() + .baseUrl(TestServerExtension.BASE_URL) + .apiKey("My API Key") + .build() + val projectServiceAsync = client.projects() + + val future = projectServiceAsync.delete("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e") + + val response = future.get() + } } diff --git a/openlayer-java-core/src/test/kotlin/com/openlayer/api/services/blocking/ProjectServiceTest.kt b/openlayer-java-core/src/test/kotlin/com/openlayer/api/services/blocking/ProjectServiceTest.kt index ec241248..f5dd8a73 100644 --- a/openlayer-java-core/src/test/kotlin/com/openlayer/api/services/blocking/ProjectServiceTest.kt +++ b/openlayer-java-core/src/test/kotlin/com/openlayer/api/services/blocking/ProjectServiceTest.kt @@ -89,4 +89,16 @@ internal class ProjectServiceTest { projects.validate() } + + @Test + fun delete() { + val client = + OpenlayerOkHttpClient.builder() + .baseUrl(TestServerExtension.BASE_URL) + .apiKey("My API Key") + .build() + val projectService = client.projects() + + projectService.delete("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e") + } } From e46ff21e7dd3ec6da24b2259c1c3ca4bcfe9f354 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 12 Jan 2026 15:07:13 +0000 Subject: [PATCH 2/2] release: 0.3.1 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ README.md | 10 +++++----- build.gradle.kts | 2 +- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 6b7b74c5..cce92405 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.3.0" + ".": "0.3.1" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index ff466380..016056b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.3.1 (2026-01-12) + +Full Changelog: [v0.3.0...v0.3.1](https://github.com/openlayer-ai/openlayer-java/compare/v0.3.0...v0.3.1) + +### Chores + +* **closes OPEN-8576:** expose delete project endpoint ([2084dab](https://github.com/openlayer-ai/openlayer-java/commit/2084dabf6b839d9454718259b20a106a5fb41a4a)) + ## 0.3.0 (2026-01-09) Full Changelog: [v0.2.0...v0.3.0](https://github.com/openlayer-ai/openlayer-java/compare/v0.2.0...v0.3.0) diff --git a/README.md b/README.md index 0bc9b920..df8fa8e2 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ -[![Maven Central](https://img.shields.io/maven-central/v/com.openlayer.api/openlayer-java)](https://central.sonatype.com/artifact/com.openlayer.api/openlayer-java/0.3.0) -[![javadoc](https://javadoc.io/badge2/com.openlayer.api/openlayer-java/0.3.0/javadoc.svg)](https://javadoc.io/doc/com.openlayer.api/openlayer-java/0.3.0) +[![Maven Central](https://img.shields.io/maven-central/v/com.openlayer.api/openlayer-java)](https://central.sonatype.com/artifact/com.openlayer.api/openlayer-java/0.3.1) +[![javadoc](https://javadoc.io/badge2/com.openlayer.api/openlayer-java/0.3.1/javadoc.svg)](https://javadoc.io/doc/com.openlayer.api/openlayer-java/0.3.1) @@ -13,7 +13,7 @@ It is generated with [Stainless](https://www.stainless.com/). -The REST API documentation can be found on [openlayer.com](https://openlayer.com/docs/api-reference/rest/overview). Javadocs are available on [javadoc.io](https://javadoc.io/doc/com.openlayer.api/openlayer-java/0.3.0). +The REST API documentation can be found on [openlayer.com](https://openlayer.com/docs/api-reference/rest/overview). Javadocs are available on [javadoc.io](https://javadoc.io/doc/com.openlayer.api/openlayer-java/0.3.1). @@ -24,7 +24,7 @@ The REST API documentation can be found on [openlayer.com](https://openlayer.com ### Gradle ```kotlin -implementation("com.openlayer.api:openlayer-java:0.3.0") +implementation("com.openlayer.api:openlayer-java:0.3.1") ``` ### Maven @@ -33,7 +33,7 @@ implementation("com.openlayer.api:openlayer-java:0.3.0") com.openlayer.api openlayer-java - 0.3.0 + 0.3.1 ``` diff --git a/build.gradle.kts b/build.gradle.kts index d977354f..a90fbafa 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ repositories { allprojects { group = "com.openlayer.api" - version = "0.3.0" // x-release-please-version + version = "0.3.1" // x-release-please-version } subprojects {