From 10d960f906883b8aa01d33885aa83103a4b692fb Mon Sep 17 00:00:00 2001 From: skyflow-bharti Date: Fri, 19 Sep 2025 12:13:28 +0530 Subject: [PATCH 1/6] SK-2302 add multi table insert support --- .../java/com/skyflow/errors/ErrorMessage.java | 6 +- .../main/java/com/skyflow/logs/ErrorLogs.java | 7 +- .../skyflow/vault/data/BaseInsertRequest.java | 11 - .../com/skyflow/vault/data/InsertRequest.java | 9 +- v3/src/main/java/com/skyflow/VaultClient.java | 41 +++- .../com/skyflow/generated/rest/ApiClient.java | 9 +- .../generated/rest/AsyncApiClient.java | 9 +- .../rest/core/ApiClientApiException.java | 5 +- .../rest/core/ApiClientHttpResponse.java | 3 +- .../generated/rest/core/ClientOptions.java | 5 +- .../rest/core/DateTimeDeserializer.java | 1 - .../generated/rest/core/FileStream.java | 5 +- .../rest/core/InputStreamRequestBody.java | 7 +- .../generated/rest/core/ObjectMappers.java | 1 - .../rest/core/QueryStringMapper.java | 7 +- .../rest/core/ResponseBodyInputStream.java | 3 +- .../rest/core/ResponseBodyReader.java | 3 +- .../generated/rest/core/RetryInterceptor.java | 5 +- .../records/AsyncRawRecordsClient.java | 109 +++++++++ .../resources/records/AsyncRecordsClient.java | 50 ++++ .../resources/records/RawRecordsClient.java | 90 +++++++ .../rest/resources/records/RecordsClient.java | 49 ++++ .../requests/ExecuteQueryRequest.java | 19 +- .../AsyncRawRecordserviceClient.java | 109 +++------ .../AsyncRecordserviceClient.java | 42 ++-- .../recordservice/RawRecordserviceClient.java | 98 +++----- .../recordservice/RecordserviceClient.java | 37 ++- .../recordservice/requests/DeleteRequest.java | 21 +- .../requests/DeleteTokenRequest.java | 21 +- .../requests/DetokenizeRequest.java | 21 +- .../recordservice/requests/GetRequest.java | 100 +++++++- .../recordservice/requests/InsertRequest.java | 21 +- .../requests/TokenizeRequest.java | 21 +- .../recordservice/requests/UpdateRequest.java | 21 +- .../rest/types/ColumnRedactions.java | 15 +- .../generated/rest/types/DeleteResponse.java | 21 +- .../rest/types/DeleteResponseObject.java | 15 +- .../rest/types/DeleteTokenResponse.java | 21 +- .../rest/types/DeleteTokenResponseObject.java | 15 +- .../rest/types/DetokenizeResponse.java | 21 +- .../rest/types/DetokenizeResponseObject.java | 15 +- .../generated/rest/types/EnumDataType.java | 2 +- .../generated/rest/types/EnumUpdateType.java | 2 +- .../types/ExecuteQueryRecordResponse.java | 15 +- .../rest/types/ExecuteQueryResponse.java | 53 ++++- .../types/ExecuteQueryResponseMetadata.java | 102 ++++++++ .../generated/rest/types/GetRequestData.java | 225 ++++++++++++++++++ .../generated/rest/types/GetResponse.java | 21 +- .../rest/types/GoogleprotobufAny.java | 151 ++++++++++++ .../rest/types/InsertRecordData.java | 80 ++++++- .../generated/rest/types/InsertResponse.java | 21 +- .../generated/rest/types/ProtobufAny.java | 90 ------- .../rest/types/RecordResponseObject.java | 53 ++++- .../generated/rest/types/RpcStatus.java | 33 ++- .../rest/types/TokenGroupRedactions.java | 15 +- .../rest/types/TokenizeRequestObject.java | 21 +- .../rest/types/TokenizeResponse.java | 21 +- .../rest/types/TokenizeResponseObject.java | 21 +- .../types/TokenizeResponseObjectToken.java | 15 +- .../generated/rest/types/UniqueValue.java | 101 ++++++++ .../rest/types/UpdateRecordData.java | 57 ++++- .../generated/rest/types/UpdateResponse.java | 21 +- .../skyflow/generated/rest/types/Upsert.java | 21 +- v3/src/main/java/com/skyflow/utils/Utils.java | 2 +- .../utils/validations/Validations.java | 114 ++++++--- .../vault/controller/VaultController.java | 25 +- .../com/skyflow/vault/data/InsertRecord.java | 66 +++++ .../com/skyflow/vault/data/InsertRequest.java | 18 +- .../skyflow/vault/data/InsertResponse.java | 8 +- .../java/com/skyflow/vault/data/Success.java | 14 +- .../java/com/skyflow/utils/UtilsTests.java | 19 +- .../controller/VaultControllerTests.java | 55 ++--- .../com/skyflow/vault/data/InsertTests.java | 37 +-- 73 files changed, 1943 insertions(+), 645 deletions(-) create mode 100644 v3/src/main/java/com/skyflow/generated/rest/resources/records/AsyncRawRecordsClient.java create mode 100644 v3/src/main/java/com/skyflow/generated/rest/resources/records/AsyncRecordsClient.java create mode 100644 v3/src/main/java/com/skyflow/generated/rest/resources/records/RawRecordsClient.java create mode 100644 v3/src/main/java/com/skyflow/generated/rest/resources/records/RecordsClient.java rename v3/src/main/java/com/skyflow/generated/rest/resources/{recordservice => records}/requests/ExecuteQueryRequest.java (86%) create mode 100644 v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryResponseMetadata.java create mode 100644 v3/src/main/java/com/skyflow/generated/rest/types/GetRequestData.java create mode 100644 v3/src/main/java/com/skyflow/generated/rest/types/GoogleprotobufAny.java delete mode 100644 v3/src/main/java/com/skyflow/generated/rest/types/ProtobufAny.java create mode 100644 v3/src/main/java/com/skyflow/generated/rest/types/UniqueValue.java create mode 100644 v3/src/main/java/com/skyflow/vault/data/InsertRecord.java diff --git a/common/src/main/java/com/skyflow/errors/ErrorMessage.java b/common/src/main/java/com/skyflow/errors/ErrorMessage.java index 459998ab..52d38bfe 100644 --- a/common/src/main/java/com/skyflow/errors/ErrorMessage.java +++ b/common/src/main/java/com/skyflow/errors/ErrorMessage.java @@ -10,7 +10,11 @@ public enum ErrorMessage { ConnectionIdAlreadyInConfigList("%s0 Validation error. ConnectionId is present in an existing config. Specify a connectionId in config."), ConnectionIdNotInConfigList("%s0 Validation error. ConnectionId is missing from the config. Specify the connectionIds from configs."), EmptyCredentials("%s0 Validation error. Invalid credentials. Credentials must not be empty."), - + TableSpecifiedInRequestAndRecordObject("%s0 Validation error. Table name cannot be specified at both the request and record levels. Please specify the table name in only one place."), + UpsertAtRecordLevel("%s0 Validation error. Upsert specify "), + UpsertTableRequestAtRecordLevel("%s0 Validation error. Table name should be present at each record level when upsert is present at record level."), + UpsertTableRequestAtRequestLevel("%S0 Validation error. Upsert should be present at each record level when table name is present at record level."), + TableNotSpecifiedInRequestAndRecordObject("%s0 Validation error. Table name is missing. Table name should be specified at one place either at the request level or record level. Please specify the table name at one place."), // Vault config InvalidVaultId("%s0 Initialization failed. Invalid vault ID. Specify a valid vault ID."), EmptyVaultId("%s0 Initialization failed. Invalid vault ID. Vault ID must not be empty."), diff --git a/common/src/main/java/com/skyflow/logs/ErrorLogs.java b/common/src/main/java/com/skyflow/logs/ErrorLogs.java index fa7bd5dd..dc242850 100644 --- a/common/src/main/java/com/skyflow/logs/ErrorLogs.java +++ b/common/src/main/java/com/skyflow/logs/ErrorLogs.java @@ -143,8 +143,11 @@ public enum ErrorLogs { UNEXPECTED_ERROR_DURING_BATCH_PROCESSING("Unexpected error occurred during batch processing. Error: %s1"), - PROCESSING_ERROR_RESPONSE("Processing error response."); - + PROCESSING_ERROR_RESPONSE("Processing error response."), + TABLE_SPECIFIED_AT_BOTH_PLACE("Invalid %s1 request. Table name cannot be specified at both the request and record levels. Please specify the table name at only one place."), + TABLE_NOT_SPECIFIED_AT_BOTH_PLACE("Invalid %s1 request. Table name is missing. Table name should be specified at one place either at the request level or record level. Please specify the table name at one place."), + UPSERT_TABLE_REQUEST_AT_RECORD_LEVEL("Invalid %s1 request. Table name should be present at each record level when upsert is present at record level."), + UPSERT_TABLE_REQUEST_AT_REQUEST_LEVEL("Invalid %s1 request. Upsert should be present at each record level when table name is present at record level."); private final String log; ErrorLogs(String log) { diff --git a/common/src/main/java/com/skyflow/vault/data/BaseInsertRequest.java b/common/src/main/java/com/skyflow/vault/data/BaseInsertRequest.java index b856492d..8c9efebf 100644 --- a/common/src/main/java/com/skyflow/vault/data/BaseInsertRequest.java +++ b/common/src/main/java/com/skyflow/vault/data/BaseInsertRequest.java @@ -14,15 +14,9 @@ public String getTable() { return this.builder.table; } - public ArrayList> getValues() { - return this.builder.values; - } - static class BaseInsertRequestBuilder { protected String table; - protected ArrayList> values; protected String upsert; - protected BaseInsertRequestBuilder() { } @@ -31,11 +25,6 @@ public BaseInsertRequestBuilder table(String table) { return this; } - public BaseInsertRequestBuilder values(ArrayList> values) { - this.values = values; - return this; - } - } } diff --git a/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java b/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java index 9758e98f..75c5832d 100644 --- a/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java +++ b/v2/src/main/java/com/skyflow/vault/data/InsertRequest.java @@ -34,7 +34,10 @@ public String getUpsert() { public Boolean getReturnTokens() { return this.builder.returnTokens; } - + public ArrayList> getValues() { + return this.builder.values; + } + public ArrayList> getTokens() { return this.builder.tokens; } @@ -43,6 +46,7 @@ public static final class InsertRequestBuilder extends BaseInsertRequestBuilder private Boolean homogeneous; private Boolean continueOnError; private TokenMode tokenMode; + private ArrayList> values; private ArrayList> tokens; private Boolean returnTokens; @@ -60,9 +64,8 @@ public InsertRequestBuilder table(String table) { return this; } - @Override public InsertRequestBuilder values(ArrayList> values) { - super.values(values); + this.values = values; return this; } diff --git a/v3/src/main/java/com/skyflow/VaultClient.java b/v3/src/main/java/com/skyflow/VaultClient.java index 41d65e37..54730b02 100644 --- a/v3/src/main/java/com/skyflow/VaultClient.java +++ b/v3/src/main/java/com/skyflow/VaultClient.java @@ -20,13 +20,14 @@ import com.skyflow.utils.logger.LogUtil; import com.skyflow.utils.validations.Validations; import com.skyflow.vault.data.DetokenizeRequest; +import com.skyflow.vault.data.InsertRecord; + import io.github.cdimascio.dotenv.Dotenv; import io.github.cdimascio.dotenv.DotenvException; import okhttp3.OkHttpClient; import okhttp3.Request; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; @@ -132,17 +133,41 @@ protected void updateExecutorInHTTP() { apiClientBuilder.httpClient(httpClient); } - protected InsertRequest getBulkInsertRequestBody(com.skyflow.vault.data.InsertRequest request, VaultConfig config) throws SkyflowException { - List> values = request.getValues(); + protected InsertRequest getBulkInsertRequestBody(com.skyflow.vault.data.InsertRequest request, VaultConfig config) { + ArrayList values = request.getRecords(); List insertRecordDataList = new ArrayList<>(); - for (HashMap value : values) { - InsertRecordData data = InsertRecordData.builder().data(value).build(); - insertRecordDataList.add(data); + for (InsertRecord value : values) { + InsertRecordData.Builder data = InsertRecordData.builder(); + data.data(value.getData()); + if (value.getTable() != null && !value.getTable().isEmpty()){ + data.tableName(value.getTable()); + } + if (value.getUpsert() != null && !value.getUpsert().isEmpty()){ + if (value.getUpsertType() != null) { + EnumUpdateType updateType = null; + if (request.getUpsertType() == UpdateType.REPLACE) { + updateType = EnumUpdateType.REPLACE; + } else if (request.getUpsertType() == UpdateType.UPDATE) { + updateType = EnumUpdateType.UPDATE; + } + Upsert upsert = Upsert.builder().uniqueColumns(value.getUpsert()).updateType(updateType).build(); + data.upsert(upsert); + } else { + Upsert upsert = Upsert.builder().uniqueColumns(value.getUpsert()).build(); + data.upsert(upsert); + } + } + insertRecordDataList.add(data.build()); } + InsertRequest.Builder builder = InsertRequest.builder() .vaultId(config.getVaultId()) - .records(insertRecordDataList) - .tableName(request.getTable()); + .records(insertRecordDataList); + + if (request.getTable() != null && !request.getTable().isEmpty()){ + builder.tableName(request.getTable()); + } + if (request.getUpsert() != null && !request.getUpsert().isEmpty()) { if (request.getUpsertType() != null) { EnumUpdateType updateType = null; diff --git a/v3/src/main/java/com/skyflow/generated/rest/ApiClient.java b/v3/src/main/java/com/skyflow/generated/rest/ApiClient.java index 3bf1a6e7..e23953a4 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/ApiClient.java +++ b/v3/src/main/java/com/skyflow/generated/rest/ApiClient.java @@ -5,20 +5,27 @@ import com.skyflow.generated.rest.core.ClientOptions; import com.skyflow.generated.rest.core.Suppliers; +import com.skyflow.generated.rest.resources.records.RecordsClient; import com.skyflow.generated.rest.resources.recordservice.RecordserviceClient; - import java.util.function.Supplier; public class ApiClient { protected final ClientOptions clientOptions; + protected final Supplier recordsClient; + protected final Supplier recordserviceClient; public ApiClient(ClientOptions clientOptions) { this.clientOptions = clientOptions; + this.recordsClient = Suppliers.memoize(() -> new RecordsClient(clientOptions)); this.recordserviceClient = Suppliers.memoize(() -> new RecordserviceClient(clientOptions)); } + public RecordsClient records() { + return this.recordsClient.get(); + } + public RecordserviceClient recordservice() { return this.recordserviceClient.get(); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/AsyncApiClient.java b/v3/src/main/java/com/skyflow/generated/rest/AsyncApiClient.java index 6edb11d9..6bebc2ab 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/AsyncApiClient.java +++ b/v3/src/main/java/com/skyflow/generated/rest/AsyncApiClient.java @@ -5,20 +5,27 @@ import com.skyflow.generated.rest.core.ClientOptions; import com.skyflow.generated.rest.core.Suppliers; +import com.skyflow.generated.rest.resources.records.AsyncRecordsClient; import com.skyflow.generated.rest.resources.recordservice.AsyncRecordserviceClient; - import java.util.function.Supplier; public class AsyncApiClient { protected final ClientOptions clientOptions; + protected final Supplier recordsClient; + protected final Supplier recordserviceClient; public AsyncApiClient(ClientOptions clientOptions) { this.clientOptions = clientOptions; + this.recordsClient = Suppliers.memoize(() -> new AsyncRecordsClient(clientOptions)); this.recordserviceClient = Suppliers.memoize(() -> new AsyncRecordserviceClient(clientOptions)); } + public AsyncRecordsClient records() { + return this.recordsClient.get(); + } + public AsyncRecordserviceClient recordservice() { return this.recordserviceClient.get(); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/core/ApiClientApiException.java b/v3/src/main/java/com/skyflow/generated/rest/core/ApiClientApiException.java index be5247eb..a4487b1e 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/core/ApiClientApiException.java +++ b/v3/src/main/java/com/skyflow/generated/rest/core/ApiClientApiException.java @@ -3,12 +3,11 @@ */ package com.skyflow.generated.rest.core; -import okhttp3.Response; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import okhttp3.Response; /** * This exception type will be thrown for any non-2XX API responses. @@ -66,7 +65,7 @@ public Map> headers() { return this.headers; } - @Override + @java.lang.Override public String toString() { return "ApiClientApiException{" + "message: " + getMessage() + ", statusCode: " + statusCode + ", body: " + body + "}"; diff --git a/v3/src/main/java/com/skyflow/generated/rest/core/ApiClientHttpResponse.java b/v3/src/main/java/com/skyflow/generated/rest/core/ApiClientHttpResponse.java index c743352c..9c81f1f5 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/core/ApiClientHttpResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/core/ApiClientHttpResponse.java @@ -3,12 +3,11 @@ */ package com.skyflow.generated.rest.core; -import okhttp3.Response; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import okhttp3.Response; public final class ApiClientHttpResponse { diff --git a/v3/src/main/java/com/skyflow/generated/rest/core/ClientOptions.java b/v3/src/main/java/com/skyflow/generated/rest/core/ClientOptions.java index 39235d01..0fb0f237 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/core/ClientOptions.java +++ b/v3/src/main/java/com/skyflow/generated/rest/core/ClientOptions.java @@ -3,13 +3,12 @@ */ package com.skyflow.generated.rest.core; -import okhttp3.OkHttpClient; - import java.util.HashMap; import java.util.Map; import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; +import okhttp3.OkHttpClient; public final class ClientOptions { private final Environment environment; @@ -35,7 +34,7 @@ private ClientOptions( { put("X-Fern-Language", "JAVA"); put("X-Fern-SDK-Name", "com.skyflow.fern:api-sdk"); - put("X-Fern-SDK-Version", "0.0.275"); + put("X-Fern-SDK-Version", "0.0.352"); } }); this.headerSuppliers = headerSuppliers; diff --git a/v3/src/main/java/com/skyflow/generated/rest/core/DateTimeDeserializer.java b/v3/src/main/java/com/skyflow/generated/rest/core/DateTimeDeserializer.java index a0a6d7c4..6be10979 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/core/DateTimeDeserializer.java +++ b/v3/src/main/java/com/skyflow/generated/rest/core/DateTimeDeserializer.java @@ -8,7 +8,6 @@ import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.module.SimpleModule; - import java.io.IOException; import java.time.Instant; import java.time.LocalDateTime; diff --git a/v3/src/main/java/com/skyflow/generated/rest/core/FileStream.java b/v3/src/main/java/com/skyflow/generated/rest/core/FileStream.java index 2131b0a4..6b459431 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/core/FileStream.java +++ b/v3/src/main/java/com/skyflow/generated/rest/core/FileStream.java @@ -3,13 +3,12 @@ */ package com.skyflow.generated.rest.core; +import java.io.InputStream; +import java.util.Objects; import okhttp3.MediaType; import okhttp3.RequestBody; import org.jetbrains.annotations.Nullable; -import java.io.InputStream; -import java.util.Objects; - /** * Represents a file stream with associated metadata for file uploads. */ diff --git a/v3/src/main/java/com/skyflow/generated/rest/core/InputStreamRequestBody.java b/v3/src/main/java/com/skyflow/generated/rest/core/InputStreamRequestBody.java index 55c3c971..545f6088 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/core/InputStreamRequestBody.java +++ b/v3/src/main/java/com/skyflow/generated/rest/core/InputStreamRequestBody.java @@ -3,6 +3,9 @@ */ package com.skyflow.generated.rest.core; +import java.io.IOException; +import java.io.InputStream; +import java.util.Objects; import okhttp3.MediaType; import okhttp3.RequestBody; import okhttp3.internal.Util; @@ -11,10 +14,6 @@ import okio.Source; import org.jetbrains.annotations.Nullable; -import java.io.IOException; -import java.io.InputStream; -import java.util.Objects; - /** * A custom implementation of OkHttp's RequestBody that wraps an InputStream. * This class allows streaming of data from an InputStream directly to an HTTP request body, diff --git a/v3/src/main/java/com/skyflow/generated/rest/core/ObjectMappers.java b/v3/src/main/java/com/skyflow/generated/rest/core/ObjectMappers.java index acec32b4..3b7894e0 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/core/ObjectMappers.java +++ b/v3/src/main/java/com/skyflow/generated/rest/core/ObjectMappers.java @@ -10,7 +10,6 @@ import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; - import java.io.IOException; public final class ObjectMappers { diff --git a/v3/src/main/java/com/skyflow/generated/rest/core/QueryStringMapper.java b/v3/src/main/java/com/skyflow/generated/rest/core/QueryStringMapper.java index c0687736..e9e18fb9 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/core/QueryStringMapper.java +++ b/v3/src/main/java/com/skyflow/generated/rest/core/QueryStringMapper.java @@ -7,11 +7,14 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; import okhttp3.HttpUrl; import okhttp3.MultipartBody; -import java.util.*; - public class QueryStringMapper { private static final ObjectMapper MAPPER = ObjectMappers.JSON_MAPPER; diff --git a/v3/src/main/java/com/skyflow/generated/rest/core/ResponseBodyInputStream.java b/v3/src/main/java/com/skyflow/generated/rest/core/ResponseBodyInputStream.java index 1bb0b5dc..d8df7715 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/core/ResponseBodyInputStream.java +++ b/v3/src/main/java/com/skyflow/generated/rest/core/ResponseBodyInputStream.java @@ -3,10 +3,9 @@ */ package com.skyflow.generated.rest.core; -import okhttp3.Response; - import java.io.FilterInputStream; import java.io.IOException; +import okhttp3.Response; /** * A custom InputStream that wraps the InputStream from the OkHttp Response and ensures that the diff --git a/v3/src/main/java/com/skyflow/generated/rest/core/ResponseBodyReader.java b/v3/src/main/java/com/skyflow/generated/rest/core/ResponseBodyReader.java index e6c1a525..ed894407 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/core/ResponseBodyReader.java +++ b/v3/src/main/java/com/skyflow/generated/rest/core/ResponseBodyReader.java @@ -3,10 +3,9 @@ */ package com.skyflow.generated.rest.core; -import okhttp3.Response; - import java.io.FilterReader; import java.io.IOException; +import okhttp3.Response; /** * A custom Reader that wraps the Reader from the OkHttp Response and ensures that the diff --git a/v3/src/main/java/com/skyflow/generated/rest/core/RetryInterceptor.java b/v3/src/main/java/com/skyflow/generated/rest/core/RetryInterceptor.java index 7a28c3c9..eda7d265 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/core/RetryInterceptor.java +++ b/v3/src/main/java/com/skyflow/generated/rest/core/RetryInterceptor.java @@ -3,13 +3,12 @@ */ package com.skyflow.generated.rest.core; -import okhttp3.Interceptor; -import okhttp3.Response; - import java.io.IOException; import java.time.Duration; import java.util.Optional; import java.util.Random; +import okhttp3.Interceptor; +import okhttp3.Response; public class RetryInterceptor implements Interceptor { diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/records/AsyncRawRecordsClient.java b/v3/src/main/java/com/skyflow/generated/rest/resources/records/AsyncRawRecordsClient.java new file mode 100644 index 00000000..7506c9be --- /dev/null +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/records/AsyncRawRecordsClient.java @@ -0,0 +1,109 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +package com.skyflow.generated.rest.resources.records; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.skyflow.generated.rest.core.ApiClientApiException; +import com.skyflow.generated.rest.core.ApiClientException; +import com.skyflow.generated.rest.core.ApiClientHttpResponse; +import com.skyflow.generated.rest.core.ClientOptions; +import com.skyflow.generated.rest.core.MediaTypes; +import com.skyflow.generated.rest.core.ObjectMappers; +import com.skyflow.generated.rest.core.RequestOptions; +import com.skyflow.generated.rest.resources.records.requests.ExecuteQueryRequest; +import com.skyflow.generated.rest.types.ExecuteQueryResponse; +import java.io.IOException; +import java.util.concurrent.CompletableFuture; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Headers; +import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +import okhttp3.ResponseBody; +import org.jetbrains.annotations.NotNull; + +public class AsyncRawRecordsClient { + protected final ClientOptions clientOptions; + + public AsyncRawRecordsClient(ClientOptions clientOptions) { + this.clientOptions = clientOptions; + } + + /** + * Executes a query on the specified vault. + */ + public CompletableFuture> recordServiceExecuteQuery() { + return recordServiceExecuteQuery(ExecuteQueryRequest.builder().build()); + } + + /** + * Executes a query on the specified vault. + */ + public CompletableFuture> recordServiceExecuteQuery( + ExecuteQueryRequest request) { + return recordServiceExecuteQuery(request, null); + } + + /** + * Executes a query on the specified vault. + */ + public CompletableFuture> recordServiceExecuteQuery( + ExecuteQueryRequest request, RequestOptions requestOptions) { + HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) + .newBuilder() + .addPathSegments("v2/query") + .build(); + RequestBody body; + try { + body = RequestBody.create( + ObjectMappers.JSON_MAPPER.writeValueAsBytes(request), MediaTypes.APPLICATION_JSON); + } catch (JsonProcessingException e) { + throw new ApiClientException("Failed to serialize request", e); + } + Request okhttpRequest = new Request.Builder() + .url(httpUrl) + .method("POST", body) + .headers(Headers.of(clientOptions.headers(requestOptions))) + .addHeader("Content-Type", "application/json") + .addHeader("Accept", "application/json") + .build(); + OkHttpClient client = clientOptions.httpClient(); + if (requestOptions != null && requestOptions.getTimeout().isPresent()) { + client = clientOptions.httpClientWithTimeout(requestOptions); + } + CompletableFuture> future = new CompletableFuture<>(); + client.newCall(okhttpRequest).enqueue(new Callback() { + @Override + public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { + try (ResponseBody responseBody = response.body()) { + if (response.isSuccessful()) { + future.complete(new ApiClientHttpResponse<>( + ObjectMappers.JSON_MAPPER.readValue( + responseBody.string(), ExecuteQueryResponse.class), + response)); + return; + } + String responseBodyString = responseBody != null ? responseBody.string() : "{}"; + future.completeExceptionally(new ApiClientApiException( + "Error with status code " + response.code(), + response.code(), + ObjectMappers.JSON_MAPPER.readValue(responseBodyString, Object.class), + response)); + return; + } catch (IOException e) { + future.completeExceptionally(new ApiClientException("Network error executing HTTP request", e)); + } + } + + @Override + public void onFailure(@NotNull Call call, @NotNull IOException e) { + future.completeExceptionally(new ApiClientException("Network error executing HTTP request", e)); + } + }); + return future; + } +} diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/records/AsyncRecordsClient.java b/v3/src/main/java/com/skyflow/generated/rest/resources/records/AsyncRecordsClient.java new file mode 100644 index 00000000..d0d22507 --- /dev/null +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/records/AsyncRecordsClient.java @@ -0,0 +1,50 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +package com.skyflow.generated.rest.resources.records; + +import com.skyflow.generated.rest.core.ClientOptions; +import com.skyflow.generated.rest.core.RequestOptions; +import com.skyflow.generated.rest.resources.records.requests.ExecuteQueryRequest; +import com.skyflow.generated.rest.types.ExecuteQueryResponse; +import java.util.concurrent.CompletableFuture; + +public class AsyncRecordsClient { + protected final ClientOptions clientOptions; + + private final AsyncRawRecordsClient rawClient; + + public AsyncRecordsClient(ClientOptions clientOptions) { + this.clientOptions = clientOptions; + this.rawClient = new AsyncRawRecordsClient(clientOptions); + } + + /** + * Get responses with HTTP metadata like headers + */ + public AsyncRawRecordsClient withRawResponse() { + return this.rawClient; + } + + /** + * Executes a query on the specified vault. + */ + public CompletableFuture recordServiceExecuteQuery() { + return this.rawClient.recordServiceExecuteQuery().thenApply(response -> response.body()); + } + + /** + * Executes a query on the specified vault. + */ + public CompletableFuture recordServiceExecuteQuery(ExecuteQueryRequest request) { + return this.rawClient.recordServiceExecuteQuery(request).thenApply(response -> response.body()); + } + + /** + * Executes a query on the specified vault. + */ + public CompletableFuture recordServiceExecuteQuery( + ExecuteQueryRequest request, RequestOptions requestOptions) { + return this.rawClient.recordServiceExecuteQuery(request, requestOptions).thenApply(response -> response.body()); + } +} diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/records/RawRecordsClient.java b/v3/src/main/java/com/skyflow/generated/rest/resources/records/RawRecordsClient.java new file mode 100644 index 00000000..605ae73f --- /dev/null +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/records/RawRecordsClient.java @@ -0,0 +1,90 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +package com.skyflow.generated.rest.resources.records; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.skyflow.generated.rest.core.ApiClientApiException; +import com.skyflow.generated.rest.core.ApiClientException; +import com.skyflow.generated.rest.core.ApiClientHttpResponse; +import com.skyflow.generated.rest.core.ClientOptions; +import com.skyflow.generated.rest.core.MediaTypes; +import com.skyflow.generated.rest.core.ObjectMappers; +import com.skyflow.generated.rest.core.RequestOptions; +import com.skyflow.generated.rest.resources.records.requests.ExecuteQueryRequest; +import com.skyflow.generated.rest.types.ExecuteQueryResponse; +import java.io.IOException; +import okhttp3.Headers; +import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +import okhttp3.ResponseBody; + +public class RawRecordsClient { + protected final ClientOptions clientOptions; + + public RawRecordsClient(ClientOptions clientOptions) { + this.clientOptions = clientOptions; + } + + /** + * Executes a query on the specified vault. + */ + public ApiClientHttpResponse recordServiceExecuteQuery() { + return recordServiceExecuteQuery(ExecuteQueryRequest.builder().build()); + } + + /** + * Executes a query on the specified vault. + */ + public ApiClientHttpResponse recordServiceExecuteQuery(ExecuteQueryRequest request) { + return recordServiceExecuteQuery(request, null); + } + + /** + * Executes a query on the specified vault. + */ + public ApiClientHttpResponse recordServiceExecuteQuery( + ExecuteQueryRequest request, RequestOptions requestOptions) { + HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) + .newBuilder() + .addPathSegments("v2/query") + .build(); + RequestBody body; + try { + body = RequestBody.create( + ObjectMappers.JSON_MAPPER.writeValueAsBytes(request), MediaTypes.APPLICATION_JSON); + } catch (JsonProcessingException e) { + throw new ApiClientException("Failed to serialize request", e); + } + Request okhttpRequest = new Request.Builder() + .url(httpUrl) + .method("POST", body) + .headers(Headers.of(clientOptions.headers(requestOptions))) + .addHeader("Content-Type", "application/json") + .addHeader("Accept", "application/json") + .build(); + OkHttpClient client = clientOptions.httpClient(); + if (requestOptions != null && requestOptions.getTimeout().isPresent()) { + client = clientOptions.httpClientWithTimeout(requestOptions); + } + try (Response response = client.newCall(okhttpRequest).execute()) { + ResponseBody responseBody = response.body(); + if (response.isSuccessful()) { + return new ApiClientHttpResponse<>( + ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), ExecuteQueryResponse.class), + response); + } + String responseBodyString = responseBody != null ? responseBody.string() : "{}"; + throw new ApiClientApiException( + "Error with status code " + response.code(), + response.code(), + ObjectMappers.JSON_MAPPER.readValue(responseBodyString, Object.class), + response); + } catch (IOException e) { + throw new ApiClientException("Network error executing HTTP request", e); + } + } +} diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/records/RecordsClient.java b/v3/src/main/java/com/skyflow/generated/rest/resources/records/RecordsClient.java new file mode 100644 index 00000000..20c273b7 --- /dev/null +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/records/RecordsClient.java @@ -0,0 +1,49 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +package com.skyflow.generated.rest.resources.records; + +import com.skyflow.generated.rest.core.ClientOptions; +import com.skyflow.generated.rest.core.RequestOptions; +import com.skyflow.generated.rest.resources.records.requests.ExecuteQueryRequest; +import com.skyflow.generated.rest.types.ExecuteQueryResponse; + +public class RecordsClient { + protected final ClientOptions clientOptions; + + private final RawRecordsClient rawClient; + + public RecordsClient(ClientOptions clientOptions) { + this.clientOptions = clientOptions; + this.rawClient = new RawRecordsClient(clientOptions); + } + + /** + * Get responses with HTTP metadata like headers + */ + public RawRecordsClient withRawResponse() { + return this.rawClient; + } + + /** + * Executes a query on the specified vault. + */ + public ExecuteQueryResponse recordServiceExecuteQuery() { + return this.rawClient.recordServiceExecuteQuery().body(); + } + + /** + * Executes a query on the specified vault. + */ + public ExecuteQueryResponse recordServiceExecuteQuery(ExecuteQueryRequest request) { + return this.rawClient.recordServiceExecuteQuery(request).body(); + } + + /** + * Executes a query on the specified vault. + */ + public ExecuteQueryResponse recordServiceExecuteQuery( + ExecuteQueryRequest request, RequestOptions requestOptions) { + return this.rawClient.recordServiceExecuteQuery(request, requestOptions).body(); + } +} diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/ExecuteQueryRequest.java b/v3/src/main/java/com/skyflow/generated/rest/resources/records/requests/ExecuteQueryRequest.java similarity index 86% rename from v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/ExecuteQueryRequest.java rename to v3/src/main/java/com/skyflow/generated/rest/resources/records/requests/ExecuteQueryRequest.java index 9f4a4914..855c2a56 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/ExecuteQueryRequest.java +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/records/requests/ExecuteQueryRequest.java @@ -1,12 +1,17 @@ /** * This file was auto-generated by Fern from our API Definition. */ -package com.skyflow.generated.rest.resources.recordservice.requests; - -import com.fasterxml.jackson.annotation.*; +package com.skyflow.generated.rest.resources.records.requests; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -44,7 +49,7 @@ public Optional getQuery() { return query; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof ExecuteQueryRequest && equalTo((ExecuteQueryRequest) other); @@ -59,12 +64,12 @@ private boolean equalTo(ExecuteQueryRequest other) { return vaultId.equals(other.vaultId) && query.equals(other.query); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.vaultId, this.query); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/AsyncRawRecordserviceClient.java b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/AsyncRawRecordserviceClient.java index dcc988a3..bfa4666c 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/AsyncRawRecordserviceClient.java +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/AsyncRawRecordserviceClient.java @@ -4,14 +4,39 @@ package com.skyflow.generated.rest.resources.recordservice; import com.fasterxml.jackson.core.JsonProcessingException; -import com.skyflow.generated.rest.core.*; -import com.skyflow.generated.rest.resources.recordservice.requests.*; -import com.skyflow.generated.rest.types.*; -import okhttp3.*; -import org.jetbrains.annotations.NotNull; - +import com.skyflow.generated.rest.core.ApiClientApiException; +import com.skyflow.generated.rest.core.ApiClientException; +import com.skyflow.generated.rest.core.ApiClientHttpResponse; +import com.skyflow.generated.rest.core.ClientOptions; +import com.skyflow.generated.rest.core.MediaTypes; +import com.skyflow.generated.rest.core.ObjectMappers; +import com.skyflow.generated.rest.core.RequestOptions; +import com.skyflow.generated.rest.resources.recordservice.requests.DeleteRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.DeleteTokenRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.GetRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.TokenizeRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.UpdateRequest; +import com.skyflow.generated.rest.types.DeleteResponse; +import com.skyflow.generated.rest.types.DeleteTokenResponse; +import com.skyflow.generated.rest.types.DetokenizeResponse; +import com.skyflow.generated.rest.types.GetResponse; +import com.skyflow.generated.rest.types.InsertResponse; +import com.skyflow.generated.rest.types.TokenizeResponse; +import com.skyflow.generated.rest.types.UpdateResponse; import java.io.IOException; import java.util.concurrent.CompletableFuture; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Headers; +import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +import okhttp3.ResponseBody; +import org.jetbrains.annotations.NotNull; public class AsyncRawRecordserviceClient { protected final ClientOptions clientOptions; @@ -20,78 +45,6 @@ public AsyncRawRecordserviceClient(ClientOptions clientOptions) { this.clientOptions = clientOptions; } - /** - * Executes a query on the specified vault. - */ - public CompletableFuture> executequery() { - return executequery(ExecuteQueryRequest.builder().build()); - } - - /** - * Executes a query on the specified vault. - */ - public CompletableFuture> executequery(ExecuteQueryRequest request) { - return executequery(request, null); - } - - /** - * Executes a query on the specified vault. - */ - public CompletableFuture> executequery( - ExecuteQueryRequest request, RequestOptions requestOptions) { - HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) - .newBuilder() - .addPathSegments("v2/query") - .build(); - RequestBody body; - try { - body = RequestBody.create( - ObjectMappers.JSON_MAPPER.writeValueAsBytes(request), MediaTypes.APPLICATION_JSON); - } catch (JsonProcessingException e) { - throw new ApiClientException("Failed to serialize request", e); - } - Request okhttpRequest = new Request.Builder() - .url(httpUrl) - .method("POST", body) - .headers(Headers.of(clientOptions.headers(requestOptions))) - .addHeader("Content-Type", "application/json") - .addHeader("Accept", "application/json") - .build(); - OkHttpClient client = clientOptions.httpClient(); - if (requestOptions != null && requestOptions.getTimeout().isPresent()) { - client = clientOptions.httpClientWithTimeout(requestOptions); - } - CompletableFuture> future = new CompletableFuture<>(); - client.newCall(okhttpRequest).enqueue(new Callback() { - @Override - public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { - try (ResponseBody responseBody = response.body()) { - if (response.isSuccessful()) { - future.complete(new ApiClientHttpResponse<>( - ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), ExecuteQueryResponse.class), - response)); - return; - } - String responseBodyString = responseBody != null ? responseBody.string() : "{}"; - future.completeExceptionally(new ApiClientApiException( - "Error with status code " + response.code(), - response.code(), - ObjectMappers.JSON_MAPPER.readValue(responseBodyString, Object.class), - response)); - return; - } catch (IOException e) { - future.completeExceptionally(new ApiClientException("Network error executing HTTP request", e)); - } - } - - @Override - public void onFailure(@NotNull Call call, @NotNull IOException e) { - future.completeExceptionally(new ApiClientException("Network error executing HTTP request", e)); - } - }); - return future; - } - public CompletableFuture> delete() { return delete(DeleteRequest.builder().build()); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/AsyncRecordserviceClient.java b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/AsyncRecordserviceClient.java index 78746a94..d583d6d4 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/AsyncRecordserviceClient.java +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/AsyncRecordserviceClient.java @@ -5,9 +5,20 @@ import com.skyflow.generated.rest.core.ClientOptions; import com.skyflow.generated.rest.core.RequestOptions; -import com.skyflow.generated.rest.resources.recordservice.requests.*; -import com.skyflow.generated.rest.types.*; - +import com.skyflow.generated.rest.resources.recordservice.requests.DeleteRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.DeleteTokenRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.GetRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.TokenizeRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.UpdateRequest; +import com.skyflow.generated.rest.types.DeleteResponse; +import com.skyflow.generated.rest.types.DeleteTokenResponse; +import com.skyflow.generated.rest.types.DetokenizeResponse; +import com.skyflow.generated.rest.types.GetResponse; +import com.skyflow.generated.rest.types.InsertResponse; +import com.skyflow.generated.rest.types.TokenizeResponse; +import com.skyflow.generated.rest.types.UpdateResponse; import java.util.concurrent.CompletableFuture; public class AsyncRecordserviceClient { @@ -27,28 +38,6 @@ public AsyncRawRecordserviceClient withRawResponse() { return this.rawClient; } - /** - * Executes a query on the specified vault. - */ - public CompletableFuture executequery() { - return this.rawClient.executequery().thenApply(response -> response.body()); - } - - /** - * Executes a query on the specified vault. - */ - public CompletableFuture executequery(ExecuteQueryRequest request) { - return this.rawClient.executequery(request).thenApply(response -> response.body()); - } - - /** - * Executes a query on the specified vault. - */ - public CompletableFuture executequery( - ExecuteQueryRequest request, RequestOptions requestOptions) { - return this.rawClient.executequery(request, requestOptions).thenApply(response -> response.body()); - } - public CompletableFuture delete() { return this.rawClient.delete().thenApply(response -> response.body()); } @@ -118,7 +107,8 @@ public CompletableFuture detokenize(DetokenizeRequest reques return this.rawClient.detokenize(request).thenApply(response -> response.body()); } - public CompletableFuture detokenize(DetokenizeRequest request, RequestOptions requestOptions) { + public CompletableFuture detokenize( + DetokenizeRequest request, RequestOptions requestOptions) { return this.rawClient.detokenize(request, requestOptions).thenApply(response -> response.body()); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/RawRecordserviceClient.java b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/RawRecordserviceClient.java index f4ddaa10..0ea6e50c 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/RawRecordserviceClient.java +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/RawRecordserviceClient.java @@ -4,12 +4,35 @@ package com.skyflow.generated.rest.resources.recordservice; import com.fasterxml.jackson.core.JsonProcessingException; -import com.skyflow.generated.rest.core.*; -import com.skyflow.generated.rest.resources.recordservice.requests.*; -import com.skyflow.generated.rest.types.*; -import okhttp3.*; - +import com.skyflow.generated.rest.core.ApiClientApiException; +import com.skyflow.generated.rest.core.ApiClientException; +import com.skyflow.generated.rest.core.ApiClientHttpResponse; +import com.skyflow.generated.rest.core.ClientOptions; +import com.skyflow.generated.rest.core.MediaTypes; +import com.skyflow.generated.rest.core.ObjectMappers; +import com.skyflow.generated.rest.core.RequestOptions; +import com.skyflow.generated.rest.resources.recordservice.requests.DeleteRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.DeleteTokenRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.GetRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.TokenizeRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.UpdateRequest; +import com.skyflow.generated.rest.types.DeleteResponse; +import com.skyflow.generated.rest.types.DeleteTokenResponse; +import com.skyflow.generated.rest.types.DetokenizeResponse; +import com.skyflow.generated.rest.types.GetResponse; +import com.skyflow.generated.rest.types.InsertResponse; +import com.skyflow.generated.rest.types.TokenizeResponse; +import com.skyflow.generated.rest.types.UpdateResponse; import java.io.IOException; +import okhttp3.Headers; +import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +import okhttp3.ResponseBody; public class RawRecordserviceClient { protected final ClientOptions clientOptions; @@ -18,65 +41,6 @@ public RawRecordserviceClient(ClientOptions clientOptions) { this.clientOptions = clientOptions; } - /** - * Executes a query on the specified vault. - */ - public ApiClientHttpResponse executequery() { - return executequery(ExecuteQueryRequest.builder().build()); - } - - /** - * Executes a query on the specified vault. - */ - public ApiClientHttpResponse executequery(ExecuteQueryRequest request) { - return executequery(request, null); - } - - /** - * Executes a query on the specified vault. - */ - public ApiClientHttpResponse executequery( - ExecuteQueryRequest request, RequestOptions requestOptions) { - HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) - .newBuilder() - .addPathSegments("v2/query") - .build(); - RequestBody body; - try { - body = RequestBody.create( - ObjectMappers.JSON_MAPPER.writeValueAsBytes(request), MediaTypes.APPLICATION_JSON); - } catch (JsonProcessingException e) { - throw new ApiClientException("Failed to serialize request", e); - } - Request okhttpRequest = new Request.Builder() - .url(httpUrl) - .method("POST", body) - .headers(Headers.of(clientOptions.headers(requestOptions))) - .addHeader("Content-Type", "application/json") - .addHeader("Accept", "application/json") - .build(); - OkHttpClient client = clientOptions.httpClient(); - if (requestOptions != null && requestOptions.getTimeout().isPresent()) { - client = clientOptions.httpClientWithTimeout(requestOptions); - } - try (Response response = client.newCall(okhttpRequest).execute()) { - ResponseBody responseBody = response.body(); - if (response.isSuccessful()) { - return new ApiClientHttpResponse<>( - ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), ExecuteQueryResponse.class), - response); - } - String responseBodyString = responseBody != null ? responseBody.string() : "{}"; - throw new ApiClientApiException( - "Error with status code " + response.code(), - response.code(), - ObjectMappers.JSON_MAPPER.readValue(responseBodyString, Object.class), - response); - } catch (IOException e) { - throw new ApiClientException("Network error executing HTTP request", e); - } - } - public ApiClientHttpResponse delete() { return delete(DeleteRequest.builder().build()); } @@ -355,7 +319,8 @@ public ApiClientHttpResponse detokenize( ResponseBody responseBody = response.body(); if (response.isSuccessful()) { return new ApiClientHttpResponse<>( - ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), DetokenizeResponse.class), response); + ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), DetokenizeResponse.class), + response); } String responseBodyString = responseBody != null ? responseBody.string() : "{}"; throw new ApiClientApiException( @@ -376,7 +341,8 @@ public ApiClientHttpResponse tokenize(TokenizeRequest request) return tokenize(request, null); } - public ApiClientHttpResponse tokenize(TokenizeRequest request, RequestOptions requestOptions) { + public ApiClientHttpResponse tokenize( + TokenizeRequest request, RequestOptions requestOptions) { HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) .newBuilder() .addPathSegments("v2/tokens/get") diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/RecordserviceClient.java b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/RecordserviceClient.java index 53e22f6e..e6ff7997 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/RecordserviceClient.java +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/RecordserviceClient.java @@ -5,8 +5,20 @@ import com.skyflow.generated.rest.core.ClientOptions; import com.skyflow.generated.rest.core.RequestOptions; -import com.skyflow.generated.rest.resources.recordservice.requests.*; -import com.skyflow.generated.rest.types.*; +import com.skyflow.generated.rest.resources.recordservice.requests.DeleteRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.DeleteTokenRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.GetRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.TokenizeRequest; +import com.skyflow.generated.rest.resources.recordservice.requests.UpdateRequest; +import com.skyflow.generated.rest.types.DeleteResponse; +import com.skyflow.generated.rest.types.DeleteTokenResponse; +import com.skyflow.generated.rest.types.DetokenizeResponse; +import com.skyflow.generated.rest.types.GetResponse; +import com.skyflow.generated.rest.types.InsertResponse; +import com.skyflow.generated.rest.types.TokenizeResponse; +import com.skyflow.generated.rest.types.UpdateResponse; public class RecordserviceClient { protected final ClientOptions clientOptions; @@ -25,27 +37,6 @@ public RawRecordserviceClient withRawResponse() { return this.rawClient; } - /** - * Executes a query on the specified vault. - */ - public ExecuteQueryResponse executequery() { - return this.rawClient.executequery().body(); - } - - /** - * Executes a query on the specified vault. - */ - public ExecuteQueryResponse executequery(ExecuteQueryRequest request) { - return this.rawClient.executequery(request).body(); - } - - /** - * Executes a query on the specified vault. - */ - public ExecuteQueryResponse executequery(ExecuteQueryRequest request, RequestOptions requestOptions) { - return this.rawClient.executequery(request, requestOptions).body(); - } - public DeleteResponse delete() { return this.rawClient.delete().body(); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/DeleteRequest.java b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/DeleteRequest.java index 073da6cb..6a52143e 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/DeleteRequest.java +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/DeleteRequest.java @@ -3,11 +3,20 @@ */ package com.skyflow.generated.rest.resources.recordservice.requests; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = DeleteRequest.Builder.class) @@ -55,7 +64,7 @@ public Optional> getSkyflowIDs() { return skyflowIDs; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof DeleteRequest && equalTo((DeleteRequest) other); @@ -72,12 +81,12 @@ private boolean equalTo(DeleteRequest other) { && skyflowIDs.equals(other.skyflowIDs); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.vaultId, this.tableName, this.skyflowIDs); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/DeleteTokenRequest.java b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/DeleteTokenRequest.java index 4d7039a8..d234eaad 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/DeleteTokenRequest.java +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/DeleteTokenRequest.java @@ -3,11 +3,20 @@ */ package com.skyflow.generated.rest.resources.recordservice.requests; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = DeleteTokenRequest.Builder.class) @@ -41,7 +50,7 @@ public Optional> getTokens() { return tokens; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof DeleteTokenRequest && equalTo((DeleteTokenRequest) other); @@ -56,12 +65,12 @@ private boolean equalTo(DeleteTokenRequest other) { return vaultId.equals(other.vaultId) && tokens.equals(other.tokens); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.vaultId, this.tokens); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/DetokenizeRequest.java b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/DetokenizeRequest.java index ae1c837c..7e806056 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/DetokenizeRequest.java +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/DetokenizeRequest.java @@ -3,12 +3,21 @@ */ package com.skyflow.generated.rest.resources.recordservice.requests; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; import com.skyflow.generated.rest.types.TokenGroupRedactions; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = DetokenizeRequest.Builder.class) @@ -56,7 +65,7 @@ public Optional> getTokenGroupRedactions() { return tokenGroupRedactions; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof DetokenizeRequest && equalTo((DetokenizeRequest) other); @@ -73,12 +82,12 @@ private boolean equalTo(DetokenizeRequest other) { && tokenGroupRedactions.equals(other.tokenGroupRedactions); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.vaultId, this.tokens, this.tokenGroupRedactions); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/GetRequest.java b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/GetRequest.java index d9367799..79d49ed2 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/GetRequest.java +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/GetRequest.java @@ -3,12 +3,23 @@ */ package com.skyflow.generated.rest.resources.recordservice.requests; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; import com.skyflow.generated.rest.types.ColumnRedactions; - -import java.util.*; +import com.skyflow.generated.rest.types.GetRequestData; +import com.skyflow.generated.rest.types.UniqueValue; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = GetRequest.Builder.class) @@ -27,6 +38,10 @@ public final class GetRequest { private final Optional offset; + private final Optional> uniqueValues; + + private final Optional> records; + private final Map additionalProperties; private GetRequest( @@ -37,6 +52,8 @@ private GetRequest( Optional> columns, Optional limit, Optional offset, + Optional> uniqueValues, + Optional> records, Map additionalProperties) { this.vaultId = vaultId; this.tableName = tableName; @@ -45,6 +62,8 @@ private GetRequest( this.columns = columns; this.limit = limit; this.offset = offset; + this.uniqueValues = uniqueValues; + this.records = records; this.additionalProperties = additionalProperties; } @@ -104,7 +123,23 @@ public Optional getOffset() { return offset; } - @Override + /** + * @return List of unique constraint values to query records by data + */ + @JsonProperty("uniqueValues") + public Optional> getUniqueValues() { + return uniqueValues; + } + + /** + * @return List of records to be fetched. This field contains tableName and skyflowIDs belonging to the table. + */ + @JsonProperty("records") + public Optional> getRecords() { + return records; + } + + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof GetRequest && equalTo((GetRequest) other); @@ -122,10 +157,12 @@ private boolean equalTo(GetRequest other) { && columnRedactions.equals(other.columnRedactions) && columns.equals(other.columns) && limit.equals(other.limit) - && offset.equals(other.offset); + && offset.equals(other.offset) + && uniqueValues.equals(other.uniqueValues) + && records.equals(other.records); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash( this.vaultId, @@ -134,10 +171,12 @@ public int hashCode() { this.columnRedactions, this.columns, this.limit, - this.offset); + this.offset, + this.uniqueValues, + this.records); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } @@ -162,6 +201,10 @@ public static final class Builder { private Optional offset = Optional.empty(); + private Optional> uniqueValues = Optional.empty(); + + private Optional> records = Optional.empty(); + @JsonAnySetter private Map additionalProperties = new HashMap<>(); @@ -175,6 +218,8 @@ public Builder from(GetRequest other) { columns(other.getColumns()); limit(other.getLimit()); offset(other.getOffset()); + uniqueValues(other.getUniqueValues()); + records(other.getRecords()); return this; } @@ -276,9 +321,46 @@ public Builder offset(Integer offset) { return this; } + /** + *

List of unique constraint values to query records by data

+ */ + @JsonSetter(value = "uniqueValues", nulls = Nulls.SKIP) + public Builder uniqueValues(Optional> uniqueValues) { + this.uniqueValues = uniqueValues; + return this; + } + + public Builder uniqueValues(List uniqueValues) { + this.uniqueValues = Optional.ofNullable(uniqueValues); + return this; + } + + /** + *

List of records to be fetched. This field contains tableName and skyflowIDs belonging to the table.

+ */ + @JsonSetter(value = "records", nulls = Nulls.SKIP) + public Builder records(Optional> records) { + this.records = records; + return this; + } + + public Builder records(List records) { + this.records = Optional.ofNullable(records); + return this; + } + public GetRequest build() { return new GetRequest( - vaultId, tableName, skyflowIDs, columnRedactions, columns, limit, offset, additionalProperties); + vaultId, + tableName, + skyflowIDs, + columnRedactions, + columns, + limit, + offset, + uniqueValues, + records, + additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/InsertRequest.java b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/InsertRequest.java index 1ebb5dfb..0c1b2248 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/InsertRequest.java +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/InsertRequest.java @@ -3,13 +3,22 @@ */ package com.skyflow.generated.rest.resources.recordservice.requests; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; import com.skyflow.generated.rest.types.InsertRecordData; import com.skyflow.generated.rest.types.Upsert; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = InsertRequest.Builder.class) @@ -66,7 +75,7 @@ public Optional getUpsert() { return upsert; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof InsertRequest && equalTo((InsertRequest) other); @@ -84,12 +93,12 @@ private boolean equalTo(InsertRequest other) { && upsert.equals(other.upsert); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.vaultId, this.tableName, this.records, this.upsert); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/TokenizeRequest.java b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/TokenizeRequest.java index e1056b7e..d0f32e5b 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/TokenizeRequest.java +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/TokenizeRequest.java @@ -3,12 +3,21 @@ */ package com.skyflow.generated.rest.resources.recordservice.requests; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; import com.skyflow.generated.rest.types.TokenizeRequestObject; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = TokenizeRequest.Builder.class) @@ -44,7 +53,7 @@ public Optional> getData() { return data; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof TokenizeRequest && equalTo((TokenizeRequest) other); @@ -59,12 +68,12 @@ private boolean equalTo(TokenizeRequest other) { return vaultId.equals(other.vaultId) && data.equals(other.data); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.vaultId, this.data); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/UpdateRequest.java b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/UpdateRequest.java index aa859087..9473a492 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/UpdateRequest.java +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/UpdateRequest.java @@ -3,13 +3,22 @@ */ package com.skyflow.generated.rest.resources.recordservice.requests; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; import com.skyflow.generated.rest.types.EnumUpdateType; import com.skyflow.generated.rest.types.UpdateRecordData; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = UpdateRequest.Builder.class) @@ -66,7 +75,7 @@ public Optional getUpdateType() { return updateType; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof UpdateRequest && equalTo((UpdateRequest) other); @@ -84,12 +93,12 @@ private boolean equalTo(UpdateRequest other) { && updateType.equals(other.updateType); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.vaultId, this.tableName, this.records, this.updateType); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/ColumnRedactions.java b/v3/src/main/java/com/skyflow/generated/rest/types/ColumnRedactions.java index bd0c6915..6e211ab1 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/ColumnRedactions.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/ColumnRedactions.java @@ -3,10 +3,15 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -44,7 +49,7 @@ public Optional getRedaction() { return redaction; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof ColumnRedactions && equalTo((ColumnRedactions) other); @@ -59,12 +64,12 @@ private boolean equalTo(ColumnRedactions other) { return columnName.equals(other.columnName) && redaction.equals(other.redaction); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.columnName, this.redaction); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/DeleteResponse.java b/v3/src/main/java/com/skyflow/generated/rest/types/DeleteResponse.java index d3d825f0..2453f7d2 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/DeleteResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/DeleteResponse.java @@ -3,11 +3,20 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = DeleteResponse.Builder.class) @@ -29,7 +38,7 @@ public Optional> getRecords() { return records; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof DeleteResponse && equalTo((DeleteResponse) other); @@ -44,12 +53,12 @@ private boolean equalTo(DeleteResponse other) { return records.equals(other.records); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.records); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/DeleteResponseObject.java b/v3/src/main/java/com/skyflow/generated/rest/types/DeleteResponseObject.java index 31d34920..bd7f38d7 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/DeleteResponseObject.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/DeleteResponseObject.java @@ -3,10 +3,15 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -58,7 +63,7 @@ public Optional getHttpCode() { return httpCode; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof DeleteResponseObject && equalTo((DeleteResponseObject) other); @@ -73,12 +78,12 @@ private boolean equalTo(DeleteResponseObject other) { return skyflowId.equals(other.skyflowId) && error.equals(other.error) && httpCode.equals(other.httpCode); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.skyflowId, this.error, this.httpCode); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/DeleteTokenResponse.java b/v3/src/main/java/com/skyflow/generated/rest/types/DeleteTokenResponse.java index 728c1877..85d991e7 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/DeleteTokenResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/DeleteTokenResponse.java @@ -3,11 +3,20 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = DeleteTokenResponse.Builder.class) @@ -30,7 +39,7 @@ public Optional> getTokens() { return tokens; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof DeleteTokenResponse && equalTo((DeleteTokenResponse) other); @@ -45,12 +54,12 @@ private boolean equalTo(DeleteTokenResponse other) { return tokens.equals(other.tokens); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.tokens); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/DeleteTokenResponseObject.java b/v3/src/main/java/com/skyflow/generated/rest/types/DeleteTokenResponseObject.java index 98e3620f..bdbaf489 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/DeleteTokenResponseObject.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/DeleteTokenResponseObject.java @@ -3,10 +3,15 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -58,7 +63,7 @@ public Optional getHttpCode() { return httpCode; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof DeleteTokenResponseObject && equalTo((DeleteTokenResponseObject) other); @@ -73,12 +78,12 @@ private boolean equalTo(DeleteTokenResponseObject other) { return value.equals(other.value) && error.equals(other.error) && httpCode.equals(other.httpCode); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.value, this.error, this.httpCode); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/DetokenizeResponse.java b/v3/src/main/java/com/skyflow/generated/rest/types/DetokenizeResponse.java index 7e3fa23a..612da851 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/DetokenizeResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/DetokenizeResponse.java @@ -3,11 +3,20 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = DetokenizeResponse.Builder.class) @@ -30,7 +39,7 @@ public Optional> getResponse() { return response; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof DetokenizeResponse && equalTo((DetokenizeResponse) other); @@ -45,12 +54,12 @@ private boolean equalTo(DetokenizeResponse other) { return response.equals(other.response); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.response); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/DetokenizeResponseObject.java b/v3/src/main/java/com/skyflow/generated/rest/types/DetokenizeResponseObject.java index ed7ed16d..4cdefb63 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/DetokenizeResponseObject.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/DetokenizeResponseObject.java @@ -3,10 +3,15 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -91,7 +96,7 @@ public Optional> getMetadata() { return metadata; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof DetokenizeResponseObject && equalTo((DetokenizeResponseObject) other); @@ -111,12 +116,12 @@ private boolean equalTo(DetokenizeResponseObject other) { && metadata.equals(other.metadata); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.token, this.value, this.tokenGroupName, this.error, this.httpCode, this.metadata); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/EnumDataType.java b/v3/src/main/java/com/skyflow/generated/rest/types/EnumDataType.java index eda51d21..c3e45088 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/EnumDataType.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/EnumDataType.java @@ -23,7 +23,7 @@ public enum EnumDataType { } @JsonValue - @Override + @java.lang.Override public String toString() { return this.value; } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/EnumUpdateType.java b/v3/src/main/java/com/skyflow/generated/rest/types/EnumUpdateType.java index a435ac27..cb0d94e0 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/EnumUpdateType.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/EnumUpdateType.java @@ -17,7 +17,7 @@ public enum EnumUpdateType { } @JsonValue - @Override + @java.lang.Override public String toString() { return this.value; } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryRecordResponse.java b/v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryRecordResponse.java index 5a670a73..54c87448 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryRecordResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryRecordResponse.java @@ -3,10 +3,15 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -32,7 +37,7 @@ public Optional> getData() { return data; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof ExecuteQueryRecordResponse && equalTo((ExecuteQueryRecordResponse) other); @@ -47,12 +52,12 @@ private boolean equalTo(ExecuteQueryRecordResponse other) { return data.equals(other.data); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.data); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryResponse.java b/v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryResponse.java index e9eb635a..df9c4776 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryResponse.java @@ -3,22 +3,36 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = ExecuteQueryResponse.Builder.class) public final class ExecuteQueryResponse { private final Optional> records; + private final Optional metadata; + private final Map additionalProperties; private ExecuteQueryResponse( - Optional> records, Map additionalProperties) { + Optional> records, + Optional metadata, + Map additionalProperties) { this.records = records; + this.metadata = metadata; this.additionalProperties = additionalProperties; } @@ -30,7 +44,12 @@ public Optional> getRecords() { return records; } - @Override + @JsonProperty("metadata") + public Optional getMetadata() { + return metadata; + } + + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof ExecuteQueryResponse && equalTo((ExecuteQueryResponse) other); @@ -42,15 +61,15 @@ public Map getAdditionalProperties() { } private boolean equalTo(ExecuteQueryResponse other) { - return records.equals(other.records); + return records.equals(other.records) && metadata.equals(other.metadata); } - @Override + @java.lang.Override public int hashCode() { - return Objects.hash(this.records); + return Objects.hash(this.records, this.metadata); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } @@ -63,6 +82,8 @@ public static Builder builder() { public static final class Builder { private Optional> records = Optional.empty(); + private Optional metadata = Optional.empty(); + @JsonAnySetter private Map additionalProperties = new HashMap<>(); @@ -70,6 +91,7 @@ private Builder() {} public Builder from(ExecuteQueryResponse other) { records(other.getRecords()); + metadata(other.getMetadata()); return this; } @@ -87,8 +109,19 @@ public Builder records(List records) { return this; } + @JsonSetter(value = "metadata", nulls = Nulls.SKIP) + public Builder metadata(Optional metadata) { + this.metadata = metadata; + return this; + } + + public Builder metadata(ExecuteQueryResponseMetadata metadata) { + this.metadata = Optional.ofNullable(metadata); + return this; + } + public ExecuteQueryResponse build() { - return new ExecuteQueryResponse(records, additionalProperties); + return new ExecuteQueryResponse(records, metadata, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryResponseMetadata.java b/v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryResponseMetadata.java new file mode 100644 index 00000000..57150649 --- /dev/null +++ b/v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryResponseMetadata.java @@ -0,0 +1,102 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +package com.skyflow.generated.rest.types; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.skyflow.generated.rest.core.ObjectMappers; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +@JsonInclude(JsonInclude.Include.NON_ABSENT) +@JsonDeserialize(builder = ExecuteQueryResponseMetadata.Builder.class) +public final class ExecuteQueryResponseMetadata { + private final Optional> columns; + + private final Map additionalProperties; + + private ExecuteQueryResponseMetadata(Optional> columns, Map additionalProperties) { + this.columns = columns; + this.additionalProperties = additionalProperties; + } + + /** + * @return Return columns for the query + */ + @JsonProperty("columns") + public Optional> getColumns() { + return columns; + } + + @java.lang.Override + public boolean equals(Object other) { + if (this == other) return true; + return other instanceof ExecuteQueryResponseMetadata && equalTo((ExecuteQueryResponseMetadata) other); + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + private boolean equalTo(ExecuteQueryResponseMetadata other) { + return columns.equals(other.columns); + } + + @java.lang.Override + public int hashCode() { + return Objects.hash(this.columns); + } + + @java.lang.Override + public String toString() { + return ObjectMappers.stringify(this); + } + + public static Builder builder() { + return new Builder(); + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static final class Builder { + private Optional> columns = Optional.empty(); + + @JsonAnySetter + private Map additionalProperties = new HashMap<>(); + + private Builder() {} + + public Builder from(ExecuteQueryResponseMetadata other) { + columns(other.getColumns()); + return this; + } + + /** + *

Return columns for the query

+ */ + @JsonSetter(value = "columns", nulls = Nulls.SKIP) + public Builder columns(Optional> columns) { + this.columns = columns; + return this; + } + + public Builder columns(List columns) { + this.columns = Optional.ofNullable(columns); + return this; + } + + public ExecuteQueryResponseMetadata build() { + return new ExecuteQueryResponseMetadata(columns, additionalProperties); + } + } +} diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/GetRequestData.java b/v3/src/main/java/com/skyflow/generated/rest/types/GetRequestData.java new file mode 100644 index 00000000..0d6319f0 --- /dev/null +++ b/v3/src/main/java/com/skyflow/generated/rest/types/GetRequestData.java @@ -0,0 +1,225 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +package com.skyflow.generated.rest.types; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.skyflow.generated.rest.core.ObjectMappers; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +@JsonInclude(JsonInclude.Include.NON_ABSENT) +@JsonDeserialize(builder = GetRequestData.Builder.class) +public final class GetRequestData { + private final Optional tableName; + + private final Optional> skyflowIDs; + + private final Optional> columnRedactions; + + private final Optional> columns; + + private final Optional> uniqueValues; + + private final Map additionalProperties; + + private GetRequestData( + Optional tableName, + Optional> skyflowIDs, + Optional> columnRedactions, + Optional> columns, + Optional> uniqueValues, + Map additionalProperties) { + this.tableName = tableName; + this.skyflowIDs = skyflowIDs; + this.columnRedactions = columnRedactions; + this.columns = columns; + this.uniqueValues = uniqueValues; + this.additionalProperties = additionalProperties; + } + + /** + * @return Name of the table where data is being fetched + */ + @JsonProperty("tableName") + public Optional getTableName() { + return tableName; + } + + /** + * @return Skyflow ID for the record to be fetched + */ + @JsonProperty("skyflowIDs") + public Optional> getSkyflowIDs() { + return skyflowIDs; + } + + /** + * @return List of columns to be redacted. + */ + @JsonProperty("columnRedactions") + public Optional> getColumnRedactions() { + return columnRedactions; + } + + /** + * @return List of columns to be fetched. + */ + @JsonProperty("columns") + public Optional> getColumns() { + return columns; + } + + /** + * @return List of unique constraint values to query records by data + */ + @JsonProperty("uniqueValues") + public Optional> getUniqueValues() { + return uniqueValues; + } + + @java.lang.Override + public boolean equals(Object other) { + if (this == other) return true; + return other instanceof GetRequestData && equalTo((GetRequestData) other); + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + private boolean equalTo(GetRequestData other) { + return tableName.equals(other.tableName) + && skyflowIDs.equals(other.skyflowIDs) + && columnRedactions.equals(other.columnRedactions) + && columns.equals(other.columns) + && uniqueValues.equals(other.uniqueValues); + } + + @java.lang.Override + public int hashCode() { + return Objects.hash(this.tableName, this.skyflowIDs, this.columnRedactions, this.columns, this.uniqueValues); + } + + @java.lang.Override + public String toString() { + return ObjectMappers.stringify(this); + } + + public static Builder builder() { + return new Builder(); + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static final class Builder { + private Optional tableName = Optional.empty(); + + private Optional> skyflowIDs = Optional.empty(); + + private Optional> columnRedactions = Optional.empty(); + + private Optional> columns = Optional.empty(); + + private Optional> uniqueValues = Optional.empty(); + + @JsonAnySetter + private Map additionalProperties = new HashMap<>(); + + private Builder() {} + + public Builder from(GetRequestData other) { + tableName(other.getTableName()); + skyflowIDs(other.getSkyflowIDs()); + columnRedactions(other.getColumnRedactions()); + columns(other.getColumns()); + uniqueValues(other.getUniqueValues()); + return this; + } + + /** + *

Name of the table where data is being fetched

+ */ + @JsonSetter(value = "tableName", nulls = Nulls.SKIP) + public Builder tableName(Optional tableName) { + this.tableName = tableName; + return this; + } + + public Builder tableName(String tableName) { + this.tableName = Optional.ofNullable(tableName); + return this; + } + + /** + *

Skyflow ID for the record to be fetched

+ */ + @JsonSetter(value = "skyflowIDs", nulls = Nulls.SKIP) + public Builder skyflowIDs(Optional> skyflowIDs) { + this.skyflowIDs = skyflowIDs; + return this; + } + + public Builder skyflowIDs(List skyflowIDs) { + this.skyflowIDs = Optional.ofNullable(skyflowIDs); + return this; + } + + /** + *

List of columns to be redacted.

+ */ + @JsonSetter(value = "columnRedactions", nulls = Nulls.SKIP) + public Builder columnRedactions(Optional> columnRedactions) { + this.columnRedactions = columnRedactions; + return this; + } + + public Builder columnRedactions(List columnRedactions) { + this.columnRedactions = Optional.ofNullable(columnRedactions); + return this; + } + + /** + *

List of columns to be fetched.

+ */ + @JsonSetter(value = "columns", nulls = Nulls.SKIP) + public Builder columns(Optional> columns) { + this.columns = columns; + return this; + } + + public Builder columns(List columns) { + this.columns = Optional.ofNullable(columns); + return this; + } + + /** + *

List of unique constraint values to query records by data

+ */ + @JsonSetter(value = "uniqueValues", nulls = Nulls.SKIP) + public Builder uniqueValues(Optional> uniqueValues) { + this.uniqueValues = uniqueValues; + return this; + } + + public Builder uniqueValues(List uniqueValues) { + this.uniqueValues = Optional.ofNullable(uniqueValues); + return this; + } + + public GetRequestData build() { + return new GetRequestData( + tableName, skyflowIDs, columnRedactions, columns, uniqueValues, additionalProperties); + } + } +} diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/GetResponse.java b/v3/src/main/java/com/skyflow/generated/rest/types/GetResponse.java index 190ce169..d12316bd 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/GetResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/GetResponse.java @@ -3,11 +3,20 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = GetResponse.Builder.class) @@ -29,7 +38,7 @@ public Optional> getRecords() { return records; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof GetResponse && equalTo((GetResponse) other); @@ -44,12 +53,12 @@ private boolean equalTo(GetResponse other) { return records.equals(other.records); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.records); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/GoogleprotobufAny.java b/v3/src/main/java/com/skyflow/generated/rest/types/GoogleprotobufAny.java new file mode 100644 index 00000000..3051270a --- /dev/null +++ b/v3/src/main/java/com/skyflow/generated/rest/types/GoogleprotobufAny.java @@ -0,0 +1,151 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +package com.skyflow.generated.rest.types; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.skyflow.generated.rest.core.ObjectMappers; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +@JsonInclude(JsonInclude.Include.NON_ABSENT) +@JsonDeserialize(builder = GoogleprotobufAny.Builder.class) +public final class GoogleprotobufAny { + private final Optional type; + + private final Map additionalProperties; + + private GoogleprotobufAny(Optional type, Map additionalProperties) { + this.type = type; + this.additionalProperties = additionalProperties; + } + + /** + * @return A URL/resource name that uniquely identifies the type of the serialized + * protocol buffer message. This string must contain at least + * one "/" character. The last segment of the URL's path must represent + * the fully qualified name of the type (as in + * path/google.protobuf.Duration). The name should be in a canonical form + * (e.g., leading "." is not accepted). + *

In practice, teams usually precompile into the binary all types that they + * expect it to use in the context of Any. However, for URLs which use the + * scheme http, https, or no scheme, one can optionally set up a type + * server that maps type URLs to message definitions as follows:

+ *
    + *
  • If no scheme is provided, https is assumed.
  • + *
  • An HTTP GET on the URL must yield a [google.protobuf.Type][] + * value in binary format, or produce an error.
  • + *
  • Applications are allowed to cache lookup results based on the + * URL, or have them precompiled into a binary to avoid any + * lookup. Therefore, binary compatibility needs to be preserved + * on changes to types. (Use versioned type names to manage + * breaking changes.)
  • + *
+ *

Note: this functionality is not currently available in the official + * protobuf release, and it is not used for type URLs beginning with + * type.googleapis.com. As of May 2023, there are no widely used type server + * implementations and no plans to implement one.

+ *

Schemes other than http, https (or the empty scheme) might be + * used with implementation specific semantics.

+ */ + @JsonProperty("@type") + public Optional getType() { + return type; + } + + @java.lang.Override + public boolean equals(Object other) { + if (this == other) return true; + return other instanceof GoogleprotobufAny && equalTo((GoogleprotobufAny) other); + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + private boolean equalTo(GoogleprotobufAny other) { + return type.equals(other.type); + } + + @java.lang.Override + public int hashCode() { + return Objects.hash(this.type); + } + + @java.lang.Override + public String toString() { + return ObjectMappers.stringify(this); + } + + public static Builder builder() { + return new Builder(); + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static final class Builder { + private Optional type = Optional.empty(); + + @JsonAnySetter + private Map additionalProperties = new HashMap<>(); + + private Builder() {} + + public Builder from(GoogleprotobufAny other) { + type(other.getType()); + return this; + } + + /** + *

A URL/resource name that uniquely identifies the type of the serialized + * protocol buffer message. This string must contain at least + * one "/" character. The last segment of the URL's path must represent + * the fully qualified name of the type (as in + * path/google.protobuf.Duration). The name should be in a canonical form + * (e.g., leading "." is not accepted).

+ *

In practice, teams usually precompile into the binary all types that they + * expect it to use in the context of Any. However, for URLs which use the + * scheme http, https, or no scheme, one can optionally set up a type + * server that maps type URLs to message definitions as follows:

+ *
    + *
  • If no scheme is provided, https is assumed.
  • + *
  • An HTTP GET on the URL must yield a [google.protobuf.Type][] + * value in binary format, or produce an error.
  • + *
  • Applications are allowed to cache lookup results based on the + * URL, or have them precompiled into a binary to avoid any + * lookup. Therefore, binary compatibility needs to be preserved + * on changes to types. (Use versioned type names to manage + * breaking changes.)
  • + *
+ *

Note: this functionality is not currently available in the official + * protobuf release, and it is not used for type URLs beginning with + * type.googleapis.com. As of May 2023, there are no widely used type server + * implementations and no plans to implement one.

+ *

Schemes other than http, https (or the empty scheme) might be + * used with implementation specific semantics.

+ */ + @JsonSetter(value = "@type", nulls = Nulls.SKIP) + public Builder type(Optional type) { + this.type = type; + return this; + } + + public Builder type(String type) { + this.type = Optional.ofNullable(type); + return this; + } + + public GoogleprotobufAny build() { + return new GoogleprotobufAny(type, additionalProperties); + } + } +} diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/InsertRecordData.java b/v3/src/main/java/com/skyflow/generated/rest/types/InsertRecordData.java index 2738332b..6bf88902 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/InsertRecordData.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/InsertRecordData.java @@ -3,10 +3,15 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -19,14 +24,22 @@ public final class InsertRecordData { private final Optional> tokens; + private final Optional tableName; + + private final Optional upsert; + private final Map additionalProperties; private InsertRecordData( Optional> data, Optional> tokens, + Optional tableName, + Optional upsert, Map additionalProperties) { this.data = data; this.tokens = tokens; + this.tableName = tableName; + this.upsert = upsert; this.additionalProperties = additionalProperties; } @@ -39,14 +52,27 @@ public Optional> getData() { } /** - * @return Tokens data for the columns if any + * @return undocumented_field; Tokens data for the columns if any */ @JsonProperty("tokens") public Optional> getTokens() { return tokens; } - @Override + /** + * @return Table name for the record + */ + @JsonProperty("tableName") + public Optional getTableName() { + return tableName; + } + + @JsonProperty("upsert") + public Optional getUpsert() { + return upsert; + } + + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof InsertRecordData && equalTo((InsertRecordData) other); @@ -58,15 +84,18 @@ public Map getAdditionalProperties() { } private boolean equalTo(InsertRecordData other) { - return data.equals(other.data) && tokens.equals(other.tokens); + return data.equals(other.data) + && tokens.equals(other.tokens) + && tableName.equals(other.tableName) + && upsert.equals(other.upsert); } - @Override + @java.lang.Override public int hashCode() { - return Objects.hash(this.data, this.tokens); + return Objects.hash(this.data, this.tokens, this.tableName, this.upsert); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } @@ -81,6 +110,10 @@ public static final class Builder { private Optional> tokens = Optional.empty(); + private Optional tableName = Optional.empty(); + + private Optional upsert = Optional.empty(); + @JsonAnySetter private Map additionalProperties = new HashMap<>(); @@ -89,6 +122,8 @@ private Builder() {} public Builder from(InsertRecordData other) { data(other.getData()); tokens(other.getTokens()); + tableName(other.getTableName()); + upsert(other.getUpsert()); return this; } @@ -107,7 +142,7 @@ public Builder data(Map data) { } /** - *

Tokens data for the columns if any

+ *

undocumented_field; Tokens data for the columns if any

*/ @JsonSetter(value = "tokens", nulls = Nulls.SKIP) public Builder tokens(Optional> tokens) { @@ -120,8 +155,33 @@ public Builder tokens(Map tokens) { return this; } + /** + *

Table name for the record

+ */ + @JsonSetter(value = "tableName", nulls = Nulls.SKIP) + public Builder tableName(Optional tableName) { + this.tableName = tableName; + return this; + } + + public Builder tableName(String tableName) { + this.tableName = Optional.ofNullable(tableName); + return this; + } + + @JsonSetter(value = "upsert", nulls = Nulls.SKIP) + public Builder upsert(Optional upsert) { + this.upsert = upsert; + return this; + } + + public Builder upsert(Upsert upsert) { + this.upsert = Optional.ofNullable(upsert); + return this; + } + public InsertRecordData build() { - return new InsertRecordData(data, tokens, additionalProperties); + return new InsertRecordData(data, tokens, tableName, upsert, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/InsertResponse.java b/v3/src/main/java/com/skyflow/generated/rest/types/InsertResponse.java index 9b577820..50f3dc20 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/InsertResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/InsertResponse.java @@ -3,11 +3,20 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = InsertResponse.Builder.class) @@ -29,7 +38,7 @@ public Optional> getRecords() { return records; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof InsertResponse && equalTo((InsertResponse) other); @@ -44,12 +53,12 @@ private boolean equalTo(InsertResponse other) { return records.equals(other.records); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.records); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/ProtobufAny.java b/v3/src/main/java/com/skyflow/generated/rest/types/ProtobufAny.java deleted file mode 100644 index 40e73b99..00000000 --- a/v3/src/main/java/com/skyflow/generated/rest/types/ProtobufAny.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -package com.skyflow.generated.rest.types; - -import com.fasterxml.jackson.annotation.*; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.skyflow.generated.rest.core.ObjectMappers; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; - -@JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = ProtobufAny.Builder.class) -public final class ProtobufAny { - private final Optional type; - - private final Map additionalProperties; - - private ProtobufAny(Optional type, Map additionalProperties) { - this.type = type; - this.additionalProperties = additionalProperties; - } - - @JsonProperty("@type") - public Optional getType() { - return type; - } - - @Override - public boolean equals(Object other) { - if (this == other) return true; - return other instanceof ProtobufAny && equalTo((ProtobufAny) other); - } - - @JsonAnyGetter - public Map getAdditionalProperties() { - return this.additionalProperties; - } - - private boolean equalTo(ProtobufAny other) { - return type.equals(other.type); - } - - @Override - public int hashCode() { - return Objects.hash(this.type); - } - - @Override - public String toString() { - return ObjectMappers.stringify(this); - } - - public static Builder builder() { - return new Builder(); - } - - @JsonIgnoreProperties(ignoreUnknown = true) - public static final class Builder { - private Optional type = Optional.empty(); - - @JsonAnySetter - private Map additionalProperties = new HashMap<>(); - - private Builder() {} - - public Builder from(ProtobufAny other) { - type(other.getType()); - return this; - } - - @JsonSetter(value = "@type", nulls = Nulls.SKIP) - public Builder type(Optional type) { - this.type = type; - return this; - } - - public Builder type(String type) { - this.type = Optional.ofNullable(type); - return this; - } - - public ProtobufAny build() { - return new ProtobufAny(type, additionalProperties); - } - } -} diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/RecordResponseObject.java b/v3/src/main/java/com/skyflow/generated/rest/types/RecordResponseObject.java index 8e47bba0..def78ed2 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/RecordResponseObject.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/RecordResponseObject.java @@ -3,10 +3,15 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -27,6 +32,8 @@ public final class RecordResponseObject { private final Optional httpCode; + private final Optional tableName; + private final Map additionalProperties; private RecordResponseObject( @@ -36,6 +43,7 @@ private RecordResponseObject( Optional> hashedData, Optional error, Optional httpCode, + Optional tableName, Map additionalProperties) { this.skyflowId = skyflowId; this.tokens = tokens; @@ -43,6 +51,7 @@ private RecordResponseObject( this.hashedData = hashedData; this.error = error; this.httpCode = httpCode; + this.tableName = tableName; this.additionalProperties = additionalProperties; } @@ -94,7 +103,15 @@ public Optional getHttpCode() { return httpCode; } - @Override + /** + * @return Name of the table record belongs to + */ + @JsonProperty("tableName") + public Optional getTableName() { + return tableName; + } + + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof RecordResponseObject && equalTo((RecordResponseObject) other); @@ -111,15 +128,17 @@ private boolean equalTo(RecordResponseObject other) { && data.equals(other.data) && hashedData.equals(other.hashedData) && error.equals(other.error) - && httpCode.equals(other.httpCode); + && httpCode.equals(other.httpCode) + && tableName.equals(other.tableName); } - @Override + @java.lang.Override public int hashCode() { - return Objects.hash(this.skyflowId, this.tokens, this.data, this.hashedData, this.error, this.httpCode); + return Objects.hash( + this.skyflowId, this.tokens, this.data, this.hashedData, this.error, this.httpCode, this.tableName); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } @@ -142,6 +161,8 @@ public static final class Builder { private Optional httpCode = Optional.empty(); + private Optional tableName = Optional.empty(); + @JsonAnySetter private Map additionalProperties = new HashMap<>(); @@ -154,6 +175,7 @@ public Builder from(RecordResponseObject other) { hashedData(other.getHashedData()); error(other.getError()); httpCode(other.getHttpCode()); + tableName(other.getTableName()); return this; } @@ -241,8 +263,23 @@ public Builder httpCode(Integer httpCode) { return this; } + /** + *

Name of the table record belongs to

+ */ + @JsonSetter(value = "tableName", nulls = Nulls.SKIP) + public Builder tableName(Optional tableName) { + this.tableName = tableName; + return this; + } + + public Builder tableName(String tableName) { + this.tableName = Optional.ofNullable(tableName); + return this; + } + public RecordResponseObject build() { - return new RecordResponseObject(skyflowId, tokens, data, hashedData, error, httpCode, additionalProperties); + return new RecordResponseObject( + skyflowId, tokens, data, hashedData, error, httpCode, tableName, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/RpcStatus.java b/v3/src/main/java/com/skyflow/generated/rest/types/RpcStatus.java index bce5f3e9..b0fc6c44 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/RpcStatus.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/RpcStatus.java @@ -3,11 +3,20 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = RpcStatus.Builder.class) @@ -16,14 +25,14 @@ public final class RpcStatus { private final Optional message; - private final Optional> details; + private final Optional> details; private final Map additionalProperties; private RpcStatus( Optional code, Optional message, - Optional> details, + Optional> details, Map additionalProperties) { this.code = code; this.message = message; @@ -42,11 +51,11 @@ public Optional getMessage() { } @JsonProperty("details") - public Optional> getDetails() { + public Optional> getDetails() { return details; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof RpcStatus && equalTo((RpcStatus) other); @@ -61,12 +70,12 @@ private boolean equalTo(RpcStatus other) { return code.equals(other.code) && message.equals(other.message) && details.equals(other.details); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.code, this.message, this.details); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } @@ -81,7 +90,7 @@ public static final class Builder { private Optional message = Optional.empty(); - private Optional> details = Optional.empty(); + private Optional> details = Optional.empty(); @JsonAnySetter private Map additionalProperties = new HashMap<>(); @@ -118,12 +127,12 @@ public Builder message(String message) { } @JsonSetter(value = "details", nulls = Nulls.SKIP) - public Builder details(Optional> details) { + public Builder details(Optional> details) { this.details = details; return this; } - public Builder details(List details) { + public Builder details(List details) { this.details = Optional.ofNullable(details); return this; } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/TokenGroupRedactions.java b/v3/src/main/java/com/skyflow/generated/rest/types/TokenGroupRedactions.java index cdf3e5e6..4a3235eb 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/TokenGroupRedactions.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/TokenGroupRedactions.java @@ -3,10 +3,15 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -44,7 +49,7 @@ public Optional getRedaction() { return redaction; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof TokenGroupRedactions && equalTo((TokenGroupRedactions) other); @@ -59,12 +64,12 @@ private boolean equalTo(TokenGroupRedactions other) { return tokenGroupName.equals(other.tokenGroupName) && redaction.equals(other.redaction); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.tokenGroupName, this.redaction); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeRequestObject.java b/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeRequestObject.java index e467650e..6853c9f2 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeRequestObject.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeRequestObject.java @@ -3,11 +3,20 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = TokenizeRequestObject.Builder.class) @@ -49,7 +58,7 @@ public Optional> getTokenGroupNames() { return tokenGroupNames; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof TokenizeRequestObject && equalTo((TokenizeRequestObject) other); @@ -66,12 +75,12 @@ private boolean equalTo(TokenizeRequestObject other) { && tokenGroupNames.equals(other.tokenGroupNames); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.value, this.dataType, this.tokenGroupNames); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponse.java b/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponse.java index 9bd93527..af22ea4d 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponse.java @@ -3,11 +3,20 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = TokenizeResponse.Builder.class) @@ -30,7 +39,7 @@ public Optional> getResponse() { return response; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof TokenizeResponse && equalTo((TokenizeResponse) other); @@ -45,12 +54,12 @@ private boolean equalTo(TokenizeResponse other) { return response.equals(other.response); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.response); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponseObject.java b/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponseObject.java index 77b47099..9da3324b 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponseObject.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponseObject.java @@ -3,11 +3,20 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = TokenizeResponseObject.Builder.class) @@ -40,7 +49,7 @@ public Optional> getTokens() { return tokens; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof TokenizeResponseObject && equalTo((TokenizeResponseObject) other); @@ -55,12 +64,12 @@ private boolean equalTo(TokenizeResponseObject other) { return value.equals(other.value) && tokens.equals(other.tokens); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.value, this.tokens); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponseObjectToken.java b/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponseObjectToken.java index 62c8f32b..715a4173 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponseObjectToken.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponseObjectToken.java @@ -3,10 +3,15 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -70,7 +75,7 @@ public Optional getHttpCode() { return httpCode; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof TokenizeResponseObjectToken && equalTo((TokenizeResponseObjectToken) other); @@ -88,12 +93,12 @@ private boolean equalTo(TokenizeResponseObjectToken other) { && httpCode.equals(other.httpCode); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.tokenGroupName, this.token, this.error, this.httpCode); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/UniqueValue.java b/v3/src/main/java/com/skyflow/generated/rest/types/UniqueValue.java new file mode 100644 index 00000000..a15f73bb --- /dev/null +++ b/v3/src/main/java/com/skyflow/generated/rest/types/UniqueValue.java @@ -0,0 +1,101 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +package com.skyflow.generated.rest.types; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.skyflow.generated.rest.core.ObjectMappers; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +@JsonInclude(JsonInclude.Include.NON_ABSENT) +@JsonDeserialize(builder = UniqueValue.Builder.class) +public final class UniqueValue { + private final Optional> data; + + private final Map additionalProperties; + + private UniqueValue(Optional> data, Map additionalProperties) { + this.data = data; + this.additionalProperties = additionalProperties; + } + + /** + * @return Columns names and values for unique value entry + */ + @JsonProperty("data") + public Optional> getData() { + return data; + } + + @java.lang.Override + public boolean equals(Object other) { + if (this == other) return true; + return other instanceof UniqueValue && equalTo((UniqueValue) other); + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + private boolean equalTo(UniqueValue other) { + return data.equals(other.data); + } + + @java.lang.Override + public int hashCode() { + return Objects.hash(this.data); + } + + @java.lang.Override + public String toString() { + return ObjectMappers.stringify(this); + } + + public static Builder builder() { + return new Builder(); + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static final class Builder { + private Optional> data = Optional.empty(); + + @JsonAnySetter + private Map additionalProperties = new HashMap<>(); + + private Builder() {} + + public Builder from(UniqueValue other) { + data(other.getData()); + return this; + } + + /** + *

Columns names and values for unique value entry

+ */ + @JsonSetter(value = "data", nulls = Nulls.SKIP) + public Builder data(Optional> data) { + this.data = data; + return this; + } + + public Builder data(Map data) { + this.data = Optional.ofNullable(data); + return this; + } + + public UniqueValue build() { + return new UniqueValue(data, additionalProperties); + } + } +} diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/UpdateRecordData.java b/v3/src/main/java/com/skyflow/generated/rest/types/UpdateRecordData.java index f9c39572..6cc8c7ad 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/UpdateRecordData.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/UpdateRecordData.java @@ -3,10 +3,15 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -21,16 +26,20 @@ public final class UpdateRecordData { private final Optional> tokens; + private final Optional tableName; + private final Map additionalProperties; private UpdateRecordData( Optional skyflowId, Optional> data, Optional> tokens, + Optional tableName, Map additionalProperties) { this.skyflowId = skyflowId; this.data = data; this.tokens = tokens; + this.tableName = tableName; this.additionalProperties = additionalProperties; } @@ -51,14 +60,22 @@ public Optional> getData() { } /** - * @return Tokens data for the columns if any + * @return undocumented_field; Tokens data for the columns if any */ @JsonProperty("tokens") public Optional> getTokens() { return tokens; } - @Override + /** + * @return Table name for the record + */ + @JsonProperty("tableName") + public Optional getTableName() { + return tableName; + } + + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof UpdateRecordData && equalTo((UpdateRecordData) other); @@ -70,15 +87,18 @@ public Map getAdditionalProperties() { } private boolean equalTo(UpdateRecordData other) { - return skyflowId.equals(other.skyflowId) && data.equals(other.data) && tokens.equals(other.tokens); + return skyflowId.equals(other.skyflowId) + && data.equals(other.data) + && tokens.equals(other.tokens) + && tableName.equals(other.tableName); } - @Override + @java.lang.Override public int hashCode() { - return Objects.hash(this.skyflowId, this.data, this.tokens); + return Objects.hash(this.skyflowId, this.data, this.tokens, this.tableName); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } @@ -95,6 +115,8 @@ public static final class Builder { private Optional> tokens = Optional.empty(); + private Optional tableName = Optional.empty(); + @JsonAnySetter private Map additionalProperties = new HashMap<>(); @@ -104,6 +126,7 @@ public Builder from(UpdateRecordData other) { skyflowId(other.getSkyflowId()); data(other.getData()); tokens(other.getTokens()); + tableName(other.getTableName()); return this; } @@ -136,7 +159,7 @@ public Builder data(Map data) { } /** - *

Tokens data for the columns if any

+ *

undocumented_field; Tokens data for the columns if any

*/ @JsonSetter(value = "tokens", nulls = Nulls.SKIP) public Builder tokens(Optional> tokens) { @@ -149,8 +172,22 @@ public Builder tokens(Map tokens) { return this; } + /** + *

Table name for the record

+ */ + @JsonSetter(value = "tableName", nulls = Nulls.SKIP) + public Builder tableName(Optional tableName) { + this.tableName = tableName; + return this; + } + + public Builder tableName(String tableName) { + this.tableName = Optional.ofNullable(tableName); + return this; + } + public UpdateRecordData build() { - return new UpdateRecordData(skyflowId, data, tokens, additionalProperties); + return new UpdateRecordData(skyflowId, data, tokens, tableName, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/UpdateResponse.java b/v3/src/main/java/com/skyflow/generated/rest/types/UpdateResponse.java index 71d49aa8..ac331eef 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/UpdateResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/UpdateResponse.java @@ -3,11 +3,20 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = UpdateResponse.Builder.class) @@ -29,7 +38,7 @@ public Optional> getRecords() { return records; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof UpdateResponse && equalTo((UpdateResponse) other); @@ -44,12 +53,12 @@ private boolean equalTo(UpdateResponse other) { return records.equals(other.records); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.records); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/Upsert.java b/v3/src/main/java/com/skyflow/generated/rest/types/Upsert.java index 5bfe7b1b..52461939 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/Upsert.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/Upsert.java @@ -3,11 +3,20 @@ */ package com.skyflow.generated.rest.types; -import com.fasterxml.jackson.annotation.*; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.skyflow.generated.rest.core.ObjectMappers; - -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonDeserialize(builder = Upsert.Builder.class) @@ -40,7 +49,7 @@ public Optional> getUniqueColumns() { return uniqueColumns; } - @Override + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; return other instanceof Upsert && equalTo((Upsert) other); @@ -55,12 +64,12 @@ private boolean equalTo(Upsert other) { return updateType.equals(other.updateType) && uniqueColumns.equals(other.uniqueColumns); } - @Override + @java.lang.Override public int hashCode() { return Objects.hash(this.updateType, this.uniqueColumns); } - @Override + @java.lang.Override public String toString() { return ObjectMappers.stringify(this); } diff --git a/v3/src/main/java/com/skyflow/utils/Utils.java b/v3/src/main/java/com/skyflow/utils/Utils.java index 468f3ff6..83b40f9b 100644 --- a/v3/src/main/java/com/skyflow/utils/Utils.java +++ b/v3/src/main/java/com/skyflow/utils/Utils.java @@ -235,7 +235,7 @@ public static com.skyflow.vault.data.InsertResponse formatResponse(InsertRespons tokensMap.put(key, tokenList); } } - Success success = new Success(indexNumber, record.get(index).getSkyflowId().get(), tokensMap, record.get(index).getData().isPresent() ? record.get(index).getData().get() : null); + Success success = new Success(indexNumber, record.get(index).getSkyflowId().get(), tokensMap, record.get(index).getData().isPresent() ? record.get(index).getData().get() : null, record.get(index).getTableName().isPresent() ? record.get(index).getTableName().get() : null); successRecords.add(success); } indexNumber++; diff --git a/v3/src/main/java/com/skyflow/utils/validations/Validations.java b/v3/src/main/java/com/skyflow/utils/validations/Validations.java index 058a002e..00c2d4ff 100644 --- a/v3/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v3/src/main/java/com/skyflow/utils/validations/Validations.java @@ -10,6 +10,7 @@ import com.skyflow.utils.Utils; import com.skyflow.utils.logger.LogUtil; import com.skyflow.vault.data.DetokenizeRequest; +import com.skyflow.vault.data.InsertRecord; import com.skyflow.vault.data.InsertRequest; import com.skyflow.vault.data.TokenGroupRedactions; @@ -24,20 +25,8 @@ private Validations() { public static void validateInsertRequest(InsertRequest insertRequest) throws SkyflowException { String table = insertRequest.getTable(); - ArrayList> values = insertRequest.getValues(); - List upsert = insertRequest.getUpsert(); - - if (table == null) { - LogUtil.printErrorLog(Utils.parameterizedString( - ErrorLogs.TABLE_IS_REQUIRED.getLog(), InterfaceName.INSERT.getName() - )); - throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TableKeyError.getMessage()); - } else if (table.trim().isEmpty()) { - LogUtil.printErrorLog(Utils.parameterizedString( - ErrorLogs.EMPTY_TABLE_NAME.getLog(), InterfaceName.INSERT.getName() - )); - throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTable.getMessage()); - } else if (values == null) { + ArrayList values = insertRequest.getRecords(); + if (values == null) { LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.VALUES_IS_REQUIRED.getLog(), InterfaceName.INSERT.getName() )); @@ -50,28 +39,87 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky } else if (values.size() > 10000) { LogUtil.printErrorLog(ErrorLogs.RECORD_SIZE_EXCEED.getLog()); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.RecordSizeExceedError.getMessage()); - } else if (upsert != null && upsert.isEmpty()) { - LogUtil.printErrorLog(Utils.parameterizedString( - ErrorLogs.EMPTY_UPSERT_VALUES.getLog(), InterfaceName.INSERT.getName() - )); - throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyUpsertValues.getMessage()); } - - for (HashMap valuesMap : values) { - for (String key : valuesMap.keySet()) { - if (key == null || key.trim().isEmpty()) { +// if (table == null) { +// LogUtil.printErrorLog(Utils.parameterizedString( +// ErrorLogs.TABLE_IS_REQUIRED.getLog(), InterfaceName.INSERT.getName() +// )); +// throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TableKeyError.getMessage()); +// } else if (table.trim().isEmpty()) { +// LogUtil.printErrorLog(Utils.parameterizedString( +// ErrorLogs.EMPTY_TABLE_NAME.getLog(), InterfaceName.INSERT.getName() +// )); +// throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTable.getMessage()); +// } + // table check if specified for both + if (insertRequest.getTable() != null && !table.trim().isEmpty()){ // if table name specified at both place + for (InsertRecord valuesMap : values) { + if (valuesMap.getTable() != null || !valuesMap.getTable().trim().isEmpty()){ LogUtil.printErrorLog(Utils.parameterizedString( - ErrorLogs.EMPTY_OR_NULL_KEY_IN_VALUES.getLog(), InterfaceName.INSERT.getName() + ErrorLogs.TABLE_SPECIFIED_AT_BOTH_PLACE.getLog(), InterfaceName.INSERT.getName() )); - throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyKeyInValues.getMessage()); - } else { - Object value = valuesMap.get(key); - if (value == null || value.toString().trim().isEmpty()) { - LogUtil.printErrorLog(Utils.parameterizedString( - ErrorLogs.EMPTY_OR_NULL_VALUE_IN_VALUES.getLog(), - InterfaceName.INSERT.getName(), key - )); - throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyValueInValues.getMessage()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TableSpecifiedInRequestAndRecordObject.getMessage()); + } + } + } + // table check if not specified for both or if missing in any object + if (insertRequest.getTable() == null || table.trim().isEmpty()){ // if table name specified at both place + for (InsertRecord valuesMap : values) { + if (valuesMap.getTable() == null || valuesMap.getTable().trim().isEmpty()){ + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.TABLE_NOT_SPECIFIED_AT_BOTH_PLACE.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TableNotSpecifiedInRequestAndRecordObject.getMessage()); + } + } + } + // upsert check 1 + if (insertRequest.getTable() != null && !table.trim().isEmpty()){ // if table name specified at both place + for (InsertRecord valuesMap : values) { + if (valuesMap.getUpsert() != null && !valuesMap.getUpsert().isEmpty()){ + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.UPSERT_TABLE_REQUEST_AT_RECORD_LEVEL.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.UpsertTableRequestAtRecordLevel.getMessage()); + } + } + } + // upsert check 2 + if (insertRequest.getTable() == null || table.trim().isEmpty()){ + if (insertRequest.getUpsert() != null && !insertRequest.getUpsert().isEmpty()){ + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.UPSERT_TABLE_REQUEST_AT_REQUEST_LEVEL.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.UpsertTableRequestAtRequestLevel.getMessage()); + } + } + +// else if (upsert != null && upsert.isEmpty()) { +// LogUtil.printErrorLog(Utils.parameterizedString( +// ErrorLogs.EMPTY_UPSERT_VALUES.getLog(), InterfaceName.INSERT.getName() +// )); +// throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyUpsertValues.getMessage()); +// } + + for (InsertRecord valuesMap : values) { + if (valuesMap != null ) { + if (valuesMap.getData() != null){ + for (String key : valuesMap.getData().keySet()) { + if (key == null || key.trim().isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OR_NULL_KEY_IN_VALUES.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyKeyInValues.getMessage()); + } else { + Object value = valuesMap.getData().get(key); + if (value == null || value.toString().trim().isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OR_NULL_VALUE_IN_VALUES.getLog(), + InterfaceName.INSERT.getName(), key + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyValueInValues.getMessage()); + } + } } } } diff --git a/v3/src/main/java/com/skyflow/vault/controller/VaultController.java b/v3/src/main/java/com/skyflow/vault/controller/VaultController.java index 6b5af623..21e0a8d6 100644 --- a/v3/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/v3/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -52,12 +52,12 @@ public com.skyflow.vault.data.InsertResponse bulkInsert(InsertRequest insertRequ try { LogUtil.printInfoLog(InfoLogs.VALIDATE_INSERT_REQUEST.getLog()); Validations.validateInsertRequest(insertRequest); - configureInsertConcurrencyAndBatchSize(insertRequest.getValues().size()); + configureInsertConcurrencyAndBatchSize(insertRequest.getRecords().size()); setBearerToken(); com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest request = super.getBulkInsertRequestBody(insertRequest, super.getVaultConfig()); - response = this.processSync(request, insertRequest.getValues()); + response = this.processSync(request, insertRequest.getRecords()); return response; } catch (ApiClientApiException e) { String bodyString = gson.toJson(e.body()); @@ -74,7 +74,7 @@ public CompletableFuture bulkInsertAsync( try { LogUtil.printInfoLog(InfoLogs.VALIDATE_INSERT_REQUEST.getLog()); Validations.validateInsertRequest(insertRequest); - configureInsertConcurrencyAndBatchSize(insertRequest.getValues().size()); + configureInsertConcurrencyAndBatchSize(insertRequest.getRecords().size()); setBearerToken(); com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest request = super.getBulkInsertRequestBody(insertRequest, super.getVaultConfig()); @@ -98,7 +98,7 @@ public CompletableFuture bulkInsertAsync( } } - return new com.skyflow.vault.data.InsertResponse(successRecords, errorRecords, insertRequest.getValues()); + return new com.skyflow.vault.data.InsertResponse(successRecords, errorRecords, insertRequest.getRecords()); }); } catch (ApiClientApiException e) { String bodyString = gson.toJson(e.body()); @@ -175,7 +175,7 @@ public CompletableFuture bulkDetokenizeAsync(DetokenizeReque private com.skyflow.vault.data.InsertResponse processSync( com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest insertRequest, - ArrayList> originalPayload + ArrayList originalPayload ) throws ExecutionException, InterruptedException { LogUtil.printInfoLog(InfoLogs.PROCESSING_BATCHES.getLog()); List successRecords = new ArrayList<>(); @@ -283,7 +283,7 @@ private com.skyflow.generated.rest.types.DetokenizeResponse processDetokenizeBat List batch = batches.get(batchIndex); int batchNumber = batchIndex; CompletableFuture future = CompletableFuture - .supplyAsync(() -> insertBatch(batch, insertRequest.getTableName().get(), upsert), executor) + .supplyAsync(() -> insertBatch(batch, insertRequest.getTableName().isPresent() ? insertRequest.getTableName().get() : null, upsert), executor) .thenApply(response -> formatResponse(response, batchNumber, insertBatchSize)) .exceptionally(ex -> { errorRecords.addAll(handleBatchException(ex, batch, batchNumber)); @@ -298,13 +298,16 @@ private com.skyflow.generated.rest.types.DetokenizeResponse processDetokenizeBat } private InsertResponse insertBatch(List batch, String tableName, Upsert upsert) { - com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest req = com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest.builder() + com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest.Builder req = com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest.builder() .vaultId(this.getVaultConfig().getVaultId()) - .tableName(tableName) .records(batch) - .upsert(upsert) - .build(); - return this.getRecordsApi().insert(req); + .upsert(upsert); +// .build(); + if(tableName != null && !tableName.isEmpty()){ + req.tableName(tableName); + } + com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest request = req.build(); + return this.getRecordsApi().insert(request); } private void configureInsertConcurrencyAndBatchSize(int totalRequests) { diff --git a/v3/src/main/java/com/skyflow/vault/data/InsertRecord.java b/v3/src/main/java/com/skyflow/vault/data/InsertRecord.java new file mode 100644 index 00000000..c6da54d2 --- /dev/null +++ b/v3/src/main/java/com/skyflow/vault/data/InsertRecord.java @@ -0,0 +1,66 @@ +package com.skyflow.vault.data; + +import java.util.List; +import java.util.Map; + +public class InsertRecord { + private final InsertRecordBuilder builder; + + private InsertRecord(InsertRecordBuilder builder) { + this.builder = builder; + } + + // Getters + public String getTable() { + return this.builder.table; + } + + public Map getData() { + return this.builder.data; + } + + public List getUpsert() { + return this.builder.upsert; + } + + public String getUpsertType() { + return this.builder.upsertType; + } + + // Builder Class + public static final class InsertRecordBuilder { + private String table; + private Map data; + private List upsert; + private String upsertType; + + public InsertRecordBuilder table(String table) { + this.table = table; + return this; + } + + public InsertRecordBuilder data(Map data) { + this.data = data; + return this; + } + + public InsertRecordBuilder upsert(List upsert) { + this.upsert = upsert; + return this; + } + + public InsertRecordBuilder upsertType(String upsertType) { + this.upsertType = upsertType; + return this; + } + + public InsertRecord build() { + return new InsertRecord(this); + } + } + + // Static entry point for builder + public static InsertRecordBuilder builder() { + return new InsertRecordBuilder(); + } +} diff --git a/v3/src/main/java/com/skyflow/vault/data/InsertRequest.java b/v3/src/main/java/com/skyflow/vault/data/InsertRequest.java index 732df960..590a2077 100644 --- a/v3/src/main/java/com/skyflow/vault/data/InsertRequest.java +++ b/v3/src/main/java/com/skyflow/vault/data/InsertRequest.java @@ -14,6 +14,7 @@ private InsertRequest(InsertRequestBuilder builder) { this.builder = builder; } + public static InsertRequestBuilder builder() { return new InsertRequestBuilder(); } @@ -26,11 +27,17 @@ public UpdateType getUpsertType() { return this.builder.upsertType; } + public ArrayList getRecords(){ + return this.builder.records; + } + public static final class InsertRequestBuilder extends BaseInsertRequestBuilder { private List upsert; private UpdateType upsertType; + private ArrayList records; + private InsertRequestBuilder() { super(); } @@ -41,12 +48,6 @@ public InsertRequestBuilder table(String table) { return this; } - @Override - public InsertRequestBuilder values(ArrayList> values) { - super.values(values); - return this; - } - public InsertRequestBuilder upsert(List upsert) { this.upsert = upsert; return this; @@ -57,6 +58,11 @@ public InsertRequestBuilder upsertType(UpdateType upsertType) { return this; } + public InsertRequestBuilder records(ArrayList records){ + this.records = records; + return this; + } + public InsertRequest build() { return new InsertRequest(this); } diff --git a/v3/src/main/java/com/skyflow/vault/data/InsertResponse.java b/v3/src/main/java/com/skyflow/vault/data/InsertResponse.java index a84e121c..870f0d86 100644 --- a/v3/src/main/java/com/skyflow/vault/data/InsertResponse.java +++ b/v3/src/main/java/com/skyflow/vault/data/InsertResponse.java @@ -19,8 +19,8 @@ public class InsertResponse { private List errors; // Internal fields. Should not be included in toString() output - private ArrayList> originalPayload; - private ArrayList> recordsToRetry; + private ArrayList originalPayload; + private ArrayList recordsToRetry; public InsertResponse(List successRecords, List errorRecords) { this.success = successRecords; @@ -30,7 +30,7 @@ public InsertResponse(List successRecords, List errorRecor public InsertResponse( List successRecords, List errorRecords, - ArrayList> originalPayload + ArrayList originalPayload ) { this.success = successRecords; this.errors = errorRecords; @@ -50,7 +50,7 @@ public List getErrors() { return this.errors; } - public ArrayList> getRecordsToRetry() { + public ArrayList getRecordsToRetry() { if (recordsToRetry == null) { recordsToRetry = new ArrayList<>(); recordsToRetry = errors.stream() diff --git a/v3/src/main/java/com/skyflow/vault/data/Success.java b/v3/src/main/java/com/skyflow/vault/data/Success.java index db302e6c..94a3d62d 100644 --- a/v3/src/main/java/com/skyflow/vault/data/Success.java +++ b/v3/src/main/java/com/skyflow/vault/data/Success.java @@ -14,12 +14,14 @@ public class Success { private Map> tokens; @Expose(serialize = true) private Map data; + @Expose(serialize = true) + private String table; public int getIndex() { return index; } - public Success(int index, String skyflow_id, Map> tokens, Map data) { + public Success(int index, String skyflow_id, Map> tokens, Map data, String table) { this.index = index; this.skyflow_id = skyflow_id; this.tokens = tokens; @@ -27,15 +29,19 @@ public Success(int index, String skyflow_id, Map> tokens, Ma } public String getSkyflowId() { - return skyflow_id; + return this.skyflow_id; } public Map> getTokens() { - return tokens; + return this.tokens; } public Map getData() { - return data; + return this.data; + } + + public String getTable(){ + return this.table; } @Override diff --git a/v3/test/java/com/skyflow/utils/UtilsTests.java b/v3/test/java/com/skyflow/utils/UtilsTests.java index d3780e83..e7373115 100644 --- a/v3/test/java/com/skyflow/utils/UtilsTests.java +++ b/v3/test/java/com/skyflow/utils/UtilsTests.java @@ -666,14 +666,15 @@ public void testValidateDetokenizeRequestEmptyRedaction() { @Test public void testValidateInsertRequestNullTable() { - ArrayList> values = new ArrayList<>(); + ArrayList values = new ArrayList<>(); + HashMap valueMap = new HashMap<>(); valueMap.put("key1", "value1"); - values.add(valueMap); + values.add(InsertRecord.builder().data(valueMap).build()); InsertRequest request = InsertRequest.builder() .table(null) - .values(values) + .records(values) .build(); try { @@ -685,14 +686,16 @@ public void testValidateInsertRequestNullTable() { @Test public void testValidateInsertRequestEmptyTable() { - ArrayList> values = new ArrayList<>(); + ArrayList values = new ArrayList<>(); + HashMap valueMap = new HashMap<>(); valueMap.put("key1", "value1"); - values.add(valueMap); + values.add(InsertRecord.builder().data(valueMap).build()); + InsertRequest request = InsertRequest.builder() .table("") - .values(values) + .records(values) .build(); try { @@ -706,7 +709,7 @@ public void testValidateInsertRequestEmptyTable() { public void testValidateInsertRequestNullValues() { InsertRequest request = InsertRequest.builder() .table("testTable") - .values(null) + .records(null) .build(); try { @@ -720,7 +723,7 @@ public void testValidateInsertRequestNullValues() { public void testValidateInsertRequestEmptyValues() { InsertRequest request = InsertRequest.builder() .table("testTable") - .values(new ArrayList<>()) + .records(new ArrayList<>()) .build(); try { diff --git a/v3/test/java/com/skyflow/vault/controller/VaultControllerTests.java b/v3/test/java/com/skyflow/vault/controller/VaultControllerTests.java index 811a9891..c011a4c0 100644 --- a/v3/test/java/com/skyflow/vault/controller/VaultControllerTests.java +++ b/v3/test/java/com/skyflow/vault/controller/VaultControllerTests.java @@ -7,6 +7,7 @@ import com.skyflow.errors.SkyflowException; import com.skyflow.utils.Constants; import com.skyflow.utils.validations.Validations; +import com.skyflow.vault.data.InsertRecord; import com.skyflow.vault.data.InsertRequest; import org.junit.After; import org.junit.Assert; @@ -89,10 +90,10 @@ private void invokeConfigureInsertConcurrencyAndBatchSize(VaultController contro method.invoke(controller, totalRequests); } - private ArrayList> generateValues(int noOfRecords) { - ArrayList> values = new ArrayList<>(); + private ArrayList generateValues(int noOfRecords) { + ArrayList values = new ArrayList<>(); for (int i = 0; i < noOfRecords; i++) { - values.add(new HashMap<>()); + values.add(InsertRecord.builder().data(new HashMap<>()).build()); } return values; @@ -100,7 +101,7 @@ private ArrayList> generateValues(int noOfRecords) { @Test public void testValidation_tableIsNull() { - InsertRequest req = InsertRequest.builder().table(null).values(generateValues(1)).build(); + InsertRequest req = InsertRequest.builder().table(null).records(generateValues(1)).build(); try { Validations.validateInsertRequest(req); fail("Expected SkyflowException for null table"); @@ -111,7 +112,7 @@ public void testValidation_tableIsNull() { @Test public void testValidation_tableIsEmpty() { - InsertRequest req = InsertRequest.builder().table(" ").values(generateValues(1)).build(); + InsertRequest req = InsertRequest.builder().table(" ").records(generateValues(1)).build(); try { Validations.validateInsertRequest(req); fail("Expected SkyflowException for empty table"); @@ -122,7 +123,7 @@ public void testValidation_tableIsEmpty() { @Test public void testValidation_valuesIsNull() { - InsertRequest req = InsertRequest.builder().table("table1").values(null).build(); + InsertRequest req = InsertRequest.builder().table("table1").records(null).build(); try { Validations.validateInsertRequest(req); fail("Expected SkyflowException for null values"); @@ -133,7 +134,7 @@ public void testValidation_valuesIsNull() { @Test public void testValidation_valuesIsEmpty() { - InsertRequest req = InsertRequest.builder().table("table1").values(new ArrayList<>()).build(); + InsertRequest req = InsertRequest.builder().table("table1").records(new ArrayList<>()).build(); try { Validations.validateInsertRequest(req); fail("Expected SkyflowException for empty values"); @@ -147,7 +148,7 @@ public void testValidation_upsertIsEmpty() throws SkyflowException { try { InsertRequest req = InsertRequest.builder() .table("table1") - .values(generateValues(1)) + .records(generateValues(1)) .upsert(new ArrayList<>()) .build(); Validations.validateInsertRequest(req); @@ -162,11 +163,11 @@ public void testValidation_upsertIsEmpty() throws SkyflowException { @Test public void testValidation_keyIsNullOrEmpty() { - ArrayList> values = new ArrayList<>(); + ArrayList values = new ArrayList<>(); HashMap map = new HashMap<>(); map.put(null, "value"); - values.add(map); - InsertRequest req = InsertRequest.builder().table("table1").values(values).build(); + values.add(InsertRecord.builder().data(map).build()); + InsertRequest req = InsertRequest.builder().table("table1").records(values).build(); try { Validations.validateInsertRequest(req); fail("Expected SkyflowException for null key in values"); @@ -178,8 +179,8 @@ public void testValidation_keyIsNullOrEmpty() { values.clear(); map = new HashMap<>(); map.put(" ", "value"); - values.add(map); - req = InsertRequest.builder().table("table1").values(values).build(); + values.add(InsertRecord.builder().data(map).build()); + req = InsertRequest.builder().table("table1").records(values).build(); try { Validations.validateInsertRequest(req); fail("Expected SkyflowException for empty key in values"); @@ -190,11 +191,11 @@ public void testValidation_keyIsNullOrEmpty() { @Test public void testValidation_valueIsNullOrEmpty() { - ArrayList> values = new ArrayList<>(); + ArrayList values = new ArrayList<>(); HashMap map = new HashMap<>(); map.put("field1", null); - values.add(map); - InsertRequest req = InsertRequest.builder().table("table1").values(values).build(); + values.add(InsertRecord.builder().data(map).build()); + InsertRequest req = InsertRequest.builder().table("table1").records(values).build(); try { Validations.validateInsertRequest(req); fail("Expected SkyflowException for null value in values"); @@ -206,8 +207,8 @@ public void testValidation_valueIsNullOrEmpty() { values.clear(); map = new HashMap<>(); map.put("field1", " "); - values.add(map); - req = InsertRequest.builder().table("table1").values(values).build(); + values.add(InsertRecord.builder().data(map).build()); + req = InsertRequest.builder().table("table1").records(values).build(); try { Validations.validateInsertRequest(req); fail("Expected SkyflowException for empty value in values"); @@ -233,7 +234,7 @@ public void testCustomValidBatchAndConcurrency() throws Exception { writeEnv("INSERT_BATCH_SIZE=5\nINSERT_CONCURRENCY_LIMIT=3"); VaultController controller = createController(); - InsertRequest insertRequest = InsertRequest.builder().table("table1").values(generateValues(20)).build(); + InsertRequest insertRequest = InsertRequest.builder().table("table1").records(generateValues(20)).build(); try { controller.bulkInsert(insertRequest); @@ -250,7 +251,7 @@ public void testBatchSizeExceedsMax() throws Exception { writeEnv("INSERT_BATCH_SIZE=1100\nINSERT_CONCURRENCY_LIMIT=3"); VaultController controller = createController(); - InsertRequest insertRequest = InsertRequest.builder().table("table1").values(generateValues(50)).build(); + InsertRequest insertRequest = InsertRequest.builder().table("table1").records(generateValues(50)).build(); try { controller.bulkInsert(insertRequest); @@ -265,7 +266,7 @@ public void testBatchSizeExceedsMax() throws Exception { public void testConcurrencyExceedsMax() throws Exception { writeEnv("INSERT_CONCURRENCY_LIMIT=110"); VaultController controller = createController(); - InsertRequest insertRequest = InsertRequest.builder().table("table1").values(generateValues(50)).build(); + InsertRequest insertRequest = InsertRequest.builder().table("table1").records(generateValues(50)).build(); try { @@ -281,7 +282,7 @@ public void testConcurrencyExceedsMax() throws Exception { public void testBatchSizeZeroOrNegative() throws Exception { writeEnv("INSERT_BATCH_SIZE=0"); VaultController controller = createController(); - InsertRequest insertRequest = InsertRequest.builder().table("table1").values(generateValues(10)).build(); + InsertRequest insertRequest = InsertRequest.builder().table("table1").records(generateValues(10)).build(); try { controller.bulkInsert(insertRequest); @@ -306,7 +307,7 @@ public void testBatchSizeZeroOrNegative() throws Exception { public void testConcurrencyZeroOrNegative() throws Exception { writeEnv("INSERT_CONCURRENCY_LIMIT=0"); VaultController controller = createController(); - InsertRequest insertRequest = InsertRequest.builder().table("table1").values(generateValues(10)).build(); + InsertRequest insertRequest = InsertRequest.builder().table("table1").records(generateValues(10)).build(); try { controller.bulkInsert(insertRequest); @@ -335,7 +336,7 @@ public void testConcurrencyZeroOrNegative() throws Exception { public void testTotalRequestsLessThanBatchSize() throws Exception { writeEnv("INSERT_BATCH_SIZE=100\nINSERT_CONCURRENCY_LIMIT=10"); VaultController controller = createController(); - InsertRequest insertRequest = InsertRequest.builder().table("table1").values(generateValues(10)).build(); + InsertRequest insertRequest = InsertRequest.builder().table("table1").records(generateValues(10)).build(); try { @@ -351,7 +352,7 @@ public void testTotalRequestsLessThanBatchSize() throws Exception { @Test public void testTotalRequestsZero() throws Exception { VaultController controller = createController(); - InsertRequest insertRequest = InsertRequest.builder().table("table1").values(generateValues(0)).build(); + InsertRequest insertRequest = InsertRequest.builder().table("table1").records(generateValues(0)).build(); boolean exceptionThrown = false; @@ -369,7 +370,7 @@ public void testTotalRequestsZero() throws Exception { public void testHighConcurrencyForLowRecords() throws Exception { writeEnv("INSERT_BATCH_SIZE=1000\nINSERT_CONCURRENCY_LIMIT=100"); VaultController controller = createController(); - InsertRequest insertRequest = InsertRequest.builder().table("table1").values(generateValues(10000)).build(); + InsertRequest insertRequest = InsertRequest.builder().table("table1").records(generateValues(10000)).build(); try { controller.bulkInsert(insertRequest); @@ -386,7 +387,7 @@ public void testHighConcurrencyForLowRecords() throws Exception { public void testFractionalLastBatch() throws Exception { writeEnv("INSERT_BATCH_SIZE=100"); VaultController controller = createController(); - InsertRequest insertRequest = InsertRequest.builder().table("table1").values(generateValues(9050)).build(); + InsertRequest insertRequest = InsertRequest.builder().table("table1").records(generateValues(9050)).build(); try { controller.bulkInsert(insertRequest); diff --git a/v3/test/java/com/skyflow/vault/data/InsertTests.java b/v3/test/java/com/skyflow/vault/data/InsertTests.java index ff71fa19..be59a4cd 100644 --- a/v3/test/java/com/skyflow/vault/data/InsertTests.java +++ b/v3/test/java/com/skyflow/vault/data/InsertTests.java @@ -28,7 +28,7 @@ public class InsertTests { private static String vaultID = null; private static String clusterID = null; private static String table = null; - private static ArrayList> values = null; + private static ArrayList values = null; private static ArrayList> tokens = null; private static HashMap valueMap = null; private static HashMap tokenMap = null; @@ -73,19 +73,20 @@ public void setupTest() { @Test public void testValidInputInInsertRequestValidations() { try { - values.add(valueMap); + InsertRecord record = InsertRecord.builder().data(valueMap).build(); + values.add(record); tokens.add(tokenMap); InsertRequest request = InsertRequest.builder() .table(table) .upsert(upsert) - .values(values) + .records(values) .build(); Validations.validateInsertRequest(request); Assert.assertEquals(table, request.getTable()); Assert.assertEquals(upsert, request.getUpsert()); - Assert.assertEquals(1, request.getValues().size()); + Assert.assertEquals(1, request.getRecords().size()); } catch (SkyflowException e) { Assert.fail(INVALID_EXCEPTION_THROWN); } @@ -94,18 +95,19 @@ public void testValidInputInInsertRequestValidations() { @Test public void testValidInputInInsertRequestValidationsWithTokenModeDisable() { try { - values.add(valueMap); + InsertRecord record = InsertRecord.builder().data(valueMap).build(); + values.add(record); tokens.add(tokenMap); InsertRequest request = InsertRequest.builder() .table(table) .upsert(upsert) - .values(values) + .records(values) .build(); Validations.validateInsertRequest(request); Assert.assertEquals(table, request.getTable()); Assert.assertEquals(upsert, request.getUpsert()); - Assert.assertEquals(1, request.getValues().size()); + Assert.assertEquals(1, request.getRecords().size()); } catch (SkyflowException e) { Assert.fail(INVALID_EXCEPTION_THROWN); } @@ -158,7 +160,7 @@ public void testNoValuesInInsertRequestValidations() { @Test public void testEmptyValuesInInsertRequestValidations() { - InsertRequest request = InsertRequest.builder().table(table).values(values).build(); + InsertRequest request = InsertRequest.builder().table(table).records(values).build(); try { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); @@ -174,8 +176,9 @@ public void testEmptyValuesInInsertRequestValidations() { @Test public void testEmptyKeyInValuesInInsertRequestValidations() { valueMap.put("", "test_value_3"); - values.add(valueMap); - InsertRequest request = InsertRequest.builder().table(table).values(values).build(); + InsertRecord record = InsertRecord.builder().data(valueMap).build(); + values.add(record); + InsertRequest request = InsertRequest.builder().table(table).records(values).build(); try { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); @@ -191,8 +194,9 @@ public void testEmptyKeyInValuesInInsertRequestValidations() { @Test public void testEmptyValueInValuesInInsertRequestValidations() { valueMap.put("test_column_3", ""); - values.add(valueMap); - InsertRequest request = InsertRequest.builder().table(table).values(values).build(); + InsertRecord record = InsertRecord.builder().data(valueMap).build(); + values.add(record); + InsertRequest request = InsertRequest.builder().table(table).records(values).build(); try { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); @@ -207,8 +211,9 @@ public void testEmptyValueInValuesInInsertRequestValidations() { @Test public void testEmptyUpsertInInsertRequestValidations() { - values.add(valueMap); - InsertRequest request = InsertRequest.builder().table(table).values(values).upsert(new ArrayList<>()).build(); + InsertRecord record = InsertRecord.builder().data(valueMap).build(); + values.add(record); + InsertRequest request = InsertRequest.builder().table(table).records(values).upsert(new ArrayList<>()).build(); try { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); @@ -226,7 +231,7 @@ public void testInsertResponse() { try { Map value = new HashMap<>(); value.put("test_column_1", "test_value_1"); - Success success = new Success(0, "id", null, null); + Success success = new Success(0, "id", null, null, "table"); List successList = new ArrayList<>(); successList.add(success); @@ -245,7 +250,7 @@ public void testInsertErrorResponse() { try { HashMap value = new HashMap<>(); value.put("test_column_1", "test_value_1"); - Success success = new Success(0, "id", null, value); + Success success = new Success(0, "id", null, value, "table"); List successList = new ArrayList<>(); successList.add(success); From ae75c8d37894beffd6d5dcc742b41217291b6f03 Mon Sep 17 00:00:00 2001 From: skyflow-bharti Date: Fri, 19 Sep 2025 16:33:23 +0530 Subject: [PATCH 2/6] SK-2302 add changes for bulk async changes --- .../java/com/skyflow/errors/ErrorMessage.java | 7 +- .../main/java/com/skyflow/logs/ErrorLogs.java | 2 + v3/src/main/java/com/skyflow/VaultClient.java | 10 +- .../java/com/skyflow/enums/UpdateType.java | 2 - .../java/com/skyflow/utils/Constants.java | 1 - .../utils/validations/Validations.java | 39 ++--- .../vault/data/DetokenizeResponse.java | 5 +- .../com/skyflow/vault/data/InsertRecord.java | 8 +- .../java/com/skyflow/vault/data/Success.java | 1 + .../java/com/skyflow/VaultClientTests.java | 123 +++++++++++++ .../java/com/skyflow/utils/UtilsTests.java | 165 +++++++++++++++++- .../com/skyflow/vault/data/InsertTests.java | 108 +++++++++++- 12 files changed, 425 insertions(+), 46 deletions(-) diff --git a/common/src/main/java/com/skyflow/errors/ErrorMessage.java b/common/src/main/java/com/skyflow/errors/ErrorMessage.java index 52d38bfe..68021dd2 100644 --- a/common/src/main/java/com/skyflow/errors/ErrorMessage.java +++ b/common/src/main/java/com/skyflow/errors/ErrorMessage.java @@ -11,9 +11,8 @@ public enum ErrorMessage { ConnectionIdNotInConfigList("%s0 Validation error. ConnectionId is missing from the config. Specify the connectionIds from configs."), EmptyCredentials("%s0 Validation error. Invalid credentials. Credentials must not be empty."), TableSpecifiedInRequestAndRecordObject("%s0 Validation error. Table name cannot be specified at both the request and record levels. Please specify the table name in only one place."), - UpsertAtRecordLevel("%s0 Validation error. Upsert specify "), UpsertTableRequestAtRecordLevel("%s0 Validation error. Table name should be present at each record level when upsert is present at record level."), - UpsertTableRequestAtRequestLevel("%S0 Validation error. Upsert should be present at each record level when table name is present at record level."), + UpsertTableRequestAtRequestLevel("%s0 Validation error. Upsert should be present at each record level when table name is present at record level."), TableNotSpecifiedInRequestAndRecordObject("%s0 Validation error. Table name is missing. Table name should be specified at one place either at the request level or record level. Please specify the table name at one place."), // Vault config InvalidVaultId("%s0 Initialization failed. Invalid vault ID. Specify a valid vault ID."), @@ -64,6 +63,10 @@ public enum ErrorMessage { TableKeyError("%s0 Validation error. 'table' key is missing from the payload. Specify a 'table' key."), EmptyTable("%s0 Validation error. 'table' can't be empty. Specify a table."), ValuesKeyError("%s0 Validation error. 'values' key is missing from the payload. Specify a 'values' key."), + EmptyRecords("%s0 Validation error. 'values' can't be empty. Specify values."), + EmptyKeyInRecords("%s0 Validation error. Invalid key in values. Specify a valid key."), + EmptyValueInRecords("%s0 Validation error. Invalid value in values. Specify a valid value."), + RecordsKeyError("%s0 Validation error. 'values' key is missing from the payload. Specify a 'values' key."), EmptyValues("%s0 Validation error. 'values' can't be empty. Specify values."), EmptyKeyInValues("%s0 Validation error. Invalid key in values. Specify a valid key."), EmptyValueInValues("%s0 Validation error. Invalid value in values. Specify a valid value."), diff --git a/common/src/main/java/com/skyflow/logs/ErrorLogs.java b/common/src/main/java/com/skyflow/logs/ErrorLogs.java index dc242850..a481f9f6 100644 --- a/common/src/main/java/com/skyflow/logs/ErrorLogs.java +++ b/common/src/main/java/com/skyflow/logs/ErrorLogs.java @@ -51,6 +51,8 @@ public enum ErrorLogs { EMPTY_TABLE_NAME("Invalid %s1 request. Table name can not be empty."), VALUES_IS_REQUIRED("Invalid %s1 request. Values are required."), EMPTY_VALUES("Invalid %s1 request. Values can not be empty."), + RECORDS_IS_REQUIRED("Invalid %s1 request. Records are required."), + EMPTY_RECORDS("Invalid %s1 request. Records can not be empty."), RECORD_SIZE_EXCEED("Maximum number of records exceeded. The limit is 10000."), TOKENS_SIZE_EXCEED("Maximum number of tokens exceeded. The limit is 10000."), EMPTY_OR_NULL_VALUE_IN_VALUES("Invalid %s1 request. Value can not be null or empty in values for key \"%s2\"."), diff --git a/v3/src/main/java/com/skyflow/VaultClient.java b/v3/src/main/java/com/skyflow/VaultClient.java index 54730b02..6bbb9c4d 100644 --- a/v3/src/main/java/com/skyflow/VaultClient.java +++ b/v3/src/main/java/com/skyflow/VaultClient.java @@ -1,5 +1,8 @@ package com.skyflow; +import java.util.ArrayList; +import java.util.List; + import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; import com.skyflow.enums.UpdateType; @@ -27,9 +30,6 @@ import okhttp3.OkHttpClient; import okhttp3.Request; -import java.util.ArrayList; -import java.util.List; - public class VaultClient { private final VaultConfig vaultConfig; @@ -145,9 +145,9 @@ protected InsertRequest getBulkInsertRequestBody(com.skyflow.vault.data.InsertRe if (value.getUpsert() != null && !value.getUpsert().isEmpty()){ if (value.getUpsertType() != null) { EnumUpdateType updateType = null; - if (request.getUpsertType() == UpdateType.REPLACE) { + if (value.getUpsertType() == UpdateType.REPLACE) { updateType = EnumUpdateType.REPLACE; - } else if (request.getUpsertType() == UpdateType.UPDATE) { + } else if (value.getUpsertType() == UpdateType.UPDATE) { updateType = EnumUpdateType.UPDATE; } Upsert upsert = Upsert.builder().uniqueColumns(value.getUpsert()).updateType(updateType).build(); diff --git a/v3/src/main/java/com/skyflow/enums/UpdateType.java b/v3/src/main/java/com/skyflow/enums/UpdateType.java index 7fcb6f65..45641c13 100644 --- a/v3/src/main/java/com/skyflow/enums/UpdateType.java +++ b/v3/src/main/java/com/skyflow/enums/UpdateType.java @@ -1,7 +1,5 @@ package com.skyflow.enums; -import com.fasterxml.jackson.annotation.JsonValue; - public enum UpdateType { UPDATE("UPDATE"), diff --git a/v3/src/main/java/com/skyflow/utils/Constants.java b/v3/src/main/java/com/skyflow/utils/Constants.java index cfc29792..a21662c8 100644 --- a/v3/src/main/java/com/skyflow/utils/Constants.java +++ b/v3/src/main/java/com/skyflow/utils/Constants.java @@ -9,7 +9,6 @@ public final class Constants extends BaseConstants { public static final Integer MAX_INSERT_BATCH_SIZE = 1000; public static final Integer INSERT_CONCURRENCY_LIMIT = 10; public static final Integer MAX_INSERT_CONCURRENCY_LIMIT = 10; - public static final Integer DETOKENIZE_BATCH_SIZE = 50; public static final Integer DETOKENIZE_CONCURRENCY_LIMIT = 10; public static final Integer MAX_DETOKENIZE_BATCH_SIZE = 1000; diff --git a/v3/src/main/java/com/skyflow/utils/validations/Validations.java b/v3/src/main/java/com/skyflow/utils/validations/Validations.java index 00c2d4ff..f0a07fdc 100644 --- a/v3/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v3/src/main/java/com/skyflow/utils/validations/Validations.java @@ -28,33 +28,22 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky ArrayList values = insertRequest.getRecords(); if (values == null) { LogUtil.printErrorLog(Utils.parameterizedString( - ErrorLogs.VALUES_IS_REQUIRED.getLog(), InterfaceName.INSERT.getName() + ErrorLogs.RECORDS_IS_REQUIRED.getLog(), InterfaceName.INSERT.getName() )); - throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.ValuesKeyError.getMessage()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.RecordsKeyError.getMessage()); } else if (values.isEmpty()) { LogUtil.printErrorLog(Utils.parameterizedString( - ErrorLogs.EMPTY_VALUES.getLog(), InterfaceName.INSERT.getName() + ErrorLogs.EMPTY_RECORDS.getLog(), InterfaceName.INSERT.getName() )); - throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyValues.getMessage()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyRecords.getMessage()); } else if (values.size() > 10000) { LogUtil.printErrorLog(ErrorLogs.RECORD_SIZE_EXCEED.getLog()); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.RecordSizeExceedError.getMessage()); } -// if (table == null) { -// LogUtil.printErrorLog(Utils.parameterizedString( -// ErrorLogs.TABLE_IS_REQUIRED.getLog(), InterfaceName.INSERT.getName() -// )); -// throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TableKeyError.getMessage()); -// } else if (table.trim().isEmpty()) { -// LogUtil.printErrorLog(Utils.parameterizedString( -// ErrorLogs.EMPTY_TABLE_NAME.getLog(), InterfaceName.INSERT.getName() -// )); -// throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTable.getMessage()); -// } // table check if specified for both if (insertRequest.getTable() != null && !table.trim().isEmpty()){ // if table name specified at both place for (InsertRecord valuesMap : values) { - if (valuesMap.getTable() != null || !valuesMap.getTable().trim().isEmpty()){ + if (valuesMap.getTable() != null && !valuesMap.getTable().trim().isEmpty()){ LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.TABLE_SPECIFIED_AT_BOTH_PLACE.getLog(), InterfaceName.INSERT.getName() )); @@ -76,6 +65,12 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky // upsert check 1 if (insertRequest.getTable() != null && !table.trim().isEmpty()){ // if table name specified at both place for (InsertRecord valuesMap : values) { + if (valuesMap.getUpsert() != null && valuesMap.getUpsert().isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_UPSERT_VALUES.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyUpsertValues.getMessage()); + } if (valuesMap.getUpsert() != null && !valuesMap.getUpsert().isEmpty()){ LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.UPSERT_TABLE_REQUEST_AT_RECORD_LEVEL.getLog(), InterfaceName.INSERT.getName() @@ -94,12 +89,12 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky } } -// else if (upsert != null && upsert.isEmpty()) { -// LogUtil.printErrorLog(Utils.parameterizedString( -// ErrorLogs.EMPTY_UPSERT_VALUES.getLog(), InterfaceName.INSERT.getName() -// )); -// throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyUpsertValues.getMessage()); -// } + if (insertRequest.getUpsert() != null && insertRequest.getUpsert().isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_UPSERT_VALUES.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyUpsertValues.getMessage()); + } for (InsertRecord valuesMap : values) { if (valuesMap != null ) { diff --git a/v3/src/main/java/com/skyflow/vault/data/DetokenizeResponse.java b/v3/src/main/java/com/skyflow/vault/data/DetokenizeResponse.java index b00817db..7a356245 100644 --- a/v3/src/main/java/com/skyflow/vault/data/DetokenizeResponse.java +++ b/v3/src/main/java/com/skyflow/vault/data/DetokenizeResponse.java @@ -9,11 +9,12 @@ import java.util.stream.Collectors; public class DetokenizeResponse { - @Expose(serialize = true) - private List success; @Expose(serialize = true) private DetokenizeSummary summary; + @Expose(serialize = true) + private List success; + @Expose(serialize = true) private List errors; diff --git a/v3/src/main/java/com/skyflow/vault/data/InsertRecord.java b/v3/src/main/java/com/skyflow/vault/data/InsertRecord.java index c6da54d2..4373d920 100644 --- a/v3/src/main/java/com/skyflow/vault/data/InsertRecord.java +++ b/v3/src/main/java/com/skyflow/vault/data/InsertRecord.java @@ -1,5 +1,7 @@ package com.skyflow.vault.data; +import com.skyflow.enums.UpdateType; + import java.util.List; import java.util.Map; @@ -23,7 +25,7 @@ public List getUpsert() { return this.builder.upsert; } - public String getUpsertType() { + public UpdateType getUpsertType() { return this.builder.upsertType; } @@ -32,7 +34,7 @@ public static final class InsertRecordBuilder { private String table; private Map data; private List upsert; - private String upsertType; + private UpdateType upsertType; public InsertRecordBuilder table(String table) { this.table = table; @@ -49,7 +51,7 @@ public InsertRecordBuilder upsert(List upsert) { return this; } - public InsertRecordBuilder upsertType(String upsertType) { + public InsertRecordBuilder upsertType(UpdateType upsertType) { this.upsertType = upsertType; return this; } diff --git a/v3/src/main/java/com/skyflow/vault/data/Success.java b/v3/src/main/java/com/skyflow/vault/data/Success.java index 94a3d62d..ac8d5f08 100644 --- a/v3/src/main/java/com/skyflow/vault/data/Success.java +++ b/v3/src/main/java/com/skyflow/vault/data/Success.java @@ -26,6 +26,7 @@ public Success(int index, String skyflow_id, Map> tokens, Ma this.skyflow_id = skyflow_id; this.tokens = tokens; this.data = data; + this.table = table; } public String getSkyflowId() { diff --git a/v3/test/java/com/skyflow/VaultClientTests.java b/v3/test/java/com/skyflow/VaultClientTests.java index c99d8a08..a6686fdc 100644 --- a/v3/test/java/com/skyflow/VaultClientTests.java +++ b/v3/test/java/com/skyflow/VaultClientTests.java @@ -3,16 +3,22 @@ import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; import com.skyflow.enums.Env; +import com.skyflow.enums.UpdateType; import com.skyflow.errors.ErrorCode; import com.skyflow.errors.SkyflowException; import com.skyflow.generated.rest.resources.recordservice.RecordserviceClient; +import com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest; +import com.skyflow.generated.rest.types.InsertRecordData; import com.skyflow.utils.Constants; import com.skyflow.utils.SdkVersion; +import com.skyflow.vault.data.InsertRecord; import io.github.cdimascio.dotenv.Dotenv; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; +import java.util.*; + public class VaultClientTests { private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; private static VaultClient vaultClient; @@ -151,6 +157,123 @@ public void testPrioritiseCredentialsWithCommonCredentials() throws Exception { Assert.assertEquals(credentials, getPrivateField(vaultClient, "finalCredentials")); } + @Test + public void testEmptyRecords() { + com.skyflow.vault.data.InsertRequest request = + com.skyflow.vault.data.InsertRequest.builder().records(new ArrayList<>()).build(); + InsertRequest result = vaultClient.getBulkInsertRequestBody(request, vaultConfig); + Assert.assertTrue(result.getRecords().get().isEmpty()); + } + + @Test + public void testTableAtRequestLevel() { + Map data = new HashMap<>(); + data.put("key", "value"); + InsertRecord record = InsertRecord.builder().data(data).build(); + ArrayList records = new ArrayList<>(); + records.add(record); + + com.skyflow.vault.data.InsertRequest request = + com.skyflow.vault.data.InsertRequest.builder() + .table("table1") + .records(records) + .build(); + + InsertRequest result = vaultClient.getBulkInsertRequestBody(request, vaultConfig); + Assert.assertEquals("table1", result.getTableName().get()); + List recordData = result.getRecords().get(); + Assert.assertEquals("value", recordData.get(0).getData().get().get("key")); + } + + @Test + public void testTableAtRecordLevel() { + Map data = new HashMap<>(); + data.put("key", "value"); + InsertRecord record = InsertRecord.builder().data(data).table("table2").build(); + + ArrayList records = new ArrayList<>(); + records.add(record); + + com.skyflow.vault.data.InsertRequest request = + com.skyflow.vault.data.InsertRequest.builder() + .records(records) + .build(); + + InsertRequest result = vaultClient.getBulkInsertRequestBody(request, vaultConfig); + Assert.assertEquals("table2", result.getRecords().get().get(0).getTableName().get()); + } + + @Test + public void testUpsertAtRequestLevel() { + Map data = new HashMap<>(); + data.put("key", "value"); + InsertRecord record = InsertRecord.builder().data(data).build(); + ArrayList records = new ArrayList<>(); + records.add(record); + + + List upsertColumns = Arrays.asList("col1"); + com.skyflow.vault.data.InsertRequest request = + com.skyflow.vault.data.InsertRequest.builder() + .records(records) + .upsert(upsertColumns) + .upsertType(UpdateType.REPLACE) + .build(); + + InsertRequest result = vaultClient.getBulkInsertRequestBody(request, vaultConfig); + Assert.assertNotNull(result.getUpsert()); + Assert.assertEquals("col1", result.getUpsert().get().getUniqueColumns().get().get(0)); + Assert.assertEquals("REPLACE", result.getUpsert().get().getUpdateType().get().name()); + } + + @Test + public void testUpsertAtRecordLevel() { + Map data = new HashMap<>(); + data.put("key", "value"); + List upsertColumns = Arrays.asList("col2"); + InsertRecord record = InsertRecord.builder().data(data).upsert(upsertColumns).upsertType(UpdateType.UPDATE).build(); + System.out.println("record upsert: " + record.getUpsertType()); + ArrayList records = new ArrayList<>(); + records.add(record); + + + com.skyflow.vault.data.InsertRequest request = + com.skyflow.vault.data.InsertRequest.builder() + .records(records) + .build(); + + InsertRequest result = vaultClient.getBulkInsertRequestBody(request, vaultConfig); + Assert.assertNotNull(result.getRecords().get().get(0).getUpsert()); + System.out.println("result upsert: " + result.getRecords().get().get(0).getUpsert()); + Assert.assertEquals("col2", result.getRecords().get().get(0).getUpsert().get().getUniqueColumns().get().get(0)); + Assert.assertEquals("UPDATE", result.getRecords().get().get(0).getUpsert().get().getUpdateType().get().name()); + } + + @Test + public void testMixedTableAndUpsertLevels() { + Map data = new HashMap<>(); + data.put("key", "value"); + List upsertColumns = Arrays.asList("col3"); + InsertRecord record = InsertRecord.builder().data(data).table("table3").upsert(upsertColumns).build(); + ArrayList records = new ArrayList<>(); + records.add(record); + + + com.skyflow.vault.data.InsertRequest request = + com.skyflow.vault.data.InsertRequest.builder() + .table("table4") + .upsert(Arrays.asList("col4")) + .records(records) + .build(); + + InsertRequest result = vaultClient.getBulkInsertRequestBody(request, vaultConfig); + Assert.assertEquals("table4", result.getTableName().get()); + Assert.assertEquals("table3", result.getRecords().get().get(0).getTableName().get()); + Assert.assertEquals("col3", result.getRecords().get().get(0).getUpsert().get().getUniqueColumns().get().get(0)); + Assert.assertEquals("col4", result.getUpsert().get().getUniqueColumns().get().get(0)); + } + + // Helper methods for reflection field access private Object getPrivateField(Object obj, String fieldName) throws Exception { java.lang.reflect.Field field = obj.getClass().getDeclaredField(fieldName); diff --git a/v3/test/java/com/skyflow/utils/UtilsTests.java b/v3/test/java/com/skyflow/utils/UtilsTests.java index e7373115..c2b05451 100644 --- a/v3/test/java/com/skyflow/utils/UtilsTests.java +++ b/v3/test/java/com/skyflow/utils/UtilsTests.java @@ -288,7 +288,7 @@ public void testHandleBatchExceptionWithNonZeroBatchNumber() { } @Test - public void testHandleBatchExceptionWithNullResponseBody() { + public void testHandleBatchExceptionWithNullResponseBody1() { List batch = Arrays.asList(InsertRecordData.builder().build(), InsertRecordData.builder().build()); List> batches = Collections.singletonList(batch); @@ -680,7 +680,7 @@ public void testValidateInsertRequestNullTable() { try { Validations.validateInsertRequest(request); } catch (SkyflowException e) { - assertEquals(ErrorMessage.TableKeyError.getMessage(), e.getMessage()); // Replace with the actual error message + assertEquals(ErrorMessage.TableNotSpecifiedInRequestAndRecordObject.getMessage(), e.getMessage()); // Replace with the actual error message } } @@ -701,7 +701,7 @@ public void testValidateInsertRequestEmptyTable() { try { Validations.validateInsertRequest(request); } catch (SkyflowException e) { - assertEquals(ErrorMessage.EmptyTable.getMessage(), e.getMessage()); // Replace with the actual error message + assertEquals(ErrorMessage.TableNotSpecifiedInRequestAndRecordObject.getMessage(), e.getMessage()); // Replace with the actual error message } } @@ -793,6 +793,74 @@ public void testFormatDetokenizeResponse_NullResponse() { Assert.assertNull(result); } + @Test + public void testCreateDetokenizeBatchesWithTokenGroupRedactions() { + List tokens = Arrays.asList("token1", "token2", "token3"); + List groupRedactions = Arrays.asList( + com.skyflow.generated.rest.types.TokenGroupRedactions.builder().tokenGroupName("group1").redaction("MASK").build(), + com.skyflow.generated.rest.types.TokenGroupRedactions.builder().tokenGroupName("group2").redaction("PLAIN_TEXT").build(), + com.skyflow.generated.rest.types.TokenGroupRedactions.builder().tokenGroupName("group3").redaction("REDACTED").build() + ); + + com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest request = com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest.builder() + .vaultId("vaultId") + .tokens(tokens) + .tokenGroupRedactions(groupRedactions) + .build(); + + List batches = Utils.createDetokenizeBatches(request, 2); + + Assert.assertEquals(2, batches.size()); + Assert.assertEquals(Arrays.asList("token1", "token2"), batches.get(0).getTokens().get()); + Assert.assertEquals(Arrays.asList("token3"), batches.get(1).getTokens().get()); + Assert.assertTrue(batches.get(0).getTokenGroupRedactions().isPresent()); + } + + @Test + public void testCreateDetokenizeBatchesWithEmptyTokenGroupRedactions() { + List tokens = Arrays.asList("token1", "token2"); + com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest request = com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest.builder() + .vaultId("vaultId") + .tokens(tokens) + .tokenGroupRedactions(new ArrayList<>()) + .build(); + + List batches = Utils.createDetokenizeBatches(request, 1); + + Assert.assertEquals(2, batches.size()); + Assert.assertTrue(batches.get(0).getTokenGroupRedactions().isEmpty()); + } + + @Test + public void testCreateDetokenizeBatchesWithNullTokenGroupRedactions() { + List tokens = Arrays.asList("token1", "token2"); + List groupRedactions = new ArrayList<>(); + com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest request = com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest.builder() + .vaultId("vaultId") + .tokens(tokens) + .tokenGroupRedactions(groupRedactions) + .build(); + + List batches = Utils.createDetokenizeBatches(request, 1); + + Assert.assertEquals(2, batches.size()); + Assert.assertFalse(batches.get(0).getTokenGroupRedactions().isPresent()); + } + + @Test + public void testCreateDetokenizeBatchesWithBatchSizeGreaterThanTokens() { + List tokens = Arrays.asList("token1"); + com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest request = com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest.builder() + .vaultId("vaultId") + .tokens(tokens) + .build(); + + List batches = Utils.createDetokenizeBatches(request, 5); + + Assert.assertEquals(1, batches.size()); + Assert.assertEquals(Arrays.asList("token1"), batches.get(0).getTokens().get()); + } + public static List createDetokenizeBatches(com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest request, int batchSize) { List detokenizeRequests = new ArrayList<>(); List tokens = request.getTokens().get(); @@ -828,4 +896,95 @@ private DetokenizeResponseObject createResponseObject(String token, String value );return responseObject; } + @Test + public void testCreateErrorRecordWithHttpCodeKey() { + Map recordMap = new HashMap<>(); + recordMap.put("message", "Test message"); + recordMap.put("httpCode", 401); + + ErrorRecord error = Utils.createErrorRecord(recordMap, 2); + + Assert.assertEquals(2, error.getIndex()); + Assert.assertEquals("Test message", error.getError()); + Assert.assertEquals(401, error.getCode()); + } + + @Test + public void testCreateErrorRecordWithStatusCodeKey() { + Map recordMap = new HashMap<>(); + recordMap.put("statusCode", 402); + + ErrorRecord error = Utils.createErrorRecord(recordMap, 3); + + Assert.assertEquals(3, error.getIndex()); + Assert.assertEquals("Unknown error", error.getError()); + Assert.assertEquals(402, error.getCode()); + } + + @Test + public void testCreateErrorRecordWithUnknownErrorMessage() { + Map recordMap = new HashMap<>(); + recordMap.put("http_code", 403); + + ErrorRecord error = Utils.createErrorRecord(recordMap, 4); + + Assert.assertEquals(4, error.getIndex()); + Assert.assertEquals("Unknown error", error.getError()); + Assert.assertEquals(403, error.getCode()); + } + @Test + public void testHandleBatchExceptionWithNullResponseBody() { + List batch = Arrays.asList(InsertRecordData.builder().build()); + ApiClientApiException apiException = new ApiClientApiException("Error", 500, null); + Exception exception = new Exception("Test", apiException); + + List errors = Utils.handleBatchException(exception, batch, 0); + Assert.assertEquals(1, errors.size()); + Assert.assertEquals("Test", errors.get(0).getError()); + Assert.assertEquals(500, errors.get(0).getCode()); + } + + @Test + public void testHandleBatchExceptionWithNonListRecords() { + List batch = Arrays.asList(InsertRecordData.builder().build()); + Map responseBody = new HashMap<>(); + responseBody.put("records", "not_a_list"); + ApiClientApiException apiException = new ApiClientApiException("Error", 500, responseBody); + Exception exception = new Exception("Test", apiException); + + List errors = Utils.handleBatchException(exception, batch, 0); + Assert.assertEquals(1, errors.size()); + } + + @Test + public void testHandleBatchExceptionWithErrorNotMap() { + List batch = Arrays.asList(InsertRecordData.builder().build()); + Map responseBody = new HashMap<>(); + responseBody.put("error", "not_a_map"); + ApiClientApiException apiException = new ApiClientApiException("Error", 500, responseBody); + Exception exception = new Exception("Test", apiException); + + List errors = Utils.handleBatchException(exception, batch, 0); + Assert.assertEquals(1, errors.size()); + } + + @Test + public void testHandleBatchExceptionWithApiClientApiExceptionCause() { + List batch = Arrays.asList(InsertRecordData.builder().build()); + Map responseBody = new HashMap<>(); + Map error = new HashMap<>(); + error.put("message", "Test error"); + error.put("http_code", 400); + responseBody.put("error", error); + responseBody.put("http_code", 400); + + com.skyflow.generated.rest.core.ApiClientApiException apiException = new com.skyflow.generated.rest.core.ApiClientApiException("Error", 400, responseBody); + Exception exception = new Exception("Outer exception", apiException); + + List errors = Utils.handleBatchException(exception, batch, 0); + Assert.assertEquals(1, errors.size()); + Assert.assertEquals("Test error", errors.get(0).getError()); + Assert.assertEquals(400, errors.get(0).getCode()); + } + } \ No newline at end of file diff --git a/v3/test/java/com/skyflow/vault/data/InsertTests.java b/v3/test/java/com/skyflow/vault/data/InsertTests.java index be59a4cd..262119d5 100644 --- a/v3/test/java/com/skyflow/vault/data/InsertTests.java +++ b/v3/test/java/com/skyflow/vault/data/InsertTests.java @@ -115,14 +115,17 @@ public void testValidInputInInsertRequestValidationsWithTokenModeDisable() { @Test public void testNoTableInInsertRequestValidations() { - InsertRequest request = InsertRequest.builder().build(); + ArrayList records = new ArrayList<>(); + InsertRecord record = InsertRecord.builder().data(valueMap).build(); + records.add(record); + InsertRequest request = InsertRequest.builder().records(records).table("").build(); try { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( - Utils.parameterizedString(ErrorMessage.TableKeyError.getMessage(), Constants.SDK_PREFIX), + Utils.parameterizedString(ErrorMessage.TableNotSpecifiedInRequestAndRecordObject.getMessage(), Constants.SDK_PREFIX), e.getMessage() ); } @@ -130,14 +133,17 @@ public void testNoTableInInsertRequestValidations() { @Test public void testEmptyTableInInsertRequestValidations() { - InsertRequest request = InsertRequest.builder().table("").build(); + ArrayList records = new ArrayList<>(); + InsertRecord record = InsertRecord.builder().data(valueMap).build(); + records.add(record); + InsertRequest request = InsertRequest.builder().records(records).table("").build(); try { Validations.validateInsertRequest(request); Assert.fail(EXCEPTION_NOT_THROWN); } catch (SkyflowException e) { Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( - Utils.parameterizedString(ErrorMessage.EmptyTable.getMessage(), Constants.SDK_PREFIX), + Utils.parameterizedString(ErrorMessage.TableNotSpecifiedInRequestAndRecordObject.getMessage(), Constants.SDK_PREFIX), e.getMessage() ); } @@ -236,7 +242,7 @@ public void testInsertResponse() { List successList = new ArrayList<>(); successList.add(success); InsertResponse response = new InsertResponse(successList, null); - String responseString = "{\"success\":[{\"index\":0,\"skyflow_id\":\"id\"}]}"; + String responseString = "{\"success\":[{\"index\":0,\"skyflow_id\":\"id\",\"table\":\"table\"}]}"; Assert.assertEquals(1, response.getSuccess().size()); Assert.assertNull(response.getErrors()); Assert.assertEquals(responseString, response.toString()); @@ -260,7 +266,7 @@ public void testInsertErrorResponse() { errorList.add(error); InsertResponse response1 = new InsertResponse(successList, errorList); - String responseString = "{\"success\":[{\"index\":0,\"skyflow_id\":\"id\",\"data\":{\"test_column_1\":\"test_value_1\"}}],\"errors\":[{\"index\":1,\"error\":\"Bad Request\",\"code\":400}]}"; + String responseString = "{\"success\":[{\"index\":0,\"skyflow_id\":\"id\",\"data\":{\"test_column_1\":\"test_value_1\"},\"table\":\"table\"}],\"errors\":[{\"index\":1,\"error\":\"Bad Request\",\"code\":400}]}"; Assert.assertEquals(1, response1.getSuccess().size()); Assert.assertEquals(1, response1.getErrors().size()); Assert.assertEquals(responseString, response1.toString()); @@ -268,5 +274,95 @@ public void testInsertErrorResponse() { Assert.fail(INVALID_EXCEPTION_THROWN); } } +// Java + + @Test + public void testTableSpecifiedAtBothRequestAndRecordLevel() { + InsertRecord record = InsertRecord.builder().data(valueMap).table("record_table").build(); + values.add(record); + InsertRequest request = InsertRequest.builder().table(table).records(values).build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.TableSpecifiedInRequestAndRecordObject.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } +} + + @Test + public void testUpsertSpecifiedAtBothRequestAndRecordLevel() { + InsertRecord record = InsertRecord.builder().data(valueMap).upsert(upsert).build(); + values.add(record); + InsertRequest request = InsertRequest.builder().table(table).records(values).upsert(upsert).build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.UpsertTableRequestAtRecordLevel.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } +} + + @Test + public void testUpsertAtRecordLevelWithTableAtRequestLevel() { + InsertRecord record = InsertRecord.builder().data(valueMap).upsert(upsert).build(); + values.add(record); + InsertRequest request = InsertRequest.builder().table(table).records(values).build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.UpsertTableRequestAtRecordLevel.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } +} + + @Test + public void testUpsertAtRequestLevelWithNoTable() { + InsertRecord record = InsertRecord.builder().table("table").data(valueMap).build(); + values.add(record); + InsertRequest request = InsertRequest.builder().records(values).upsert(upsert).build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.UpsertTableRequestAtRequestLevel.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } +} + + @Test + public void testUpsertAtRequestLevelWithEmptyTable() { + InsertRecord record = InsertRecord.builder().table("table").data(valueMap).build(); + values.add(record); + List upsert = new ArrayList<>(); + upsert.add("upsert_column"); + + InsertRequest request = InsertRequest.builder().table("").records(values).upsert(upsert).build(); + try { + Validations.validateInsertRequest(request); + Assert.fail(EXCEPTION_NOT_THROWN); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals( + Utils.parameterizedString(ErrorMessage.UpsertTableRequestAtRequestLevel.getMessage(), Constants.SDK_PREFIX), + e.getMessage() + ); + } + } + } From e5616228c3d050b6243fcc32f121131461d9b0c4 Mon Sep 17 00:00:00 2001 From: skyflow-bharti Date: Fri, 19 Sep 2025 16:39:53 +0530 Subject: [PATCH 3/6] SK-2302 updated the messages --- v3/test/java/com/skyflow/utils/UtilsTests.java | 2 +- v3/test/java/com/skyflow/vault/data/InsertTests.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/v3/test/java/com/skyflow/utils/UtilsTests.java b/v3/test/java/com/skyflow/utils/UtilsTests.java index c2b05451..a8f94f6f 100644 --- a/v3/test/java/com/skyflow/utils/UtilsTests.java +++ b/v3/test/java/com/skyflow/utils/UtilsTests.java @@ -729,7 +729,7 @@ public void testValidateInsertRequestEmptyValues() { try { Validations.validateInsertRequest(request); } catch (SkyflowException e) { - assertEquals(ErrorMessage.EmptyValues.getMessage(), e.getMessage()); // Replace with the actual error message + assertEquals(ErrorMessage.EmptyRecords.getMessage(), e.getMessage()); // Replace with the actual error message } } diff --git a/v3/test/java/com/skyflow/vault/data/InsertTests.java b/v3/test/java/com/skyflow/vault/data/InsertTests.java index 262119d5..e8d1ddf4 100644 --- a/v3/test/java/com/skyflow/vault/data/InsertTests.java +++ b/v3/test/java/com/skyflow/vault/data/InsertTests.java @@ -173,7 +173,7 @@ public void testEmptyValuesInInsertRequestValidations() { } catch (SkyflowException e) { Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( - Utils.parameterizedString(ErrorMessage.EmptyValues.getMessage(), Constants.SDK_PREFIX), + Utils.parameterizedString(ErrorMessage.EmptyRecords.getMessage(), Constants.SDK_PREFIX), e.getMessage() ); } From a5514d3277c1a66fb9b068400309bb510c28b481 Mon Sep 17 00:00:00 2001 From: skyflow-bharti Date: Fri, 19 Sep 2025 16:44:17 +0530 Subject: [PATCH 4/6] SK-2302 updated the messages --- common/src/main/java/com/skyflow/errors/ErrorMessage.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/com/skyflow/errors/ErrorMessage.java b/common/src/main/java/com/skyflow/errors/ErrorMessage.java index 68021dd2..60a72489 100644 --- a/common/src/main/java/com/skyflow/errors/ErrorMessage.java +++ b/common/src/main/java/com/skyflow/errors/ErrorMessage.java @@ -63,9 +63,9 @@ public enum ErrorMessage { TableKeyError("%s0 Validation error. 'table' key is missing from the payload. Specify a 'table' key."), EmptyTable("%s0 Validation error. 'table' can't be empty. Specify a table."), ValuesKeyError("%s0 Validation error. 'values' key is missing from the payload. Specify a 'values' key."), - EmptyRecords("%s0 Validation error. 'values' can't be empty. Specify values."), - EmptyKeyInRecords("%s0 Validation error. Invalid key in values. Specify a valid key."), - EmptyValueInRecords("%s0 Validation error. Invalid value in values. Specify a valid value."), + EmptyRecords("%s0 Validation error. 'records' can't be empty. Specify records."), + EmptyKeyInRecords("%s0 Validation error. Invalid key in records. Specify a valid key."), + EmptyValueInRecords("%s0 Validation error. Invalid value in records. Specify a valid value."), RecordsKeyError("%s0 Validation error. 'values' key is missing from the payload. Specify a 'values' key."), EmptyValues("%s0 Validation error. 'values' can't be empty. Specify values."), EmptyKeyInValues("%s0 Validation error. Invalid key in values. Specify a valid key."), From c5595d0dfdb0d4d091bd8741e75b20d1372f42e6 Mon Sep 17 00:00:00 2001 From: skyflow-bharti Date: Fri, 19 Sep 2025 18:03:53 +0530 Subject: [PATCH 5/6] SK-2302 updated variable names --- .../java/com/skyflow/errors/ErrorMessage.java | 5 +- .../main/java/com/skyflow/logs/ErrorLogs.java | 1 + v3/src/main/java/com/skyflow/VaultClient.java | 22 ++++---- .../utils/validations/Validations.java | 50 +++++++++++-------- .../java/com/skyflow/utils/UtilsTests.java | 2 +- .../com/skyflow/vault/data/InsertTests.java | 4 +- 6 files changed, 47 insertions(+), 37 deletions(-) diff --git a/common/src/main/java/com/skyflow/errors/ErrorMessage.java b/common/src/main/java/com/skyflow/errors/ErrorMessage.java index 60a72489..e1c0eeba 100644 --- a/common/src/main/java/com/skyflow/errors/ErrorMessage.java +++ b/common/src/main/java/com/skyflow/errors/ErrorMessage.java @@ -64,9 +64,9 @@ public enum ErrorMessage { EmptyTable("%s0 Validation error. 'table' can't be empty. Specify a table."), ValuesKeyError("%s0 Validation error. 'values' key is missing from the payload. Specify a 'values' key."), EmptyRecords("%s0 Validation error. 'records' can't be empty. Specify records."), - EmptyKeyInRecords("%s0 Validation error. Invalid key in records. Specify a valid key."), + EmptyKeyInRecords("%s0 Validation error. Invalid key in data in records. Specify a valid key."), EmptyValueInRecords("%s0 Validation error. Invalid value in records. Specify a valid value."), - RecordsKeyError("%s0 Validation error. 'values' key is missing from the payload. Specify a 'values' key."), + RecordsKeyError("%s0 Validation error. 'records' key is missing from the payload. Specify a 'records' key."), EmptyValues("%s0 Validation error. 'values' can't be empty. Specify values."), EmptyKeyInValues("%s0 Validation error. Invalid key in values. Specify a valid key."), EmptyValueInValues("%s0 Validation error. Invalid value in values. Specify a valid value."), @@ -171,6 +171,7 @@ public enum ErrorMessage { NullRedactionInTokenGroup("%s0 Validation error. Redaction in TokenGroupRedactions is null or empty. Specify a valid redaction."), NullTokenGroupNameInTokenGroup("%s0 Validation error. TokenGroupName in TokenGroupRedactions is null or empty. Specify a valid tokenGroupName."), + InvalidRecord("%s0 Validation error. InsertRecord object in the list is invalid. Specify a valid InsertRecord object."), ; ; private final String message; diff --git a/common/src/main/java/com/skyflow/logs/ErrorLogs.java b/common/src/main/java/com/skyflow/logs/ErrorLogs.java index a481f9f6..64d1c5e6 100644 --- a/common/src/main/java/com/skyflow/logs/ErrorLogs.java +++ b/common/src/main/java/com/skyflow/logs/ErrorLogs.java @@ -53,6 +53,7 @@ public enum ErrorLogs { EMPTY_VALUES("Invalid %s1 request. Values can not be empty."), RECORDS_IS_REQUIRED("Invalid %s1 request. Records are required."), EMPTY_RECORDS("Invalid %s1 request. Records can not be empty."), + INVALID_RECORD("Invalid %s1 request. Invalid record. Specify a valid record."), RECORD_SIZE_EXCEED("Maximum number of records exceeded. The limit is 10000."), TOKENS_SIZE_EXCEED("Maximum number of tokens exceeded. The limit is 10000."), EMPTY_OR_NULL_VALUE_IN_VALUES("Invalid %s1 request. Value can not be null or empty in values for key \"%s2\"."), diff --git a/v3/src/main/java/com/skyflow/VaultClient.java b/v3/src/main/java/com/skyflow/VaultClient.java index 6bbb9c4d..559a7d3a 100644 --- a/v3/src/main/java/com/skyflow/VaultClient.java +++ b/v3/src/main/java/com/skyflow/VaultClient.java @@ -134,26 +134,26 @@ protected void updateExecutorInHTTP() { } protected InsertRequest getBulkInsertRequestBody(com.skyflow.vault.data.InsertRequest request, VaultConfig config) { - ArrayList values = request.getRecords(); + ArrayList records = request.getRecords(); List insertRecordDataList = new ArrayList<>(); - for (InsertRecord value : values) { + for (InsertRecord record : records) { InsertRecordData.Builder data = InsertRecordData.builder(); - data.data(value.getData()); - if (value.getTable() != null && !value.getTable().isEmpty()){ - data.tableName(value.getTable()); + data.data(record.getData()); + if (record.getTable() != null && !record.getTable().isEmpty()){ + data.tableName(record.getTable()); } - if (value.getUpsert() != null && !value.getUpsert().isEmpty()){ - if (value.getUpsertType() != null) { + if (record.getUpsert() != null && !record.getUpsert().isEmpty()){ + if (record.getUpsertType() != null) { EnumUpdateType updateType = null; - if (value.getUpsertType() == UpdateType.REPLACE) { + if (record.getUpsertType() == UpdateType.REPLACE) { updateType = EnumUpdateType.REPLACE; - } else if (value.getUpsertType() == UpdateType.UPDATE) { + } else if (record.getUpsertType() == UpdateType.UPDATE) { updateType = EnumUpdateType.UPDATE; } - Upsert upsert = Upsert.builder().uniqueColumns(value.getUpsert()).updateType(updateType).build(); + Upsert upsert = Upsert.builder().uniqueColumns(record.getUpsert()).updateType(updateType).build(); data.upsert(upsert); } else { - Upsert upsert = Upsert.builder().uniqueColumns(value.getUpsert()).build(); + Upsert upsert = Upsert.builder().uniqueColumns(record.getUpsert()).build(); data.upsert(upsert); } } diff --git a/v3/src/main/java/com/skyflow/utils/validations/Validations.java b/v3/src/main/java/com/skyflow/utils/validations/Validations.java index f0a07fdc..deb612f0 100644 --- a/v3/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v3/src/main/java/com/skyflow/utils/validations/Validations.java @@ -1,5 +1,8 @@ package com.skyflow.utils.validations; +import java.util.ArrayList; +import java.util.List; + import com.skyflow.config.Credentials; import com.skyflow.config.VaultConfig; import com.skyflow.enums.InterfaceName; @@ -14,10 +17,6 @@ import com.skyflow.vault.data.InsertRequest; import com.skyflow.vault.data.TokenGroupRedactions; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - public class Validations extends BaseValidations { private Validations() { super(); @@ -25,25 +24,34 @@ private Validations() { public static void validateInsertRequest(InsertRequest insertRequest) throws SkyflowException { String table = insertRequest.getTable(); - ArrayList values = insertRequest.getRecords(); - if (values == null) { + ArrayList records = insertRequest.getRecords(); + if (records == null) { LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.RECORDS_IS_REQUIRED.getLog(), InterfaceName.INSERT.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.RecordsKeyError.getMessage()); - } else if (values.isEmpty()) { + } else if (records.isEmpty()) { LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_RECORDS.getLog(), InterfaceName.INSERT.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyRecords.getMessage()); - } else if (values.size() > 10000) { + } else if (records.size() > 10000) { LogUtil.printErrorLog(ErrorLogs.RECORD_SIZE_EXCEED.getLog()); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.RecordSizeExceedError.getMessage()); } + for (InsertRecord record : records) { + if(record == null){ + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.INVALID_RECORD.getLog(), InterfaceName.INSERT.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.InvalidRecord.getMessage()); + } + } + // table check if specified for both if (insertRequest.getTable() != null && !table.trim().isEmpty()){ // if table name specified at both place - for (InsertRecord valuesMap : values) { - if (valuesMap.getTable() != null && !valuesMap.getTable().trim().isEmpty()){ + for (InsertRecord record : records) { + if (record.getTable() != null && !record.getTable().trim().isEmpty()){ LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.TABLE_SPECIFIED_AT_BOTH_PLACE.getLog(), InterfaceName.INSERT.getName() )); @@ -53,8 +61,8 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky } // table check if not specified for both or if missing in any object if (insertRequest.getTable() == null || table.trim().isEmpty()){ // if table name specified at both place - for (InsertRecord valuesMap : values) { - if (valuesMap.getTable() == null || valuesMap.getTable().trim().isEmpty()){ + for (InsertRecord record : records) { + if (record.getTable() == null || record.getTable().trim().isEmpty()){ LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.TABLE_NOT_SPECIFIED_AT_BOTH_PLACE.getLog(), InterfaceName.INSERT.getName() )); @@ -64,14 +72,14 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky } // upsert check 1 if (insertRequest.getTable() != null && !table.trim().isEmpty()){ // if table name specified at both place - for (InsertRecord valuesMap : values) { - if (valuesMap.getUpsert() != null && valuesMap.getUpsert().isEmpty()) { + for (InsertRecord record : records) { + if (record.getUpsert() != null && record.getUpsert().isEmpty()) { LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_UPSERT_VALUES.getLog(), InterfaceName.INSERT.getName() )); throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyUpsertValues.getMessage()); } - if (valuesMap.getUpsert() != null && !valuesMap.getUpsert().isEmpty()){ + if (record.getUpsert() != null && !record.getUpsert().isEmpty()){ LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.UPSERT_TABLE_REQUEST_AT_RECORD_LEVEL.getLog(), InterfaceName.INSERT.getName() )); @@ -96,17 +104,17 @@ public static void validateInsertRequest(InsertRequest insertRequest) throws Sky throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyUpsertValues.getMessage()); } - for (InsertRecord valuesMap : values) { - if (valuesMap != null ) { - if (valuesMap.getData() != null){ - for (String key : valuesMap.getData().keySet()) { + for (InsertRecord record : records) { + if (record != null ) { + if (record.getData() != null){ + for (String key : record.getData().keySet()) { if (key == null || key.trim().isEmpty()) { LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_OR_NULL_KEY_IN_VALUES.getLog(), InterfaceName.INSERT.getName() )); - throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyKeyInValues.getMessage()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyKeyInRecords.getMessage()); } else { - Object value = valuesMap.getData().get(key); + Object value = record.getData().get(key); if (value == null || value.toString().trim().isEmpty()) { LogUtil.printErrorLog(Utils.parameterizedString( ErrorLogs.EMPTY_OR_NULL_VALUE_IN_VALUES.getLog(), diff --git a/v3/test/java/com/skyflow/utils/UtilsTests.java b/v3/test/java/com/skyflow/utils/UtilsTests.java index a8f94f6f..1d32318e 100644 --- a/v3/test/java/com/skyflow/utils/UtilsTests.java +++ b/v3/test/java/com/skyflow/utils/UtilsTests.java @@ -715,7 +715,7 @@ public void testValidateInsertRequestNullValues() { try { Validations.validateInsertRequest(request); } catch (SkyflowException e) { - assertEquals(ErrorMessage.ValuesKeyError.getMessage(), e.getMessage()); // Replace with the actual error message + assertEquals(ErrorMessage.RecordsKeyError.getMessage(), e.getMessage()); // Replace with the actual error message } } diff --git a/v3/test/java/com/skyflow/vault/data/InsertTests.java b/v3/test/java/com/skyflow/vault/data/InsertTests.java index e8d1ddf4..5894d899 100644 --- a/v3/test/java/com/skyflow/vault/data/InsertTests.java +++ b/v3/test/java/com/skyflow/vault/data/InsertTests.java @@ -158,7 +158,7 @@ public void testNoValuesInInsertRequestValidations() { } catch (SkyflowException e) { Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( - Utils.parameterizedString(ErrorMessage.ValuesKeyError.getMessage(), Constants.SDK_PREFIX), + Utils.parameterizedString(ErrorMessage.RecordsKeyError.getMessage(), Constants.SDK_PREFIX), e.getMessage() ); } @@ -191,7 +191,7 @@ public void testEmptyKeyInValuesInInsertRequestValidations() { } catch (SkyflowException e) { Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); Assert.assertEquals( - Utils.parameterizedString(ErrorMessage.EmptyKeyInValues.getMessage(), Constants.SDK_PREFIX), + Utils.parameterizedString(ErrorMessage.EmptyKeyInRecords.getMessage(), Constants.SDK_PREFIX), e.getMessage() ); } From 4ecc16265d07df766409686a254d4c4085987e5a Mon Sep 17 00:00:00 2001 From: skyflow-vivek Date: Fri, 19 Sep 2025 19:08:28 +0530 Subject: [PATCH 6/6] SK-2302 Fix unit test --- .../java/com/skyflow/utils/UtilsTests.java | 80 ++++++++++--------- 1 file changed, 42 insertions(+), 38 deletions(-) diff --git a/v3/src/test/java/com/skyflow/utils/UtilsTests.java b/v3/src/test/java/com/skyflow/utils/UtilsTests.java index 1d32318e..5692af54 100644 --- a/v3/src/test/java/com/skyflow/utils/UtilsTests.java +++ b/v3/src/test/java/com/skyflow/utils/UtilsTests.java @@ -19,7 +19,6 @@ import java.util.*; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; public class UtilsTests { private static final String INVALID_EXCEPTION_THROWN = "Should not have thrown any exception"; @@ -42,6 +41,30 @@ public static void setup() { SdkVersion.setSdkPrefix(Constants.SDK_PREFIX); } + public static List createDetokenizeBatches(com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest request, int batchSize) { + List detokenizeRequests = new ArrayList<>(); + List tokens = request.getTokens().get(); + + for (int i = 0; i < tokens.size(); i += batchSize) { + // Create a sublist for the current batch + List batchTokens = tokens.subList(i, Math.min(i + batchSize, tokens.size())); + List tokenGroupRedactions = null; + if (request.getTokenGroupRedactions().isPresent() && !request.getTokenGroupRedactions().get().isEmpty() && i < request.getTokenGroupRedactions().get().size()) { + tokenGroupRedactions = request.getTokenGroupRedactions().get().subList(i, Math.min(i + batchSize, request.getTokenGroupRedactions().get().size())); + } + // Build a new DetokenizeRequest for the current batch + com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest batchRequest = com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest.builder() + .vaultId(request.getVaultId()) + .tokens(new ArrayList<>(batchTokens)) + .tokenGroupRedactions(tokenGroupRedactions) + .build(); + + detokenizeRequests.add(batchRequest); + } + + return detokenizeRequests; + } + @Test public void testGetVaultURL() { // Test with production environment @@ -58,6 +81,7 @@ public void testGetVaultURL() { devUrl ); } + @Test(expected = NullPointerException.class) public void testGetVaultURLWithNullEnv() { Utils.getVaultURL("abc123", null); @@ -438,6 +462,7 @@ public void testFormatResponseWithTokens() { Assert.assertEquals("Should have one success record", 1, result.getSuccess().size()); Assert.assertEquals("Skyflow ID should match", "id1", result.getSuccess().get(0).getSkyflowId()); } + @Test public void testFormatResponseWithTokenListMapping() { // Prepare test data @@ -480,6 +505,7 @@ public void testFormatResponseWithTokenListMapping() { Assert.assertEquals("Token value should match", "token123", tokensList.get(0).getToken()); Assert.assertEquals("Token group name should match", "group1", tokensList.get(0).getTokenGroupName()); } + @Test public void testHandleBatchExceptionWithRecordsInResponseBody() { // Prepare test data @@ -548,10 +574,10 @@ public void testValidateDetokenizeRequestValidInput() throws SkyflowException { @Test public void testValidateDetokenizeRequestNullRequest() { - try{ + try { Validations.validateDetokenizeRequest(null); Assert.fail(EXCEPTIONNOTTHROWN); - } catch (SkyflowException e){ + } catch (SkyflowException e) { assertEquals(e.getMessage(), ErrorMessage.DetokenizeRequestNull.getMessage()); } @@ -567,7 +593,7 @@ public void testValidateDetokenizeRequestEmptyTokens() { Validations.validateDetokenizeRequest(request); - } catch (SkyflowException e){ + } catch (SkyflowException e) { assertEquals(e.getMessage(), ErrorMessage.EmptyDetokenizeData.getMessage()); } } @@ -592,9 +618,9 @@ public void testValidateDetokenizeRequestNullGroupRedactions() { .tokens(tokens) .tokenGroupRedactions(null) .build(); - try{ + try { Validations.validateDetokenizeRequest(request); - } catch (SkyflowException e){ + } catch (SkyflowException e) { Assert.fail(INVALID_EXCEPTION_THROWN); } } @@ -611,9 +637,9 @@ public void testValidateDetokenizeRequestNullTokenGroupRedaction() { .tokens(tokens) .tokenGroupRedactions(groupRedactions) .build(); - try{ + try { Validations.validateDetokenizeRequest(request); - } catch (SkyflowException e){ + } catch (SkyflowException e) { Assert.assertEquals(ErrorMessage.NullTokenGroupRedactions.getMessage(), e.getMessage());// } } @@ -634,9 +660,9 @@ public void testValidateDetokenizeRequestEmptyTokenGroupName() { .tokenGroupRedactions(groupRedactions) .build(); - try{ + try { Validations.validateDetokenizeRequest(request); - } catch (SkyflowException e){ + } catch (SkyflowException e) { assertEquals(ErrorMessage.NullTokenGroupNameInTokenGroup.getMessage(), e.getMessage()); } } @@ -659,7 +685,7 @@ public void testValidateDetokenizeRequestEmptyRedaction() { try { Validations.validateDetokenizeRequest(request); - } catch (SkyflowException e){ + } catch (SkyflowException e) { assertEquals(ErrorMessage.NullRedactionInTokenGroup.getMessage(), e.getMessage()); } } @@ -733,7 +759,6 @@ public void testValidateInsertRequestEmptyValues() { } } - @Test public void testFormatDetokenizeResponseValidResponse() { // Arrange @@ -828,7 +853,8 @@ public void testCreateDetokenizeBatchesWithEmptyTokenGroupRedactions() { List batches = Utils.createDetokenizeBatches(request, 1); Assert.assertEquals(2, batches.size()); - Assert.assertTrue(batches.get(0).getTokenGroupRedactions().isEmpty()); + List redactions = batches.get(0).getTokenGroupRedactions().get(); + Assert.assertTrue(redactions.isEmpty()); } @Test @@ -861,30 +887,6 @@ public void testCreateDetokenizeBatchesWithBatchSizeGreaterThanTokens() { Assert.assertEquals(Arrays.asList("token1"), batches.get(0).getTokens().get()); } - public static List createDetokenizeBatches(com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest request, int batchSize) { - List detokenizeRequests = new ArrayList<>(); - List tokens = request.getTokens().get(); - - for (int i = 0; i < tokens.size(); i += batchSize) { - // Create a sublist for the current batch - List batchTokens = tokens.subList(i, Math.min(i + batchSize, tokens.size())); - List tokenGroupRedactions = null; - if (request.getTokenGroupRedactions().isPresent() && !request.getTokenGroupRedactions().get().isEmpty() && i < request.getTokenGroupRedactions().get().size()) { - tokenGroupRedactions = request.getTokenGroupRedactions().get().subList(i, Math.min(i + batchSize, request.getTokenGroupRedactions().get().size())); } - // Build a new DetokenizeRequest for the current batch - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest batchRequest = com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest.builder() - .vaultId(request.getVaultId()) - .tokens(new ArrayList<>(batchTokens)) - .tokenGroupRedactions(tokenGroupRedactions) - .build(); - - detokenizeRequests.add(batchRequest); - } - - return detokenizeRequests; - } - - private DetokenizeResponseObject createResponseObject(String token, String value, String groupName, String error, Integer httpCode) { DetokenizeResponseObject responseObject = new DetokenizeResponseObject( 0, @@ -893,7 +895,8 @@ private DetokenizeResponseObject createResponseObject(String token, String value String.valueOf(Optional.ofNullable(groupName)), String.valueOf(Optional.ofNullable(error)), null - );return responseObject; + ); + return responseObject; } @Test @@ -932,6 +935,7 @@ public void testCreateErrorRecordWithUnknownErrorMessage() { Assert.assertEquals("Unknown error", error.getError()); Assert.assertEquals(403, error.getCode()); } + @Test public void testHandleBatchExceptionWithNullResponseBody() { List batch = Arrays.asList(InsertRecordData.builder().build());