diff --git a/common/src/main/java/com/skyflow/errors/ErrorMessage.java b/common/src/main/java/com/skyflow/errors/ErrorMessage.java index ef7063ff..1320ca6e 100644 --- a/common/src/main/java/com/skyflow/errors/ErrorMessage.java +++ b/common/src/main/java/com/skyflow/errors/ErrorMessage.java @@ -92,6 +92,12 @@ public enum ErrorMessage { EmptyTokenInDetokenizeData("%s0 Validation error. Invalid data tokens. Specify a valid data token."), TokensSizeExceedError("%s0 Maximum number of tokens exceeded. The limit is 10000."), + // Delete Tokens + DeleteTokensRequestNull("%s0 Validation error. DeleteTokensRequest object is null. Specify a valid DeleteTokensRequest object."), + EmptyDeleteTokensData("%s0 Validation error. Tokens list is empty. Specify at least one token to delete."), + EmptyTokenInDeleteTokensData("%s0 Validation error. Invalid token in delete tokens request. Specify a valid token."), + DeleteTokensSizeExceedError("%s0 Maximum number of tokens exceeded. The limit is 10000."), + // Get IdsKeyError("%s0 Validation error. 'ids' key is missing from the payload. Specify an 'ids' key."), EmptyIds("%s0 Validation error. 'ids' can't be empty. Specify at least one id."), @@ -128,6 +134,13 @@ public enum ErrorMessage { // Tokenize ColumnValuesKeyErrorTokenize("%s0 Validation error. 'columnValues' key is missing from the payload. Specify a 'columnValues' key."), EmptyColumnGroupInColumnValue("%s0 Validation error. Invalid column group in column value. Specify a valid column group."), + TokenizeRequestNull("%s0 Validation error. TokenizeRequest object is null. Specify a valid TokenizeRequest object."), + EmptyTokenizeData("%s0 Validation error. Tokenize data is empty. Specify at least one tokenize record."), + TokenizeRecordNull("%s0 Validation error. TokenizeRecord in the list is null. Specify a valid TokenizeRecord object."), + EmptyValueInTokenizeRecord("%s0 Validation error. Value in TokenizeRecord is null or empty. Specify a valid value."), + EmptyTokenGroupNamesInTokenizeRecord("%s0 Validation error. TokenGroupNames in TokenizeRecord is null or empty. Specify at least one token group name."), + EmptyTokenGroupNameInTokenizeRecord("%s0 Validation error. Token group name in TokenizeRecord is null or empty. Specify a valid token group name."), + TokenizeDataSizeExceedError("%s0 Maximum number of tokenize records exceeded. The limit is 10000."), // Connection InvalidRequestHeaders("%s0 Validation error. Request headers aren't valid. Specify valid request headers."), diff --git a/common/src/main/java/com/skyflow/logs/ErrorLogs.java b/common/src/main/java/com/skyflow/logs/ErrorLogs.java index e8f0a627..404c6e68 100644 --- a/common/src/main/java/com/skyflow/logs/ErrorLogs.java +++ b/common/src/main/java/com/skyflow/logs/ErrorLogs.java @@ -113,7 +113,18 @@ public enum ErrorLogs { COLUMN_VALUES_IS_REQUIRED_TOKENIZE("Invalid %s1 request. ColumnValues are required."), EMPTY_OR_NULL_COLUMN_GROUP_IN_COLUMN_VALUES("Invalid %s1 request. Column group can not be null or empty in column values at index %s2."), TOKENIZE_REQUEST_REJECTED("Tokenize request resulted in failure."), + TOKENIZE_REQUEST_NULL("Invalid %s1 request. Tokenize request can not be null."), + EMPTY_TOKENIZE_DATA("Invalid %s1 request. Tokenize data can not be empty."), + TOKENIZE_RECORD_NULL("Invalid %s1 request. TokenizeRecord in list can not be null."), + EMPTY_VALUE_IN_TOKENIZE_RECORD("Invalid %s1 request. Value in TokenizeRecord can not be null or empty."), + EMPTY_TOKEN_GROUP_NAMES_IN_TOKENIZE_RECORD("Invalid %s1 request. TokenGroupNames in TokenizeRecord can not be null or empty."), + EMPTY_TOKEN_GROUP_NAME_IN_TOKENIZE_RECORD("Invalid %s1 request. Token group name in TokenizeRecord can not be null or empty at index %s2."), + TOKENIZE_DATA_SIZE_EXCEED("Maximum number of tokenize records exceeded. The limit is 10000."), DELETE_REQUEST_REJECTED("Delete request resulted in failure."), + DELETE_TOKENS_REQUEST_NULL("Invalid %s1 request. DeleteTokens request can not be null."), + EMPTY_DELETE_TOKENS_DATA("Invalid %s1 request. Delete tokens data can not be empty."), + EMPTY_OR_NULL_TOKEN_IN_DELETE_TOKENS_DATA("Invalid %s1 request. Token can not be null or empty in delete tokens data at index %s2."), + DELETE_TOKENS_SIZE_EXCEED("Maximum number of tokens exceeded. The limit is 10000."), // invoke connection interface INVOKE_CONNECTION_INVALID_CONNECTION_URL("Invalid %s1 request. Connection URL is not a valid URL."), diff --git a/common/src/main/java/com/skyflow/logs/InfoLogs.java b/common/src/main/java/com/skyflow/logs/InfoLogs.java index 9727e811..b29dc8a0 100644 --- a/common/src/main/java/com/skyflow/logs/InfoLogs.java +++ b/common/src/main/java/com/skyflow/logs/InfoLogs.java @@ -58,6 +58,12 @@ public enum InfoLogs { DELETE_REQUEST_RESOLVED("Delete request resolved."), DELETE_SUCCESS("Data deleted."), + // Delete Tokens interface + DELETE_TOKENS_TRIGGERED("DeleteTokens method triggered."), + VALIDATE_DELETE_TOKENS_REQUEST("Validating delete tokens request."), + DELETE_TOKENS_REQUEST_RESOLVED("DeleteTokens request resolved."), + DELETE_TOKENS_SUCCESS("Tokens deleted."), + // Query interface QUERY_TRIGGERED("Query method triggered."), VALIDATING_QUERY_REQUEST("Validating query request."), diff --git a/v3/src/main/java/com/skyflow/VaultClient.java b/v3/src/main/java/com/skyflow/VaultClient.java index 464f2efe..a22fde18 100644 --- a/v3/src/main/java/com/skyflow/VaultClient.java +++ b/v3/src/main/java/com/skyflow/VaultClient.java @@ -8,11 +8,11 @@ import com.skyflow.errors.SkyflowException; import com.skyflow.generated.rest.ApiClient; import com.skyflow.generated.rest.ApiClientBuilder; -import com.skyflow.generated.rest.resources.recordservice.RecordserviceClient; -import com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest; -import com.skyflow.generated.rest.types.EnumUpdateType; -import com.skyflow.generated.rest.types.InsertRecordData; -import com.skyflow.generated.rest.types.Upsert; +import com.skyflow.generated.rest.resources.flowservice.FlowserviceClient; +import com.skyflow.generated.rest.resources.flowservice.requests.V1InsertRequest; +import com.skyflow.generated.rest.types.FlowEnumUpdateType; +import com.skyflow.generated.rest.types.V1InsertRecordData; +import com.skyflow.generated.rest.types.V1Upsert; import com.skyflow.logs.InfoLogs; import com.skyflow.serviceaccount.util.Token; import com.skyflow.utils.Constants; @@ -21,6 +21,9 @@ import com.skyflow.utils.validations.Validations; import com.skyflow.vault.data.DetokenizeRequest; import com.skyflow.vault.data.InsertRecord; +import com.skyflow.vault.data.DeleteTokensRequest; +import com.skyflow.vault.data.TokenizeRequest; +import com.skyflow.vault.data.TokenizeRecord; import io.github.cdimascio.dotenv.Dotenv; import io.github.cdimascio.dotenv.DotenvException; import okhttp3.OkHttpClient; @@ -48,8 +51,8 @@ protected VaultClient(VaultConfig vaultConfig, Credentials credentials) throws S updateVaultURL(); } - protected RecordserviceClient getRecordsApi() { - return this.apiClient.recordservice(); + protected FlowserviceClient getRecordsApi() { + return this.apiClient.flowservice(); } protected VaultConfig getVaultConfig() { @@ -141,34 +144,34 @@ protected void updateExecutorInHTTP() { apiClientBuilder.httpClient(httpClient); } - protected InsertRequest getBulkInsertRequestBody(com.skyflow.vault.data.InsertRequest request, VaultConfig config) { + protected V1InsertRequest getBulkInsertRequestBody(com.skyflow.vault.data.InsertRequest request, VaultConfig config) { ArrayList records = request.getRecords(); - List insertRecordDataList = new ArrayList<>(); + List insertRecordDataList = new ArrayList<>(); for (InsertRecord record : records) { - InsertRecordData.Builder data = InsertRecordData.builder(); + V1InsertRecordData.Builder data = V1InsertRecordData.builder(); data.data(record.getData()); if (record.getTable() != null && !record.getTable().isEmpty()) { data.tableName(record.getTable()); } if (record.getUpsert() != null && !record.getUpsert().isEmpty()) { if (record.getUpsertType() != null) { - EnumUpdateType updateType = null; + FlowEnumUpdateType updateType = null; if (record.getUpsertType() == UpsertType.REPLACE) { - updateType = EnumUpdateType.REPLACE; + updateType = FlowEnumUpdateType.REPLACE; } else if (record.getUpsertType() == UpsertType.UPDATE) { - updateType = EnumUpdateType.UPDATE; + updateType = FlowEnumUpdateType.UPDATE; } - Upsert upsert = Upsert.builder().uniqueColumns(record.getUpsert()).updateType(updateType).build(); + V1Upsert upsert = V1Upsert.builder().uniqueColumns(record.getUpsert()).updateType(updateType).build(); data.upsert(upsert); } else { - Upsert upsert = Upsert.builder().uniqueColumns(record.getUpsert()).build(); + V1Upsert upsert = V1Upsert.builder().uniqueColumns(record.getUpsert()).build(); data.upsert(upsert); } } insertRecordDataList.add(data.build()); } - InsertRequest.Builder builder = InsertRequest.builder() + V1InsertRequest.Builder builder = V1InsertRequest.builder() .vaultId(config.getVaultId()) .records(insertRecordDataList); @@ -178,16 +181,16 @@ protected InsertRequest getBulkInsertRequestBody(com.skyflow.vault.data.InsertRe if (request.getUpsert() != null && !request.getUpsert().isEmpty()) { if (request.getUpsertType() != null) { - EnumUpdateType updateType = null; + FlowEnumUpdateType updateType = null; if (request.getUpsertType() == UpsertType.REPLACE) { - updateType = EnumUpdateType.REPLACE; + updateType = FlowEnumUpdateType.REPLACE; } else if (request.getUpsertType() == UpsertType.UPDATE) { - updateType = EnumUpdateType.UPDATE; + updateType = FlowEnumUpdateType.UPDATE; } - Upsert upsert = Upsert.builder().uniqueColumns(request.getUpsert()).updateType(updateType).build(); + V1Upsert upsert = V1Upsert.builder().uniqueColumns(request.getUpsert()).updateType(updateType).build(); builder.upsert(upsert); } else { - Upsert upsert = Upsert.builder().uniqueColumns(request.getUpsert()).build(); + V1Upsert upsert = V1Upsert.builder().uniqueColumns(request.getUpsert()).build(); builder.upsert(upsert); } } @@ -195,17 +198,17 @@ protected InsertRequest getBulkInsertRequestBody(com.skyflow.vault.data.InsertRe } - protected com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest getDetokenizeRequestBody(DetokenizeRequest request) { + protected com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest getDetokenizeRequestBody(DetokenizeRequest request) { List tokens = request.getTokens(); - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest.Builder builder = - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest.builder() + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest.Builder builder = + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest.builder() .vaultId(this.vaultConfig.getVaultId()) .tokens(tokens); if (request.getTokenGroupRedactions() != null) { - List tokenGroupRedactionsList = new ArrayList<>(); + List tokenGroupRedactionsList = new ArrayList<>(); for (com.skyflow.vault.data.TokenGroupRedactions tokenGroupRedactions : request.getTokenGroupRedactions()) { - com.skyflow.generated.rest.types.TokenGroupRedactions redactions = - com.skyflow.generated.rest.types.TokenGroupRedactions.builder() + com.skyflow.generated.rest.types.V1TokenGroupRedactions redactions = + com.skyflow.generated.rest.types.V1TokenGroupRedactions.builder() .tokenGroupName(tokenGroupRedactions.getTokenGroupName()) .redaction(tokenGroupRedactions.getRedaction()) .build(); @@ -216,4 +219,27 @@ protected com.skyflow.generated.rest.resources.recordservice.requests.Detokenize } return builder.build(); } + + protected com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDeleteTokenRequest getDeleteTokensRequestBody(DeleteTokensRequest request) { + return com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDeleteTokenRequest.builder() + .vaultId(this.vaultConfig.getVaultId()) + .tokens(request.getTokens()) + .build(); + } + + protected com.skyflow.generated.rest.resources.flowservice.requests.V1FlowTokenizeRequest getTokenizeRequestBody(TokenizeRequest request) { + List dataList = new ArrayList<>(); + for (TokenizeRecord record : request.getData()) { + com.skyflow.generated.rest.types.V1FlowTokenizeRequestObject obj = + com.skyflow.generated.rest.types.V1FlowTokenizeRequestObject.builder() + .value(record.getValue()) + .tokenGroupNames(record.getTokenGroupNames()) + .build(); + dataList.add(obj); + } + return com.skyflow.generated.rest.resources.flowservice.requests.V1FlowTokenizeRequest.builder() + .vaultId(this.vaultConfig.getVaultId()) + .data(dataList) + .build(); + } } 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 e23953a4..b8ad790f 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/ApiClient.java +++ b/v3/src/main/java/com/skyflow/generated/rest/ApiClient.java @@ -5,8 +5,8 @@ import com.skyflow.generated.rest.core.ClientOptions; import com.skyflow.generated.rest.core.Suppliers; +import com.skyflow.generated.rest.resources.flowservice.FlowserviceClient; import com.skyflow.generated.rest.resources.records.RecordsClient; -import com.skyflow.generated.rest.resources.recordservice.RecordserviceClient; import java.util.function.Supplier; public class ApiClient { @@ -14,20 +14,20 @@ public class ApiClient { protected final Supplier recordsClient; - protected final Supplier recordserviceClient; + protected final Supplier flowserviceClient; public ApiClient(ClientOptions clientOptions) { this.clientOptions = clientOptions; this.recordsClient = Suppliers.memoize(() -> new RecordsClient(clientOptions)); - this.recordserviceClient = Suppliers.memoize(() -> new RecordserviceClient(clientOptions)); + this.flowserviceClient = Suppliers.memoize(() -> new FlowserviceClient(clientOptions)); } public RecordsClient records() { return this.recordsClient.get(); } - public RecordserviceClient recordservice() { - return this.recordserviceClient.get(); + public FlowserviceClient flowservice() { + return this.flowserviceClient.get(); } public static ApiClientBuilder builder() { 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 6bebc2ab..215f9b46 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/AsyncApiClient.java +++ b/v3/src/main/java/com/skyflow/generated/rest/AsyncApiClient.java @@ -5,8 +5,8 @@ import com.skyflow.generated.rest.core.ClientOptions; import com.skyflow.generated.rest.core.Suppliers; +import com.skyflow.generated.rest.resources.flowservice.AsyncFlowserviceClient; import com.skyflow.generated.rest.resources.records.AsyncRecordsClient; -import com.skyflow.generated.rest.resources.recordservice.AsyncRecordserviceClient; import java.util.function.Supplier; public class AsyncApiClient { @@ -14,20 +14,20 @@ public class AsyncApiClient { protected final Supplier recordsClient; - protected final Supplier recordserviceClient; + protected final Supplier flowserviceClient; public AsyncApiClient(ClientOptions clientOptions) { this.clientOptions = clientOptions; this.recordsClient = Suppliers.memoize(() -> new AsyncRecordsClient(clientOptions)); - this.recordserviceClient = Suppliers.memoize(() -> new AsyncRecordserviceClient(clientOptions)); + this.flowserviceClient = Suppliers.memoize(() -> new AsyncFlowserviceClient(clientOptions)); } public AsyncRecordsClient records() { return this.recordsClient.get(); } - public AsyncRecordserviceClient recordservice() { - return this.recordserviceClient.get(); + public AsyncFlowserviceClient flowservice() { + return this.flowserviceClient.get(); } public static AsyncApiClientBuilder builder() { 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 0fb0f237..a5d27b01 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 @@ -34,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.352"); + put("X-Fern-SDK-Version", "0.0.98"); } }); this.headerSuppliers = headerSuppliers; diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/AsyncFlowserviceClient.java b/v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/AsyncFlowserviceClient.java new file mode 100644 index 00000000..195490a6 --- /dev/null +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/AsyncFlowserviceClient.java @@ -0,0 +1,142 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +package com.skyflow.generated.rest.resources.flowservice; + +import com.skyflow.generated.rest.core.ClientOptions; +import com.skyflow.generated.rest.core.RequestOptions; +import com.skyflow.generated.rest.resources.flowservice.requests.V1DeleteRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDeleteTokenRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1FlowTokenizeRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1FlowVaultMetricsRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1GetRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1InsertRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1UpdateRequest; +import com.skyflow.generated.rest.types.V1DeleteResponse; +import com.skyflow.generated.rest.types.V1FlowDeleteTokenResponse; +import com.skyflow.generated.rest.types.V1FlowDetokenizeResponse; +import com.skyflow.generated.rest.types.V1FlowTokenizeResponse; +import com.skyflow.generated.rest.types.V1FlowVaultMetricsResponse; +import com.skyflow.generated.rest.types.V1GetResponse; +import com.skyflow.generated.rest.types.V1InsertResponse; +import com.skyflow.generated.rest.types.V1UpdateResponse; +import java.util.concurrent.CompletableFuture; + +public class AsyncFlowserviceClient { + protected final ClientOptions clientOptions; + + private final AsyncRawFlowserviceClient rawClient; + + public AsyncFlowserviceClient(ClientOptions clientOptions) { + this.clientOptions = clientOptions; + this.rawClient = new AsyncRawFlowserviceClient(clientOptions); + } + + /** + * Get responses with HTTP metadata like headers + */ + public AsyncRawFlowserviceClient withRawResponse() { + return this.rawClient; + } + + public CompletableFuture delete() { + return this.rawClient.delete().thenApply(response -> response.body()); + } + + public CompletableFuture delete(V1DeleteRequest request) { + return this.rawClient.delete(request).thenApply(response -> response.body()); + } + + public CompletableFuture delete(V1DeleteRequest request, RequestOptions requestOptions) { + return this.rawClient.delete(request, requestOptions).thenApply(response -> response.body()); + } + + public CompletableFuture get() { + return this.rawClient.get().thenApply(response -> response.body()); + } + + public CompletableFuture get(V1GetRequest request) { + return this.rawClient.get(request).thenApply(response -> response.body()); + } + + public CompletableFuture get(V1GetRequest request, RequestOptions requestOptions) { + return this.rawClient.get(request, requestOptions).thenApply(response -> response.body()); + } + + public CompletableFuture insert() { + return this.rawClient.insert().thenApply(response -> response.body()); + } + + public CompletableFuture insert(V1InsertRequest request) { + return this.rawClient.insert(request).thenApply(response -> response.body()); + } + + public CompletableFuture insert(V1InsertRequest request, RequestOptions requestOptions) { + return this.rawClient.insert(request, requestOptions).thenApply(response -> response.body()); + } + + public CompletableFuture update() { + return this.rawClient.update().thenApply(response -> response.body()); + } + + public CompletableFuture update(V1UpdateRequest request) { + return this.rawClient.update(request).thenApply(response -> response.body()); + } + + public CompletableFuture update(V1UpdateRequest request, RequestOptions requestOptions) { + return this.rawClient.update(request, requestOptions).thenApply(response -> response.body()); + } + + public CompletableFuture deletetoken() { + return this.rawClient.deletetoken().thenApply(response -> response.body()); + } + + public CompletableFuture deletetoken(V1FlowDeleteTokenRequest request) { + return this.rawClient.deletetoken(request).thenApply(response -> response.body()); + } + + public CompletableFuture deletetoken( + V1FlowDeleteTokenRequest request, RequestOptions requestOptions) { + return this.rawClient.deletetoken(request, requestOptions).thenApply(response -> response.body()); + } + + public CompletableFuture detokenize() { + return this.rawClient.detokenize().thenApply(response -> response.body()); + } + + public CompletableFuture detokenize(V1FlowDetokenizeRequest request) { + return this.rawClient.detokenize(request).thenApply(response -> response.body()); + } + + public CompletableFuture detokenize( + V1FlowDetokenizeRequest request, RequestOptions requestOptions) { + return this.rawClient.detokenize(request, requestOptions).thenApply(response -> response.body()); + } + + public CompletableFuture tokenize() { + return this.rawClient.tokenize().thenApply(response -> response.body()); + } + + public CompletableFuture tokenize(V1FlowTokenizeRequest request) { + return this.rawClient.tokenize(request).thenApply(response -> response.body()); + } + + public CompletableFuture tokenize( + V1FlowTokenizeRequest request, RequestOptions requestOptions) { + return this.rawClient.tokenize(request, requestOptions).thenApply(response -> response.body()); + } + + public CompletableFuture flowvaultmetrics() { + return this.rawClient.flowvaultmetrics().thenApply(response -> response.body()); + } + + public CompletableFuture flowvaultmetrics(V1FlowVaultMetricsRequest request) { + return this.rawClient.flowvaultmetrics(request).thenApply(response -> response.body()); + } + + public CompletableFuture flowvaultmetrics( + V1FlowVaultMetricsRequest request, RequestOptions requestOptions) { + return this.rawClient.flowvaultmetrics(request, requestOptions).thenApply(response -> response.body()); + } +} 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/flowservice/AsyncRawFlowserviceClient.java similarity index 68% rename from v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/AsyncRawRecordserviceClient.java rename to v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/AsyncRawFlowserviceClient.java index bfa4666c..0ddf04f8 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/AsyncRawRecordserviceClient.java +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/AsyncRawFlowserviceClient.java @@ -1,7 +1,7 @@ /** * This file was auto-generated by Fern from our API Definition. */ -package com.skyflow.generated.rest.resources.recordservice; +package com.skyflow.generated.rest.resources.flowservice; import com.fasterxml.jackson.core.JsonProcessingException; import com.skyflow.generated.rest.core.ApiClientApiException; @@ -11,20 +11,22 @@ 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 com.skyflow.generated.rest.resources.flowservice.requests.V1DeleteRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDeleteTokenRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1FlowTokenizeRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1FlowVaultMetricsRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1GetRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1InsertRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1UpdateRequest; +import com.skyflow.generated.rest.types.V1DeleteResponse; +import com.skyflow.generated.rest.types.V1FlowDeleteTokenResponse; +import com.skyflow.generated.rest.types.V1FlowDetokenizeResponse; +import com.skyflow.generated.rest.types.V1FlowTokenizeResponse; +import com.skyflow.generated.rest.types.V1FlowVaultMetricsResponse; +import com.skyflow.generated.rest.types.V1GetResponse; +import com.skyflow.generated.rest.types.V1InsertResponse; +import com.skyflow.generated.rest.types.V1UpdateResponse; import java.io.IOException; import java.util.concurrent.CompletableFuture; import okhttp3.Call; @@ -38,23 +40,23 @@ import okhttp3.ResponseBody; import org.jetbrains.annotations.NotNull; -public class AsyncRawRecordserviceClient { +public class AsyncRawFlowserviceClient { protected final ClientOptions clientOptions; - public AsyncRawRecordserviceClient(ClientOptions clientOptions) { + public AsyncRawFlowserviceClient(ClientOptions clientOptions) { this.clientOptions = clientOptions; } - public CompletableFuture> delete() { - return delete(DeleteRequest.builder().build()); + public CompletableFuture> delete() { + return delete(V1DeleteRequest.builder().build()); } - public CompletableFuture> delete(DeleteRequest request) { + public CompletableFuture> delete(V1DeleteRequest request) { return delete(request, null); } - public CompletableFuture> delete( - DeleteRequest request, RequestOptions requestOptions) { + public CompletableFuture> delete( + V1DeleteRequest request, RequestOptions requestOptions) { HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) .newBuilder() .addPathSegments("v2/records/delete") @@ -77,14 +79,14 @@ public CompletableFuture> delete( if (requestOptions != null && requestOptions.getTimeout().isPresent()) { client = clientOptions.httpClientWithTimeout(requestOptions); } - CompletableFuture> future = new CompletableFuture<>(); + 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(), DeleteResponse.class), + ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), V1DeleteResponse.class), response)); return; } @@ -108,16 +110,16 @@ public void onFailure(@NotNull Call call, @NotNull IOException e) { return future; } - public CompletableFuture> get() { - return get(GetRequest.builder().build()); + public CompletableFuture> get() { + return get(V1GetRequest.builder().build()); } - public CompletableFuture> get(GetRequest request) { + public CompletableFuture> get(V1GetRequest request) { return get(request, null); } - public CompletableFuture> get( - GetRequest request, RequestOptions requestOptions) { + public CompletableFuture> get( + V1GetRequest request, RequestOptions requestOptions) { HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) .newBuilder() .addPathSegments("v2/records/get") @@ -140,14 +142,14 @@ public CompletableFuture> get( if (requestOptions != null && requestOptions.getTimeout().isPresent()) { client = clientOptions.httpClientWithTimeout(requestOptions); } - CompletableFuture> future = new CompletableFuture<>(); + 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(), GetResponse.class), + ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), V1GetResponse.class), response)); return; } @@ -171,16 +173,16 @@ public void onFailure(@NotNull Call call, @NotNull IOException e) { return future; } - public CompletableFuture> insert() { - return insert(InsertRequest.builder().build()); + public CompletableFuture> insert() { + return insert(V1InsertRequest.builder().build()); } - public CompletableFuture> insert(InsertRequest request) { + public CompletableFuture> insert(V1InsertRequest request) { return insert(request, null); } - public CompletableFuture> insert( - InsertRequest request, RequestOptions requestOptions) { + public CompletableFuture> insert( + V1InsertRequest request, RequestOptions requestOptions) { HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) .newBuilder() .addPathSegments("v2/records/insert") @@ -203,14 +205,14 @@ public CompletableFuture> insert( if (requestOptions != null && requestOptions.getTimeout().isPresent()) { client = clientOptions.httpClientWithTimeout(requestOptions); } - CompletableFuture> future = new CompletableFuture<>(); + 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(), InsertResponse.class), + ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), V1InsertResponse.class), response)); return; } @@ -234,16 +236,16 @@ public void onFailure(@NotNull Call call, @NotNull IOException e) { return future; } - public CompletableFuture> update() { - return update(UpdateRequest.builder().build()); + public CompletableFuture> update() { + return update(V1UpdateRequest.builder().build()); } - public CompletableFuture> update(UpdateRequest request) { + public CompletableFuture> update(V1UpdateRequest request) { return update(request, null); } - public CompletableFuture> update( - UpdateRequest request, RequestOptions requestOptions) { + public CompletableFuture> update( + V1UpdateRequest request, RequestOptions requestOptions) { HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) .newBuilder() .addPathSegments("v2/records/update") @@ -266,14 +268,14 @@ public CompletableFuture> update( if (requestOptions != null && requestOptions.getTimeout().isPresent()) { client = clientOptions.httpClientWithTimeout(requestOptions); } - CompletableFuture> future = new CompletableFuture<>(); + 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(), UpdateResponse.class), + ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), V1UpdateResponse.class), response)); return; } @@ -297,16 +299,17 @@ public void onFailure(@NotNull Call call, @NotNull IOException e) { return future; } - public CompletableFuture> deletetoken() { - return deletetoken(DeleteTokenRequest.builder().build()); + public CompletableFuture> deletetoken() { + return deletetoken(V1FlowDeleteTokenRequest.builder().build()); } - public CompletableFuture> deletetoken(DeleteTokenRequest request) { + public CompletableFuture> deletetoken( + V1FlowDeleteTokenRequest request) { return deletetoken(request, null); } - public CompletableFuture> deletetoken( - DeleteTokenRequest request, RequestOptions requestOptions) { + public CompletableFuture> deletetoken( + V1FlowDeleteTokenRequest request, RequestOptions requestOptions) { HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) .newBuilder() .addPathSegments("v2/tokens/delete") @@ -329,14 +332,15 @@ public CompletableFuture> deletetoken if (requestOptions != null && requestOptions.getTimeout().isPresent()) { client = clientOptions.httpClientWithTimeout(requestOptions); } - CompletableFuture> future = new CompletableFuture<>(); + 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(), DeleteTokenResponse.class), + ObjectMappers.JSON_MAPPER.readValue( + responseBody.string(), V1FlowDeleteTokenResponse.class), response)); return; } @@ -360,16 +364,17 @@ public void onFailure(@NotNull Call call, @NotNull IOException e) { return future; } - public CompletableFuture> detokenize() { - return detokenize(DetokenizeRequest.builder().build()); + public CompletableFuture> detokenize() { + return detokenize(V1FlowDetokenizeRequest.builder().build()); } - public CompletableFuture> detokenize(DetokenizeRequest request) { + public CompletableFuture> detokenize( + V1FlowDetokenizeRequest request) { return detokenize(request, null); } - public CompletableFuture> detokenize( - DetokenizeRequest request, RequestOptions requestOptions) { + public CompletableFuture> detokenize( + V1FlowDetokenizeRequest request, RequestOptions requestOptions) { HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) .newBuilder() .addPathSegments("v2/tokens/detokenize") @@ -392,14 +397,15 @@ public CompletableFuture> detokenize( if (requestOptions != null && requestOptions.getTimeout().isPresent()) { client = clientOptions.httpClientWithTimeout(requestOptions); } - CompletableFuture> future = new CompletableFuture<>(); + 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(), DetokenizeResponse.class), + ObjectMappers.JSON_MAPPER.readValue( + responseBody.string(), V1FlowDetokenizeResponse.class), response)); return; } @@ -423,19 +429,19 @@ public void onFailure(@NotNull Call call, @NotNull IOException e) { return future; } - public CompletableFuture> tokenize() { - return tokenize(TokenizeRequest.builder().build()); + public CompletableFuture> tokenize() { + return tokenize(V1FlowTokenizeRequest.builder().build()); } - public CompletableFuture> tokenize(TokenizeRequest request) { + public CompletableFuture> tokenize(V1FlowTokenizeRequest request) { return tokenize(request, null); } - public CompletableFuture> tokenize( - TokenizeRequest request, RequestOptions requestOptions) { + public CompletableFuture> tokenize( + V1FlowTokenizeRequest request, RequestOptions requestOptions) { HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) .newBuilder() - .addPathSegments("v2/tokens/get") + .addPathSegments("v2/tokens/tokenize") .build(); RequestBody body; try { @@ -455,14 +461,80 @@ public CompletableFuture> tokenize( if (requestOptions != null && requestOptions.getTimeout().isPresent()) { client = clientOptions.httpClientWithTimeout(requestOptions); } - CompletableFuture> future = new CompletableFuture<>(); + 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(), TokenizeResponse.class), + ObjectMappers.JSON_MAPPER.readValue( + responseBody.string(), V1FlowTokenizeResponse.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> flowvaultmetrics() { + return flowvaultmetrics(V1FlowVaultMetricsRequest.builder().build()); + } + + public CompletableFuture> flowvaultmetrics( + V1FlowVaultMetricsRequest request) { + return flowvaultmetrics(request, null); + } + + public CompletableFuture> flowvaultmetrics( + V1FlowVaultMetricsRequest request, RequestOptions requestOptions) { + HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) + .newBuilder() + .addPathSegments("v2/vaults/metrics") + .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(), V1FlowVaultMetricsResponse.class), response)); return; } diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/FlowserviceClient.java b/v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/FlowserviceClient.java new file mode 100644 index 00000000..510c32b4 --- /dev/null +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/FlowserviceClient.java @@ -0,0 +1,138 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +package com.skyflow.generated.rest.resources.flowservice; + +import com.skyflow.generated.rest.core.ClientOptions; +import com.skyflow.generated.rest.core.RequestOptions; +import com.skyflow.generated.rest.resources.flowservice.requests.V1DeleteRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDeleteTokenRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1FlowTokenizeRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1FlowVaultMetricsRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1GetRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1InsertRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1UpdateRequest; +import com.skyflow.generated.rest.types.V1DeleteResponse; +import com.skyflow.generated.rest.types.V1FlowDeleteTokenResponse; +import com.skyflow.generated.rest.types.V1FlowDetokenizeResponse; +import com.skyflow.generated.rest.types.V1FlowTokenizeResponse; +import com.skyflow.generated.rest.types.V1FlowVaultMetricsResponse; +import com.skyflow.generated.rest.types.V1GetResponse; +import com.skyflow.generated.rest.types.V1InsertResponse; +import com.skyflow.generated.rest.types.V1UpdateResponse; + +public class FlowserviceClient { + protected final ClientOptions clientOptions; + + private final RawFlowserviceClient rawClient; + + public FlowserviceClient(ClientOptions clientOptions) { + this.clientOptions = clientOptions; + this.rawClient = new RawFlowserviceClient(clientOptions); + } + + /** + * Get responses with HTTP metadata like headers + */ + public RawFlowserviceClient withRawResponse() { + return this.rawClient; + } + + public V1DeleteResponse delete() { + return this.rawClient.delete().body(); + } + + public V1DeleteResponse delete(V1DeleteRequest request) { + return this.rawClient.delete(request).body(); + } + + public V1DeleteResponse delete(V1DeleteRequest request, RequestOptions requestOptions) { + return this.rawClient.delete(request, requestOptions).body(); + } + + public V1GetResponse get() { + return this.rawClient.get().body(); + } + + public V1GetResponse get(V1GetRequest request) { + return this.rawClient.get(request).body(); + } + + public V1GetResponse get(V1GetRequest request, RequestOptions requestOptions) { + return this.rawClient.get(request, requestOptions).body(); + } + + public V1InsertResponse insert() { + return this.rawClient.insert().body(); + } + + public V1InsertResponse insert(V1InsertRequest request) { + return this.rawClient.insert(request).body(); + } + + public V1InsertResponse insert(V1InsertRequest request, RequestOptions requestOptions) { + return this.rawClient.insert(request, requestOptions).body(); + } + + public V1UpdateResponse update() { + return this.rawClient.update().body(); + } + + public V1UpdateResponse update(V1UpdateRequest request) { + return this.rawClient.update(request).body(); + } + + public V1UpdateResponse update(V1UpdateRequest request, RequestOptions requestOptions) { + return this.rawClient.update(request, requestOptions).body(); + } + + public V1FlowDeleteTokenResponse deletetoken() { + return this.rawClient.deletetoken().body(); + } + + public V1FlowDeleteTokenResponse deletetoken(V1FlowDeleteTokenRequest request) { + return this.rawClient.deletetoken(request).body(); + } + + public V1FlowDeleteTokenResponse deletetoken(V1FlowDeleteTokenRequest request, RequestOptions requestOptions) { + return this.rawClient.deletetoken(request, requestOptions).body(); + } + + public V1FlowDetokenizeResponse detokenize() { + return this.rawClient.detokenize().body(); + } + + public V1FlowDetokenizeResponse detokenize(V1FlowDetokenizeRequest request) { + return this.rawClient.detokenize(request).body(); + } + + public V1FlowDetokenizeResponse detokenize(V1FlowDetokenizeRequest request, RequestOptions requestOptions) { + return this.rawClient.detokenize(request, requestOptions).body(); + } + + public V1FlowTokenizeResponse tokenize() { + return this.rawClient.tokenize().body(); + } + + public V1FlowTokenizeResponse tokenize(V1FlowTokenizeRequest request) { + return this.rawClient.tokenize(request).body(); + } + + public V1FlowTokenizeResponse tokenize(V1FlowTokenizeRequest request, RequestOptions requestOptions) { + return this.rawClient.tokenize(request, requestOptions).body(); + } + + public V1FlowVaultMetricsResponse flowvaultmetrics() { + return this.rawClient.flowvaultmetrics().body(); + } + + public V1FlowVaultMetricsResponse flowvaultmetrics(V1FlowVaultMetricsRequest request) { + return this.rawClient.flowvaultmetrics(request).body(); + } + + public V1FlowVaultMetricsResponse flowvaultmetrics( + V1FlowVaultMetricsRequest request, RequestOptions requestOptions) { + return this.rawClient.flowvaultmetrics(request, requestOptions).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/flowservice/RawFlowserviceClient.java similarity index 68% rename from v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/RawRecordserviceClient.java rename to v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/RawFlowserviceClient.java index 0ea6e50c..ca930b6f 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/RawRecordserviceClient.java +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/RawFlowserviceClient.java @@ -1,7 +1,7 @@ /** * This file was auto-generated by Fern from our API Definition. */ -package com.skyflow.generated.rest.resources.recordservice; +package com.skyflow.generated.rest.resources.flowservice; import com.fasterxml.jackson.core.JsonProcessingException; import com.skyflow.generated.rest.core.ApiClientApiException; @@ -11,20 +11,22 @@ 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 com.skyflow.generated.rest.resources.flowservice.requests.V1DeleteRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDeleteTokenRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1FlowTokenizeRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1FlowVaultMetricsRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1GetRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1InsertRequest; +import com.skyflow.generated.rest.resources.flowservice.requests.V1UpdateRequest; +import com.skyflow.generated.rest.types.V1DeleteResponse; +import com.skyflow.generated.rest.types.V1FlowDeleteTokenResponse; +import com.skyflow.generated.rest.types.V1FlowDetokenizeResponse; +import com.skyflow.generated.rest.types.V1FlowTokenizeResponse; +import com.skyflow.generated.rest.types.V1FlowVaultMetricsResponse; +import com.skyflow.generated.rest.types.V1GetResponse; +import com.skyflow.generated.rest.types.V1InsertResponse; +import com.skyflow.generated.rest.types.V1UpdateResponse; import java.io.IOException; import okhttp3.Headers; import okhttp3.HttpUrl; @@ -34,22 +36,22 @@ import okhttp3.Response; import okhttp3.ResponseBody; -public class RawRecordserviceClient { +public class RawFlowserviceClient { protected final ClientOptions clientOptions; - public RawRecordserviceClient(ClientOptions clientOptions) { + public RawFlowserviceClient(ClientOptions clientOptions) { this.clientOptions = clientOptions; } - public ApiClientHttpResponse delete() { - return delete(DeleteRequest.builder().build()); + public ApiClientHttpResponse delete() { + return delete(V1DeleteRequest.builder().build()); } - public ApiClientHttpResponse delete(DeleteRequest request) { + public ApiClientHttpResponse delete(V1DeleteRequest request) { return delete(request, null); } - public ApiClientHttpResponse delete(DeleteRequest request, RequestOptions requestOptions) { + public ApiClientHttpResponse delete(V1DeleteRequest request, RequestOptions requestOptions) { HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) .newBuilder() .addPathSegments("v2/records/delete") @@ -76,7 +78,7 @@ public ApiClientHttpResponse delete(DeleteRequest request, Reque ResponseBody responseBody = response.body(); if (response.isSuccessful()) { return new ApiClientHttpResponse<>( - ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), DeleteResponse.class), response); + ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), V1DeleteResponse.class), response); } String responseBodyString = responseBody != null ? responseBody.string() : "{}"; throw new ApiClientApiException( @@ -89,15 +91,15 @@ public ApiClientHttpResponse delete(DeleteRequest request, Reque } } - public ApiClientHttpResponse get() { - return get(GetRequest.builder().build()); + public ApiClientHttpResponse get() { + return get(V1GetRequest.builder().build()); } - public ApiClientHttpResponse get(GetRequest request) { + public ApiClientHttpResponse get(V1GetRequest request) { return get(request, null); } - public ApiClientHttpResponse get(GetRequest request, RequestOptions requestOptions) { + public ApiClientHttpResponse get(V1GetRequest request, RequestOptions requestOptions) { HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) .newBuilder() .addPathSegments("v2/records/get") @@ -124,7 +126,7 @@ public ApiClientHttpResponse get(GetRequest request, RequestOptions ResponseBody responseBody = response.body(); if (response.isSuccessful()) { return new ApiClientHttpResponse<>( - ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), GetResponse.class), response); + ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), V1GetResponse.class), response); } String responseBodyString = responseBody != null ? responseBody.string() : "{}"; throw new ApiClientApiException( @@ -137,15 +139,15 @@ public ApiClientHttpResponse get(GetRequest request, RequestOptions } } - public ApiClientHttpResponse insert() { - return insert(InsertRequest.builder().build()); + public ApiClientHttpResponse insert() { + return insert(V1InsertRequest.builder().build()); } - public ApiClientHttpResponse insert(InsertRequest request) { + public ApiClientHttpResponse insert(V1InsertRequest request) { return insert(request, null); } - public ApiClientHttpResponse insert(InsertRequest request, RequestOptions requestOptions) { + public ApiClientHttpResponse insert(V1InsertRequest request, RequestOptions requestOptions) { HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) .newBuilder() .addPathSegments("v2/records/insert") @@ -172,7 +174,7 @@ public ApiClientHttpResponse insert(InsertRequest request, Reque ResponseBody responseBody = response.body(); if (response.isSuccessful()) { return new ApiClientHttpResponse<>( - ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), InsertResponse.class), response); + ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), V1InsertResponse.class), response); } String responseBodyString = responseBody != null ? responseBody.string() : "{}"; throw new ApiClientApiException( @@ -185,15 +187,15 @@ public ApiClientHttpResponse insert(InsertRequest request, Reque } } - public ApiClientHttpResponse update() { - return update(UpdateRequest.builder().build()); + public ApiClientHttpResponse update() { + return update(V1UpdateRequest.builder().build()); } - public ApiClientHttpResponse update(UpdateRequest request) { + public ApiClientHttpResponse update(V1UpdateRequest request) { return update(request, null); } - public ApiClientHttpResponse update(UpdateRequest request, RequestOptions requestOptions) { + public ApiClientHttpResponse update(V1UpdateRequest request, RequestOptions requestOptions) { HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) .newBuilder() .addPathSegments("v2/records/update") @@ -220,7 +222,7 @@ public ApiClientHttpResponse update(UpdateRequest request, Reque ResponseBody responseBody = response.body(); if (response.isSuccessful()) { return new ApiClientHttpResponse<>( - ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), UpdateResponse.class), response); + ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), V1UpdateResponse.class), response); } String responseBodyString = responseBody != null ? responseBody.string() : "{}"; throw new ApiClientApiException( @@ -233,16 +235,16 @@ public ApiClientHttpResponse update(UpdateRequest request, Reque } } - public ApiClientHttpResponse deletetoken() { - return deletetoken(DeleteTokenRequest.builder().build()); + public ApiClientHttpResponse deletetoken() { + return deletetoken(V1FlowDeleteTokenRequest.builder().build()); } - public ApiClientHttpResponse deletetoken(DeleteTokenRequest request) { + public ApiClientHttpResponse deletetoken(V1FlowDeleteTokenRequest request) { return deletetoken(request, null); } - public ApiClientHttpResponse deletetoken( - DeleteTokenRequest request, RequestOptions requestOptions) { + public ApiClientHttpResponse deletetoken( + V1FlowDeleteTokenRequest request, RequestOptions requestOptions) { HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) .newBuilder() .addPathSegments("v2/tokens/delete") @@ -269,7 +271,7 @@ public ApiClientHttpResponse deletetoken( ResponseBody responseBody = response.body(); if (response.isSuccessful()) { return new ApiClientHttpResponse<>( - ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), DeleteTokenResponse.class), + ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), V1FlowDeleteTokenResponse.class), response); } String responseBodyString = responseBody != null ? responseBody.string() : "{}"; @@ -283,16 +285,16 @@ public ApiClientHttpResponse deletetoken( } } - public ApiClientHttpResponse detokenize() { - return detokenize(DetokenizeRequest.builder().build()); + public ApiClientHttpResponse detokenize() { + return detokenize(V1FlowDetokenizeRequest.builder().build()); } - public ApiClientHttpResponse detokenize(DetokenizeRequest request) { + public ApiClientHttpResponse detokenize(V1FlowDetokenizeRequest request) { return detokenize(request, null); } - public ApiClientHttpResponse detokenize( - DetokenizeRequest request, RequestOptions requestOptions) { + public ApiClientHttpResponse detokenize( + V1FlowDetokenizeRequest request, RequestOptions requestOptions) { HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) .newBuilder() .addPathSegments("v2/tokens/detokenize") @@ -319,7 +321,7 @@ public ApiClientHttpResponse detokenize( ResponseBody responseBody = response.body(); if (response.isSuccessful()) { return new ApiClientHttpResponse<>( - ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), DetokenizeResponse.class), + ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), V1FlowDetokenizeResponse.class), response); } String responseBodyString = responseBody != null ? responseBody.string() : "{}"; @@ -333,19 +335,19 @@ public ApiClientHttpResponse detokenize( } } - public ApiClientHttpResponse tokenize() { - return tokenize(TokenizeRequest.builder().build()); + public ApiClientHttpResponse tokenize() { + return tokenize(V1FlowTokenizeRequest.builder().build()); } - public ApiClientHttpResponse tokenize(TokenizeRequest request) { + public ApiClientHttpResponse tokenize(V1FlowTokenizeRequest request) { return tokenize(request, null); } - public ApiClientHttpResponse tokenize( - TokenizeRequest request, RequestOptions requestOptions) { + public ApiClientHttpResponse tokenize( + V1FlowTokenizeRequest request, RequestOptions requestOptions) { HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) .newBuilder() - .addPathSegments("v2/tokens/get") + .addPathSegments("v2/tokens/tokenize") .build(); RequestBody body; try { @@ -369,7 +371,58 @@ public ApiClientHttpResponse tokenize( ResponseBody responseBody = response.body(); if (response.isSuccessful()) { return new ApiClientHttpResponse<>( - ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), TokenizeResponse.class), response); + ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), V1FlowTokenizeResponse.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 flowvaultmetrics() { + return flowvaultmetrics(V1FlowVaultMetricsRequest.builder().build()); + } + + public ApiClientHttpResponse flowvaultmetrics(V1FlowVaultMetricsRequest request) { + return flowvaultmetrics(request, null); + } + + public ApiClientHttpResponse flowvaultmetrics( + V1FlowVaultMetricsRequest request, RequestOptions requestOptions) { + HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) + .newBuilder() + .addPathSegments("v2/vaults/metrics") + .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(), V1FlowVaultMetricsResponse.class), + response); } String responseBodyString = responseBody != null ? responseBody.string() : "{}"; throw new ApiClientApiException( 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/flowservice/requests/V1DeleteRequest.java similarity index 71% rename from v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/DeleteRequest.java rename to v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/requests/V1DeleteRequest.java index 6a52143e..f09397b0 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/flowservice/requests/V1DeleteRequest.java @@ -1,7 +1,7 @@ /** * This file was auto-generated by Fern from our API Definition. */ -package com.skyflow.generated.rest.resources.recordservice.requests; +package com.skyflow.generated.rest.resources.flowservice.requests; import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; @@ -12,6 +12,7 @@ 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.V1UniqueValue; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -19,24 +20,28 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = DeleteRequest.Builder.class) -public final class DeleteRequest { +@JsonDeserialize(builder = V1DeleteRequest.Builder.class) +public final class V1DeleteRequest { private final Optional vaultId; private final Optional tableName; private final Optional> skyflowIDs; + private final Optional> uniqueValues; + private final Map additionalProperties; - private DeleteRequest( + private V1DeleteRequest( Optional vaultId, Optional tableName, Optional> skyflowIDs, + Optional> uniqueValues, Map additionalProperties) { this.vaultId = vaultId; this.tableName = tableName; this.skyflowIDs = skyflowIDs; + this.uniqueValues = uniqueValues; this.additionalProperties = additionalProperties; } @@ -64,10 +69,18 @@ public Optional> getSkyflowIDs() { return skyflowIDs; } + /** + * @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 DeleteRequest && equalTo((DeleteRequest) other); + return other instanceof V1DeleteRequest && equalTo((V1DeleteRequest) other); } @JsonAnyGetter @@ -75,15 +88,16 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(DeleteRequest other) { + private boolean equalTo(V1DeleteRequest other) { return vaultId.equals(other.vaultId) && tableName.equals(other.tableName) - && skyflowIDs.equals(other.skyflowIDs); + && skyflowIDs.equals(other.skyflowIDs) + && uniqueValues.equals(other.uniqueValues); } @java.lang.Override public int hashCode() { - return Objects.hash(this.vaultId, this.tableName, this.skyflowIDs); + return Objects.hash(this.vaultId, this.tableName, this.skyflowIDs, this.uniqueValues); } @java.lang.Override @@ -103,15 +117,18 @@ public static final class Builder { private Optional> skyflowIDs = Optional.empty(); + private Optional> uniqueValues = Optional.empty(); + @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(DeleteRequest other) { + public Builder from(V1DeleteRequest other) { vaultId(other.getVaultId()); tableName(other.getTableName()); skyflowIDs(other.getSkyflowIDs()); + uniqueValues(other.getUniqueValues()); return this; } @@ -157,8 +174,22 @@ public Builder skyflowIDs(List skyflowIDs) { return this; } - public DeleteRequest build() { - return new DeleteRequest(vaultId, tableName, skyflowIDs, additionalProperties); + /** + *

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 V1DeleteRequest build() { + return new V1DeleteRequest(vaultId, tableName, skyflowIDs, uniqueValues, additionalProperties); } } } 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/flowservice/requests/V1FlowDeleteTokenRequest.java similarity index 85% rename from v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/DeleteTokenRequest.java rename to v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/requests/V1FlowDeleteTokenRequest.java index d234eaad..b2fc71f5 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/flowservice/requests/V1FlowDeleteTokenRequest.java @@ -1,7 +1,7 @@ /** * This file was auto-generated by Fern from our API Definition. */ -package com.skyflow.generated.rest.resources.recordservice.requests; +package com.skyflow.generated.rest.resources.flowservice.requests; import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; @@ -19,15 +19,15 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = DeleteTokenRequest.Builder.class) -public final class DeleteTokenRequest { +@JsonDeserialize(builder = V1FlowDeleteTokenRequest.Builder.class) +public final class V1FlowDeleteTokenRequest { private final Optional vaultId; private final Optional> tokens; private final Map additionalProperties; - private DeleteTokenRequest( + private V1FlowDeleteTokenRequest( Optional vaultId, Optional> tokens, Map additionalProperties) { this.vaultId = vaultId; this.tokens = tokens; @@ -53,7 +53,7 @@ public Optional> getTokens() { @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof DeleteTokenRequest && equalTo((DeleteTokenRequest) other); + return other instanceof V1FlowDeleteTokenRequest && equalTo((V1FlowDeleteTokenRequest) other); } @JsonAnyGetter @@ -61,7 +61,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(DeleteTokenRequest other) { + private boolean equalTo(V1FlowDeleteTokenRequest other) { return vaultId.equals(other.vaultId) && tokens.equals(other.tokens); } @@ -90,7 +90,7 @@ public static final class Builder { private Builder() {} - public Builder from(DeleteTokenRequest other) { + public Builder from(V1FlowDeleteTokenRequest other) { vaultId(other.getVaultId()); tokens(other.getTokens()); return this; @@ -124,8 +124,8 @@ public Builder tokens(List tokens) { return this; } - public DeleteTokenRequest build() { - return new DeleteTokenRequest(vaultId, tokens, additionalProperties); + public V1FlowDeleteTokenRequest build() { + return new V1FlowDeleteTokenRequest(vaultId, tokens, additionalProperties); } } } 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/flowservice/requests/V1FlowDetokenizeRequest.java similarity index 77% rename from v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/DetokenizeRequest.java rename to v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/requests/V1FlowDetokenizeRequest.java index 7e806056..78efb3fc 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/flowservice/requests/V1FlowDetokenizeRequest.java @@ -1,7 +1,7 @@ /** * This file was auto-generated by Fern from our API Definition. */ -package com.skyflow.generated.rest.resources.recordservice.requests; +package com.skyflow.generated.rest.resources.flowservice.requests; import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; @@ -12,7 +12,7 @@ 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 com.skyflow.generated.rest.types.V1TokenGroupRedactions; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -20,20 +20,20 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = DetokenizeRequest.Builder.class) -public final class DetokenizeRequest { +@JsonDeserialize(builder = V1FlowDetokenizeRequest.Builder.class) +public final class V1FlowDetokenizeRequest { private final Optional vaultId; private final Optional> tokens; - private final Optional> tokenGroupRedactions; + private final Optional> tokenGroupRedactions; private final Map additionalProperties; - private DetokenizeRequest( + private V1FlowDetokenizeRequest( Optional vaultId, Optional> tokens, - Optional> tokenGroupRedactions, + Optional> tokenGroupRedactions, Map additionalProperties) { this.vaultId = vaultId; this.tokens = tokens; @@ -61,14 +61,14 @@ public Optional> getTokens() { * @return List of token groups to be redacted. */ @JsonProperty("tokenGroupRedactions") - public Optional> getTokenGroupRedactions() { + public Optional> getTokenGroupRedactions() { return tokenGroupRedactions; } @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof DetokenizeRequest && equalTo((DetokenizeRequest) other); + return other instanceof V1FlowDetokenizeRequest && equalTo((V1FlowDetokenizeRequest) other); } @JsonAnyGetter @@ -76,7 +76,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(DetokenizeRequest other) { + private boolean equalTo(V1FlowDetokenizeRequest other) { return vaultId.equals(other.vaultId) && tokens.equals(other.tokens) && tokenGroupRedactions.equals(other.tokenGroupRedactions); @@ -102,14 +102,14 @@ public static final class Builder { private Optional> tokens = Optional.empty(); - private Optional> tokenGroupRedactions = Optional.empty(); + private Optional> tokenGroupRedactions = Optional.empty(); @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(DetokenizeRequest other) { + public Builder from(V1FlowDetokenizeRequest other) { vaultId(other.getVaultId()); tokens(other.getTokens()); tokenGroupRedactions(other.getTokenGroupRedactions()); @@ -148,18 +148,18 @@ public Builder tokens(List tokens) { *

List of token groups to be redacted.

*/ @JsonSetter(value = "tokenGroupRedactions", nulls = Nulls.SKIP) - public Builder tokenGroupRedactions(Optional> tokenGroupRedactions) { + public Builder tokenGroupRedactions(Optional> tokenGroupRedactions) { this.tokenGroupRedactions = tokenGroupRedactions; return this; } - public Builder tokenGroupRedactions(List tokenGroupRedactions) { + public Builder tokenGroupRedactions(List tokenGroupRedactions) { this.tokenGroupRedactions = Optional.ofNullable(tokenGroupRedactions); return this; } - public DetokenizeRequest build() { - return new DetokenizeRequest(vaultId, tokens, tokenGroupRedactions, additionalProperties); + public V1FlowDetokenizeRequest build() { + return new V1FlowDetokenizeRequest(vaultId, tokens, tokenGroupRedactions, additionalProperties); } } } 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/flowservice/requests/V1FlowTokenizeRequest.java similarity index 73% rename from v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/TokenizeRequest.java rename to v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/requests/V1FlowTokenizeRequest.java index d0f32e5b..9144e16d 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/flowservice/requests/V1FlowTokenizeRequest.java @@ -1,7 +1,7 @@ /** * This file was auto-generated by Fern from our API Definition. */ -package com.skyflow.generated.rest.resources.recordservice.requests; +package com.skyflow.generated.rest.resources.flowservice.requests; import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; @@ -12,7 +12,7 @@ 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 com.skyflow.generated.rest.types.V1FlowTokenizeRequestObject; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -20,17 +20,17 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = TokenizeRequest.Builder.class) -public final class TokenizeRequest { +@JsonDeserialize(builder = V1FlowTokenizeRequest.Builder.class) +public final class V1FlowTokenizeRequest { private final Optional vaultId; - private final Optional> data; + private final Optional> data; private final Map additionalProperties; - private TokenizeRequest( + private V1FlowTokenizeRequest( Optional vaultId, - Optional> data, + Optional> data, Map additionalProperties) { this.vaultId = vaultId; this.data = data; @@ -49,14 +49,14 @@ public Optional getVaultId() { * @return Data to be tokenized */ @JsonProperty("data") - public Optional> getData() { + public Optional> getData() { return data; } @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof TokenizeRequest && equalTo((TokenizeRequest) other); + return other instanceof V1FlowTokenizeRequest && equalTo((V1FlowTokenizeRequest) other); } @JsonAnyGetter @@ -64,7 +64,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(TokenizeRequest other) { + private boolean equalTo(V1FlowTokenizeRequest other) { return vaultId.equals(other.vaultId) && data.equals(other.data); } @@ -86,14 +86,14 @@ public static Builder builder() { public static final class Builder { private Optional vaultId = Optional.empty(); - private Optional> data = Optional.empty(); + private Optional> data = Optional.empty(); @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(TokenizeRequest other) { + public Builder from(V1FlowTokenizeRequest other) { vaultId(other.getVaultId()); data(other.getData()); return this; @@ -117,18 +117,18 @@ public Builder vaultId(String vaultId) { *

Data to be tokenized

*/ @JsonSetter(value = "data", nulls = Nulls.SKIP) - public Builder data(Optional> data) { + public Builder data(Optional> data) { this.data = data; return this; } - public Builder data(List data) { + public Builder data(List data) { this.data = Optional.ofNullable(data); return this; } - public TokenizeRequest build() { - return new TokenizeRequest(vaultId, data, additionalProperties); + public V1FlowTokenizeRequest build() { + return new V1FlowTokenizeRequest(vaultId, data, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/requests/V1FlowVaultMetricsRequest.java b/v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/requests/V1FlowVaultMetricsRequest.java new file mode 100644 index 00000000..8ba19a46 --- /dev/null +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/requests/V1FlowVaultMetricsRequest.java @@ -0,0 +1,101 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ +package com.skyflow.generated.rest.resources.flowservice.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; +import java.util.Optional; + +@JsonInclude(JsonInclude.Include.NON_ABSENT) +@JsonDeserialize(builder = V1FlowVaultMetricsRequest.Builder.class) +public final class V1FlowVaultMetricsRequest { + private final Optional vaultId; + + private final Map additionalProperties; + + private V1FlowVaultMetricsRequest(Optional vaultId, Map additionalProperties) { + this.vaultId = vaultId; + this.additionalProperties = additionalProperties; + } + + /** + * @return ID of the vault to get metrics for + */ + @JsonProperty("vaultID") + public Optional getVaultId() { + return vaultId; + } + + @java.lang.Override + public boolean equals(Object other) { + if (this == other) return true; + return other instanceof V1FlowVaultMetricsRequest && equalTo((V1FlowVaultMetricsRequest) other); + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + private boolean equalTo(V1FlowVaultMetricsRequest other) { + return vaultId.equals(other.vaultId); + } + + @java.lang.Override + public int hashCode() { + return Objects.hash(this.vaultId); + } + + @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 vaultId = Optional.empty(); + + @JsonAnySetter + private Map additionalProperties = new HashMap<>(); + + private Builder() {} + + public Builder from(V1FlowVaultMetricsRequest other) { + vaultId(other.getVaultId()); + return this; + } + + /** + *

ID of the vault to get metrics for

+ */ + @JsonSetter(value = "vaultID", nulls = Nulls.SKIP) + public Builder vaultId(Optional vaultId) { + this.vaultId = vaultId; + return this; + } + + public Builder vaultId(String vaultId) { + this.vaultId = Optional.ofNullable(vaultId); + return this; + } + + public V1FlowVaultMetricsRequest build() { + return new V1FlowVaultMetricsRequest(vaultId, additionalProperties); + } + } +} 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/flowservice/requests/V1GetRequest.java similarity index 83% rename from v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/GetRequest.java rename to v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/requests/V1GetRequest.java index 79d49ed2..cfa0951c 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/flowservice/requests/V1GetRequest.java @@ -1,7 +1,7 @@ /** * This file was auto-generated by Fern from our API Definition. */ -package com.skyflow.generated.rest.resources.recordservice.requests; +package com.skyflow.generated.rest.resources.flowservice.requests; import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; @@ -12,9 +12,9 @@ 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 com.skyflow.generated.rest.types.GetRequestData; -import com.skyflow.generated.rest.types.UniqueValue; +import com.skyflow.generated.rest.types.V1ColumnRedactions; +import com.skyflow.generated.rest.types.V1GetRequestData; +import com.skyflow.generated.rest.types.V1UniqueValue; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -22,15 +22,15 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = GetRequest.Builder.class) -public final class GetRequest { +@JsonDeserialize(builder = V1GetRequest.Builder.class) +public final class V1GetRequest { private final Optional vaultId; private final Optional tableName; private final Optional> skyflowIDs; - private final Optional> columnRedactions; + private final Optional> columnRedactions; private final Optional> columns; @@ -38,22 +38,22 @@ public final class GetRequest { private final Optional offset; - private final Optional> uniqueValues; + private final Optional> uniqueValues; - private final Optional> records; + private final Optional> records; private final Map additionalProperties; - private GetRequest( + private V1GetRequest( Optional vaultId, Optional tableName, Optional> skyflowIDs, - Optional> columnRedactions, + Optional> columnRedactions, Optional> columns, Optional limit, Optional offset, - Optional> uniqueValues, - Optional> records, + Optional> uniqueValues, + Optional> records, Map additionalProperties) { this.vaultId = vaultId; this.tableName = tableName; @@ -95,7 +95,7 @@ public Optional> getSkyflowIDs() { * @return List of columns to be redacted. */ @JsonProperty("columnRedactions") - public Optional> getColumnRedactions() { + public Optional> getColumnRedactions() { return columnRedactions; } @@ -127,7 +127,7 @@ public Optional getOffset() { * @return List of unique constraint values to query records by data */ @JsonProperty("uniqueValues") - public Optional> getUniqueValues() { + public Optional> getUniqueValues() { return uniqueValues; } @@ -135,14 +135,14 @@ public Optional> getUniqueValues() { * @return List of records to be fetched. This field contains tableName and skyflowIDs belonging to the table. */ @JsonProperty("records") - public Optional> getRecords() { + 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); + return other instanceof V1GetRequest && equalTo((V1GetRequest) other); } @JsonAnyGetter @@ -150,7 +150,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(GetRequest other) { + private boolean equalTo(V1GetRequest other) { return vaultId.equals(other.vaultId) && tableName.equals(other.tableName) && skyflowIDs.equals(other.skyflowIDs) @@ -193,7 +193,7 @@ public static final class Builder { private Optional> skyflowIDs = Optional.empty(); - private Optional> columnRedactions = Optional.empty(); + private Optional> columnRedactions = Optional.empty(); private Optional> columns = Optional.empty(); @@ -201,16 +201,16 @@ public static final class Builder { private Optional offset = Optional.empty(); - private Optional> uniqueValues = Optional.empty(); + private Optional> uniqueValues = Optional.empty(); - private Optional> records = Optional.empty(); + private Optional> records = Optional.empty(); @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(GetRequest other) { + public Builder from(V1GetRequest other) { vaultId(other.getVaultId()); tableName(other.getTableName()); skyflowIDs(other.getSkyflowIDs()); @@ -269,12 +269,12 @@ public Builder skyflowIDs(List skyflowIDs) { *

List of columns to be redacted.

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

List of unique constraint values to query records by data

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

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) { + public Builder records(Optional> records) { this.records = records; return this; } - public Builder records(List records) { + public Builder records(List records) { this.records = Optional.ofNullable(records); return this; } - public GetRequest build() { - return new GetRequest( + public V1GetRequest build() { + return new V1GetRequest( vaultId, tableName, skyflowIDs, 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/flowservice/requests/V1InsertRequest.java similarity index 77% rename from v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/InsertRequest.java rename to v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/requests/V1InsertRequest.java index 0c1b2248..21bffc3a 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/flowservice/requests/V1InsertRequest.java @@ -1,7 +1,7 @@ /** * This file was auto-generated by Fern from our API Definition. */ -package com.skyflow.generated.rest.resources.recordservice.requests; +package com.skyflow.generated.rest.resources.flowservice.requests; import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; @@ -12,8 +12,8 @@ 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 com.skyflow.generated.rest.types.V1InsertRecordData; +import com.skyflow.generated.rest.types.V1Upsert; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -21,23 +21,23 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = InsertRequest.Builder.class) -public final class InsertRequest { +@JsonDeserialize(builder = V1InsertRequest.Builder.class) +public final class V1InsertRequest { private final Optional vaultId; private final Optional tableName; - private final Optional> records; + private final Optional> records; - private final Optional upsert; + private final Optional upsert; private final Map additionalProperties; - private InsertRequest( + private V1InsertRequest( Optional vaultId, Optional tableName, - Optional> records, - Optional upsert, + Optional> records, + Optional upsert, Map additionalProperties) { this.vaultId = vaultId; this.tableName = tableName; @@ -66,19 +66,19 @@ public Optional getTableName() { * @return List of data row wise that is to be inserted in the vault */ @JsonProperty("records") - public Optional> getRecords() { + public Optional> getRecords() { return records; } @JsonProperty("upsert") - public Optional getUpsert() { + public Optional getUpsert() { return upsert; } @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof InsertRequest && equalTo((InsertRequest) other); + return other instanceof V1InsertRequest && equalTo((V1InsertRequest) other); } @JsonAnyGetter @@ -86,7 +86,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(InsertRequest other) { + private boolean equalTo(V1InsertRequest other) { return vaultId.equals(other.vaultId) && tableName.equals(other.tableName) && records.equals(other.records) @@ -113,16 +113,16 @@ public static final class Builder { private Optional tableName = Optional.empty(); - private Optional> records = Optional.empty(); + private Optional> records = Optional.empty(); - private Optional upsert = Optional.empty(); + private Optional upsert = Optional.empty(); @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(InsertRequest other) { + public Builder from(V1InsertRequest other) { vaultId(other.getVaultId()); tableName(other.getTableName()); records(other.getRecords()); @@ -162,29 +162,29 @@ public Builder tableName(String tableName) { *

List of data row wise that is to be inserted in the vault

*/ @JsonSetter(value = "records", nulls = Nulls.SKIP) - public Builder records(Optional> records) { + public Builder records(Optional> records) { this.records = records; return this; } - public Builder records(List records) { + public Builder records(List records) { this.records = Optional.ofNullable(records); return this; } @JsonSetter(value = "upsert", nulls = Nulls.SKIP) - public Builder upsert(Optional upsert) { + public Builder upsert(Optional upsert) { this.upsert = upsert; return this; } - public Builder upsert(Upsert upsert) { + public Builder upsert(V1Upsert upsert) { this.upsert = Optional.ofNullable(upsert); return this; } - public InsertRequest build() { - return new InsertRequest(vaultId, tableName, records, upsert, additionalProperties); + public V1InsertRequest build() { + return new V1InsertRequest(vaultId, tableName, records, upsert, additionalProperties); } } } 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/flowservice/requests/V1UpdateRequest.java similarity index 76% rename from v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/requests/UpdateRequest.java rename to v3/src/main/java/com/skyflow/generated/rest/resources/flowservice/requests/V1UpdateRequest.java index 9473a492..e45f4751 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/flowservice/requests/V1UpdateRequest.java @@ -1,7 +1,7 @@ /** * This file was auto-generated by Fern from our API Definition. */ -package com.skyflow.generated.rest.resources.recordservice.requests; +package com.skyflow.generated.rest.resources.flowservice.requests; import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; @@ -12,8 +12,8 @@ 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 com.skyflow.generated.rest.types.FlowEnumUpdateType; +import com.skyflow.generated.rest.types.V1UpdateRecordData; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -21,23 +21,23 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = UpdateRequest.Builder.class) -public final class UpdateRequest { +@JsonDeserialize(builder = V1UpdateRequest.Builder.class) +public final class V1UpdateRequest { private final Optional vaultId; private final Optional tableName; - private final Optional> records; + private final Optional> records; - private final Optional updateType; + private final Optional updateType; private final Map additionalProperties; - private UpdateRequest( + private V1UpdateRequest( Optional vaultId, Optional tableName, - Optional> records, - Optional updateType, + Optional> records, + Optional updateType, Map additionalProperties) { this.vaultId = vaultId; this.tableName = tableName; @@ -66,19 +66,19 @@ public Optional getTableName() { * @return List of data row wise that is to be updated in the vault */ @JsonProperty("records") - public Optional> getRecords() { + public Optional> getRecords() { return records; } @JsonProperty("updateType") - public Optional getUpdateType() { + public Optional getUpdateType() { return updateType; } @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof UpdateRequest && equalTo((UpdateRequest) other); + return other instanceof V1UpdateRequest && equalTo((V1UpdateRequest) other); } @JsonAnyGetter @@ -86,7 +86,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(UpdateRequest other) { + private boolean equalTo(V1UpdateRequest other) { return vaultId.equals(other.vaultId) && tableName.equals(other.tableName) && records.equals(other.records) @@ -113,16 +113,16 @@ public static final class Builder { private Optional tableName = Optional.empty(); - private Optional> records = Optional.empty(); + private Optional> records = Optional.empty(); - private Optional updateType = Optional.empty(); + private Optional updateType = Optional.empty(); @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(UpdateRequest other) { + public Builder from(V1UpdateRequest other) { vaultId(other.getVaultId()); tableName(other.getTableName()); records(other.getRecords()); @@ -162,29 +162,29 @@ public Builder tableName(String tableName) { *

List of data row wise that is to be updated in the vault

*/ @JsonSetter(value = "records", nulls = Nulls.SKIP) - public Builder records(Optional> records) { + public Builder records(Optional> records) { this.records = records; return this; } - public Builder records(List records) { + public Builder records(List records) { this.records = Optional.ofNullable(records); return this; } @JsonSetter(value = "updateType", nulls = Nulls.SKIP) - public Builder updateType(Optional updateType) { + public Builder updateType(Optional updateType) { this.updateType = updateType; return this; } - public Builder updateType(EnumUpdateType updateType) { + public Builder updateType(FlowEnumUpdateType updateType) { this.updateType = Optional.ofNullable(updateType); return this; } - public UpdateRequest build() { - return new UpdateRequest(vaultId, tableName, records, updateType, additionalProperties); + public V1UpdateRequest build() { + return new V1UpdateRequest(vaultId, tableName, records, updateType, additionalProperties); } } } 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 index 7506c9be..d1d76b52 100644 --- 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 @@ -11,8 +11,8 @@ 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 com.skyflow.generated.rest.resources.records.requests.V1ExecuteQueryRequest; +import com.skyflow.generated.rest.types.V1ExecuteQueryResponse; import java.io.IOException; import java.util.concurrent.CompletableFuture; import okhttp3.Call; @@ -36,23 +36,23 @@ public AsyncRawRecordsClient(ClientOptions clientOptions) { /** * Executes a query on the specified vault. */ - public CompletableFuture> recordServiceExecuteQuery() { - return recordServiceExecuteQuery(ExecuteQueryRequest.builder().build()); + public CompletableFuture> flowServiceExecuteQuery() { + return flowServiceExecuteQuery(V1ExecuteQueryRequest.builder().build()); } /** * Executes a query on the specified vault. */ - public CompletableFuture> recordServiceExecuteQuery( - ExecuteQueryRequest request) { - return recordServiceExecuteQuery(request, null); + public CompletableFuture> flowServiceExecuteQuery( + V1ExecuteQueryRequest request) { + return flowServiceExecuteQuery(request, null); } /** * Executes a query on the specified vault. */ - public CompletableFuture> recordServiceExecuteQuery( - ExecuteQueryRequest request, RequestOptions requestOptions) { + public CompletableFuture> flowServiceExecuteQuery( + V1ExecuteQueryRequest request, RequestOptions requestOptions) { HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) .newBuilder() .addPathSegments("v2/query") @@ -75,7 +75,7 @@ public CompletableFuture> recordServ if (requestOptions != null && requestOptions.getTimeout().isPresent()) { client = clientOptions.httpClientWithTimeout(requestOptions); } - CompletableFuture> future = new CompletableFuture<>(); + CompletableFuture> future = new CompletableFuture<>(); client.newCall(okhttpRequest).enqueue(new Callback() { @Override public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { @@ -83,7 +83,7 @@ public void onResponse(@NotNull Call call, @NotNull Response response) throws IO if (response.isSuccessful()) { future.complete(new ApiClientHttpResponse<>( ObjectMappers.JSON_MAPPER.readValue( - responseBody.string(), ExecuteQueryResponse.class), + responseBody.string(), V1ExecuteQueryResponse.class), response)); return; } 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 index d0d22507..2c1744a0 100644 --- 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 @@ -5,8 +5,8 @@ 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 com.skyflow.generated.rest.resources.records.requests.V1ExecuteQueryRequest; +import com.skyflow.generated.rest.types.V1ExecuteQueryResponse; import java.util.concurrent.CompletableFuture; public class AsyncRecordsClient { @@ -29,22 +29,22 @@ public AsyncRawRecordsClient withRawResponse() { /** * Executes a query on the specified vault. */ - public CompletableFuture recordServiceExecuteQuery() { - return this.rawClient.recordServiceExecuteQuery().thenApply(response -> response.body()); + public CompletableFuture flowServiceExecuteQuery() { + return this.rawClient.flowServiceExecuteQuery().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()); + public CompletableFuture flowServiceExecuteQuery(V1ExecuteQueryRequest request) { + return this.rawClient.flowServiceExecuteQuery(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()); + public CompletableFuture flowServiceExecuteQuery( + V1ExecuteQueryRequest request, RequestOptions requestOptions) { + return this.rawClient.flowServiceExecuteQuery(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 index 605ae73f..a2bd4af2 100644 --- 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 @@ -11,8 +11,8 @@ 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 com.skyflow.generated.rest.resources.records.requests.V1ExecuteQueryRequest; +import com.skyflow.generated.rest.types.V1ExecuteQueryResponse; import java.io.IOException; import okhttp3.Headers; import okhttp3.HttpUrl; @@ -32,22 +32,22 @@ public RawRecordsClient(ClientOptions clientOptions) { /** * Executes a query on the specified vault. */ - public ApiClientHttpResponse recordServiceExecuteQuery() { - return recordServiceExecuteQuery(ExecuteQueryRequest.builder().build()); + public ApiClientHttpResponse flowServiceExecuteQuery() { + return flowServiceExecuteQuery(V1ExecuteQueryRequest.builder().build()); } /** * Executes a query on the specified vault. */ - public ApiClientHttpResponse recordServiceExecuteQuery(ExecuteQueryRequest request) { - return recordServiceExecuteQuery(request, null); + public ApiClientHttpResponse flowServiceExecuteQuery(V1ExecuteQueryRequest request) { + return flowServiceExecuteQuery(request, null); } /** * Executes a query on the specified vault. */ - public ApiClientHttpResponse recordServiceExecuteQuery( - ExecuteQueryRequest request, RequestOptions requestOptions) { + public ApiClientHttpResponse flowServiceExecuteQuery( + V1ExecuteQueryRequest request, RequestOptions requestOptions) { HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl()) .newBuilder() .addPathSegments("v2/query") @@ -74,7 +74,7 @@ public ApiClientHttpResponse recordServiceExecuteQuery( ResponseBody responseBody = response.body(); if (response.isSuccessful()) { return new ApiClientHttpResponse<>( - ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), ExecuteQueryResponse.class), + ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), V1ExecuteQueryResponse.class), response); } String responseBodyString = responseBody != null ? responseBody.string() : "{}"; 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 index 20c273b7..332c0e1b 100644 --- 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 @@ -5,8 +5,8 @@ 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 com.skyflow.generated.rest.resources.records.requests.V1ExecuteQueryRequest; +import com.skyflow.generated.rest.types.V1ExecuteQueryResponse; public class RecordsClient { protected final ClientOptions clientOptions; @@ -28,22 +28,22 @@ public RawRecordsClient withRawResponse() { /** * Executes a query on the specified vault. */ - public ExecuteQueryResponse recordServiceExecuteQuery() { - return this.rawClient.recordServiceExecuteQuery().body(); + public V1ExecuteQueryResponse flowServiceExecuteQuery() { + return this.rawClient.flowServiceExecuteQuery().body(); } /** * Executes a query on the specified vault. */ - public ExecuteQueryResponse recordServiceExecuteQuery(ExecuteQueryRequest request) { - return this.rawClient.recordServiceExecuteQuery(request).body(); + public V1ExecuteQueryResponse flowServiceExecuteQuery(V1ExecuteQueryRequest request) { + return this.rawClient.flowServiceExecuteQuery(request).body(); } /** * Executes a query on the specified vault. */ - public ExecuteQueryResponse recordServiceExecuteQuery( - ExecuteQueryRequest request, RequestOptions requestOptions) { - return this.rawClient.recordServiceExecuteQuery(request, requestOptions).body(); + public V1ExecuteQueryResponse flowServiceExecuteQuery( + V1ExecuteQueryRequest request, RequestOptions requestOptions) { + return this.rawClient.flowServiceExecuteQuery(request, requestOptions).body(); } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/resources/records/requests/ExecuteQueryRequest.java b/v3/src/main/java/com/skyflow/generated/rest/resources/records/requests/V1ExecuteQueryRequest.java similarity index 87% rename from v3/src/main/java/com/skyflow/generated/rest/resources/records/requests/ExecuteQueryRequest.java rename to v3/src/main/java/com/skyflow/generated/rest/resources/records/requests/V1ExecuteQueryRequest.java index 855c2a56..2c04f126 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/resources/records/requests/ExecuteQueryRequest.java +++ b/v3/src/main/java/com/skyflow/generated/rest/resources/records/requests/V1ExecuteQueryRequest.java @@ -18,15 +18,15 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = ExecuteQueryRequest.Builder.class) -public final class ExecuteQueryRequest { +@JsonDeserialize(builder = V1ExecuteQueryRequest.Builder.class) +public final class V1ExecuteQueryRequest { private final Optional vaultId; private final Optional query; private final Map additionalProperties; - private ExecuteQueryRequest( + private V1ExecuteQueryRequest( Optional vaultId, Optional query, Map additionalProperties) { this.vaultId = vaultId; this.query = query; @@ -52,7 +52,7 @@ public Optional getQuery() { @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof ExecuteQueryRequest && equalTo((ExecuteQueryRequest) other); + return other instanceof V1ExecuteQueryRequest && equalTo((V1ExecuteQueryRequest) other); } @JsonAnyGetter @@ -60,7 +60,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(ExecuteQueryRequest other) { + private boolean equalTo(V1ExecuteQueryRequest other) { return vaultId.equals(other.vaultId) && query.equals(other.query); } @@ -89,7 +89,7 @@ public static final class Builder { private Builder() {} - public Builder from(ExecuteQueryRequest other) { + public Builder from(V1ExecuteQueryRequest other) { vaultId(other.getVaultId()); query(other.getQuery()); return this; @@ -123,8 +123,8 @@ public Builder query(String query) { return this; } - public ExecuteQueryRequest build() { - return new ExecuteQueryRequest(vaultId, query, additionalProperties); + public V1ExecuteQueryRequest build() { + return new V1ExecuteQueryRequest(vaultId, query, additionalProperties); } } } 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 deleted file mode 100644 index d583d6d4..00000000 --- a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/AsyncRecordserviceClient.java +++ /dev/null @@ -1,126 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -package com.skyflow.generated.rest.resources.recordservice; - -import com.skyflow.generated.rest.core.ClientOptions; -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.util.concurrent.CompletableFuture; - -public class AsyncRecordserviceClient { - protected final ClientOptions clientOptions; - - private final AsyncRawRecordserviceClient rawClient; - - public AsyncRecordserviceClient(ClientOptions clientOptions) { - this.clientOptions = clientOptions; - this.rawClient = new AsyncRawRecordserviceClient(clientOptions); - } - - /** - * Get responses with HTTP metadata like headers - */ - public AsyncRawRecordserviceClient withRawResponse() { - return this.rawClient; - } - - public CompletableFuture delete() { - return this.rawClient.delete().thenApply(response -> response.body()); - } - - public CompletableFuture delete(DeleteRequest request) { - return this.rawClient.delete(request).thenApply(response -> response.body()); - } - - public CompletableFuture delete(DeleteRequest request, RequestOptions requestOptions) { - return this.rawClient.delete(request, requestOptions).thenApply(response -> response.body()); - } - - public CompletableFuture get() { - return this.rawClient.get().thenApply(response -> response.body()); - } - - public CompletableFuture get(GetRequest request) { - return this.rawClient.get(request).thenApply(response -> response.body()); - } - - public CompletableFuture get(GetRequest request, RequestOptions requestOptions) { - return this.rawClient.get(request, requestOptions).thenApply(response -> response.body()); - } - - public CompletableFuture insert() { - return this.rawClient.insert().thenApply(response -> response.body()); - } - - public CompletableFuture insert(InsertRequest request) { - return this.rawClient.insert(request).thenApply(response -> response.body()); - } - - public CompletableFuture insert(InsertRequest request, RequestOptions requestOptions) { - return this.rawClient.insert(request, requestOptions).thenApply(response -> response.body()); - } - - public CompletableFuture update() { - return this.rawClient.update().thenApply(response -> response.body()); - } - - public CompletableFuture update(UpdateRequest request) { - return this.rawClient.update(request).thenApply(response -> response.body()); - } - - public CompletableFuture update(UpdateRequest request, RequestOptions requestOptions) { - return this.rawClient.update(request, requestOptions).thenApply(response -> response.body()); - } - - public CompletableFuture deletetoken() { - return this.rawClient.deletetoken().thenApply(response -> response.body()); - } - - public CompletableFuture deletetoken(DeleteTokenRequest request) { - return this.rawClient.deletetoken(request).thenApply(response -> response.body()); - } - - public CompletableFuture deletetoken( - DeleteTokenRequest request, RequestOptions requestOptions) { - return this.rawClient.deletetoken(request, requestOptions).thenApply(response -> response.body()); - } - - public CompletableFuture detokenize() { - return this.rawClient.detokenize().thenApply(response -> response.body()); - } - - public CompletableFuture detokenize(DetokenizeRequest request) { - return this.rawClient.detokenize(request).thenApply(response -> response.body()); - } - - public CompletableFuture detokenize( - DetokenizeRequest request, RequestOptions requestOptions) { - return this.rawClient.detokenize(request, requestOptions).thenApply(response -> response.body()); - } - - public CompletableFuture tokenize() { - return this.rawClient.tokenize().thenApply(response -> response.body()); - } - - public CompletableFuture tokenize(TokenizeRequest request) { - return this.rawClient.tokenize(request).thenApply(response -> response.body()); - } - - public CompletableFuture tokenize(TokenizeRequest request, RequestOptions requestOptions) { - return this.rawClient.tokenize(request, requestOptions).thenApply(response -> response.body()); - } -} 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 deleted file mode 100644 index e6ff7997..00000000 --- a/v3/src/main/java/com/skyflow/generated/rest/resources/recordservice/RecordserviceClient.java +++ /dev/null @@ -1,123 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -package com.skyflow.generated.rest.resources.recordservice; - -import com.skyflow.generated.rest.core.ClientOptions; -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; - -public class RecordserviceClient { - protected final ClientOptions clientOptions; - - private final RawRecordserviceClient rawClient; - - public RecordserviceClient(ClientOptions clientOptions) { - this.clientOptions = clientOptions; - this.rawClient = new RawRecordserviceClient(clientOptions); - } - - /** - * Get responses with HTTP metadata like headers - */ - public RawRecordserviceClient withRawResponse() { - return this.rawClient; - } - - public DeleteResponse delete() { - return this.rawClient.delete().body(); - } - - public DeleteResponse delete(DeleteRequest request) { - return this.rawClient.delete(request).body(); - } - - public DeleteResponse delete(DeleteRequest request, RequestOptions requestOptions) { - return this.rawClient.delete(request, requestOptions).body(); - } - - public GetResponse get() { - return this.rawClient.get().body(); - } - - public GetResponse get(GetRequest request) { - return this.rawClient.get(request).body(); - } - - public GetResponse get(GetRequest request, RequestOptions requestOptions) { - return this.rawClient.get(request, requestOptions).body(); - } - - public InsertResponse insert() { - return this.rawClient.insert().body(); - } - - public InsertResponse insert(InsertRequest request) { - return this.rawClient.insert(request).body(); - } - - public InsertResponse insert(InsertRequest request, RequestOptions requestOptions) { - return this.rawClient.insert(request, requestOptions).body(); - } - - public UpdateResponse update() { - return this.rawClient.update().body(); - } - - public UpdateResponse update(UpdateRequest request) { - return this.rawClient.update(request).body(); - } - - public UpdateResponse update(UpdateRequest request, RequestOptions requestOptions) { - return this.rawClient.update(request, requestOptions).body(); - } - - public DeleteTokenResponse deletetoken() { - return this.rawClient.deletetoken().body(); - } - - public DeleteTokenResponse deletetoken(DeleteTokenRequest request) { - return this.rawClient.deletetoken(request).body(); - } - - public DeleteTokenResponse deletetoken(DeleteTokenRequest request, RequestOptions requestOptions) { - return this.rawClient.deletetoken(request, requestOptions).body(); - } - - public DetokenizeResponse detokenize() { - return this.rawClient.detokenize().body(); - } - - public DetokenizeResponse detokenize(DetokenizeRequest request) { - return this.rawClient.detokenize(request).body(); - } - - public DetokenizeResponse detokenize(DetokenizeRequest request, RequestOptions requestOptions) { - return this.rawClient.detokenize(request, requestOptions).body(); - } - - public TokenizeResponse tokenize() { - return this.rawClient.tokenize().body(); - } - - public TokenizeResponse tokenize(TokenizeRequest request) { - return this.rawClient.tokenize(request).body(); - } - - public TokenizeResponse tokenize(TokenizeRequest request, RequestOptions requestOptions) { - return this.rawClient.tokenize(request, requestOptions).body(); - } -} 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 deleted file mode 100644 index c3e45088..00000000 --- a/v3/src/main/java/com/skyflow/generated/rest/types/EnumDataType.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ -package com.skyflow.generated.rest.types; - -import com.fasterxml.jackson.annotation.JsonValue; - -public enum EnumDataType { - UNDEFINED_DATATYPE("UNDEFINED_DATATYPE"), - - STRING("STRING"), - - NUMBER("NUMBER"), - - BOOL("BOOL"), - - JSON("JSON"); - - private final String value; - - EnumDataType(String value) { - this.value = value; - } - - @JsonValue - @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/FlowEnumUpdateType.java similarity index 84% rename from v3/src/main/java/com/skyflow/generated/rest/types/EnumUpdateType.java rename to v3/src/main/java/com/skyflow/generated/rest/types/FlowEnumUpdateType.java index cb0d94e0..0695a72e 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/EnumUpdateType.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/FlowEnumUpdateType.java @@ -5,14 +5,14 @@ import com.fasterxml.jackson.annotation.JsonValue; -public enum EnumUpdateType { +public enum FlowEnumUpdateType { UPDATE("UPDATE"), REPLACE("REPLACE"); private final String value; - EnumUpdateType(String value) { + FlowEnumUpdateType(String value) { this.value = value; } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponseObjectToken.java b/v3/src/main/java/com/skyflow/generated/rest/types/FlowTokenizeResponseObjectToken.java similarity index 89% rename from v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponseObjectToken.java rename to v3/src/main/java/com/skyflow/generated/rest/types/FlowTokenizeResponseObjectToken.java index 715a4173..88084f6d 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponseObjectToken.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/FlowTokenizeResponseObjectToken.java @@ -18,8 +18,8 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = TokenizeResponseObjectToken.Builder.class) -public final class TokenizeResponseObjectToken { +@JsonDeserialize(builder = FlowTokenizeResponseObjectToken.Builder.class) +public final class FlowTokenizeResponseObjectToken { private final Optional tokenGroupName; private final Optional token; @@ -30,7 +30,7 @@ public final class TokenizeResponseObjectToken { private final Map additionalProperties; - private TokenizeResponseObjectToken( + private FlowTokenizeResponseObjectToken( Optional tokenGroupName, Optional token, Optional error, @@ -78,7 +78,7 @@ public Optional getHttpCode() { @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof TokenizeResponseObjectToken && equalTo((TokenizeResponseObjectToken) other); + return other instanceof FlowTokenizeResponseObjectToken && equalTo((FlowTokenizeResponseObjectToken) other); } @JsonAnyGetter @@ -86,7 +86,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(TokenizeResponseObjectToken other) { + private boolean equalTo(FlowTokenizeResponseObjectToken other) { return tokenGroupName.equals(other.tokenGroupName) && token.equals(other.token) && error.equals(other.error) @@ -122,7 +122,7 @@ public static final class Builder { private Builder() {} - public Builder from(TokenizeResponseObjectToken other) { + public Builder from(FlowTokenizeResponseObjectToken other) { tokenGroupName(other.getTokenGroupName()); token(other.getToken()); error(other.getError()); @@ -186,8 +186,8 @@ public Builder httpCode(Integer httpCode) { return this; } - public TokenizeResponseObjectToken build() { - return new TokenizeResponseObjectToken(tokenGroupName, token, error, httpCode, additionalProperties); + public FlowTokenizeResponseObjectToken build() { + return new FlowTokenizeResponseObjectToken(tokenGroupName, token, error, httpCode, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/ColumnRedactions.java b/v3/src/main/java/com/skyflow/generated/rest/types/V1ColumnRedactions.java similarity index 88% rename from v3/src/main/java/com/skyflow/generated/rest/types/ColumnRedactions.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1ColumnRedactions.java index 6e211ab1..e0133640 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/ColumnRedactions.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1ColumnRedactions.java @@ -18,15 +18,15 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = ColumnRedactions.Builder.class) -public final class ColumnRedactions { +@JsonDeserialize(builder = V1ColumnRedactions.Builder.class) +public final class V1ColumnRedactions { private final Optional columnName; private final Optional redaction; private final Map additionalProperties; - private ColumnRedactions( + private V1ColumnRedactions( Optional columnName, Optional redaction, Map additionalProperties) { this.columnName = columnName; this.redaction = redaction; @@ -52,7 +52,7 @@ public Optional getRedaction() { @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof ColumnRedactions && equalTo((ColumnRedactions) other); + return other instanceof V1ColumnRedactions && equalTo((V1ColumnRedactions) other); } @JsonAnyGetter @@ -60,7 +60,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(ColumnRedactions other) { + private boolean equalTo(V1ColumnRedactions other) { return columnName.equals(other.columnName) && redaction.equals(other.redaction); } @@ -89,7 +89,7 @@ public static final class Builder { private Builder() {} - public Builder from(ColumnRedactions other) { + public Builder from(V1ColumnRedactions other) { columnName(other.getColumnName()); redaction(other.getRedaction()); return this; @@ -123,8 +123,8 @@ public Builder redaction(String redaction) { return this; } - public ColumnRedactions build() { - return new ColumnRedactions(columnName, redaction, additionalProperties); + public V1ColumnRedactions build() { + return new V1ColumnRedactions(columnName, redaction, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/DeleteResponse.java b/v3/src/main/java/com/skyflow/generated/rest/types/V1DeleteResponse.java similarity index 72% rename from v3/src/main/java/com/skyflow/generated/rest/types/DeleteResponse.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1DeleteResponse.java index 2453f7d2..b20fd804 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/DeleteResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1DeleteResponse.java @@ -19,13 +19,13 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = DeleteResponse.Builder.class) -public final class DeleteResponse { - private final Optional> records; +@JsonDeserialize(builder = V1DeleteResponse.Builder.class) +public final class V1DeleteResponse { + private final Optional> records; private final Map additionalProperties; - private DeleteResponse(Optional> records, Map additionalProperties) { + private V1DeleteResponse(Optional> records, Map additionalProperties) { this.records = records; this.additionalProperties = additionalProperties; } @@ -34,14 +34,14 @@ private DeleteResponse(Optional> records, Map> getRecords() { + public Optional> getRecords() { return records; } @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof DeleteResponse && equalTo((DeleteResponse) other); + return other instanceof V1DeleteResponse && equalTo((V1DeleteResponse) other); } @JsonAnyGetter @@ -49,7 +49,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(DeleteResponse other) { + private boolean equalTo(V1DeleteResponse other) { return records.equals(other.records); } @@ -69,14 +69,14 @@ public static Builder builder() { @JsonIgnoreProperties(ignoreUnknown = true) public static final class Builder { - private Optional> records = Optional.empty(); + private Optional> records = Optional.empty(); @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(DeleteResponse other) { + public Builder from(V1DeleteResponse other) { records(other.getRecords()); return this; } @@ -85,18 +85,18 @@ public Builder from(DeleteResponse other) { *

List of deleted records with skyflow ID and any partial errors.

*/ @JsonSetter(value = "records", nulls = Nulls.SKIP) - public Builder records(Optional> records) { + public Builder records(Optional> records) { this.records = records; return this; } - public Builder records(List records) { + public Builder records(List records) { this.records = Optional.ofNullable(records); return this; } - public DeleteResponse build() { - return new DeleteResponse(records, additionalProperties); + public V1DeleteResponse build() { + return new V1DeleteResponse(records, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/DeleteResponseObject.java b/v3/src/main/java/com/skyflow/generated/rest/types/V1DeleteResponseObject.java similarity index 89% rename from v3/src/main/java/com/skyflow/generated/rest/types/DeleteResponseObject.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1DeleteResponseObject.java index bd7f38d7..9d71a0ad 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/DeleteResponseObject.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1DeleteResponseObject.java @@ -18,8 +18,8 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = DeleteResponseObject.Builder.class) -public final class DeleteResponseObject { +@JsonDeserialize(builder = V1DeleteResponseObject.Builder.class) +public final class V1DeleteResponseObject { private final Optional skyflowId; private final Optional error; @@ -28,7 +28,7 @@ public final class DeleteResponseObject { private final Map additionalProperties; - private DeleteResponseObject( + private V1DeleteResponseObject( Optional skyflowId, Optional error, Optional httpCode, @@ -66,7 +66,7 @@ public Optional getHttpCode() { @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof DeleteResponseObject && equalTo((DeleteResponseObject) other); + return other instanceof V1DeleteResponseObject && equalTo((V1DeleteResponseObject) other); } @JsonAnyGetter @@ -74,7 +74,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(DeleteResponseObject other) { + private boolean equalTo(V1DeleteResponseObject other) { return skyflowId.equals(other.skyflowId) && error.equals(other.error) && httpCode.equals(other.httpCode); } @@ -105,7 +105,7 @@ public static final class Builder { private Builder() {} - public Builder from(DeleteResponseObject other) { + public Builder from(V1DeleteResponseObject other) { skyflowId(other.getSkyflowId()); error(other.getError()); httpCode(other.getHttpCode()); @@ -154,8 +154,8 @@ public Builder httpCode(Integer httpCode) { return this; } - public DeleteResponseObject build() { - return new DeleteResponseObject(skyflowId, error, httpCode, additionalProperties); + public V1DeleteResponseObject build() { + return new V1DeleteResponseObject(skyflowId, error, httpCode, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/DeleteTokenResponseObject.java b/v3/src/main/java/com/skyflow/generated/rest/types/V1DeleteTokenResponseObject.java similarity index 88% rename from v3/src/main/java/com/skyflow/generated/rest/types/DeleteTokenResponseObject.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1DeleteTokenResponseObject.java index bdbaf489..5f866d0d 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/DeleteTokenResponseObject.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1DeleteTokenResponseObject.java @@ -18,8 +18,8 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = DeleteTokenResponseObject.Builder.class) -public final class DeleteTokenResponseObject { +@JsonDeserialize(builder = V1DeleteTokenResponseObject.Builder.class) +public final class V1DeleteTokenResponseObject { private final Optional value; private final Optional error; @@ -28,7 +28,7 @@ public final class DeleteTokenResponseObject { private final Map additionalProperties; - private DeleteTokenResponseObject( + private V1DeleteTokenResponseObject( Optional value, Optional error, Optional httpCode, @@ -66,7 +66,7 @@ public Optional getHttpCode() { @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof DeleteTokenResponseObject && equalTo((DeleteTokenResponseObject) other); + return other instanceof V1DeleteTokenResponseObject && equalTo((V1DeleteTokenResponseObject) other); } @JsonAnyGetter @@ -74,7 +74,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(DeleteTokenResponseObject other) { + private boolean equalTo(V1DeleteTokenResponseObject other) { return value.equals(other.value) && error.equals(other.error) && httpCode.equals(other.httpCode); } @@ -105,7 +105,7 @@ public static final class Builder { private Builder() {} - public Builder from(DeleteTokenResponseObject other) { + public Builder from(V1DeleteTokenResponseObject other) { value(other.getValue()); error(other.getError()); httpCode(other.getHttpCode()); @@ -154,8 +154,8 @@ public Builder httpCode(Integer httpCode) { return this; } - public DeleteTokenResponseObject build() { - return new DeleteTokenResponseObject(value, error, httpCode, additionalProperties); + public V1DeleteTokenResponseObject build() { + return new V1DeleteTokenResponseObject(value, error, httpCode, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryRecordResponse.java b/v3/src/main/java/com/skyflow/generated/rest/types/V1ExecuteQueryRecordResponse.java similarity index 80% rename from v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryRecordResponse.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1ExecuteQueryRecordResponse.java index 54c87448..b485d0ec 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryRecordResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1ExecuteQueryRecordResponse.java @@ -18,13 +18,13 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = ExecuteQueryRecordResponse.Builder.class) -public final class ExecuteQueryRecordResponse { +@JsonDeserialize(builder = V1ExecuteQueryRecordResponse.Builder.class) +public final class V1ExecuteQueryRecordResponse { private final Optional> data; private final Map additionalProperties; - private ExecuteQueryRecordResponse(Optional> data, Map additionalProperties) { + private V1ExecuteQueryRecordResponse(Optional> data, Map additionalProperties) { this.data = data; this.additionalProperties = additionalProperties; } @@ -40,7 +40,7 @@ public Optional> getData() { @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof ExecuteQueryRecordResponse && equalTo((ExecuteQueryRecordResponse) other); + return other instanceof V1ExecuteQueryRecordResponse && equalTo((V1ExecuteQueryRecordResponse) other); } @JsonAnyGetter @@ -48,7 +48,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(ExecuteQueryRecordResponse other) { + private boolean equalTo(V1ExecuteQueryRecordResponse other) { return data.equals(other.data); } @@ -75,7 +75,7 @@ public static final class Builder { private Builder() {} - public Builder from(ExecuteQueryRecordResponse other) { + public Builder from(V1ExecuteQueryRecordResponse other) { data(other.getData()); return this; } @@ -94,8 +94,8 @@ public Builder data(Map data) { return this; } - public ExecuteQueryRecordResponse build() { - return new ExecuteQueryRecordResponse(data, additionalProperties); + public V1ExecuteQueryRecordResponse build() { + return new V1ExecuteQueryRecordResponse(data, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryResponse.java b/v3/src/main/java/com/skyflow/generated/rest/types/V1ExecuteQueryResponse.java similarity index 66% rename from v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryResponse.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1ExecuteQueryResponse.java index df9c4776..2b45980a 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1ExecuteQueryResponse.java @@ -19,17 +19,17 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = ExecuteQueryResponse.Builder.class) -public final class ExecuteQueryResponse { - private final Optional> records; +@JsonDeserialize(builder = V1ExecuteQueryResponse.Builder.class) +public final class V1ExecuteQueryResponse { + private final Optional> records; - private final Optional metadata; + private final Optional metadata; private final Map additionalProperties; - private ExecuteQueryResponse( - Optional> records, - Optional metadata, + private V1ExecuteQueryResponse( + Optional> records, + Optional metadata, Map additionalProperties) { this.records = records; this.metadata = metadata; @@ -40,19 +40,19 @@ private ExecuteQueryResponse( * @return Records corresponding to the specified query. */ @JsonProperty("records") - public Optional> getRecords() { + public Optional> getRecords() { return records; } @JsonProperty("metadata") - public Optional getMetadata() { + 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); + return other instanceof V1ExecuteQueryResponse && equalTo((V1ExecuteQueryResponse) other); } @JsonAnyGetter @@ -60,7 +60,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(ExecuteQueryResponse other) { + private boolean equalTo(V1ExecuteQueryResponse other) { return records.equals(other.records) && metadata.equals(other.metadata); } @@ -80,16 +80,16 @@ public static Builder builder() { @JsonIgnoreProperties(ignoreUnknown = true) public static final class Builder { - private Optional> records = Optional.empty(); + private Optional> records = Optional.empty(); - private Optional metadata = Optional.empty(); + private Optional metadata = Optional.empty(); @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(ExecuteQueryResponse other) { + public Builder from(V1ExecuteQueryResponse other) { records(other.getRecords()); metadata(other.getMetadata()); return this; @@ -99,29 +99,29 @@ public Builder from(ExecuteQueryResponse other) { *

Records corresponding to the specified query.

*/ @JsonSetter(value = "records", nulls = Nulls.SKIP) - public Builder records(Optional> records) { + public Builder records(Optional> records) { this.records = records; return this; } - public Builder records(List records) { + public Builder records(List records) { this.records = Optional.ofNullable(records); return this; } @JsonSetter(value = "metadata", nulls = Nulls.SKIP) - public Builder metadata(Optional metadata) { + public Builder metadata(Optional metadata) { this.metadata = metadata; return this; } - public Builder metadata(ExecuteQueryResponseMetadata metadata) { + public Builder metadata(V1ExecuteQueryResponseMetadata metadata) { this.metadata = Optional.ofNullable(metadata); return this; } - public ExecuteQueryResponse build() { - return new ExecuteQueryResponse(records, metadata, additionalProperties); + public V1ExecuteQueryResponse build() { + return new V1ExecuteQueryResponse(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/V1ExecuteQueryResponseMetadata.java similarity index 79% rename from v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryResponseMetadata.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1ExecuteQueryResponseMetadata.java index 57150649..e68fd1c8 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/ExecuteQueryResponseMetadata.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1ExecuteQueryResponseMetadata.java @@ -19,13 +19,13 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = ExecuteQueryResponseMetadata.Builder.class) -public final class ExecuteQueryResponseMetadata { +@JsonDeserialize(builder = V1ExecuteQueryResponseMetadata.Builder.class) +public final class V1ExecuteQueryResponseMetadata { private final Optional> columns; private final Map additionalProperties; - private ExecuteQueryResponseMetadata(Optional> columns, Map additionalProperties) { + private V1ExecuteQueryResponseMetadata(Optional> columns, Map additionalProperties) { this.columns = columns; this.additionalProperties = additionalProperties; } @@ -41,7 +41,7 @@ public Optional> getColumns() { @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof ExecuteQueryResponseMetadata && equalTo((ExecuteQueryResponseMetadata) other); + return other instanceof V1ExecuteQueryResponseMetadata && equalTo((V1ExecuteQueryResponseMetadata) other); } @JsonAnyGetter @@ -49,7 +49,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(ExecuteQueryResponseMetadata other) { + private boolean equalTo(V1ExecuteQueryResponseMetadata other) { return columns.equals(other.columns); } @@ -76,7 +76,7 @@ public static final class Builder { private Builder() {} - public Builder from(ExecuteQueryResponseMetadata other) { + public Builder from(V1ExecuteQueryResponseMetadata other) { columns(other.getColumns()); return this; } @@ -95,8 +95,8 @@ public Builder columns(List columns) { return this; } - public ExecuteQueryResponseMetadata build() { - return new ExecuteQueryResponseMetadata(columns, additionalProperties); + public V1ExecuteQueryResponseMetadata build() { + return new V1ExecuteQueryResponseMetadata(columns, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/DeleteTokenResponse.java b/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowDeleteTokenResponse.java similarity index 68% rename from v3/src/main/java/com/skyflow/generated/rest/types/DeleteTokenResponse.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1FlowDeleteTokenResponse.java index 85d991e7..85ee0edd 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/DeleteTokenResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowDeleteTokenResponse.java @@ -19,14 +19,14 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = DeleteTokenResponse.Builder.class) -public final class DeleteTokenResponse { - private final Optional> tokens; +@JsonDeserialize(builder = V1FlowDeleteTokenResponse.Builder.class) +public final class V1FlowDeleteTokenResponse { + private final Optional> tokens; private final Map additionalProperties; - private DeleteTokenResponse( - Optional> tokens, Map additionalProperties) { + private V1FlowDeleteTokenResponse( + Optional> tokens, Map additionalProperties) { this.tokens = tokens; this.additionalProperties = additionalProperties; } @@ -35,14 +35,14 @@ private DeleteTokenResponse( * @return Tokens data for Delete */ @JsonProperty("tokens") - public Optional> getTokens() { + public Optional> getTokens() { return tokens; } @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof DeleteTokenResponse && equalTo((DeleteTokenResponse) other); + return other instanceof V1FlowDeleteTokenResponse && equalTo((V1FlowDeleteTokenResponse) other); } @JsonAnyGetter @@ -50,7 +50,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(DeleteTokenResponse other) { + private boolean equalTo(V1FlowDeleteTokenResponse other) { return tokens.equals(other.tokens); } @@ -70,14 +70,14 @@ public static Builder builder() { @JsonIgnoreProperties(ignoreUnknown = true) public static final class Builder { - private Optional> tokens = Optional.empty(); + private Optional> tokens = Optional.empty(); @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(DeleteTokenResponse other) { + public Builder from(V1FlowDeleteTokenResponse other) { tokens(other.getTokens()); return this; } @@ -86,18 +86,18 @@ public Builder from(DeleteTokenResponse other) { *

Tokens data for Delete

*/ @JsonSetter(value = "tokens", nulls = Nulls.SKIP) - public Builder tokens(Optional> tokens) { + public Builder tokens(Optional> tokens) { this.tokens = tokens; return this; } - public Builder tokens(List tokens) { + public Builder tokens(List tokens) { this.tokens = Optional.ofNullable(tokens); return this; } - public DeleteTokenResponse build() { - return new DeleteTokenResponse(tokens, additionalProperties); + public V1FlowDeleteTokenResponse build() { + return new V1FlowDeleteTokenResponse(tokens, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/DetokenizeResponse.java b/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowDetokenizeResponse.java similarity index 68% rename from v3/src/main/java/com/skyflow/generated/rest/types/DetokenizeResponse.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1FlowDetokenizeResponse.java index 612da851..81bd650c 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/DetokenizeResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowDetokenizeResponse.java @@ -19,14 +19,14 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = DetokenizeResponse.Builder.class) -public final class DetokenizeResponse { - private final Optional> response; +@JsonDeserialize(builder = V1FlowDetokenizeResponse.Builder.class) +public final class V1FlowDetokenizeResponse { + private final Optional> response; private final Map additionalProperties; - private DetokenizeResponse( - Optional> response, Map additionalProperties) { + private V1FlowDetokenizeResponse( + Optional> response, Map additionalProperties) { this.response = response; this.additionalProperties = additionalProperties; } @@ -35,14 +35,14 @@ private DetokenizeResponse( * @return Detokenized data */ @JsonProperty("response") - public Optional> getResponse() { + public Optional> getResponse() { return response; } @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof DetokenizeResponse && equalTo((DetokenizeResponse) other); + return other instanceof V1FlowDetokenizeResponse && equalTo((V1FlowDetokenizeResponse) other); } @JsonAnyGetter @@ -50,7 +50,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(DetokenizeResponse other) { + private boolean equalTo(V1FlowDetokenizeResponse other) { return response.equals(other.response); } @@ -70,14 +70,14 @@ public static Builder builder() { @JsonIgnoreProperties(ignoreUnknown = true) public static final class Builder { - private Optional> response = Optional.empty(); + private Optional> response = Optional.empty(); @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(DetokenizeResponse other) { + public Builder from(V1FlowDetokenizeResponse other) { response(other.getResponse()); return this; } @@ -86,18 +86,18 @@ public Builder from(DetokenizeResponse other) { *

Detokenized data

*/ @JsonSetter(value = "response", nulls = Nulls.SKIP) - public Builder response(Optional> response) { + public Builder response(Optional> response) { this.response = response; return this; } - public Builder response(List response) { + public Builder response(List response) { this.response = Optional.ofNullable(response); return this; } - public DetokenizeResponse build() { - return new DetokenizeResponse(response, additionalProperties); + public V1FlowDetokenizeResponse build() { + return new V1FlowDetokenizeResponse(response, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/DetokenizeResponseObject.java b/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowDetokenizeResponseObject.java similarity index 91% rename from v3/src/main/java/com/skyflow/generated/rest/types/DetokenizeResponseObject.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1FlowDetokenizeResponseObject.java index 4cdefb63..6c936147 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/DetokenizeResponseObject.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowDetokenizeResponseObject.java @@ -18,8 +18,8 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = DetokenizeResponseObject.Builder.class) -public final class DetokenizeResponseObject { +@JsonDeserialize(builder = V1FlowDetokenizeResponseObject.Builder.class) +public final class V1FlowDetokenizeResponseObject { private final Optional token; private final Optional value; @@ -34,7 +34,7 @@ public final class DetokenizeResponseObject { private final Map additionalProperties; - private DetokenizeResponseObject( + private V1FlowDetokenizeResponseObject( Optional token, Optional value, Optional tokenGroupName, @@ -59,6 +59,9 @@ public Optional getToken() { return token; } + /** + * @return Detokenized value for the token + */ @JsonProperty("value") public Optional getValue() { return value; @@ -99,7 +102,7 @@ public Optional> getMetadata() { @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof DetokenizeResponseObject && equalTo((DetokenizeResponseObject) other); + return other instanceof V1FlowDetokenizeResponseObject && equalTo((V1FlowDetokenizeResponseObject) other); } @JsonAnyGetter @@ -107,7 +110,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(DetokenizeResponseObject other) { + private boolean equalTo(V1FlowDetokenizeResponseObject other) { return token.equals(other.token) && value.equals(other.value) && tokenGroupName.equals(other.tokenGroupName) @@ -149,7 +152,7 @@ public static final class Builder { private Builder() {} - public Builder from(DetokenizeResponseObject other) { + public Builder from(V1FlowDetokenizeResponseObject other) { token(other.getToken()); value(other.getValue()); tokenGroupName(other.getTokenGroupName()); @@ -173,6 +176,9 @@ public Builder token(String token) { return this; } + /** + *

Detokenized value for the token

+ */ @JsonSetter(value = "value", nulls = Nulls.SKIP) public Builder value(Optional value) { this.value = value; @@ -240,8 +246,8 @@ public Builder metadata(Map metadata) { return this; } - public DetokenizeResponseObject build() { - return new DetokenizeResponseObject( + public V1FlowDetokenizeResponseObject build() { + return new V1FlowDetokenizeResponseObject( token, value, tokenGroupName, error, httpCode, metadata, additionalProperties); } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeRequestObject.java b/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowTokenizeRequestObject.java similarity index 68% rename from v3/src/main/java/com/skyflow/generated/rest/types/TokenizeRequestObject.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1FlowTokenizeRequestObject.java index 6853c9f2..effb6900 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeRequestObject.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowTokenizeRequestObject.java @@ -19,37 +19,35 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = TokenizeRequestObject.Builder.class) -public final class TokenizeRequestObject { +@JsonDeserialize(builder = V1FlowTokenizeRequestObject.Builder.class) +public final class V1FlowTokenizeRequestObject { private final Optional value; - private final Optional dataType; - private final Optional> tokenGroupNames; + private final Optional token; + private final Map additionalProperties; - private TokenizeRequestObject( + private V1FlowTokenizeRequestObject( Optional value, - Optional dataType, Optional> tokenGroupNames, + Optional token, Map additionalProperties) { this.value = value; - this.dataType = dataType; this.tokenGroupNames = tokenGroupNames; + this.token = token; this.additionalProperties = additionalProperties; } + /** + * @return Token Value + */ @JsonProperty("value") public Optional getValue() { return value; } - @JsonProperty("dataType") - public Optional getDataType() { - return dataType; - } - /** * @return List of token group names */ @@ -58,10 +56,18 @@ public Optional> getTokenGroupNames() { return tokenGroupNames; } + /** + * @return Token for the value, in case of BYOT. + */ + @JsonProperty("token") + public Optional getToken() { + return token; + } + @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof TokenizeRequestObject && equalTo((TokenizeRequestObject) other); + return other instanceof V1FlowTokenizeRequestObject && equalTo((V1FlowTokenizeRequestObject) other); } @JsonAnyGetter @@ -69,15 +75,13 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(TokenizeRequestObject other) { - return value.equals(other.value) - && dataType.equals(other.dataType) - && tokenGroupNames.equals(other.tokenGroupNames); + private boolean equalTo(V1FlowTokenizeRequestObject other) { + return value.equals(other.value) && tokenGroupNames.equals(other.tokenGroupNames) && token.equals(other.token); } @java.lang.Override public int hashCode() { - return Objects.hash(this.value, this.dataType, this.tokenGroupNames); + return Objects.hash(this.value, this.tokenGroupNames, this.token); } @java.lang.Override @@ -93,22 +97,25 @@ public static Builder builder() { public static final class Builder { private Optional value = Optional.empty(); - private Optional dataType = Optional.empty(); - private Optional> tokenGroupNames = Optional.empty(); + private Optional token = Optional.empty(); + @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(TokenizeRequestObject other) { + public Builder from(V1FlowTokenizeRequestObject other) { value(other.getValue()); - dataType(other.getDataType()); tokenGroupNames(other.getTokenGroupNames()); + token(other.getToken()); return this; } + /** + *

Token Value

+ */ @JsonSetter(value = "value", nulls = Nulls.SKIP) public Builder value(Optional value) { this.value = value; @@ -120,17 +127,6 @@ public Builder value(Object value) { return this; } - @JsonSetter(value = "dataType", nulls = Nulls.SKIP) - public Builder dataType(Optional dataType) { - this.dataType = dataType; - return this; - } - - public Builder dataType(EnumDataType dataType) { - this.dataType = Optional.ofNullable(dataType); - return this; - } - /** *

List of token group names

*/ @@ -145,8 +141,22 @@ public Builder tokenGroupNames(List tokenGroupNames) { return this; } - public TokenizeRequestObject build() { - return new TokenizeRequestObject(value, dataType, tokenGroupNames, additionalProperties); + /** + *

Token for the value, in case of BYOT.

+ */ + @JsonSetter(value = "token", nulls = Nulls.SKIP) + public Builder token(Optional token) { + this.token = token; + return this; + } + + public Builder token(Object token) { + this.token = Optional.ofNullable(token); + return this; + } + + public V1FlowTokenizeRequestObject build() { + return new V1FlowTokenizeRequestObject(value, tokenGroupNames, token, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponse.java b/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowTokenizeResponse.java similarity index 68% rename from v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponse.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1FlowTokenizeResponse.java index af22ea4d..1cc36e06 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowTokenizeResponse.java @@ -19,14 +19,14 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = TokenizeResponse.Builder.class) -public final class TokenizeResponse { - private final Optional> response; +@JsonDeserialize(builder = V1FlowTokenizeResponse.Builder.class) +public final class V1FlowTokenizeResponse { + private final Optional> response; private final Map additionalProperties; - private TokenizeResponse( - Optional> response, Map additionalProperties) { + private V1FlowTokenizeResponse( + Optional> response, Map additionalProperties) { this.response = response; this.additionalProperties = additionalProperties; } @@ -35,14 +35,14 @@ private TokenizeResponse( * @return Tokenized data */ @JsonProperty("response") - public Optional> getResponse() { + public Optional> getResponse() { return response; } @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof TokenizeResponse && equalTo((TokenizeResponse) other); + return other instanceof V1FlowTokenizeResponse && equalTo((V1FlowTokenizeResponse) other); } @JsonAnyGetter @@ -50,7 +50,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(TokenizeResponse other) { + private boolean equalTo(V1FlowTokenizeResponse other) { return response.equals(other.response); } @@ -70,14 +70,14 @@ public static Builder builder() { @JsonIgnoreProperties(ignoreUnknown = true) public static final class Builder { - private Optional> response = Optional.empty(); + private Optional> response = Optional.empty(); @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(TokenizeResponse other) { + public Builder from(V1FlowTokenizeResponse other) { response(other.getResponse()); return this; } @@ -86,18 +86,18 @@ public Builder from(TokenizeResponse other) { *

Tokenized data

*/ @JsonSetter(value = "response", nulls = Nulls.SKIP) - public Builder response(Optional> response) { + public Builder response(Optional> response) { this.response = response; return this; } - public Builder response(List response) { + public Builder response(List response) { this.response = Optional.ofNullable(response); return this; } - public TokenizeResponse build() { - return new TokenizeResponse(response, additionalProperties); + public V1FlowTokenizeResponse build() { + return new V1FlowTokenizeResponse(response, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponseObject.java b/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowTokenizeResponseObject.java similarity index 72% rename from v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponseObject.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1FlowTokenizeResponseObject.java index 9da3324b..51fbc049 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/TokenizeResponseObject.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowTokenizeResponseObject.java @@ -19,23 +19,26 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = TokenizeResponseObject.Builder.class) -public final class TokenizeResponseObject { +@JsonDeserialize(builder = V1FlowTokenizeResponseObject.Builder.class) +public final class V1FlowTokenizeResponseObject { private final Optional value; - private final Optional> tokens; + private final Optional> tokens; private final Map additionalProperties; - private TokenizeResponseObject( + private V1FlowTokenizeResponseObject( Optional value, - Optional> tokens, + Optional> tokens, Map additionalProperties) { this.value = value; this.tokens = tokens; this.additionalProperties = additionalProperties; } + /** + * @return Value of token + */ @JsonProperty("value") public Optional getValue() { return value; @@ -45,14 +48,14 @@ public Optional getValue() { * @return Token value */ @JsonProperty("tokens") - public Optional> getTokens() { + public Optional> getTokens() { return tokens; } @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof TokenizeResponseObject && equalTo((TokenizeResponseObject) other); + return other instanceof V1FlowTokenizeResponseObject && equalTo((V1FlowTokenizeResponseObject) other); } @JsonAnyGetter @@ -60,7 +63,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(TokenizeResponseObject other) { + private boolean equalTo(V1FlowTokenizeResponseObject other) { return value.equals(other.value) && tokens.equals(other.tokens); } @@ -82,19 +85,22 @@ public static Builder builder() { public static final class Builder { private Optional value = Optional.empty(); - private Optional> tokens = Optional.empty(); + private Optional> tokens = Optional.empty(); @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(TokenizeResponseObject other) { + public Builder from(V1FlowTokenizeResponseObject other) { value(other.getValue()); tokens(other.getTokens()); return this; } + /** + *

Value of token

+ */ @JsonSetter(value = "value", nulls = Nulls.SKIP) public Builder value(Optional value) { this.value = value; @@ -110,18 +116,18 @@ public Builder value(Object value) { *

Token value

*/ @JsonSetter(value = "tokens", nulls = Nulls.SKIP) - public Builder tokens(Optional> tokens) { + public Builder tokens(Optional> tokens) { this.tokens = tokens; return this; } - public Builder tokens(List tokens) { + public Builder tokens(List tokens) { this.tokens = Optional.ofNullable(tokens); return this; } - public TokenizeResponseObject build() { - return new TokenizeResponseObject(value, tokens, additionalProperties); + public V1FlowTokenizeResponseObject build() { + return new V1FlowTokenizeResponseObject(value, tokens, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowVaultMetricsData.java b/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowVaultMetricsData.java new file mode 100644 index 00000000..ef84dd03 --- /dev/null +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowVaultMetricsData.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 = V1FlowVaultMetricsData.Builder.class) +public final class V1FlowVaultMetricsData { + private final Optional> tables; + + private final Map additionalProperties; + + private V1FlowVaultMetricsData(Optional> tables, Map additionalProperties) { + this.tables = tables; + this.additionalProperties = additionalProperties; + } + + /** + * @return Map of table names to their metrics + */ + @JsonProperty("tables") + public Optional> getTables() { + return tables; + } + + @java.lang.Override + public boolean equals(Object other) { + if (this == other) return true; + return other instanceof V1FlowVaultMetricsData && equalTo((V1FlowVaultMetricsData) other); + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + private boolean equalTo(V1FlowVaultMetricsData other) { + return tables.equals(other.tables); + } + + @java.lang.Override + public int hashCode() { + return Objects.hash(this.tables); + } + + @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> tables = Optional.empty(); + + @JsonAnySetter + private Map additionalProperties = new HashMap<>(); + + private Builder() {} + + public Builder from(V1FlowVaultMetricsData other) { + tables(other.getTables()); + return this; + } + + /** + *

Map of table names to their metrics

+ */ + @JsonSetter(value = "tables", nulls = Nulls.SKIP) + public Builder tables(Optional> tables) { + this.tables = tables; + return this; + } + + public Builder tables(Map tables) { + this.tables = Optional.ofNullable(tables); + return this; + } + + public V1FlowVaultMetricsData build() { + return new V1FlowVaultMetricsData(tables, additionalProperties); + } + } +} diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowVaultMetricsResponse.java b/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowVaultMetricsResponse.java new file mode 100644 index 00000000..cef9425e --- /dev/null +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1FlowVaultMetricsResponse.java @@ -0,0 +1,126 @@ +/** + * 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 = V1FlowVaultMetricsResponse.Builder.class) +public final class V1FlowVaultMetricsResponse { + private final Optional data; + + private final Optional> error; + + private final Map additionalProperties; + + private V1FlowVaultMetricsResponse( + Optional data, + Optional> error, + Map additionalProperties) { + this.data = data; + this.error = error; + this.additionalProperties = additionalProperties; + } + + @JsonProperty("data") + public Optional getData() { + return data; + } + + /** + * @return Error information, if any + */ + @JsonProperty("error") + public Optional> getError() { + return error; + } + + @java.lang.Override + public boolean equals(Object other) { + if (this == other) return true; + return other instanceof V1FlowVaultMetricsResponse && equalTo((V1FlowVaultMetricsResponse) other); + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + private boolean equalTo(V1FlowVaultMetricsResponse other) { + return data.equals(other.data) && error.equals(other.error); + } + + @java.lang.Override + public int hashCode() { + return Objects.hash(this.data, this.error); + } + + @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(); + + private Optional> error = Optional.empty(); + + @JsonAnySetter + private Map additionalProperties = new HashMap<>(); + + private Builder() {} + + public Builder from(V1FlowVaultMetricsResponse other) { + data(other.getData()); + error(other.getError()); + return this; + } + + @JsonSetter(value = "data", nulls = Nulls.SKIP) + public Builder data(Optional data) { + this.data = data; + return this; + } + + public Builder data(V1FlowVaultMetricsData data) { + this.data = Optional.ofNullable(data); + return this; + } + + /** + *

Error information, if any

+ */ + @JsonSetter(value = "error", nulls = Nulls.SKIP) + public Builder error(Optional> error) { + this.error = error; + return this; + } + + public Builder error(Map error) { + this.error = Optional.ofNullable(error); + return this; + } + + public V1FlowVaultMetricsResponse build() { + return new V1FlowVaultMetricsResponse(data, error, 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/V1GetRequestData.java similarity index 82% rename from v3/src/main/java/com/skyflow/generated/rest/types/GetRequestData.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1GetRequestData.java index 0d6319f0..9037e23e 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/GetRequestData.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1GetRequestData.java @@ -19,26 +19,26 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = GetRequestData.Builder.class) -public final class GetRequestData { +@JsonDeserialize(builder = V1GetRequestData.Builder.class) +public final class V1GetRequestData { private final Optional tableName; private final Optional> skyflowIDs; - private final Optional> columnRedactions; + private final Optional> columnRedactions; private final Optional> columns; - private final Optional> uniqueValues; + private final Optional> uniqueValues; private final Map additionalProperties; - private GetRequestData( + private V1GetRequestData( Optional tableName, Optional> skyflowIDs, - Optional> columnRedactions, + Optional> columnRedactions, Optional> columns, - Optional> uniqueValues, + Optional> uniqueValues, Map additionalProperties) { this.tableName = tableName; this.skyflowIDs = skyflowIDs; @@ -68,7 +68,7 @@ public Optional> getSkyflowIDs() { * @return List of columns to be redacted. */ @JsonProperty("columnRedactions") - public Optional> getColumnRedactions() { + public Optional> getColumnRedactions() { return columnRedactions; } @@ -84,14 +84,14 @@ public Optional> getColumns() { * @return List of unique constraint values to query records by data */ @JsonProperty("uniqueValues") - public Optional> getUniqueValues() { + 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); + return other instanceof V1GetRequestData && equalTo((V1GetRequestData) other); } @JsonAnyGetter @@ -99,7 +99,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(GetRequestData other) { + private boolean equalTo(V1GetRequestData other) { return tableName.equals(other.tableName) && skyflowIDs.equals(other.skyflowIDs) && columnRedactions.equals(other.columnRedactions) @@ -127,18 +127,18 @@ public static final class Builder { private Optional> skyflowIDs = Optional.empty(); - private Optional> columnRedactions = Optional.empty(); + private Optional> columnRedactions = Optional.empty(); private Optional> columns = Optional.empty(); - private Optional> uniqueValues = Optional.empty(); + private Optional> uniqueValues = Optional.empty(); @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(GetRequestData other) { + public Builder from(V1GetRequestData other) { tableName(other.getTableName()); skyflowIDs(other.getSkyflowIDs()); columnRedactions(other.getColumnRedactions()); @@ -179,12 +179,12 @@ public Builder skyflowIDs(List skyflowIDs) { *

List of columns to be redacted.

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

List of unique constraint values to query records by data

*/ @JsonSetter(value = "uniqueValues", nulls = Nulls.SKIP) - public Builder uniqueValues(Optional> uniqueValues) { + public Builder uniqueValues(Optional> uniqueValues) { this.uniqueValues = uniqueValues; return this; } - public Builder uniqueValues(List uniqueValues) { + public Builder uniqueValues(List uniqueValues) { this.uniqueValues = Optional.ofNullable(uniqueValues); return this; } - public GetRequestData build() { - return new GetRequestData( + public V1GetRequestData build() { + return new V1GetRequestData( 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/V1GetResponse.java similarity index 73% rename from v3/src/main/java/com/skyflow/generated/rest/types/GetResponse.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1GetResponse.java index d12316bd..2b92160f 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/GetResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1GetResponse.java @@ -19,13 +19,13 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = GetResponse.Builder.class) -public final class GetResponse { - private final Optional> records; +@JsonDeserialize(builder = V1GetResponse.Builder.class) +public final class V1GetResponse { + private final Optional> records; private final Map additionalProperties; - private GetResponse(Optional> records, Map additionalProperties) { + private V1GetResponse(Optional> records, Map additionalProperties) { this.records = records; this.additionalProperties = additionalProperties; } @@ -34,14 +34,14 @@ private GetResponse(Optional> records, Map> getRecords() { + public Optional> getRecords() { return records; } @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof GetResponse && equalTo((GetResponse) other); + return other instanceof V1GetResponse && equalTo((V1GetResponse) other); } @JsonAnyGetter @@ -49,7 +49,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(GetResponse other) { + private boolean equalTo(V1GetResponse other) { return records.equals(other.records); } @@ -69,14 +69,14 @@ public static Builder builder() { @JsonIgnoreProperties(ignoreUnknown = true) public static final class Builder { - private Optional> records = Optional.empty(); + private Optional> records = Optional.empty(); @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(GetResponse other) { + public Builder from(V1GetResponse other) { records(other.getRecords()); return this; } @@ -85,18 +85,18 @@ public Builder from(GetResponse other) { *

List of fetched records with skyflow ID, tokens, data, and any partial errors

*/ @JsonSetter(value = "records", nulls = Nulls.SKIP) - public Builder records(Optional> records) { + public Builder records(Optional> records) { this.records = records; return this; } - public Builder records(List records) { + public Builder records(List records) { this.records = Optional.ofNullable(records); return this; } - public GetResponse build() { - return new GetResponse(records, additionalProperties); + public V1GetResponse build() { + return new V1GetResponse(records, 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/V1InsertRecordData.java similarity index 86% rename from v3/src/main/java/com/skyflow/generated/rest/types/InsertRecordData.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1InsertRecordData.java index 6bf88902..07a5eedc 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/InsertRecordData.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1InsertRecordData.java @@ -18,23 +18,23 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = InsertRecordData.Builder.class) -public final class InsertRecordData { +@JsonDeserialize(builder = V1InsertRecordData.Builder.class) +public final class V1InsertRecordData { private final Optional> data; private final Optional> tokens; private final Optional tableName; - private final Optional upsert; + private final Optional upsert; private final Map additionalProperties; - private InsertRecordData( + private V1InsertRecordData( Optional> data, Optional> tokens, Optional tableName, - Optional upsert, + Optional upsert, Map additionalProperties) { this.data = data; this.tokens = tokens; @@ -68,14 +68,14 @@ public Optional getTableName() { } @JsonProperty("upsert") - public Optional getUpsert() { + 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); + return other instanceof V1InsertRecordData && equalTo((V1InsertRecordData) other); } @JsonAnyGetter @@ -83,7 +83,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(InsertRecordData other) { + private boolean equalTo(V1InsertRecordData other) { return data.equals(other.data) && tokens.equals(other.tokens) && tableName.equals(other.tableName) @@ -112,14 +112,14 @@ public static final class Builder { private Optional tableName = Optional.empty(); - private Optional upsert = Optional.empty(); + private Optional upsert = Optional.empty(); @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(InsertRecordData other) { + public Builder from(V1InsertRecordData other) { data(other.getData()); tokens(other.getTokens()); tableName(other.getTableName()); @@ -170,18 +170,18 @@ public Builder tableName(String tableName) { } @JsonSetter(value = "upsert", nulls = Nulls.SKIP) - public Builder upsert(Optional upsert) { + public Builder upsert(Optional upsert) { this.upsert = upsert; return this; } - public Builder upsert(Upsert upsert) { + public Builder upsert(V1Upsert upsert) { this.upsert = Optional.ofNullable(upsert); return this; } - public InsertRecordData build() { - return new InsertRecordData(data, tokens, tableName, upsert, additionalProperties); + public V1InsertRecordData build() { + return new V1InsertRecordData(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/V1InsertResponse.java similarity index 72% rename from v3/src/main/java/com/skyflow/generated/rest/types/InsertResponse.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1InsertResponse.java index 50f3dc20..83be00b4 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/InsertResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1InsertResponse.java @@ -19,13 +19,13 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = InsertResponse.Builder.class) -public final class InsertResponse { - private final Optional> records; +@JsonDeserialize(builder = V1InsertResponse.Builder.class) +public final class V1InsertResponse { + private final Optional> records; private final Map additionalProperties; - private InsertResponse(Optional> records, Map additionalProperties) { + private V1InsertResponse(Optional> records, Map additionalProperties) { this.records = records; this.additionalProperties = additionalProperties; } @@ -34,14 +34,14 @@ private InsertResponse(Optional> records, Map> getRecords() { + public Optional> getRecords() { return records; } @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof InsertResponse && equalTo((InsertResponse) other); + return other instanceof V1InsertResponse && equalTo((V1InsertResponse) other); } @JsonAnyGetter @@ -49,7 +49,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(InsertResponse other) { + private boolean equalTo(V1InsertResponse other) { return records.equals(other.records); } @@ -69,14 +69,14 @@ public static Builder builder() { @JsonIgnoreProperties(ignoreUnknown = true) public static final class Builder { - private Optional> records = Optional.empty(); + private Optional> records = Optional.empty(); @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(InsertResponse other) { + public Builder from(V1InsertResponse other) { records(other.getRecords()); return this; } @@ -85,18 +85,18 @@ public Builder from(InsertResponse other) { *

List of inserted records with skyflow ID, tokens, data, and any partial errors.

*/ @JsonSetter(value = "records", nulls = Nulls.SKIP) - public Builder records(Optional> records) { + public Builder records(Optional> records) { this.records = records; return this; } - public Builder records(List records) { + public Builder records(List records) { this.records = Optional.ofNullable(records); return this; } - public InsertResponse build() { - return new InsertResponse(records, additionalProperties); + public V1InsertResponse build() { + return new V1InsertResponse(records, 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/V1RecordResponseObject.java similarity index 94% rename from v3/src/main/java/com/skyflow/generated/rest/types/RecordResponseObject.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1RecordResponseObject.java index def78ed2..2e1b0296 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/RecordResponseObject.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1RecordResponseObject.java @@ -18,8 +18,8 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = RecordResponseObject.Builder.class) -public final class RecordResponseObject { +@JsonDeserialize(builder = V1RecordResponseObject.Builder.class) +public final class V1RecordResponseObject { private final Optional skyflowId; private final Optional> tokens; @@ -36,7 +36,7 @@ public final class RecordResponseObject { private final Map additionalProperties; - private RecordResponseObject( + private V1RecordResponseObject( Optional skyflowId, Optional> tokens, Optional> data, @@ -114,7 +114,7 @@ public Optional getTableName() { @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof RecordResponseObject && equalTo((RecordResponseObject) other); + return other instanceof V1RecordResponseObject && equalTo((V1RecordResponseObject) other); } @JsonAnyGetter @@ -122,7 +122,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(RecordResponseObject other) { + private boolean equalTo(V1RecordResponseObject other) { return skyflowId.equals(other.skyflowId) && tokens.equals(other.tokens) && data.equals(other.data) @@ -168,7 +168,7 @@ public static final class Builder { private Builder() {} - public Builder from(RecordResponseObject other) { + public Builder from(V1RecordResponseObject other) { skyflowId(other.getSkyflowId()); tokens(other.getTokens()); data(other.getData()); @@ -277,8 +277,8 @@ public Builder tableName(String tableName) { return this; } - public RecordResponseObject build() { - return new RecordResponseObject( + public V1RecordResponseObject build() { + return new V1RecordResponseObject( skyflowId, tokens, data, hashedData, error, httpCode, tableName, additionalProperties); } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/TokenGroupRedactions.java b/v3/src/main/java/com/skyflow/generated/rest/types/V1TokenGroupRedactions.java similarity index 88% rename from v3/src/main/java/com/skyflow/generated/rest/types/TokenGroupRedactions.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1TokenGroupRedactions.java index 4a3235eb..c969df86 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/TokenGroupRedactions.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1TokenGroupRedactions.java @@ -18,15 +18,15 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = TokenGroupRedactions.Builder.class) -public final class TokenGroupRedactions { +@JsonDeserialize(builder = V1TokenGroupRedactions.Builder.class) +public final class V1TokenGroupRedactions { private final Optional tokenGroupName; private final Optional redaction; private final Map additionalProperties; - private TokenGroupRedactions( + private V1TokenGroupRedactions( Optional tokenGroupName, Optional redaction, Map additionalProperties) { this.tokenGroupName = tokenGroupName; this.redaction = redaction; @@ -52,7 +52,7 @@ public Optional getRedaction() { @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof TokenGroupRedactions && equalTo((TokenGroupRedactions) other); + return other instanceof V1TokenGroupRedactions && equalTo((V1TokenGroupRedactions) other); } @JsonAnyGetter @@ -60,7 +60,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(TokenGroupRedactions other) { + private boolean equalTo(V1TokenGroupRedactions other) { return tokenGroupName.equals(other.tokenGroupName) && redaction.equals(other.redaction); } @@ -89,7 +89,7 @@ public static final class Builder { private Builder() {} - public Builder from(TokenGroupRedactions other) { + public Builder from(V1TokenGroupRedactions other) { tokenGroupName(other.getTokenGroupName()); redaction(other.getRedaction()); return this; @@ -123,8 +123,8 @@ public Builder redaction(String redaction) { return this; } - public TokenGroupRedactions build() { - return new TokenGroupRedactions(tokenGroupName, redaction, additionalProperties); + public V1TokenGroupRedactions build() { + return new V1TokenGroupRedactions(tokenGroupName, redaction, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/UniqueValue.java b/v3/src/main/java/com/skyflow/generated/rest/types/V1UniqueValue.java similarity index 83% rename from v3/src/main/java/com/skyflow/generated/rest/types/UniqueValue.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1UniqueValue.java index a15f73bb..5238c2d7 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/UniqueValue.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1UniqueValue.java @@ -18,13 +18,13 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = UniqueValue.Builder.class) -public final class UniqueValue { +@JsonDeserialize(builder = V1UniqueValue.Builder.class) +public final class V1UniqueValue { private final Optional> data; private final Map additionalProperties; - private UniqueValue(Optional> data, Map additionalProperties) { + private V1UniqueValue(Optional> data, Map additionalProperties) { this.data = data; this.additionalProperties = additionalProperties; } @@ -40,7 +40,7 @@ public Optional> getData() { @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof UniqueValue && equalTo((UniqueValue) other); + return other instanceof V1UniqueValue && equalTo((V1UniqueValue) other); } @JsonAnyGetter @@ -48,7 +48,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(UniqueValue other) { + private boolean equalTo(V1UniqueValue other) { return data.equals(other.data); } @@ -75,7 +75,7 @@ public static final class Builder { private Builder() {} - public Builder from(UniqueValue other) { + public Builder from(V1UniqueValue other) { data(other.getData()); return this; } @@ -94,8 +94,8 @@ public Builder data(Map data) { return this; } - public UniqueValue build() { - return new UniqueValue(data, additionalProperties); + public V1UniqueValue build() { + return new V1UniqueValue(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/V1UpdateRecordData.java similarity index 91% rename from v3/src/main/java/com/skyflow/generated/rest/types/UpdateRecordData.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1UpdateRecordData.java index 6cc8c7ad..52d98a44 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/UpdateRecordData.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1UpdateRecordData.java @@ -18,8 +18,8 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = UpdateRecordData.Builder.class) -public final class UpdateRecordData { +@JsonDeserialize(builder = V1UpdateRecordData.Builder.class) +public final class V1UpdateRecordData { private final Optional skyflowId; private final Optional> data; @@ -30,7 +30,7 @@ public final class UpdateRecordData { private final Map additionalProperties; - private UpdateRecordData( + private V1UpdateRecordData( Optional skyflowId, Optional> data, Optional> tokens, @@ -78,7 +78,7 @@ public Optional getTableName() { @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof UpdateRecordData && equalTo((UpdateRecordData) other); + return other instanceof V1UpdateRecordData && equalTo((V1UpdateRecordData) other); } @JsonAnyGetter @@ -86,7 +86,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(UpdateRecordData other) { + private boolean equalTo(V1UpdateRecordData other) { return skyflowId.equals(other.skyflowId) && data.equals(other.data) && tokens.equals(other.tokens) @@ -122,7 +122,7 @@ public static final class Builder { private Builder() {} - public Builder from(UpdateRecordData other) { + public Builder from(V1UpdateRecordData other) { skyflowId(other.getSkyflowId()); data(other.getData()); tokens(other.getTokens()); @@ -186,8 +186,8 @@ public Builder tableName(String tableName) { return this; } - public UpdateRecordData build() { - return new UpdateRecordData(skyflowId, data, tokens, tableName, additionalProperties); + public V1UpdateRecordData build() { + return new V1UpdateRecordData(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/V1UpdateResponse.java similarity index 74% rename from v3/src/main/java/com/skyflow/generated/rest/types/UpdateResponse.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1UpdateResponse.java index ac331eef..37c91744 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/UpdateResponse.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1UpdateResponse.java @@ -19,13 +19,13 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = UpdateResponse.Builder.class) -public final class UpdateResponse { - private final Optional> records; +@JsonDeserialize(builder = V1UpdateResponse.Builder.class) +public final class V1UpdateResponse { + private final Optional> records; private final Map additionalProperties; - private UpdateResponse(Optional> records, Map additionalProperties) { + private V1UpdateResponse(Optional> records, Map additionalProperties) { this.records = records; this.additionalProperties = additionalProperties; } @@ -34,14 +34,14 @@ private UpdateResponse(Optional> records, Map> getRecords() { + public Optional> getRecords() { return records; } @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof UpdateResponse && equalTo((UpdateResponse) other); + return other instanceof V1UpdateResponse && equalTo((V1UpdateResponse) other); } @JsonAnyGetter @@ -49,7 +49,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(UpdateResponse other) { + private boolean equalTo(V1UpdateResponse other) { return records.equals(other.records); } @@ -69,14 +69,14 @@ public static Builder builder() { @JsonIgnoreProperties(ignoreUnknown = true) public static final class Builder { - private Optional> records = Optional.empty(); + private Optional> records = Optional.empty(); @JsonAnySetter private Map additionalProperties = new HashMap<>(); private Builder() {} - public Builder from(UpdateResponse other) { + public Builder from(V1UpdateResponse other) { records(other.getRecords()); return this; } @@ -85,18 +85,18 @@ public Builder from(UpdateResponse other) { *

List of updated records with skyflow ID, tokens, data, and any partial errors

*/ @JsonSetter(value = "records", nulls = Nulls.SKIP) - public Builder records(Optional> records) { + public Builder records(Optional> records) { this.records = records; return this; } - public Builder records(List records) { + public Builder records(List records) { this.records = Optional.ofNullable(records); return this; } - public UpdateResponse build() { - return new UpdateResponse(records, additionalProperties); + public V1UpdateResponse build() { + return new V1UpdateResponse(records, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/generated/rest/types/Upsert.java b/v3/src/main/java/com/skyflow/generated/rest/types/V1Upsert.java similarity index 82% rename from v3/src/main/java/com/skyflow/generated/rest/types/Upsert.java rename to v3/src/main/java/com/skyflow/generated/rest/types/V1Upsert.java index 52461939..387c80c4 100644 --- a/v3/src/main/java/com/skyflow/generated/rest/types/Upsert.java +++ b/v3/src/main/java/com/skyflow/generated/rest/types/V1Upsert.java @@ -19,16 +19,16 @@ import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_ABSENT) -@JsonDeserialize(builder = Upsert.Builder.class) -public final class Upsert { - private final Optional updateType; +@JsonDeserialize(builder = V1Upsert.Builder.class) +public final class V1Upsert { + private final Optional updateType; private final Optional> uniqueColumns; private final Map additionalProperties; - private Upsert( - Optional updateType, + private V1Upsert( + Optional updateType, Optional> uniqueColumns, Map additionalProperties) { this.updateType = updateType; @@ -37,7 +37,7 @@ private Upsert( } @JsonProperty("updateType") - public Optional getUpdateType() { + public Optional getUpdateType() { return updateType; } @@ -52,7 +52,7 @@ public Optional> getUniqueColumns() { @java.lang.Override public boolean equals(Object other) { if (this == other) return true; - return other instanceof Upsert && equalTo((Upsert) other); + return other instanceof V1Upsert && equalTo((V1Upsert) other); } @JsonAnyGetter @@ -60,7 +60,7 @@ public Map getAdditionalProperties() { return this.additionalProperties; } - private boolean equalTo(Upsert other) { + private boolean equalTo(V1Upsert other) { return updateType.equals(other.updateType) && uniqueColumns.equals(other.uniqueColumns); } @@ -80,7 +80,7 @@ public static Builder builder() { @JsonIgnoreProperties(ignoreUnknown = true) public static final class Builder { - private Optional updateType = Optional.empty(); + private Optional updateType = Optional.empty(); private Optional> uniqueColumns = Optional.empty(); @@ -89,19 +89,19 @@ public static final class Builder { private Builder() {} - public Builder from(Upsert other) { + public Builder from(V1Upsert other) { updateType(other.getUpdateType()); uniqueColumns(other.getUniqueColumns()); return this; } @JsonSetter(value = "updateType", nulls = Nulls.SKIP) - public Builder updateType(Optional updateType) { + public Builder updateType(Optional updateType) { this.updateType = updateType; return this; } - public Builder updateType(EnumUpdateType updateType) { + public Builder updateType(FlowEnumUpdateType updateType) { this.updateType = Optional.ofNullable(updateType); return this; } @@ -120,8 +120,8 @@ public Builder uniqueColumns(List uniqueColumns) { return this; } - public Upsert build() { - return new Upsert(updateType, uniqueColumns, additionalProperties); + public V1Upsert build() { + return new V1Upsert(updateType, uniqueColumns, additionalProperties); } } } diff --git a/v3/src/main/java/com/skyflow/utils/Constants.java b/v3/src/main/java/com/skyflow/utils/Constants.java index 49beaf97..6f770ffe 100644 --- a/v3/src/main/java/com/skyflow/utils/Constants.java +++ b/v3/src/main/java/com/skyflow/utils/Constants.java @@ -17,6 +17,14 @@ public final class Constants extends BaseConstants { public static final Integer DETOKENIZE_CONCURRENCY_LIMIT = 1; public static final Integer MAX_DETOKENIZE_BATCH_SIZE = 1000; public static final Integer MAX_DETOKENIZE_CONCURRENCY_LIMIT = 10; + public static final Integer DELETE_TOKENS_BATCH_SIZE = 50; + public static final Integer DELETE_TOKENS_CONCURRENCY_LIMIT = 1; + public static final Integer MAX_DELETE_TOKENS_BATCH_SIZE = 1000; + public static final Integer MAX_DELETE_TOKENS_CONCURRENCY_LIMIT = 10; + public static final Integer TOKENIZE_BATCH_SIZE = 50; + public static final Integer TOKENIZE_CONCURRENCY_LIMIT = 1; + public static final Integer MAX_TOKENIZE_BATCH_SIZE = 1000; + public static final Integer MAX_TOKENIZE_CONCURRENCY_LIMIT = 10; public static final String DEFAULT_SDK_VERSION = "v3"; static { diff --git a/v3/src/main/java/com/skyflow/utils/Utils.java b/v3/src/main/java/com/skyflow/utils/Utils.java index 97aa469f..1fb3e6bc 100644 --- a/v3/src/main/java/com/skyflow/utils/Utils.java +++ b/v3/src/main/java/com/skyflow/utils/Utils.java @@ -6,17 +6,21 @@ import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; import com.skyflow.generated.rest.core.ApiClientApiException; -import com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest; -import com.skyflow.generated.rest.types.InsertRecordData; -import com.skyflow.generated.rest.types.InsertResponse; -import com.skyflow.generated.rest.types.RecordResponseObject; -import com.skyflow.generated.rest.types.TokenGroupRedactions; +import com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest; +import com.skyflow.generated.rest.types.V1InsertRecordData; +import com.skyflow.generated.rest.types.V1InsertResponse; +import com.skyflow.generated.rest.types.V1RecordResponseObject; +import com.skyflow.generated.rest.types.V1TokenGroupRedactions; import com.skyflow.logs.ErrorLogs; import com.skyflow.utils.logger.LogUtil; import com.skyflow.vault.data.DetokenizeResponse; import com.skyflow.vault.data.ErrorRecord; import com.skyflow.vault.data.Success; import com.skyflow.vault.data.Token; +import com.skyflow.vault.data.DeleteTokensResponse; +import com.skyflow.vault.data.DeleteTokensSuccess; +import com.skyflow.vault.data.TokenizeResponse; +import com.skyflow.vault.data.TokenizeSuccess; import io.github.cdimascio.dotenv.Dotenv; import io.github.cdimascio.dotenv.DotenvException; @@ -40,27 +44,27 @@ public static JsonObject getMetrics() { return details; } - public static List> createBatches(List records, int batchSize) { - List> batches = new ArrayList<>(); + public static List> createBatches(List records, int batchSize) { + List> batches = new ArrayList<>(); for (int i = 0; i < records.size(); i += batchSize) { batches.add(records.subList(i, Math.min(i + batchSize, records.size()))); } return batches; } - public static List createDetokenizeBatches(DetokenizeRequest request, int batchSize) { - List detokenizeRequests = new ArrayList<>(); + public static List createDetokenizeBatches(V1FlowDetokenizeRequest 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; + List tokenGroupRedactions = null; if (request.getTokenGroupRedactions().isPresent() && !request.getTokenGroupRedactions().get().isEmpty()) { tokenGroupRedactions = request.getTokenGroupRedactions().get(); } // Build a new DetokenizeRequest for the current batch - DetokenizeRequest batchRequest = DetokenizeRequest.builder() + V1FlowDetokenizeRequest batchRequest = V1FlowDetokenizeRequest.builder() .vaultId(request.getVaultId()) .tokens(new ArrayList<>(batchTokens)) .tokenGroupRedactions(tokenGroupRedactions) @@ -94,7 +98,7 @@ public static ErrorRecord createErrorRecord(Map recordMap, int i } public static List handleBatchException( - Throwable ex, List batch, int batchNumber, int batchSize + Throwable ex, List batch, int batchNumber, int batchSize ) { List errorRecords = new ArrayList<>(); Throwable cause = ex.getCause(); @@ -137,7 +141,7 @@ public static List handleBatchException( } public static List handleDetokenizeBatchException( - Throwable ex, DetokenizeRequest batch, int batchNumber, int batchSize + Throwable ex, V1FlowDetokenizeRequest batch, int batchNumber, int batchSize ) { List errorRecords = new ArrayList<>(); Throwable cause = ex.getCause(); @@ -179,9 +183,9 @@ public static List handleDetokenizeBatchException( return errorRecords; } - public static DetokenizeResponse formatDetokenizeResponse(com.skyflow.generated.rest.types.DetokenizeResponse response, int batch, int batchSize) { + public static DetokenizeResponse formatDetokenizeResponse(com.skyflow.generated.rest.types.V1FlowDetokenizeResponse response, int batch, int batchSize) { if (response != null) { - List record = response.getResponse().get(); + List record = response.getResponse().get(); List errorRecords = new ArrayList<>(); List successRecords = new ArrayList<>(); int indexNumber = batch * batchSize; @@ -202,12 +206,12 @@ public static DetokenizeResponse formatDetokenizeResponse(com.skyflow.generated. return null; } - public static com.skyflow.vault.data.InsertResponse formatResponse(InsertResponse response, int batch, int batchSize) { + public static com.skyflow.vault.data.InsertResponse formatResponse(V1InsertResponse response, int batch, int batchSize) { com.skyflow.vault.data.InsertResponse formattedResponse = null; List successRecords = new ArrayList<>(); List errorRecords = new ArrayList<>(); if (response != null) { - List record = response.getRecords().get(); + List record = response.getRecords().get(); int indexNumber = batch * batchSize; int recordsSize = response.getRecords().get().size(); for (int index = 0; index < recordsSize; index++) { @@ -282,4 +286,215 @@ public static boolean isValidURL(String url) { return parsedUrl.getHost() != null && !parsedUrl.getHost().isEmpty(); } } + + public static List createDeleteTokensBatches( + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDeleteTokenRequest request, int batchSize) { + List batches = new ArrayList<>(); + List tokens = request.getTokens().get(); + for (int i = 0; i < tokens.size(); i += batchSize) { + List batchTokens = tokens.subList(i, Math.min(i + batchSize, tokens.size())); + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDeleteTokenRequest batchRequest = + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDeleteTokenRequest.builder() + .vaultId(request.getVaultId()) + .tokens(new ArrayList<>(batchTokens)) + .build(); + batches.add(batchRequest); + } + return batches; + } + + public static List handleDeleteTokensBatchException( + Throwable ex, + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDeleteTokenRequest batch, + int batchNumber, int batchSize + ) { + List errorRecords = new ArrayList<>(); + Throwable cause = ex.getCause(); + if (cause instanceof ApiClientApiException) { + ApiClientApiException apiException = (ApiClientApiException) cause; + Map responseBody = (Map) apiException.body(); + int indexNumber = batchNumber * batchSize; + if (responseBody != null) { + if (responseBody.containsKey("tokens")) { + Object tokensList = responseBody.get("tokens"); + if (tokensList instanceof List) { + List recordsList = (List) tokensList; + for (Object record : recordsList) { + if (record instanceof Map) { + Map recordMap = (Map) record; + ErrorRecord err = Utils.createErrorRecord(recordMap, indexNumber); + errorRecords.add(err); + indexNumber++; + } + } + } + } else if (responseBody.containsKey("error")) { + Map recordMap = (Map) responseBody.get("error"); + for (int j = 0; j < batch.getTokens().get().size(); j++) { + ErrorRecord err = Utils.createErrorRecord(recordMap, indexNumber); + errorRecords.add(err); + indexNumber++; + } + } + } + } else { + int indexNumber = batchNumber * batchSize; + for (int j = 0; j < batch.getTokens().get().size(); j++) { + ErrorRecord err = new ErrorRecord(indexNumber, ex.getMessage(), 500); + errorRecords.add(err); + indexNumber++; + } + } + return errorRecords; + } + + public static DeleteTokensResponse formatDeleteTokensResponse( + com.skyflow.generated.rest.types.V1FlowDeleteTokenResponse response, int batch, int batchSize) { + if (response != null && response.getTokens().isPresent()) { + List records = response.getTokens().get(); + List errorRecords = new ArrayList<>(); + List successRecords = new ArrayList<>(); + int indexNumber = batch * batchSize; + for (com.skyflow.generated.rest.types.V1DeleteTokenResponseObject record : records) { + // The API returns the token string in "value" field regardless of success or error + String tokenValue = record.getValue().orElse(null); + if (record.getError().isPresent() + && record.getError().get() != null + && !record.getError().get().isEmpty() + && record.getHttpCode().orElse(200) != 200) { + ErrorRecord errorRecord = new ErrorRecord(indexNumber, record.getError().get(), + record.getHttpCode().orElse(500)); + errorRecords.add(errorRecord); + } else { + DeleteTokensSuccess success = new DeleteTokensSuccess(indexNumber, tokenValue); + successRecords.add(success); + } + indexNumber++; + } + return new DeleteTokensResponse(successRecords, errorRecords); + } + return null; + } + + public static List createTokenizeBatches( + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowTokenizeRequest request, int batchSize) { + List batches = new ArrayList<>(); + List data = request.getData().get(); + for (int i = 0; i < data.size(); i += batchSize) { + List batchData = + data.subList(i, Math.min(i + batchSize, data.size())); + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowTokenizeRequest batchRequest = + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowTokenizeRequest.builder() + .vaultId(request.getVaultId()) + .data(new ArrayList<>(batchData)) + .build(); + batches.add(batchRequest); + } + return batches; + } + + public static List handleTokenizeBatchException( + Throwable ex, + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowTokenizeRequest batch, + int batchNumber, int batchSize + ) { + List errorRecords = new ArrayList<>(); + Throwable cause = ex.getCause(); + if (cause instanceof ApiClientApiException) { + ApiClientApiException apiException = (ApiClientApiException) cause; + Map responseBody = (Map) apiException.body(); + int indexNumber = batchNumber * batchSize; + if (responseBody != null) { + if (responseBody.containsKey("response")) { + Object responseList = responseBody.get("response"); + if (responseList instanceof List) { + List recordsList = (List) responseList; + for (Object record : recordsList) { + if (record instanceof Map) { + Map recordMap = (Map) record; + ErrorRecord err = Utils.createErrorRecord(recordMap, indexNumber); + errorRecords.add(err); + indexNumber++; + } + } + } + } else if (responseBody.containsKey("error")) { + Map recordMap = (Map) responseBody.get("error"); + int batchDataSize = batch.getData().isPresent() ? batch.getData().get().size() : 0; + for (int j = 0; j < batchDataSize; j++) { + ErrorRecord err = Utils.createErrorRecord(recordMap, indexNumber); + errorRecords.add(err); + indexNumber++; + } + } + } + } else { + int indexNumber = batchNumber * batchSize; + int batchDataSize = batch.getData().isPresent() ? batch.getData().get().size() : 0; + for (int j = 0; j < batchDataSize; j++) { + ErrorRecord err = new ErrorRecord(indexNumber, ex.getMessage(), 500); + errorRecords.add(err); + indexNumber++; + } + } + return errorRecords; + } + + public static TokenizeResponse formatTokenizeResponse( + com.skyflow.generated.rest.types.V1FlowTokenizeResponse response, + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowTokenizeRequest batchRequest, + int batchNumber, int batchSize) { + if (response != null && response.getResponse().isPresent()) { + // The API returns a flat list — one entry per (value x tokenGroupName). + // We group them by input record position using the request's tokenGroupNames count + // so that records with identical values are still treated as separate entries. + List flatList = + response.getResponse().get(); + List requestData = + batchRequest.getData().isPresent() ? batchRequest.getData().get() : new ArrayList<>(); + + List successRecords = new ArrayList<>(); + List errorRecords = new ArrayList<>(); + + int flatIndex = 0; + for (int i = 0; i < requestData.size(); i++) { + int inputRecordIndex = batchNumber * batchSize + i; + com.skyflow.generated.rest.types.V1FlowTokenizeRequestObject reqObj = requestData.get(i); + List groupNames = reqObj.getTokenGroupNames().isPresent() + ? reqObj.getTokenGroupNames().get() : new ArrayList<>(); + int groupCount = groupNames.size(); + + // Consume exactly groupCount entries from the flat response for this record + TokenizeSuccess successEntry = null; + for (int g = 0; g < groupCount && flatIndex < flatList.size(); g++, flatIndex++) { + com.skyflow.generated.rest.types.V1FlowTokenizeResponseObject obj = flatList.get(flatIndex); + Map props = obj.getAdditionalProperties(); + + Object value = obj.getValue().isPresent() ? obj.getValue().get() + : (props != null ? props.get("value") : null); + String tokenGroupName = props != null ? (String) props.get("tokenGroupName") : null; + String token = props != null ? (String) props.get("token") : null; + String errorMsg = (props != null && props.containsKey("error") && props.get("error") != null) + ? String.valueOf(props.get("error")) : null; + int httpCode = (props != null && props.containsKey("httpCode") && props.get("httpCode") instanceof Number) + ? ((Number) props.get("httpCode")).intValue() : 200; + + if (errorMsg != null) { + errorRecords.add(new ErrorRecord(inputRecordIndex, errorMsg, httpCode)); + } else { + if (successEntry == null) { + successEntry = new TokenizeSuccess(inputRecordIndex, value); + } + successEntry.addToken(tokenGroupName, token); + } + } + if (successEntry != null) { + successRecords.add(successEntry); + } + } + + return new TokenizeResponse(successRecords, errorRecords); + } + return null; + } } 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 ace0cec7..30669670 100644 --- a/v3/src/main/java/com/skyflow/utils/validations/Validations.java +++ b/v3/src/main/java/com/skyflow/utils/validations/Validations.java @@ -16,6 +16,9 @@ import com.skyflow.vault.data.InsertRecord; import com.skyflow.vault.data.InsertRequest; import com.skyflow.vault.data.TokenGroupRedactions; +import com.skyflow.vault.data.DeleteTokensRequest; +import com.skyflow.vault.data.TokenizeRequest; +import com.skyflow.vault.data.TokenizeRecord; public class Validations extends BaseValidations { private Validations() { @@ -179,6 +182,92 @@ public static void validateDetokenizeRequest(DetokenizeRequest request) throws S } } + public static void validateDeleteTokensRequest(DeleteTokensRequest request) throws SkyflowException { + if (request == null) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.DELETE_TOKENS_REQUEST_NULL.getLog(), InterfaceName.DELETE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.DeleteTokensRequestNull.getMessage()); + } + List tokens = request.getTokens(); + if (tokens == null || tokens.isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_DELETE_TOKENS_DATA.getLog(), InterfaceName.DELETE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyDeleteTokensData.getMessage()); + } + if (tokens.size() > 10000) { + LogUtil.printErrorLog(ErrorLogs.DELETE_TOKENS_SIZE_EXCEED.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.DeleteTokensSizeExceedError.getMessage()); + } + for (int index = 0; index < tokens.size(); index++) { + String token = tokens.get(index); + if (token == null || token.trim().isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_OR_NULL_TOKEN_IN_DELETE_TOKENS_DATA.getLog(), + InterfaceName.DELETE.getName(), + String.valueOf(index))); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTokenInDeleteTokensData.getMessage()); + } + } + } + + public static void validateTokenizeRequest(TokenizeRequest request) throws SkyflowException { + if (request == null) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.TOKENIZE_REQUEST_NULL.getLog(), InterfaceName.TOKENIZE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TokenizeRequestNull.getMessage()); + } + List data = request.getData(); + if (data == null || data.isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_TOKENIZE_DATA.getLog(), InterfaceName.TOKENIZE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTokenizeData.getMessage()); + } + if (data.size() > 10000) { + LogUtil.printErrorLog(ErrorLogs.TOKENIZE_DATA_SIZE_EXCEED.getLog()); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TokenizeDataSizeExceedError.getMessage()); + } + for (int i = 0; i < data.size(); i++) { + TokenizeRecord record = data.get(i); + if (record == null) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.TOKENIZE_RECORD_NULL.getLog(), InterfaceName.TOKENIZE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.TokenizeRecordNull.getMessage()); + } + Object value = record.getValue(); + boolean isInvalid = value == null + || (value instanceof String && ((String) value).trim().isEmpty()); + if (isInvalid) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_VALUE_IN_TOKENIZE_RECORD.getLog(), InterfaceName.TOKENIZE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyValueInTokenizeRecord.getMessage()); + } + List tokenGroupNames = record.getTokenGroupNames(); + if (tokenGroupNames == null || tokenGroupNames.isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_TOKEN_GROUP_NAMES_IN_TOKENIZE_RECORD.getLog(), InterfaceName.TOKENIZE.getName() + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTokenGroupNamesInTokenizeRecord.getMessage()); + } + for (int j = 0; j < tokenGroupNames.size(); j++) { + String groupName = tokenGroupNames.get(j); + if (groupName == null || groupName.trim().isEmpty()) { + LogUtil.printErrorLog(Utils.parameterizedString( + ErrorLogs.EMPTY_TOKEN_GROUP_NAME_IN_TOKENIZE_RECORD.getLog(), + InterfaceName.TOKENIZE.getName(), + String.valueOf(j) + )); + throw new SkyflowException(ErrorCode.INVALID_INPUT.getCode(), ErrorMessage.EmptyTokenGroupNameInTokenizeRecord.getMessage()); + } + } + } + } + public static void validateVaultConfiguration(VaultConfig vaultConfig) throws SkyflowException { String vaultId = vaultConfig.getVaultId(); String clusterId = vaultConfig.getClusterId(); 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 73325f59..74e6642b 100644 --- a/v3/src/main/java/com/skyflow/vault/controller/VaultController.java +++ b/v3/src/main/java/com/skyflow/vault/controller/VaultController.java @@ -9,9 +9,9 @@ import com.skyflow.errors.SkyflowException; import com.skyflow.generated.rest.core.ApiClientApiException; import com.skyflow.generated.rest.core.RequestOptions; -import com.skyflow.generated.rest.types.InsertRecordData; -import com.skyflow.generated.rest.types.InsertResponse; -import com.skyflow.generated.rest.types.Upsert; +import com.skyflow.generated.rest.types.V1InsertRecordData; +import com.skyflow.generated.rest.types.V1InsertResponse; +import com.skyflow.generated.rest.types.V1Upsert; import com.skyflow.logs.ErrorLogs; import com.skyflow.logs.InfoLogs; import com.skyflow.logs.WarningLogs; @@ -20,6 +20,9 @@ import com.skyflow.utils.logger.LogUtil; import com.skyflow.utils.validations.Validations; import com.skyflow.vault.data.*; +import com.skyflow.vault.data.TokenizeRequest; +import com.skyflow.vault.data.TokenizeResponse; +import com.skyflow.vault.data.TokenizeSuccess; import io.github.cdimascio.dotenv.Dotenv; import io.github.cdimascio.dotenv.DotenvException; @@ -38,6 +41,10 @@ public final class VaultController extends VaultClient { private int insertConcurrencyLimit; private int detokenizeBatchSize; private int detokenizeConcurrencyLimit; + private int deleteTokensBatchSize; + private int deleteTokensConcurrencyLimit; + private int tokenizeBatchSize; + private int tokenizeConcurrencyLimit; public VaultController(VaultConfig vaultConfig, Credentials credentials) throws SkyflowException { super(vaultConfig, credentials); @@ -45,6 +52,10 @@ public VaultController(VaultConfig vaultConfig, Credentials credentials) throws this.insertConcurrencyLimit = Constants.INSERT_CONCURRENCY_LIMIT; this.detokenizeBatchSize = Constants.DETOKENIZE_BATCH_SIZE; this.detokenizeConcurrencyLimit = Constants.DETOKENIZE_CONCURRENCY_LIMIT; + this.deleteTokensBatchSize = Constants.DELETE_TOKENS_BATCH_SIZE; + this.deleteTokensConcurrencyLimit = Constants.DELETE_TOKENS_CONCURRENCY_LIMIT; + this.tokenizeBatchSize = Constants.TOKENIZE_BATCH_SIZE; + this.tokenizeConcurrencyLimit = Constants.TOKENIZE_CONCURRENCY_LIMIT; } public com.skyflow.vault.data.InsertResponse bulkInsert(InsertRequest insertRequest) throws SkyflowException { @@ -56,7 +67,7 @@ public com.skyflow.vault.data.InsertResponse bulkInsert(InsertRequest insertRequ configureInsertConcurrencyAndBatchSize(insertRequest.getRecords().size()); setBearerToken(); - com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest request = super.getBulkInsertRequestBody(insertRequest, super.getVaultConfig()); + com.skyflow.generated.rest.resources.flowservice.requests.V1InsertRequest request = super.getBulkInsertRequestBody(insertRequest, super.getVaultConfig()); response = this.processSync(request, insertRequest.getRecords()); return response; @@ -78,7 +89,7 @@ public CompletableFuture bulkInsertAsync( configureInsertConcurrencyAndBatchSize(insertRequest.getRecords().size()); setBearerToken(); - com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest request = super.getBulkInsertRequestBody(insertRequest, super.getVaultConfig()); + com.skyflow.generated.rest.resources.flowservice.requests.V1InsertRequest request = super.getBulkInsertRequestBody(insertRequest, super.getVaultConfig()); List errorRecords = Collections.synchronizedList(new ArrayList<>()); List> futures = this.insertBatchFutures(request, errorRecords); @@ -116,7 +127,7 @@ public DetokenizeResponse bulkDetokenize(DetokenizeRequest detokenizeRequest) th LogUtil.printInfoLog(InfoLogs.VALIDATE_DETOKENIZE_REQUEST.getLog()); Validations.validateDetokenizeRequest(detokenizeRequest); setBearerToken(); - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest request = super.getDetokenizeRequestBody(detokenizeRequest); + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest request = super.getDetokenizeRequestBody(detokenizeRequest); response = this.processDetokenizeSync(request, detokenizeRequest.getTokens()); return response; @@ -138,7 +149,7 @@ public CompletableFuture bulkDetokenizeAsync(DetokenizeReque LogUtil.printInfoLog(InfoLogs.VALIDATE_DETOKENIZE_REQUEST.getLog()); Validations.validateDetokenizeRequest(detokenizeRequest); setBearerToken(); - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest request = super.getDetokenizeRequestBody(detokenizeRequest); + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest request = super.getDetokenizeRequestBody(detokenizeRequest); LogUtil.printInfoLog(InfoLogs.PROCESSING_BATCHES.getLog()); @@ -146,7 +157,7 @@ public CompletableFuture bulkDetokenizeAsync(DetokenizeReque List successRecords = new ArrayList<>(); // Create batches - List batches = Utils.createDetokenizeBatches(request, detokenizeBatchSize); + List batches = Utils.createDetokenizeBatches(request, detokenizeBatchSize); List> futures = this.detokenizeBatchFutures(executor, batches, errorTokens); return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])) @@ -174,8 +185,429 @@ public CompletableFuture bulkDetokenizeAsync(DetokenizeReque } } + public DeleteTokensResponse bulkDeleteTokens(DeleteTokensRequest deleteTokensRequest) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.DELETE_TOKENS_TRIGGERED.getLog()); + try { + LogUtil.printInfoLog(InfoLogs.VALIDATE_DELETE_TOKENS_REQUEST.getLog()); + Validations.validateDeleteTokensRequest(deleteTokensRequest); + configureDeleteTokensConcurrencyAndBatchSize(deleteTokensRequest.getTokens().size()); + setBearerToken(); + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDeleteTokenRequest request = + super.getDeleteTokensRequestBody(deleteTokensRequest); + return this.processDeleteTokensSync(request, deleteTokensRequest.getTokens()); + } catch (ApiClientApiException e) { + String bodyString = gson.toJson(e.body()); + LogUtil.printErrorLog(ErrorLogs.DELETE_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.statusCode(), e, e.headers(), bodyString); + } catch (ExecutionException | InterruptedException e) { + LogUtil.printErrorLog(ErrorLogs.DELETE_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage()); + } + } + + public CompletableFuture bulkDeleteTokensAsync(DeleteTokensRequest deleteTokensRequest) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.DELETE_TOKENS_TRIGGERED.getLog()); + ExecutorService executor = Executors.newFixedThreadPool(deleteTokensConcurrencyLimit); + try { + LogUtil.printInfoLog(InfoLogs.VALIDATE_DELETE_TOKENS_REQUEST.getLog()); + Validations.validateDeleteTokensRequest(deleteTokensRequest); + configureDeleteTokensConcurrencyAndBatchSize(deleteTokensRequest.getTokens().size()); + setBearerToken(); + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDeleteTokenRequest request = + super.getDeleteTokensRequestBody(deleteTokensRequest); + + LogUtil.printInfoLog(InfoLogs.PROCESSING_BATCHES.getLog()); + + List errorTokens = Collections.synchronizedList(new ArrayList<>()); + List successRecords = Collections.synchronizedList(new ArrayList<>()); + + List batches = + Utils.createDeleteTokensBatches(request, deleteTokensBatchSize); + + List> futures = + this.deleteTokensBatchFutures(executor, batches); + + return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])) + .thenApply(v -> { + for (CompletableFuture future : futures) { + DeleteTokensResponse futureResponse = future.join(); + if (futureResponse != null) { + if (futureResponse.getSuccess() != null) { + successRecords.addAll(futureResponse.getSuccess()); + } + if (futureResponse.getErrors() != null) { + errorTokens.addAll(futureResponse.getErrors()); + } + } + } + LogUtil.printInfoLog(InfoLogs.DELETE_TOKENS_REQUEST_RESOLVED.getLog()); + executor.shutdown(); + return new DeleteTokensResponse(successRecords, errorTokens, deleteTokensRequest.getTokens()); + }); + } catch (ApiClientApiException e) { + String bodyString = gson.toJson(e.body()); + LogUtil.printErrorLog(ErrorLogs.DELETE_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.statusCode(), e, e.headers(), bodyString); + } catch (SkyflowException e) { + LogUtil.printErrorLog(ErrorLogs.DELETE_REQUEST_REJECTED.getLog()); + throw e; + } catch (Exception e) { + LogUtil.printErrorLog(ErrorLogs.DELETE_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage()); + } finally { + executor.shutdown(); + } + } + + private DeleteTokensResponse processDeleteTokensSync( + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDeleteTokenRequest deleteTokensRequest, + List originalTokens + ) throws ExecutionException, InterruptedException, SkyflowException { + LogUtil.printInfoLog(InfoLogs.PROCESSING_BATCHES.getLog()); + List errorRecords = Collections.synchronizedList(new ArrayList<>()); + List successRecords = new ArrayList<>(); + ExecutorService executor = Executors.newFixedThreadPool(deleteTokensConcurrencyLimit); + List batches = + Utils.createDeleteTokensBatches(deleteTokensRequest, deleteTokensBatchSize); + try { + List> futures = + this.deleteTokensBatchFutures(executor, batches); + try { + CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).get(); + } catch (Exception e) { + LogUtil.printErrorLog(ErrorLogs.DELETE_REQUEST_REJECTED.getLog()); + } + for (CompletableFuture future : futures) { + DeleteTokensResponse futureResponse = future.get(); + if (futureResponse != null) { + if (futureResponse.getSuccess() != null) successRecords.addAll(futureResponse.getSuccess()); + if (futureResponse.getErrors() != null) errorRecords.addAll(futureResponse.getErrors()); + } + } + } catch (Exception e) { + LogUtil.printErrorLog(ErrorLogs.DELETE_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage()); + } finally { + executor.shutdown(); + } + DeleteTokensResponse response = new DeleteTokensResponse(successRecords, errorRecords, originalTokens); + LogUtil.printInfoLog(InfoLogs.DELETE_TOKENS_REQUEST_RESOLVED.getLog()); + return response; + } + + private List> deleteTokensBatchFutures( + ExecutorService executor, + List batches) { + List> futures = new ArrayList<>(); + if (batches == null) return futures; + for (int batchIndex = 0; batchIndex < batches.size(); batchIndex++) { + final int index = batchIndex; + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDeleteTokenRequest batch = batches.get(index); + CompletableFuture future = CompletableFuture + .supplyAsync(() -> processDeleteTokensBatch(batch), executor) + .handle((result, ex) -> { + if (ex != null) { + List batchErrors = + Utils.handleDeleteTokensBatchException(ex, batch, index, deleteTokensBatchSize); + return new DeleteTokensResponse(new ArrayList<>(), batchErrors); + } + return Utils.formatDeleteTokensResponse(result, index, deleteTokensBatchSize); + }); + futures.add(future); + } + return futures; + } + + private com.skyflow.generated.rest.types.V1FlowDeleteTokenResponse processDeleteTokensBatch( + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDeleteTokenRequest batch) { + RequestOptions requestOptions = RequestOptions.builder() + .addHeader(Constants.SDK_METRICS_HEADER_KEY, metrics.toString()) + .build(); + return this.getRecordsApi().deletetoken(batch, requestOptions); + } + + private void configureDeleteTokensConcurrencyAndBatchSize(int totalRequests) { + try { + String userProvidedBatchSize = System.getenv("DELETE_TOKENS_BATCH_SIZE"); + String userProvidedConcurrencyLimit = System.getenv("DELETE_TOKENS_CONCURRENCY_LIMIT"); + + Dotenv dotenv = null; + try { + dotenv = Dotenv.load(); + } catch (DotenvException ignored) {} + + if (userProvidedBatchSize == null && dotenv != null) { + userProvidedBatchSize = dotenv.get("DELETE_TOKENS_BATCH_SIZE"); + } + if (userProvidedConcurrencyLimit == null && dotenv != null) { + userProvidedConcurrencyLimit = dotenv.get("DELETE_TOKENS_CONCURRENCY_LIMIT"); + } + + if (userProvidedBatchSize != null) { + try { + int batchSize = Integer.parseInt(userProvidedBatchSize); + if (batchSize > Constants.MAX_DELETE_TOKENS_BATCH_SIZE) { + LogUtil.printWarningLog(WarningLogs.BATCH_SIZE_EXCEEDS_MAX_LIMIT.getLog()); + } + int maxBatchSize = Math.min(batchSize, Constants.MAX_DELETE_TOKENS_BATCH_SIZE); + if (maxBatchSize > 0) { + this.deleteTokensBatchSize = maxBatchSize; + } else { + LogUtil.printWarningLog(WarningLogs.INVALID_BATCH_SIZE_PROVIDED.getLog()); + this.deleteTokensBatchSize = Constants.DELETE_TOKENS_BATCH_SIZE; + } + } catch (NumberFormatException e) { + LogUtil.printWarningLog(WarningLogs.INVALID_BATCH_SIZE_PROVIDED.getLog()); + this.deleteTokensBatchSize = Constants.DELETE_TOKENS_BATCH_SIZE; + } + } + + // Max no of threads required to run all batches concurrently at once + int maxConcurrencyNeeded = (totalRequests + this.deleteTokensBatchSize - 1) / this.deleteTokensBatchSize; + + if (userProvidedConcurrencyLimit != null) { + try { + int concurrencyLimit = Integer.parseInt(userProvidedConcurrencyLimit); + if (concurrencyLimit > Constants.MAX_DELETE_TOKENS_CONCURRENCY_LIMIT) { + LogUtil.printWarningLog(WarningLogs.CONCURRENCY_EXCEEDS_MAX_LIMIT.getLog()); + } + int maxConcurrencyLimit = Math.min(concurrencyLimit, Constants.MAX_DELETE_TOKENS_CONCURRENCY_LIMIT); + if (maxConcurrencyLimit > 0) { + this.deleteTokensConcurrencyLimit = Math.min(maxConcurrencyLimit, maxConcurrencyNeeded); + } else { + LogUtil.printWarningLog(WarningLogs.INVALID_CONCURRENCY_LIMIT_PROVIDED.getLog()); + this.deleteTokensConcurrencyLimit = Math.min(Constants.DELETE_TOKENS_CONCURRENCY_LIMIT, maxConcurrencyNeeded); + } + } catch (NumberFormatException e) { + LogUtil.printWarningLog(WarningLogs.INVALID_CONCURRENCY_LIMIT_PROVIDED.getLog()); + this.deleteTokensConcurrencyLimit = Math.min(Constants.DELETE_TOKENS_CONCURRENCY_LIMIT, maxConcurrencyNeeded); + } + } else { + this.deleteTokensConcurrencyLimit = Math.min(Constants.DELETE_TOKENS_CONCURRENCY_LIMIT, maxConcurrencyNeeded); + } + } catch (Exception e) { + this.deleteTokensBatchSize = Constants.DELETE_TOKENS_BATCH_SIZE; + int maxConcurrencyNeeded = (totalRequests + this.deleteTokensBatchSize - 1) / this.deleteTokensBatchSize; + this.deleteTokensConcurrencyLimit = Math.min(Constants.DELETE_TOKENS_CONCURRENCY_LIMIT, maxConcurrencyNeeded); + } + } + + public TokenizeResponse bulkTokenize(TokenizeRequest tokenizeRequest) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.TOKENIZE_TRIGGERED.getLog()); + try { + LogUtil.printInfoLog(InfoLogs.VALIDATING_TOKENIZE_REQUEST.getLog()); + Validations.validateTokenizeRequest(tokenizeRequest); + configureTokenizeConcurrencyAndBatchSize(tokenizeRequest.getData().size()); + setBearerToken(); + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowTokenizeRequest request = + super.getTokenizeRequestBody(tokenizeRequest); + return this.processTokenizeSync(request, tokenizeRequest.getData()); + } catch (ApiClientApiException e) { + String bodyString = gson.toJson(e.body()); + LogUtil.printErrorLog(ErrorLogs.TOKENIZE_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.statusCode(), e, e.headers(), bodyString); + } catch (SkyflowException e) { + LogUtil.printErrorLog(ErrorLogs.TOKENIZE_REQUEST_REJECTED.getLog()); + throw e; + } catch (ExecutionException | InterruptedException e) { + LogUtil.printErrorLog(ErrorLogs.TOKENIZE_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage()); + } + } + + public CompletableFuture bulkTokenizeAsync(TokenizeRequest tokenizeRequest) throws SkyflowException { + LogUtil.printInfoLog(InfoLogs.TOKENIZE_TRIGGERED.getLog()); + ExecutorService executor = Executors.newFixedThreadPool(tokenizeConcurrencyLimit); + try { + LogUtil.printInfoLog(InfoLogs.VALIDATING_TOKENIZE_REQUEST.getLog()); + Validations.validateTokenizeRequest(tokenizeRequest); + configureTokenizeConcurrencyAndBatchSize(tokenizeRequest.getData().size()); + setBearerToken(); + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowTokenizeRequest request = + super.getTokenizeRequestBody(tokenizeRequest); + + LogUtil.printInfoLog(InfoLogs.PROCESSING_BATCHES.getLog()); + + List errorRecords = Collections.synchronizedList(new ArrayList<>()); + List successRecords = Collections.synchronizedList(new ArrayList<>()); + + List batches = + Utils.createTokenizeBatches(request, tokenizeBatchSize); + + List> futures = + this.tokenizeBatchFutures(executor, batches); + + return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])) + .thenApply(v -> { + for (CompletableFuture future : futures) { + TokenizeResponse futureResponse = future.join(); + if (futureResponse != null) { + if (futureResponse.getSuccess() != null) { + successRecords.addAll(futureResponse.getSuccess()); + } + if (futureResponse.getErrors() != null) { + errorRecords.addAll(futureResponse.getErrors()); + } + } + } + LogUtil.printInfoLog(InfoLogs.TOKENIZE_REQUEST_RESOLVED.getLog()); + executor.shutdown(); + return new TokenizeResponse(successRecords, errorRecords, tokenizeRequest.getData()); + }); + } catch (ApiClientApiException e) { + String bodyString = gson.toJson(e.body()); + LogUtil.printErrorLog(ErrorLogs.TOKENIZE_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.statusCode(), e, e.headers(), bodyString); + } catch (SkyflowException e) { + LogUtil.printErrorLog(ErrorLogs.TOKENIZE_REQUEST_REJECTED.getLog()); + throw e; + } catch (Exception e) { + LogUtil.printErrorLog(ErrorLogs.TOKENIZE_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage()); + } finally { + executor.shutdown(); + } + } + + private TokenizeResponse processTokenizeSync( + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowTokenizeRequest tokenizeRequest, + java.util.ArrayList originalData + ) throws ExecutionException, InterruptedException, SkyflowException { + LogUtil.printInfoLog(InfoLogs.PROCESSING_BATCHES.getLog()); + List errorRecords = Collections.synchronizedList(new ArrayList<>()); + List successRecords = new ArrayList<>(); + ExecutorService executor = Executors.newFixedThreadPool(tokenizeConcurrencyLimit); + List batches = + Utils.createTokenizeBatches(tokenizeRequest, tokenizeBatchSize); + try { + List> futures = + this.tokenizeBatchFutures(executor, batches); + try { + CompletableFuture allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])); + allFutures.join(); + } catch (Exception e) { + // individual batch errors are already captured + } + for (CompletableFuture future : futures) { + TokenizeResponse futureResponse = future.get(); + if (futureResponse != null) { + if (futureResponse.getSuccess() != null) { + successRecords.addAll(futureResponse.getSuccess()); + } + if (futureResponse.getErrors() != null) { + errorRecords.addAll(futureResponse.getErrors()); + } + } + } + } catch (Exception e) { + LogUtil.printErrorLog(ErrorLogs.TOKENIZE_REQUEST_REJECTED.getLog()); + throw new SkyflowException(e.getMessage()); + } finally { + executor.shutdown(); + } + TokenizeResponse response = new TokenizeResponse(successRecords, errorRecords, originalData); + LogUtil.printInfoLog(InfoLogs.TOKENIZE_REQUEST_RESOLVED.getLog()); + return response; + } + + private List> tokenizeBatchFutures( + ExecutorService executor, + List batches) { + List> futures = new ArrayList<>(); + if (batches == null) return futures; + for (int batchIndex = 0; batchIndex < batches.size(); batchIndex++) { + final int index = batchIndex; + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowTokenizeRequest batch = batches.get(index); + CompletableFuture future = CompletableFuture + .supplyAsync(() -> processTokenizeBatch(batch), executor) + .handle((result, ex) -> { + if (ex != null) { + List batchErrors = + Utils.handleTokenizeBatchException(ex, batch, index, tokenizeBatchSize); + return new TokenizeResponse(new ArrayList<>(), batchErrors); + } + return Utils.formatTokenizeResponse(result, batch, index, tokenizeBatchSize); + }); + futures.add(future); + } + return futures; + } + + private com.skyflow.generated.rest.types.V1FlowTokenizeResponse processTokenizeBatch( + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowTokenizeRequest batch) { + RequestOptions requestOptions = RequestOptions.builder() + .addHeader(Constants.SDK_METRICS_HEADER_KEY, metrics.toString()) + .build(); + return this.getRecordsApi().tokenize(batch, requestOptions); + } + + private void configureTokenizeConcurrencyAndBatchSize(int totalRequests) { + try { + String userProvidedBatchSize = System.getenv("TOKENIZE_BATCH_SIZE"); + String userProvidedConcurrencyLimit = System.getenv("TOKENIZE_CONCURRENCY_LIMIT"); + + Dotenv dotenv = null; + try { + dotenv = Dotenv.load(); + } catch (DotenvException ignored) {} + + if (userProvidedBatchSize == null && dotenv != null) { + userProvidedBatchSize = dotenv.get("TOKENIZE_BATCH_SIZE"); + } + if (userProvidedConcurrencyLimit == null && dotenv != null) { + userProvidedConcurrencyLimit = dotenv.get("TOKENIZE_CONCURRENCY_LIMIT"); + } + + if (userProvidedBatchSize != null) { + try { + int batchSize = Integer.parseInt(userProvidedBatchSize); + if (batchSize > Constants.MAX_TOKENIZE_BATCH_SIZE) { + LogUtil.printWarningLog(WarningLogs.BATCH_SIZE_EXCEEDS_MAX_LIMIT.getLog()); + } + int maxBatchSize = Math.min(batchSize, Constants.MAX_TOKENIZE_BATCH_SIZE); + if (maxBatchSize > 0) { + this.tokenizeBatchSize = maxBatchSize; + } else { + LogUtil.printWarningLog(WarningLogs.INVALID_BATCH_SIZE_PROVIDED.getLog()); + this.tokenizeBatchSize = Constants.TOKENIZE_BATCH_SIZE; + } + } catch (NumberFormatException e) { + LogUtil.printWarningLog(WarningLogs.INVALID_BATCH_SIZE_PROVIDED.getLog()); + this.tokenizeBatchSize = Constants.TOKENIZE_BATCH_SIZE; + } + } + + int maxConcurrencyNeeded = (totalRequests + this.tokenizeBatchSize - 1) / this.tokenizeBatchSize; + + if (userProvidedConcurrencyLimit != null) { + try { + int concurrencyLimit = Integer.parseInt(userProvidedConcurrencyLimit); + if (concurrencyLimit > Constants.MAX_TOKENIZE_CONCURRENCY_LIMIT) { + LogUtil.printWarningLog(WarningLogs.CONCURRENCY_EXCEEDS_MAX_LIMIT.getLog()); + } + int maxConcurrencyLimit = Math.min(concurrencyLimit, Constants.MAX_TOKENIZE_CONCURRENCY_LIMIT); + if (maxConcurrencyLimit > 0) { + this.tokenizeConcurrencyLimit = Math.min(maxConcurrencyLimit, maxConcurrencyNeeded); + } else { + LogUtil.printWarningLog(WarningLogs.INVALID_CONCURRENCY_LIMIT_PROVIDED.getLog()); + this.tokenizeConcurrencyLimit = Math.min(Constants.TOKENIZE_CONCURRENCY_LIMIT, maxConcurrencyNeeded); + } + } catch (NumberFormatException e) { + LogUtil.printWarningLog(WarningLogs.INVALID_CONCURRENCY_LIMIT_PROVIDED.getLog()); + this.tokenizeConcurrencyLimit = Math.min(Constants.TOKENIZE_CONCURRENCY_LIMIT, maxConcurrencyNeeded); + } + } else { + this.tokenizeConcurrencyLimit = Math.min(Constants.TOKENIZE_CONCURRENCY_LIMIT, maxConcurrencyNeeded); + } + } catch (Exception e) { + this.tokenizeBatchSize = Constants.TOKENIZE_BATCH_SIZE; + int maxConcurrencyNeeded = (totalRequests + this.tokenizeBatchSize - 1) / this.tokenizeBatchSize; + this.tokenizeConcurrencyLimit = Math.min(Constants.TOKENIZE_CONCURRENCY_LIMIT, maxConcurrencyNeeded); + } + } + private com.skyflow.vault.data.InsertResponse processSync( - com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest insertRequest, + com.skyflow.generated.rest.resources.flowservice.requests.V1InsertRequest insertRequest, ArrayList originalPayload ) throws ExecutionException, InterruptedException { LogUtil.printInfoLog(InfoLogs.PROCESSING_BATCHES.getLog()); @@ -203,14 +635,14 @@ private com.skyflow.vault.data.InsertResponse processSync( } private DetokenizeResponse processDetokenizeSync( - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest detokenizeRequest, + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest detokenizeRequest, List originalTokens ) throws ExecutionException, InterruptedException, SkyflowException { LogUtil.printInfoLog(InfoLogs.PROCESSING_BATCHES.getLog()); List errorTokens = Collections.synchronizedList(new ArrayList<>()); List successTokens = new ArrayList<>(); ExecutorService executor = Executors.newFixedThreadPool(detokenizeConcurrencyLimit); - List batches = Utils.createDetokenizeBatches(detokenizeRequest, detokenizeBatchSize); + List batches = Utils.createDetokenizeBatches(detokenizeRequest, detokenizeBatchSize); try { List> futures = this.detokenizeBatchFutures(executor, batches, errorTokens); try { @@ -241,12 +673,12 @@ private DetokenizeResponse processDetokenizeSync( return response; } - private List> detokenizeBatchFutures(ExecutorService executor, List batches, List errorTokens) { + private List> detokenizeBatchFutures(ExecutorService executor, List batches, List errorTokens) { List> futures = new ArrayList<>(); try { for (int batchIndex = 0; batchIndex < batches.size(); batchIndex++) { - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest batch = batches.get(batchIndex); + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest batch = batches.get(batchIndex); int batchNumber = batchIndex; CompletableFuture future = CompletableFuture .supplyAsync(() -> processDetokenizeBatch(batch), executor) @@ -264,7 +696,7 @@ private List> detokenizeBatchFutures(Execu return futures; } - private com.skyflow.generated.rest.types.DetokenizeResponse processDetokenizeBatch(com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest batch) { + private com.skyflow.generated.rest.types.V1FlowDetokenizeResponse processDetokenizeBatch(com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest batch) { RequestOptions requestOptions = RequestOptions.builder() .addHeader(Constants.SDK_METRICS_HEADER_KEY, metrics.toString()) .build(); @@ -273,18 +705,18 @@ private com.skyflow.generated.rest.types.DetokenizeResponse processDetokenizeBat private List> insertBatchFutures( - com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest insertRequest, + com.skyflow.generated.rest.resources.flowservice.requests.V1InsertRequest insertRequest, List errorRecords) { - List records = insertRequest.getRecords().get(); + List records = insertRequest.getRecords().get(); ExecutorService executor = Executors.newFixedThreadPool(insertConcurrencyLimit); - List> batches = Utils.createBatches(records, insertBatchSize); + List> batches = Utils.createBatches(records, insertBatchSize); List> futures = new ArrayList<>(); - Upsert upsert = insertRequest.getUpsert().isPresent() ? insertRequest.getUpsert().get() : null; + V1Upsert upsert = insertRequest.getUpsert().isPresent() ? insertRequest.getUpsert().get() : null; try { for (int batchIndex = 0; batchIndex < batches.size(); batchIndex++) { - List batch = batches.get(batchIndex); + List batch = batches.get(batchIndex); int batchNumber = batchIndex; CompletableFuture future = CompletableFuture .supplyAsync(() -> insertBatch(batch, insertRequest.getTableName().isPresent() ? insertRequest.getTableName().get() : null, upsert), executor) @@ -301,8 +733,8 @@ private com.skyflow.generated.rest.types.DetokenizeResponse processDetokenizeBat return futures; } - private InsertResponse insertBatch(List batch, String tableName, Upsert upsert) { - com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest.Builder req = com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest.builder() + private V1InsertResponse insertBatch(List batch, String tableName, V1Upsert upsert) { + com.skyflow.generated.rest.resources.flowservice.requests.V1InsertRequest.Builder req = com.skyflow.generated.rest.resources.flowservice.requests.V1InsertRequest.builder() .vaultId(this.getVaultConfig().getVaultId()) .records(batch) .upsert(upsert); @@ -310,7 +742,7 @@ private InsertResponse insertBatch(List batch, String tableNam if (tableName != null && !tableName.isEmpty()) { req.tableName(tableName); } - com.skyflow.generated.rest.resources.recordservice.requests.InsertRequest request = req.build(); + com.skyflow.generated.rest.resources.flowservice.requests.V1InsertRequest request = req.build(); RequestOptions requestOptions = RequestOptions.builder() .addHeader(Constants.SDK_METRICS_HEADER_KEY, metrics.toString()) .build(); diff --git a/v3/src/main/java/com/skyflow/vault/data/DeleteTokensRequest.java b/v3/src/main/java/com/skyflow/vault/data/DeleteTokensRequest.java new file mode 100644 index 00000000..ea8e9a7a --- /dev/null +++ b/v3/src/main/java/com/skyflow/vault/data/DeleteTokensRequest.java @@ -0,0 +1,34 @@ +package com.skyflow.vault.data; + +import java.util.List; + +public class DeleteTokensRequest { + private final DeleteTokensRequestBuilder builder; + + private DeleteTokensRequest(DeleteTokensRequestBuilder builder) { + this.builder = builder; + } + + public static DeleteTokensRequestBuilder builder() { + return new DeleteTokensRequestBuilder(); + } + + public List getTokens() { + return this.builder.tokens; + } + + public static final class DeleteTokensRequestBuilder { + private List tokens; + + private DeleteTokensRequestBuilder() {} + + public DeleteTokensRequestBuilder tokens(List tokens) { + this.tokens = tokens; + return this; + } + + public DeleteTokensRequest build() { + return new DeleteTokensRequest(this); + } + } +} diff --git a/v3/src/main/java/com/skyflow/vault/data/DeleteTokensResponse.java b/v3/src/main/java/com/skyflow/vault/data/DeleteTokensResponse.java new file mode 100644 index 00000000..30e84463 --- /dev/null +++ b/v3/src/main/java/com/skyflow/vault/data/DeleteTokensResponse.java @@ -0,0 +1,50 @@ +package com.skyflow.vault.data; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.annotations.Expose; + +import java.util.List; + +public class DeleteTokensResponse { + @Expose(serialize = true) + private DeleteTokensSummary summary; + + @Expose(serialize = true) + private List success; + + @Expose(serialize = true) + private List errors; + + private List originalPayload; + + public DeleteTokensResponse(List success, List errors) { + this.success = success; + this.errors = errors; + } + + public DeleteTokensResponse(List success, List errors, List originalPayload) { + this.success = success; + this.errors = errors; + this.originalPayload = originalPayload; + this.summary = new DeleteTokensSummary(this.originalPayload.size(), this.success.size(), this.errors.size()); + } + + public DeleteTokensSummary getSummary() { + return summary; + } + + public List getSuccess() { + return success; + } + + public List getErrors() { + return errors; + } + + @Override + public String toString() { + Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); + return gson.toJson(this); + } +} diff --git a/v3/src/main/java/com/skyflow/vault/data/DeleteTokensSuccess.java b/v3/src/main/java/com/skyflow/vault/data/DeleteTokensSuccess.java new file mode 100644 index 00000000..15da5a46 --- /dev/null +++ b/v3/src/main/java/com/skyflow/vault/data/DeleteTokensSuccess.java @@ -0,0 +1,31 @@ +package com.skyflow.vault.data; + +import com.google.gson.Gson; +import com.google.gson.annotations.Expose; + +public class DeleteTokensSuccess { + @Expose(serialize = true) + private int index; + + @Expose(serialize = true) + private String token; + + public DeleteTokensSuccess(int index, String token) { + this.index = index; + this.token = token; + } + + public int getIndex() { + return index; + } + + public String getToken() { + return token; + } + + @Override + public String toString() { + Gson gson = new Gson(); + return gson.toJson(this); + } +} diff --git a/v3/src/main/java/com/skyflow/vault/data/DeleteTokensSummary.java b/v3/src/main/java/com/skyflow/vault/data/DeleteTokensSummary.java new file mode 100644 index 00000000..92770caf --- /dev/null +++ b/v3/src/main/java/com/skyflow/vault/data/DeleteTokensSummary.java @@ -0,0 +1,41 @@ +package com.skyflow.vault.data; + +import com.google.gson.Gson; +import com.google.gson.annotations.Expose; + +public class DeleteTokensSummary { + @Expose(serialize = true) + private int totalTokens; + + @Expose(serialize = true) + private int totalDeleted; + + @Expose(serialize = true) + private int totalFailed; + + public DeleteTokensSummary() {} + + public DeleteTokensSummary(int totalTokens, int totalDeleted, int totalFailed) { + this.totalTokens = totalTokens; + this.totalDeleted = totalDeleted; + this.totalFailed = totalFailed; + } + + public int getTotalTokens() { + return totalTokens; + } + + public int getTotalDeleted() { + return totalDeleted; + } + + public int getTotalFailed() { + return totalFailed; + } + + @Override + public String toString() { + Gson gson = new Gson(); + return gson.toJson(this); + } +} diff --git a/v3/src/main/java/com/skyflow/vault/data/TokenizeRecord.java b/v3/src/main/java/com/skyflow/vault/data/TokenizeRecord.java new file mode 100644 index 00000000..faa676df --- /dev/null +++ b/v3/src/main/java/com/skyflow/vault/data/TokenizeRecord.java @@ -0,0 +1,44 @@ +package com.skyflow.vault.data; + +import java.util.List; + +public class TokenizeRecord { + private final TokenizeRecordBuilder builder; + + private TokenizeRecord(TokenizeRecordBuilder builder) { + this.builder = builder; + } + + public static TokenizeRecordBuilder builder() { + return new TokenizeRecordBuilder(); + } + + public Object getValue() { + return this.builder.value; + } + + public List getTokenGroupNames() { + return this.builder.tokenGroupNames; + } + + public static final class TokenizeRecordBuilder { + private Object value; + private List tokenGroupNames; + + private TokenizeRecordBuilder() {} + + public TokenizeRecordBuilder value(Object value) { + this.value = value; + return this; + } + + public TokenizeRecordBuilder tokenGroupNames(List tokenGroupNames) { + this.tokenGroupNames = tokenGroupNames; + return this; + } + + public TokenizeRecord build() { + return new TokenizeRecord(this); + } + } +} diff --git a/v3/src/main/java/com/skyflow/vault/data/TokenizeRequest.java b/v3/src/main/java/com/skyflow/vault/data/TokenizeRequest.java new file mode 100644 index 00000000..a6ef8072 --- /dev/null +++ b/v3/src/main/java/com/skyflow/vault/data/TokenizeRequest.java @@ -0,0 +1,34 @@ +package com.skyflow.vault.data; + +import java.util.ArrayList; + +public class TokenizeRequest { + private final TokenizeRequestBuilder builder; + + private TokenizeRequest(TokenizeRequestBuilder builder) { + this.builder = builder; + } + + public static TokenizeRequestBuilder builder() { + return new TokenizeRequestBuilder(); + } + + public ArrayList getData() { + return this.builder.data; + } + + public static final class TokenizeRequestBuilder { + private ArrayList data; + + private TokenizeRequestBuilder() {} + + public TokenizeRequestBuilder data(ArrayList data) { + this.data = data; + return this; + } + + public TokenizeRequest build() { + return new TokenizeRequest(this); + } + } +} diff --git a/v3/src/main/java/com/skyflow/vault/data/TokenizeResponse.java b/v3/src/main/java/com/skyflow/vault/data/TokenizeResponse.java new file mode 100644 index 00000000..ea0bff47 --- /dev/null +++ b/v3/src/main/java/com/skyflow/vault/data/TokenizeResponse.java @@ -0,0 +1,80 @@ +package com.skyflow.vault.data; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.annotations.Expose; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class TokenizeResponse { + @Expose(serialize = true) + private TokenizeSummary summary; + + @Expose(serialize = true) + private List success; + + @Expose(serialize = true) + private List errors; + + private List originalPayload; + + public TokenizeResponse(List success, List errors) { + this.success = success; + this.errors = errors; + } + + public TokenizeResponse(List success, List errors, List originalPayload) { + this.success = success; + this.errors = errors; + this.originalPayload = originalPayload; + + int totalTokens = originalPayload.size(); + + // Collect indices that appear in success and in errors + Set successIndices = new HashSet<>(); + for (TokenizeSuccess s : this.success) { + successIndices.add(s.getIndex()); + } + Set errorIndices = new HashSet<>(); + for (ErrorRecord e : this.errors) { + errorIndices.add(e.getIndex()); + } + + // totalTokenized = ALL token groups succeeded (in success, NOT in errors) + // totalPartial = SOME succeeded, SOME failed (in both success AND errors) + // totalFailed = ALL token groups failed (in errors, NOT in success) + int totalTokenized = 0; + int totalPartial = 0; + int totalFailed = 0; + for (int i = 0; i < totalTokens; i++) { + boolean hasSuccess = successIndices.contains(i); + boolean hasError = errorIndices.contains(i); + if (hasSuccess && !hasError) totalTokenized++; + else if (hasSuccess && hasError) totalPartial++; + else if (!hasSuccess && hasError) totalFailed++; + // else: index not present in either (shouldn't happen in practice) + } + + this.summary = new TokenizeSummary(totalTokens, totalTokenized, totalPartial, totalFailed); + } + + public TokenizeSummary getSummary() { + return summary; + } + + public List getSuccess() { + return success; + } + + public List getErrors() { + return errors; + } + + @Override + public String toString() { + Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); + return gson.toJson(this); + } +} diff --git a/v3/src/main/java/com/skyflow/vault/data/TokenizeSuccess.java b/v3/src/main/java/com/skyflow/vault/data/TokenizeSuccess.java new file mode 100644 index 00000000..59ee4b65 --- /dev/null +++ b/v3/src/main/java/com/skyflow/vault/data/TokenizeSuccess.java @@ -0,0 +1,53 @@ +package com.skyflow.vault.data; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.annotations.Expose; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * Represents one successfully tokenized input record. + * All tokens generated for this record (one per tokenGroupName) are grouped + * under the {@code tokens} map: tokenGroupName → token value. + */ +public class TokenizeSuccess { + @Expose(serialize = true) + private int index; + + @Expose(serialize = true) + private Object value; + + @Expose(serialize = true) + private Map tokens; + + public TokenizeSuccess(int index, Object value) { + this.index = index; + this.value = value; + this.tokens = new LinkedHashMap<>(); + } + + /** Adds a token for a specific token group name. */ + public void addToken(String tokenGroupName, String token) { + this.tokens.put(tokenGroupName, token); + } + + public int getIndex() { + return index; + } + + public Object getValue() { + return value; + } + + public Map getTokens() { + return tokens; + } + + @Override + public String toString() { + Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); + return gson.toJson(this); + } +} diff --git a/v3/src/main/java/com/skyflow/vault/data/TokenizeSummary.java b/v3/src/main/java/com/skyflow/vault/data/TokenizeSummary.java new file mode 100644 index 00000000..b9a692c0 --- /dev/null +++ b/v3/src/main/java/com/skyflow/vault/data/TokenizeSummary.java @@ -0,0 +1,39 @@ +package com.skyflow.vault.data; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.annotations.Expose; + +public class TokenizeSummary { + @Expose(serialize = true) + private int totalTokens; + + @Expose(serialize = true) + private int totalTokenized; + + @Expose(serialize = true) + private int totalPartial; + + @Expose(serialize = true) + private int totalFailed; + + public TokenizeSummary() {} + + public TokenizeSummary(int totalTokens, int totalTokenized, int totalPartial, int totalFailed) { + this.totalTokens = totalTokens; + this.totalTokenized = totalTokenized; + this.totalPartial = totalPartial; + this.totalFailed = totalFailed; + } + + public int getTotalTokens() { return totalTokens; } + public int getTotalTokenized() { return totalTokenized; } + public int getTotalPartial() { return totalPartial; } + public int getTotalFailed() { return totalFailed; } + + @Override + public String toString() { + Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); + return gson.toJson(this); + } +} diff --git a/v3/src/test/java/com/skyflow/VaultClientTests.java b/v3/src/test/java/com/skyflow/VaultClientTests.java index 55c5a4cf..a782252d 100644 --- a/v3/src/test/java/com/skyflow/VaultClientTests.java +++ b/v3/src/test/java/com/skyflow/VaultClientTests.java @@ -7,9 +7,9 @@ import com.skyflow.enums.UpsertType; 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.generated.rest.resources.flowservice.FlowserviceClient; +import com.skyflow.generated.rest.resources.flowservice.requests.V1InsertRequest; +import com.skyflow.generated.rest.types.V1InsertRecordData; import com.skyflow.utils.Constants; import com.skyflow.utils.SdkVersion; import com.skyflow.vault.data.DetokenizeRequest; @@ -49,7 +49,7 @@ public static void setup() throws SkyflowException { @Test public void testVaultClientGetRecordsAPI() { try { - RecordserviceClient recordsClient = vaultClient.getRecordsApi(); + FlowserviceClient recordsClient = vaultClient.getRecordsApi(); Assert.assertNotNull(recordsClient); } catch (Exception e) { e.printStackTrace(); @@ -167,7 +167,7 @@ public void testPrioritiseCredentialsWithCommonCredentials() throws Exception { 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); + V1InsertRequest result = vaultClient.getBulkInsertRequestBody(request, vaultConfig); Assert.assertTrue(result.getRecords().get().isEmpty()); } @@ -185,9 +185,9 @@ public void testTableAtRequestLevel() { .records(records) .build(); - InsertRequest result = vaultClient.getBulkInsertRequestBody(request, vaultConfig); + V1InsertRequest result = vaultClient.getBulkInsertRequestBody(request, vaultConfig); Assert.assertEquals("table1", result.getTableName().get()); - List recordData = result.getRecords().get(); + List recordData = result.getRecords().get(); Assert.assertEquals("value", recordData.get(0).getData().get().get("key")); } @@ -205,7 +205,7 @@ public void testTableAtRecordLevel() { .records(records) .build(); - InsertRequest result = vaultClient.getBulkInsertRequestBody(request, vaultConfig); + V1InsertRequest result = vaultClient.getBulkInsertRequestBody(request, vaultConfig); Assert.assertEquals("table2", result.getRecords().get().get(0).getTableName().get()); } @@ -226,7 +226,7 @@ public void testUpsertAtRequestLevel() { .upsertType(UpsertType.REPLACE) .build(); - InsertRequest result = vaultClient.getBulkInsertRequestBody(request, vaultConfig); + V1InsertRequest 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()); @@ -246,7 +246,7 @@ public void testUpsertAtRecordLevel() { .records(records) .build(); - InsertRequest result = vaultClient.getBulkInsertRequestBody(request, vaultConfig); + V1InsertRequest result = vaultClient.getBulkInsertRequestBody(request, vaultConfig); Assert.assertNotNull(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()); @@ -269,7 +269,7 @@ public void testMixedTableAndUpsertLevels() { .records(records) .build(); - InsertRequest result = vaultClient.getBulkInsertRequestBody(request, vaultConfig); + V1InsertRequest 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)); @@ -407,7 +407,7 @@ public void testGetDetokenizeRequestBodyWithoutTokenGroupRedactions() { .tokens(tokens) .build(); - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest result = + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest result = vaultClient.getDetokenizeRequestBody(request); Assert.assertNotNull(result); @@ -442,7 +442,7 @@ public void testGetDetokenizeRequestBodyWithTokenGroupRedactions() throws Except .tokens(tokens) .tokenGroupRedactions(redactions) .build(); - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest result = + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest result = vaultClient.getDetokenizeRequestBody(request); Assert.assertNotNull(result); Assert.assertNotNull(result.getVaultId()); @@ -451,7 +451,7 @@ public void testGetDetokenizeRequestBodyWithTokenGroupRedactions() throws Except Assert.assertTrue(result.getTokens().isPresent()); Assert.assertEquals(2, result.getTokens().get().size()); Assert.assertTrue(result.getTokenGroupRedactions().isPresent()); - List resultRedactions = + List resultRedactions = result.getTokenGroupRedactions().get(); Assert.assertEquals(2, resultRedactions.size()); Assert.assertEquals("group1", resultRedactions.get(0).getTokenGroupName().get()); @@ -473,7 +473,7 @@ public void testUpdateExecutorInHTTP() throws Exception { VaultClient client = new VaultClient(config, credentials); client.setBearerToken(); - RecordserviceClient recordsApi = client.getRecordsApi(); + FlowserviceClient recordsApi = client.getRecordsApi(); Assert.assertNotNull(recordsApi); } diff --git a/v3/src/test/java/com/skyflow/utils/UtilsTests.java b/v3/src/test/java/com/skyflow/utils/UtilsTests.java index a2251ce3..46d28164 100644 --- a/v3/src/test/java/com/skyflow/utils/UtilsTests.java +++ b/v3/src/test/java/com/skyflow/utils/UtilsTests.java @@ -7,9 +7,9 @@ import com.skyflow.errors.ErrorMessage; import com.skyflow.errors.SkyflowException; import com.skyflow.generated.auth.rest.core.ApiClientApiException; -import com.skyflow.generated.rest.types.InsertRecordData; -import com.skyflow.generated.rest.types.InsertResponse; -import com.skyflow.generated.rest.types.RecordResponseObject; +import com.skyflow.generated.rest.types.V1InsertRecordData; +import com.skyflow.generated.rest.types.V1InsertResponse; +import com.skyflow.generated.rest.types.V1RecordResponseObject; import com.skyflow.utils.validations.Validations; import com.skyflow.vault.data.*; import org.junit.After; @@ -52,19 +52,19 @@ 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<>(); + public static List createDetokenizeBatches(com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest 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; + 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() + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest batchRequest = com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest.builder() .vaultId(request.getVaultId()) .tokens(new ArrayList<>(batchTokens)) .tokenGroupRedactions(tokenGroupRedactions) @@ -187,11 +187,11 @@ public void testGetMetricsWithException() { @Test public void testCreateBatchesMultipleBatches() { - List records = new ArrayList<>(); + List records = new ArrayList<>(); for (int i = 0; i < 125; i++) { - records.add(InsertRecordData.builder().build()); + records.add(V1InsertRecordData.builder().build()); } - List> batches = Utils.createBatches(records, 50); + List> batches = Utils.createBatches(records, 50); Assert.assertEquals(3, batches.size()); Assert.assertEquals(50, batches.get(0).size()); @@ -201,18 +201,18 @@ public void testCreateBatchesMultipleBatches() { @Test public void testCreateBatchesWithEmptyList() { - List records = new ArrayList<>(); - List> batches = Utils.createBatches(records, 50); + List records = new ArrayList<>(); + List> batches = Utils.createBatches(records, 50); Assert.assertTrue("Batches should be empty for empty input", batches.isEmpty()); } @Test public void testCreateBatchesWithSmallerSizeThanBatch() { - List records = new ArrayList<>(); + List records = new ArrayList<>(); for (int i = 0; i < 25; i++) { - records.add(InsertRecordData.builder().build()); + records.add(V1InsertRecordData.builder().build()); } - List> batches = Utils.createBatches(records, 50); + List> batches = Utils.createBatches(records, 50); Assert.assertEquals("Should create single batch", 1, batches.size()); Assert.assertEquals("Batch should contain all records", 25, batches.get(0).size()); @@ -220,11 +220,11 @@ public void testCreateBatchesWithSmallerSizeThanBatch() { @Test public void testCreateBatchesWithExactBatchSize() { - List records = new ArrayList<>(); + List records = new ArrayList<>(); for (int i = 0; i < 50; i++) { - records.add(InsertRecordData.builder().build()); + records.add(V1InsertRecordData.builder().build()); } - List> batches = Utils.createBatches(records, 50); + List> batches = Utils.createBatches(records, 50); Assert.assertEquals("Should create single batch", 1, batches.size()); Assert.assertEquals("Batch should have exact size", 50, batches.get(0).size()); @@ -232,15 +232,15 @@ public void testCreateBatchesWithExactBatchSize() { @Test public void testCreateBatchesPreservesOrder() { - List records = new ArrayList<>(); + List records = new ArrayList<>(); for (int i = 0; i < 75; i++) { - InsertRecordData record = InsertRecordData.builder() + V1InsertRecordData record = V1InsertRecordData.builder() .data(Optional.of(Collections.singletonMap("id", String.valueOf(i)))) .build(); records.add(record); } - List> batches = Utils.createBatches(records, 50); + List> batches = Utils.createBatches(records, 50); Assert.assertEquals("Should create two batches", 2, batches.size()); Assert.assertEquals("First record in first batch should be 0", @@ -270,8 +270,8 @@ public void testCreateErrorRecord() { @Test public void testHandleBatchExceptionApiClientExceptionWithSingleError() { - List batch = Arrays.asList(InsertRecordData.builder().build(), InsertRecordData.builder().build()); - List> batches = Collections.singletonList(batch); + List batch = Arrays.asList(V1InsertRecordData.builder().build(), V1InsertRecordData.builder().build()); + List> batches = Collections.singletonList(batch); Map errorMap = new HashMap<>(); errorMap.put("error", "Common error"); @@ -294,8 +294,8 @@ public void testHandleBatchExceptionApiClientExceptionWithSingleError() { @Test public void testHandleBatchExceptionWithNonApiClientException() { - List batch = Arrays.asList(InsertRecordData.builder().build(), InsertRecordData.builder().build()); - List> batches = Collections.singletonList(batch); + List batch = Arrays.asList(V1InsertRecordData.builder().build(), V1InsertRecordData.builder().build()); + List> batches = Collections.singletonList(batch); RuntimeException exception = new RuntimeException("Unexpected error"); @@ -310,8 +310,8 @@ public void testHandleBatchExceptionWithNonApiClientException() { @Test public void testHandleBatchExceptionWithNonZeroBatchNumber() { - List batch = Arrays.asList(InsertRecordData.builder().build(), InsertRecordData.builder().build()); - List> batches = Arrays.asList(new ArrayList<>(), batch); + List batch = Arrays.asList(V1InsertRecordData.builder().build(), V1InsertRecordData.builder().build()); + List> batches = Arrays.asList(new ArrayList<>(), batch); RuntimeException exception = new RuntimeException("Batch error"); @@ -323,8 +323,8 @@ public void testHandleBatchExceptionWithNonZeroBatchNumber() { @Test public void testHandleBatchExceptionWithNullResponseBody1() { - List batch = Arrays.asList(InsertRecordData.builder().build(), InsertRecordData.builder().build()); - List> batches = Collections.singletonList(batch); + List batch = Arrays.asList(V1InsertRecordData.builder().build(), V1InsertRecordData.builder().build()); + List> batches = Collections.singletonList(batch); ApiClientApiException apiException = new ApiClientApiException("Bad Request", 400, null); Exception exception = new Exception("Test exception", apiException); @@ -335,16 +335,16 @@ public void testHandleBatchExceptionWithNullResponseBody1() { @Test public void testFormatResponseWithSuccessAndErrorRecords() { - RecordResponseObject successRecord = RecordResponseObject.builder() + V1RecordResponseObject successRecord = V1RecordResponseObject.builder() .skyflowId(Optional.of("testId1")) .error(Optional.empty()) .build(); - RecordResponseObject errorRecord = RecordResponseObject.builder() + V1RecordResponseObject errorRecord = V1RecordResponseObject.builder() .error(Optional.of("Test error")) .httpCode(Optional.of(400)) .build(); - InsertResponse response = InsertResponse.builder() + V1InsertResponse response = V1InsertResponse.builder() .records(Optional.of(Arrays.asList(successRecord, errorRecord))) .build(); @@ -368,16 +368,16 @@ public void testFormatResponseWithNullResponse() { @Test public void testFormatResponseWithSuccessRecordsOnly() { - RecordResponseObject successRecord1 = RecordResponseObject.builder() + V1RecordResponseObject successRecord1 = V1RecordResponseObject.builder() .skyflowId(Optional.of("id1")) .error(Optional.empty()) .build(); - RecordResponseObject successRecord2 = RecordResponseObject.builder() + V1RecordResponseObject successRecord2 = V1RecordResponseObject.builder() .skyflowId(Optional.of("id2")) .error(Optional.empty()) .build(); - InsertResponse response = InsertResponse.builder() + V1InsertResponse response = V1InsertResponse.builder() .records(Optional.of(Arrays.asList(successRecord1, successRecord2))) .build(); @@ -392,16 +392,16 @@ public void testFormatResponseWithSuccessRecordsOnly() { @Test public void testFormatResponseWithErrorRecordsOnly() { - RecordResponseObject errorRecord1 = RecordResponseObject.builder() + V1RecordResponseObject errorRecord1 = V1RecordResponseObject.builder() .error(Optional.of("Error 1")) .httpCode(Optional.of(400)) .build(); - RecordResponseObject errorRecord2 = RecordResponseObject.builder() + V1RecordResponseObject errorRecord2 = V1RecordResponseObject.builder() .error(Optional.of("Error 2")) .httpCode(Optional.of(500)) .build(); - InsertResponse response = InsertResponse.builder() + V1InsertResponse response = V1InsertResponse.builder() .records(Optional.of(Arrays.asList(errorRecord1, errorRecord2))) .build(); @@ -418,16 +418,16 @@ public void testFormatResponseWithErrorRecordsOnly() { @Test public void testFormatResponseWithBatchOffset() { - RecordResponseObject successRecord = RecordResponseObject.builder() + V1RecordResponseObject successRecord = V1RecordResponseObject.builder() .skyflowId(Optional.of("id1")) .error(Optional.empty()) .build(); - RecordResponseObject errorRecord = RecordResponseObject.builder() + V1RecordResponseObject errorRecord = V1RecordResponseObject.builder() .error(Optional.of("Error")) .httpCode(Optional.of(400)) .build(); - InsertResponse response = InsertResponse.builder() + V1InsertResponse response = V1InsertResponse.builder() .records(Optional.of(Arrays.asList(successRecord, errorRecord))) .build(); @@ -439,7 +439,7 @@ public void testFormatResponseWithBatchOffset() { @Test public void testFormatResponseWithEmptyRecords() { - InsertResponse response = InsertResponse.builder() + V1InsertResponse response = V1InsertResponse.builder() .records(Optional.of(new ArrayList<>())) .build(); @@ -456,13 +456,13 @@ public void testFormatResponseWithTokens() { tokens.put("field1", "token1"); tokens.put("field2", "token2"); - RecordResponseObject successRecord = RecordResponseObject.builder() + V1RecordResponseObject successRecord = V1RecordResponseObject.builder() .skyflowId(Optional.of("id1")) .tokens(Optional.of(tokens)) .error(Optional.empty()) .build(); - InsertResponse response = InsertResponse.builder() + V1InsertResponse response = V1InsertResponse.builder() .records(Optional.of(Collections.singletonList(successRecord))) .build(); @@ -485,14 +485,14 @@ public void testFormatResponseWithTokenListMapping() { tokenData.put("field1", tokenList); // Create success record with tokens - RecordResponseObject successRecord = RecordResponseObject.builder() + V1RecordResponseObject successRecord = V1RecordResponseObject.builder() .skyflowId(Optional.of("id1")) .tokens(Optional.of(tokenData)) .error(Optional.empty()) .build(); // Create response object - InsertResponse response = InsertResponse.builder() + V1InsertResponse response = V1InsertResponse.builder() .records(Optional.of(Collections.singletonList(successRecord))) .build(); @@ -519,11 +519,11 @@ public void testFormatResponseWithTokenListMapping() { @Test public void testHandleBatchExceptionWithRecordsInResponseBody() { // Prepare test data - List batch = Arrays.asList( - InsertRecordData.builder().build(), - InsertRecordData.builder().build() + List batch = Arrays.asList( + V1InsertRecordData.builder().build(), + V1InsertRecordData.builder().build() ); - List> batches = Collections.singletonList(batch); + List> batches = Collections.singletonList(batch); // Create nested records with errors List> recordsList = new ArrayList<>(); @@ -772,15 +772,15 @@ public void testValidateInsertRequestEmptyValues() { @Test public void testFormatDetokenizeResponseValidResponse() { // Arrange - List responseObjectsGen = new ArrayList<>(); + List responseObjectsGen = new ArrayList<>(); Map tokens = new HashMap<>(); tokens.put("token1", "value1"); tokens.put("token2", "value2"); - com.skyflow.generated.rest.types.DetokenizeResponseObject object = com.skyflow.generated.rest.types.DetokenizeResponseObject.builder().token("token1").value("value1").tokenGroupName("demo").build(); + com.skyflow.generated.rest.types.V1FlowDetokenizeResponseObject object = com.skyflow.generated.rest.types.V1FlowDetokenizeResponseObject.builder().token("token1").value("value1").tokenGroupName("demo").build(); responseObjectsGen.add(object); responseObjectsGen.add(object); - com.skyflow.generated.rest.types.DetokenizeResponse response = com.skyflow.generated.rest.types.DetokenizeResponse.builder().response(Optional.of(responseObjectsGen)).build(); + com.skyflow.generated.rest.types.V1FlowDetokenizeResponse response = com.skyflow.generated.rest.types.V1FlowDetokenizeResponse.builder().response(Optional.of(responseObjectsGen)).build(); int batch = 0; int batchSize = 2; @@ -798,14 +798,14 @@ public void testFormatDetokenizeResponseValidResponse() { public void testFormatDetokenizeResponseResponseWithErrors() { - List responseObjectsGen = new ArrayList<>(); - com.skyflow.generated.rest.types.DetokenizeResponseObject object = com.skyflow.generated.rest.types.DetokenizeResponseObject.builder().error("Error occurred").httpCode(400).build(); - com.skyflow.generated.rest.types.DetokenizeResponseObject object2 = com.skyflow.generated.rest.types.DetokenizeResponseObject.builder().token("token1").tokenGroupName("demo").value("hello").build(); + List responseObjectsGen = new ArrayList<>(); + com.skyflow.generated.rest.types.V1FlowDetokenizeResponseObject object = com.skyflow.generated.rest.types.V1FlowDetokenizeResponseObject.builder().error("Error occurred").httpCode(400).build(); + com.skyflow.generated.rest.types.V1FlowDetokenizeResponseObject object2 = com.skyflow.generated.rest.types.V1FlowDetokenizeResponseObject.builder().token("token1").tokenGroupName("demo").value("hello").build(); responseObjectsGen.add(object); responseObjectsGen.add(object2); - com.skyflow.generated.rest.types.DetokenizeResponse response = com.skyflow.generated.rest.types.DetokenizeResponse.builder().response(Optional.of(responseObjectsGen)).build(); + com.skyflow.generated.rest.types.V1FlowDetokenizeResponse response = com.skyflow.generated.rest.types.V1FlowDetokenizeResponse.builder().response(Optional.of(responseObjectsGen)).build(); int batch = 1; int batchSize = 2; @@ -831,19 +831,19 @@ public void testFormatDetokenizeResponse_NullResponse() { @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() + List groupRedactions = Arrays.asList( + com.skyflow.generated.rest.types.V1TokenGroupRedactions.builder().tokenGroupName("group1").redaction("MASK").build(), + com.skyflow.generated.rest.types.V1TokenGroupRedactions.builder().tokenGroupName("group2").redaction("PLAIN_TEXT").build(), + com.skyflow.generated.rest.types.V1TokenGroupRedactions.builder().tokenGroupName("group3").redaction("REDACTED").build() ); - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest request = com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest.builder() + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest request = com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest.builder() .vaultId("vaultId") .tokens(tokens) .tokenGroupRedactions(groupRedactions) .build(); - List batches = Utils.createDetokenizeBatches(request, 2); + List batches = Utils.createDetokenizeBatches(request, 2); Assert.assertEquals(2, batches.size()); Assert.assertEquals(Arrays.asList("token1", "token2"), batches.get(0).getTokens().get()); @@ -854,13 +854,13 @@ public void testCreateDetokenizeBatchesWithTokenGroupRedactions() { @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() + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest request = com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest.builder() .vaultId("vaultId") .tokens(tokens) .tokenGroupRedactions(new ArrayList<>()) .build(); - List batches = Utils.createDetokenizeBatches(request, 1); + List batches = Utils.createDetokenizeBatches(request, 1); Assert.assertEquals(2, batches.size()); // List redactions = batches.get(0).getTokenGroupRedactions().get(); @@ -870,14 +870,14 @@ public void testCreateDetokenizeBatchesWithEmptyTokenGroupRedactions() { @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() + List groupRedactions = new ArrayList<>(); + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest request = com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest.builder() .vaultId("vaultId") .tokens(tokens) .tokenGroupRedactions(groupRedactions) .build(); - List batches = Utils.createDetokenizeBatches(request, 1); + List batches = Utils.createDetokenizeBatches(request, 1); Assert.assertEquals(2, batches.size()); Assert.assertFalse(batches.get(0).getTokenGroupRedactions().isPresent()); @@ -886,12 +886,12 @@ public void testCreateDetokenizeBatchesWithNullTokenGroupRedactions() { @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() + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest request = com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest.builder() .vaultId("vaultId") .tokens(tokens) .build(); - List batches = Utils.createDetokenizeBatches(request, 5); + List batches = Utils.createDetokenizeBatches(request, 5); Assert.assertEquals(1, batches.size()); Assert.assertEquals(Arrays.asList("token1"), batches.get(0).getTokens().get()); @@ -948,7 +948,7 @@ public void testCreateErrorRecordWithUnknownErrorMessage() { @Test public void testHandleBatchExceptionWithNullResponseBody() { - List batch = Arrays.asList(InsertRecordData.builder().build()); + List batch = Arrays.asList(V1InsertRecordData.builder().build()); ApiClientApiException apiException = new ApiClientApiException("Error", 500, null); Exception exception = new Exception("Test", apiException); @@ -960,7 +960,7 @@ public void testHandleBatchExceptionWithNullResponseBody() { @Test public void testHandleBatchExceptionWithNonListRecords() { - List batch = Arrays.asList(InsertRecordData.builder().build()); + List batch = Arrays.asList(V1InsertRecordData.builder().build()); Map responseBody = new HashMap<>(); responseBody.put("records", "not_a_list"); ApiClientApiException apiException = new ApiClientApiException("Error", 500, responseBody); @@ -972,7 +972,7 @@ public void testHandleBatchExceptionWithNonListRecords() { @Test public void testHandleBatchExceptionWithErrorNotMap() { - List batch = Arrays.asList(InsertRecordData.builder().build()); + List batch = Arrays.asList(V1InsertRecordData.builder().build()); Map responseBody = new HashMap<>(); responseBody.put("error", "not_a_map"); ApiClientApiException apiException = new ApiClientApiException("Error", 500, responseBody); @@ -984,7 +984,7 @@ public void testHandleBatchExceptionWithErrorNotMap() { @Test public void testHandleBatchExceptionWithApiClientApiExceptionCause() { - List batch = Arrays.asList(InsertRecordData.builder().build()); + List batch = Arrays.asList(V1InsertRecordData.builder().build()); Map responseBody = new HashMap<>(); Map error = new HashMap<>(); error.put("message", "Test error"); @@ -1003,9 +1003,9 @@ public void testHandleBatchExceptionWithApiClientApiExceptionCause() { @Test public void testHandleBatchExceptionWithRecordsListUsesCreateErrorRecord() { - List batch = Arrays.asList( - InsertRecordData.builder().build(), - InsertRecordData.builder().build() + List batch = Arrays.asList( + V1InsertRecordData.builder().build(), + V1InsertRecordData.builder().build() ); Map record1 = new HashMap<>(); @@ -1034,8 +1034,8 @@ public void testHandleBatchExceptionWithRecordsListUsesCreateErrorRecord() { @Test public void testHandleDetokenizeBatchExceptionWithResponseList() { List tokens = Arrays.asList("t1", "t2"); - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest batch = - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest.builder() + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest batch = + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest.builder() .tokens(tokens) .vaultId("vault") .build(); @@ -1065,8 +1065,8 @@ public void testHandleDetokenizeBatchExceptionWithResponseList() { @Test public void testHandleDetokenizeBatchExceptionWithErrorField() { List tokens = Arrays.asList("t1", "t2"); - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest batch = - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest.builder() + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest batch = + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest.builder() .tokens(tokens) .vaultId("vault") .build(); @@ -1091,8 +1091,8 @@ public void testHandleDetokenizeBatchExceptionWithErrorField() { @Test public void testHandleDetokenizeBatchExceptionWithNonApiCause() { List tokens = Arrays.asList("t1", "t2"); - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest batch = - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest.builder() + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest batch = + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest.builder() .tokens(tokens) .vaultId("vault") .build(); diff --git a/v3/src/test/java/com/skyflow/vault/controller/VaultControllerDeleteTokensTests.java b/v3/src/test/java/com/skyflow/vault/controller/VaultControllerDeleteTokensTests.java new file mode 100644 index 00000000..63221a12 --- /dev/null +++ b/v3/src/test/java/com/skyflow/vault/controller/VaultControllerDeleteTokensTests.java @@ -0,0 +1,464 @@ +package com.skyflow.vault.controller; + +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.utils.Constants; +import com.skyflow.utils.validations.Validations; +import com.skyflow.vault.data.DeleteTokensRequest; +import com.skyflow.vault.data.DeleteTokensResponse; +import com.skyflow.vault.data.ErrorRecord; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.io.FileWriter; +import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import static org.junit.Assert.*; + +@RunWith(PowerMockRunner.class) +@PowerMockIgnore({ + "javax.management.*", + "java.nio.*", + "com.sun.net.httpserver.*", + "sun.net.httpserver.*", + "sun.nio.ch.*", + "jdk.internal.reflect.*", + "javax.crypto.*", + "javax.net.ssl.*" +}) +public class VaultControllerDeleteTokensTests { + + private static final String ENV_PATH = "./.env"; + + private VaultConfig vaultConfig; + private Credentials credentials; + + @Before + public void setUp() { + vaultConfig = new VaultConfig(); + vaultConfig.setVaultId("vault123"); + vaultConfig.setClusterId("cluster123"); + vaultConfig.setEnv(Env.DEV); + + credentials = new Credentials(); + credentials.setToken("valid-token"); + vaultConfig.setCredentials(credentials); + + writeEnv("DELETE_TOKENS_BATCH_SIZE=50\nDELETE_TOKENS_CONCURRENCY_LIMIT=1"); + } + + @After + public void tearDown() { + writeEnv(""); + } + + private void writeEnv(String content) { + java.io.File envFile = new java.io.File(ENV_PATH); + java.io.File parentDir = envFile.getParentFile(); + if (parentDir != null && !parentDir.exists()) { + parentDir.mkdirs(); + } + try (FileWriter writer = new FileWriter(envFile)) { + writer.write(content); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private VaultController createController() throws SkyflowException { + return new VaultController(vaultConfig, credentials); + } + + private void setPrivateField(Object obj, String field, Object value) throws Exception { + Field f = obj.getClass().getDeclaredField(field); + f.setAccessible(true); + f.set(obj, value); + } + + private int getPrivateInt(Object obj, String field) throws Exception { + Field f = obj.getClass().getDeclaredField(field); + f.setAccessible(true); + return f.getInt(obj); + } + + private List getTokens(int count) { + List tokens = new ArrayList<>(); + for (int i = 0; i < count; i++) { + tokens.add("token" + i); + } + return tokens; + } + + // ─── Validation tests via Validations directly ─────────────────────────── + + @Test + public void testValidation_nullRequest() { + try { + Validations.validateDeleteTokensRequest(null); + fail("Expected SkyflowException for null request"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.DeleteTokensRequestNull.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidation_nullTokensList() { + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(null).build(); + try { + Validations.validateDeleteTokensRequest(req); + fail("Expected SkyflowException for null tokens list"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.EmptyDeleteTokensData.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidation_emptyTokensList() { + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(new ArrayList<>()).build(); + try { + Validations.validateDeleteTokensRequest(req); + fail("Expected SkyflowException for empty tokens list"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.EmptyDeleteTokensData.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidation_nullTokenInList() { + List tokens = Arrays.asList("token1", null, "token3"); + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(tokens).build(); + try { + Validations.validateDeleteTokensRequest(req); + fail("Expected SkyflowException for null token in list"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.EmptyTokenInDeleteTokensData.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidation_emptyTokenInList() { + List tokens = Arrays.asList("token1", " ", "token3"); + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(tokens).build(); + try { + Validations.validateDeleteTokensRequest(req); + fail("Expected SkyflowException for empty token in list"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.EmptyTokenInDeleteTokensData.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidation_tokensSizeExceeds10000() { + List tokens = new ArrayList<>(); + for (int i = 0; i < 10001; i++) { + tokens.add("token" + i); + } + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(tokens).build(); + try { + Validations.validateDeleteTokensRequest(req); + fail("Expected SkyflowException for tokens size exceeding 10000"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.DeleteTokensSizeExceedError.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidation_validRequest() { + List tokens = Arrays.asList("token1", "token2", "token3"); + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(tokens).build(); + try { + Validations.validateDeleteTokensRequest(req); + } catch (SkyflowException e) { + fail("Should not throw exception for valid request: " + e.getMessage()); + } + } + + // ─── bulkDeleteTokens validation error propagation ──────────────────────── + + @Test + public void testBulkDeleteTokens_nullRequest() throws SkyflowException { + VaultController controller = createController(); + try { + controller.bulkDeleteTokens(null); + fail("Expected SkyflowException"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.DeleteTokensRequestNull.getMessage(), e.getMessage()); + } + } + + @Test + public void testBulkDeleteTokens_emptyTokens() throws SkyflowException { + VaultController controller = createController(); + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(new ArrayList<>()).build(); + try { + controller.bulkDeleteTokens(req); + fail("Expected SkyflowException for empty tokens"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.EmptyDeleteTokensData.getMessage(), e.getMessage()); + } + } + + @Test + public void testBulkDeleteTokensAsync_nullRequest() throws SkyflowException { + VaultController controller = createController(); + try { + controller.bulkDeleteTokensAsync(null); + fail("Expected SkyflowException"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.DeleteTokensRequestNull.getMessage(), e.getMessage()); + } + } + + @Test + public void testBulkDeleteTokensAsync_emptyTokens() throws SkyflowException { + VaultController controller = createController(); + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(new ArrayList<>()).build(); + try { + controller.bulkDeleteTokensAsync(req); + fail("Expected SkyflowException for empty tokens"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.EmptyDeleteTokensData.getMessage(), e.getMessage()); + } + } + + // ─── Batch / concurrency configuration tests ───────────────────────────── + + @Test + public void testDefaultDeleteTokensBatchConfig() throws Exception { + writeEnv(""); + VaultController controller = createController(); + assertEquals(Constants.DELETE_TOKENS_BATCH_SIZE.intValue(), getPrivateInt(controller, "deleteTokensBatchSize")); + assertEquals(Constants.DELETE_TOKENS_CONCURRENCY_LIMIT.intValue(), getPrivateInt(controller, "deleteTokensConcurrencyLimit")); + } + + @Test + public void testCustomValidBatchAndConcurrency() throws Exception { + writeEnv("DELETE_TOKENS_BATCH_SIZE=10\nDELETE_TOKENS_CONCURRENCY_LIMIT=3"); + VaultController controller = createController(); + List tokens = getTokens(30); + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(tokens).build(); + try { + controller.bulkDeleteTokens(req); + } catch (Exception ignored) {} + + assertEquals(10, getPrivateInt(controller, "deleteTokensBatchSize")); + assertEquals(3, getPrivateInt(controller, "deleteTokensConcurrencyLimit")); + } + + @Test + public void testBatchSizeExceedsMax() throws Exception { + writeEnv("DELETE_TOKENS_BATCH_SIZE=2000"); + VaultController controller = createController(); + List tokens = getTokens(50); + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(tokens).build(); + try { + controller.bulkDeleteTokens(req); + } catch (Exception ignored) {} + + // When batch size exceeds MAX, it should be clamped to MAX + assertEquals(Constants.MAX_DELETE_TOKENS_BATCH_SIZE.intValue(), getPrivateInt(controller, "deleteTokensBatchSize")); + } + + @Test + public void testConcurrencyExceedsMax() throws Exception { + writeEnv("DELETE_TOKENS_CONCURRENCY_LIMIT=200"); + VaultController controller = createController(); + List tokens = getTokens(50); + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(tokens).build(); + try { + controller.bulkDeleteTokens(req); + } catch (Exception ignored) {} + + assertEquals(1, getPrivateInt(controller, "deleteTokensConcurrencyLimit")); + } + + @Test + public void testBatchSizeZeroFallsBackToDefault() throws Exception { + writeEnv("DELETE_TOKENS_BATCH_SIZE=0"); + VaultController controller = createController(); + List tokens = getTokens(10); + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(tokens).build(); + try { + controller.bulkDeleteTokens(req); + } catch (Exception ignored) {} + + assertEquals(Constants.DELETE_TOKENS_BATCH_SIZE.intValue(), getPrivateInt(controller, "deleteTokensBatchSize")); + } + + @Test + public void testBatchSizeNegativeFallsBackToDefault() throws Exception { + writeEnv("DELETE_TOKENS_BATCH_SIZE=-5"); + VaultController controller = createController(); + List tokens = getTokens(10); + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(tokens).build(); + try { + controller.bulkDeleteTokens(req); + } catch (Exception ignored) {} + + assertEquals(Constants.DELETE_TOKENS_BATCH_SIZE.intValue(), getPrivateInt(controller, "deleteTokensBatchSize")); + } + + @Test + public void testConcurrencyZeroFallsBackToDefault() throws Exception { + writeEnv("DELETE_TOKENS_CONCURRENCY_LIMIT=0"); + VaultController controller = createController(); + List tokens = getTokens(10); + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(tokens).build(); + try { + controller.bulkDeleteTokens(req); + } catch (Exception ignored) {} + + int maxNeeded = (10 + Constants.DELETE_TOKENS_BATCH_SIZE - 1) / Constants.DELETE_TOKENS_BATCH_SIZE; + int expected = Math.min(Constants.DELETE_TOKENS_CONCURRENCY_LIMIT, maxNeeded); + assertEquals(expected, getPrivateInt(controller, "deleteTokensConcurrencyLimit")); + } + + @Test + public void testTotalRequestsLessThanBatchSize() throws Exception { + writeEnv("DELETE_TOKENS_BATCH_SIZE=100\nDELETE_TOKENS_CONCURRENCY_LIMIT=10"); + VaultController controller = createController(); + List tokens = getTokens(10); + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(tokens).build(); + try { + controller.bulkDeleteTokens(req); + } catch (Exception ignored) {} + + assertEquals(100, getPrivateInt(controller, "deleteTokensBatchSize")); + assertEquals(1, getPrivateInt(controller, "deleteTokensConcurrencyLimit")); + } + + @Test + public void testHighConcurrencyForLowTokens() throws Exception { + writeEnv("DELETE_TOKENS_BATCH_SIZE=1000\nDELETE_TOKENS_CONCURRENCY_LIMIT=100"); + VaultController controller = createController(); + List tokens = getTokens(10000); + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(tokens).build(); + try { + controller.bulkDeleteTokens(req); + } catch (Exception ignored) {} + + assertEquals(1000, getPrivateInt(controller, "deleteTokensBatchSize")); + assertEquals(Constants.MAX_DELETE_TOKENS_CONCURRENCY_LIMIT.intValue(), getPrivateInt(controller, "deleteTokensConcurrencyLimit")); + } + + @Test + public void testFractionalLastBatch() throws Exception { + writeEnv("DELETE_TOKENS_BATCH_SIZE=100"); + VaultController controller = createController(); + List tokens = getTokens(9050); + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(tokens).build(); + try { + controller.bulkDeleteTokens(req); + } catch (Exception ignored) {} + + assertEquals(100, getPrivateInt(controller, "deleteTokensBatchSize")); + assertEquals(Constants.DELETE_TOKENS_CONCURRENCY_LIMIT.intValue(), getPrivateInt(controller, "deleteTokensConcurrencyLimit")); + } + + @Test + public void testZeroTotalRequests() throws Exception { + VaultController controller = createController(); + List tokens = getTokens(0); + DeleteTokensRequest req = DeleteTokensRequest.builder().tokens(tokens).build(); + + boolean exceptionThrown = false; + try { + controller.bulkDeleteTokens(req); + } catch (Exception e) { + exceptionThrown = true; + } + assertTrue("Exception should be thrown for zero tokens", exceptionThrown); + } + + // ─── deleteTokensBatchFutures catch branch ──────────────────────────────── + + @Test + public void testDeleteTokensBatchFutures_catchBranchAddsErrorRecord() throws Exception { + VaultController controller = createController(); + setPrivateField(controller, "deleteTokensBatchSize", 2); + + List batches = null; + + Method method = VaultController.class.getDeclaredMethod( + "deleteTokensBatchFutures", ExecutorService.class, List.class); + method.setAccessible(true); + + ExecutorService executor = Executors.newFixedThreadPool(1); + @SuppressWarnings("unchecked") + List> futures = + (List>) method.invoke(controller, executor, batches); + + // errors are now returned via futures, not a shared list + Assert.assertNotNull(futures); + executor.shutdownNow(); + } + + // ─── processDeleteTokensSync via reflection ─────────────────────────────── + + @Test + public void testProcessDeleteTokensSyncNormalPath() throws Exception { + VaultConfig cfg = new VaultConfig(); + cfg.setVaultId("vault123"); + cfg.setClusterId("cluster123"); + cfg.setEnv(Env.DEV); + Credentials creds = new Credentials(); + creds.setApiKey("sky-ab123-abcd1234cdef1234abcd4321cdef4321"); + cfg.setCredentials(creds); + + VaultController controller = new VaultController(cfg, creds); + setPrivateField(controller, "deleteTokensConcurrencyLimit", 1); + setPrivateField(controller, "deleteTokensBatchSize", 1); + + List tokens = Collections.singletonList("token0"); + DeleteTokensRequest request = DeleteTokensRequest.builder().tokens(tokens).build(); + + Method getRequestBody = VaultController.class.getSuperclass() + .getDeclaredMethod("getDeleteTokensRequestBody", DeleteTokensRequest.class); + getRequestBody.setAccessible(true); + Object requestObj = getRequestBody.invoke(controller, request); + + Method processSync = VaultController.class.getDeclaredMethod( + "processDeleteTokensSync", + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDeleteTokenRequest.class, + List.class + ); + processSync.setAccessible(true); + + try { + processSync.invoke(controller, requestObj, tokens); + } catch (java.lang.reflect.InvocationTargetException e) { + Throwable cause = e.getCause(); + assertTrue(cause instanceof SkyflowException + || cause instanceof java.util.concurrent.ExecutionException + || cause instanceof RuntimeException); + } + } +} diff --git a/v3/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java b/v3/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java index 766c095c..4e8a5e4a 100644 --- a/v3/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java +++ b/v3/src/test/java/com/skyflow/vault/controller/VaultControllerTests.java @@ -618,7 +618,7 @@ public void testFractionalLastBatchDETOKENIZE() throws Exception { public void testDetokenizeBatchFuturesCatchBranchAddsErrorRecord() throws Exception { VaultController controller = createController(); setPrivateField(controller, "detokenizeBatchSize", 2); - List batches = null; // trigger catch + List batches = null; // trigger catch List errors = new ArrayList<>(); Method method = VaultController.class.getDeclaredMethod("detokenizeBatchFutures", ExecutorService.class, List.class, List.class); @@ -671,7 +671,7 @@ public void testProcessDetokenizeSyncNormalPath() throws Exception { java.lang.reflect.Method processDetokenizeSync = VaultController.class.getDeclaredMethod( "processDetokenizeSync", - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest.class, + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest.class, List.class ); processDetokenizeSync.setAccessible(true); @@ -708,7 +708,7 @@ public void testProcessDetokenizeSyncErrorPath() throws Exception { java.lang.reflect.Method processDetokenizeSync = VaultController.class.getDeclaredMethod( "processDetokenizeSync", - com.skyflow.generated.rest.resources.recordservice.requests.DetokenizeRequest.class, + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowDetokenizeRequest.class, List.class ); processDetokenizeSync.setAccessible(true); @@ -721,7 +721,7 @@ public void testProcessDetokenizeSyncErrorPath() throws Exception { ); detokenizeBatchFutures.setAccessible(true); ExecutorService executor = Executors.newFixedThreadPool(1); - List batches = null; // will trigger catch + List batches = null; // will trigger catch List errors = new ArrayList<>(); @SuppressWarnings("unchecked") List> futures = (List>) detokenizeBatchFutures.invoke(controller, executor, batches, errors); diff --git a/v3/src/test/java/com/skyflow/vault/controller/VaultControllerTokenizeTests.java b/v3/src/test/java/com/skyflow/vault/controller/VaultControllerTokenizeTests.java new file mode 100644 index 00000000..0a354651 --- /dev/null +++ b/v3/src/test/java/com/skyflow/vault/controller/VaultControllerTokenizeTests.java @@ -0,0 +1,462 @@ +package com.skyflow.vault.controller; + +import com.skyflow.config.Credentials; +import com.skyflow.config.VaultConfig; +import com.skyflow.enums.Env; +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.utils.Constants; +import com.skyflow.utils.validations.Validations; +import com.skyflow.vault.data.ErrorRecord; +import com.skyflow.vault.data.TokenizeRecord; +import com.skyflow.vault.data.TokenizeRequest; +import com.skyflow.vault.data.TokenizeResponse; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.io.FileWriter; +import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import static org.junit.Assert.*; + +@RunWith(PowerMockRunner.class) +@PowerMockIgnore({ + "javax.management.*", + "java.nio.*", + "com.sun.net.httpserver.*", + "sun.net.httpserver.*", + "sun.nio.ch.*", + "jdk.internal.reflect.*", + "javax.crypto.*", + "javax.net.ssl.*" +}) +public class VaultControllerTokenizeTests { + + private static final String ENV_PATH = "./.env"; + + private VaultConfig vaultConfig; + private Credentials credentials; + + @Before + public void setUp() { + vaultConfig = new VaultConfig(); + vaultConfig.setVaultId("vault123"); + vaultConfig.setClusterId("cluster123"); + vaultConfig.setEnv(Env.DEV); + + credentials = new Credentials(); + credentials.setToken("valid-token"); + vaultConfig.setCredentials(credentials); + + writeEnv("TOKENIZE_BATCH_SIZE=50\nTOKENIZE_CONCURRENCY_LIMIT=1"); + } + + @After + public void tearDown() { + writeEnv(""); + } + + private void writeEnv(String content) { + java.io.File envFile = new java.io.File(ENV_PATH); + java.io.File parentDir = envFile.getParentFile(); + if (parentDir != null && !parentDir.exists()) { + parentDir.mkdirs(); + } + try (FileWriter writer = new FileWriter(envFile)) { + writer.write(content); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private VaultController createController() throws SkyflowException { + return new VaultController(vaultConfig, credentials); + } + + private void setPrivateField(Object obj, String field, Object value) throws Exception { + Field f = obj.getClass().getDeclaredField(field); + f.setAccessible(true); + f.set(obj, value); + } + + private int getPrivateInt(Object obj, String field) throws Exception { + Field f = obj.getClass().getDeclaredField(field); + f.setAccessible(true); + return f.getInt(obj); + } + + private ArrayList generateRecords(int count) { + ArrayList records = new ArrayList<>(); + for (int i = 0; i < count; i++) { + records.add(TokenizeRecord.builder() + .value("value" + i) + .tokenGroupNames(Collections.singletonList("group1")) + .build()); + } + return records; + } + + // ─── Validation tests via Validations directly ─────────────────────────── + + @Test + public void testValidation_nullRequest() { + try { + Validations.validateTokenizeRequest(null); + fail("Expected SkyflowException for null request"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.TokenizeRequestNull.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidation_emptyData() { + TokenizeRequest req = TokenizeRequest.builder().data(new ArrayList<>()).build(); + try { + Validations.validateTokenizeRequest(req); + fail("Expected SkyflowException for empty data"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.EmptyTokenizeData.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidation_nullRecord() { + ArrayList records = new ArrayList<>(); + records.add(null); + TokenizeRequest req = TokenizeRequest.builder().data(records).build(); + try { + Validations.validateTokenizeRequest(req); + fail("Expected SkyflowException for null record"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.TokenizeRecordNull.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidation_emptyValue() { + ArrayList records = new ArrayList<>(); + records.add(TokenizeRecord.builder().value(" ").tokenGroupNames(Collections.singletonList("g1")).build()); + TokenizeRequest req = TokenizeRequest.builder().data(records).build(); + try { + Validations.validateTokenizeRequest(req); + fail("Expected SkyflowException for empty value"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.EmptyValueInTokenizeRecord.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidation_emptyTokenGroupNames() { + ArrayList records = new ArrayList<>(); + records.add(TokenizeRecord.builder().value("val").tokenGroupNames(new ArrayList<>()).build()); + TokenizeRequest req = TokenizeRequest.builder().data(records).build(); + try { + Validations.validateTokenizeRequest(req); + fail("Expected SkyflowException for empty token group names"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.EmptyTokenGroupNamesInTokenizeRecord.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidation_emptyTokenGroupNameInList() { + ArrayList records = new ArrayList<>(); + records.add(TokenizeRecord.builder().value("val").tokenGroupNames(Arrays.asList("g1", " ")).build()); + TokenizeRequest req = TokenizeRequest.builder().data(records).build(); + try { + Validations.validateTokenizeRequest(req); + fail("Expected SkyflowException for empty group name in list"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.EmptyTokenGroupNameInTokenizeRecord.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidation_sizeExceeds10000() { + ArrayList records = generateRecords(10001); + TokenizeRequest req = TokenizeRequest.builder().data(records).build(); + try { + Validations.validateTokenizeRequest(req); + fail("Expected SkyflowException for size exceed"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.TokenizeDataSizeExceedError.getMessage(), e.getMessage()); + } + } + + // ─── bulkTokenize / bulkTokenizeAsync validation error propagation ──────── + + @Test + public void testBulkTokenize_nullRequest() throws SkyflowException { + VaultController controller = createController(); + try { + controller.bulkTokenize(null); + fail("Expected SkyflowException"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.TokenizeRequestNull.getMessage(), e.getMessage()); + } + } + + @Test + public void testBulkTokenize_emptyData() throws SkyflowException { + VaultController controller = createController(); + TokenizeRequest req = TokenizeRequest.builder().data(new ArrayList<>()).build(); + try { + controller.bulkTokenize(req); + fail("Expected SkyflowException for empty data"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.EmptyTokenizeData.getMessage(), e.getMessage()); + } + } + + @Test + public void testBulkTokenizeAsync_nullRequest() throws SkyflowException { + VaultController controller = createController(); + try { + controller.bulkTokenizeAsync(null); + fail("Expected SkyflowException"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.TokenizeRequestNull.getMessage(), e.getMessage()); + } + } + + @Test + public void testBulkTokenizeAsync_emptyData() throws SkyflowException { + VaultController controller = createController(); + TokenizeRequest req = TokenizeRequest.builder().data(new ArrayList<>()).build(); + try { + controller.bulkTokenizeAsync(req); + fail("Expected SkyflowException for empty data"); + } catch (SkyflowException e) { + assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + assertEquals(ErrorMessage.EmptyTokenizeData.getMessage(), e.getMessage()); + } + } + + // ─── Batch / concurrency configuration tests ───────────────────────────── + + @Test + public void testDefaultTokenizeBatchConfig() throws Exception { + writeEnv(""); + VaultController controller = createController(); + assertEquals(Constants.TOKENIZE_BATCH_SIZE.intValue(), getPrivateInt(controller, "tokenizeBatchSize")); + assertEquals(Constants.TOKENIZE_CONCURRENCY_LIMIT.intValue(), getPrivateInt(controller, "tokenizeConcurrencyLimit")); + } + + @Test + public void testCustomValidBatchAndConcurrency() throws Exception { + writeEnv("TOKENIZE_BATCH_SIZE=10\nTOKENIZE_CONCURRENCY_LIMIT=3"); + VaultController controller = createController(); + TokenizeRequest req = TokenizeRequest.builder().data(generateRecords(30)).build(); + try { + controller.bulkTokenize(req); + } catch (Exception ignored) {} + + assertEquals(10, getPrivateInt(controller, "tokenizeBatchSize")); + assertEquals(3, getPrivateInt(controller, "tokenizeConcurrencyLimit")); + } + + @Test + public void testBatchSizeClampsToMax() throws Exception { + writeEnv("TOKENIZE_BATCH_SIZE=2000"); + VaultController controller = createController(); + TokenizeRequest req = TokenizeRequest.builder().data(generateRecords(50)).build(); + try { + controller.bulkTokenize(req); + } catch (Exception ignored) {} + + assertEquals(Constants.MAX_TOKENIZE_BATCH_SIZE.intValue(), getPrivateInt(controller, "tokenizeBatchSize")); + } + + @Test + public void testConcurrencyLimitClampsToMax() throws Exception { + writeEnv("TOKENIZE_CONCURRENCY_LIMIT=200"); + VaultController controller = createController(); + TokenizeRequest req = TokenizeRequest.builder().data(generateRecords(10000)).build(); + try { + controller.bulkTokenize(req); + } catch (Exception ignored) {} + + assertEquals(Constants.MAX_TOKENIZE_CONCURRENCY_LIMIT.intValue(), getPrivateInt(controller, "tokenizeConcurrencyLimit")); + } + + @Test + public void testBatchSizeZeroFallsToDefault() throws Exception { + writeEnv("TOKENIZE_BATCH_SIZE=0"); + VaultController controller = createController(); + TokenizeRequest req = TokenizeRequest.builder().data(generateRecords(10)).build(); + try { + controller.bulkTokenize(req); + } catch (Exception ignored) {} + + assertEquals(Constants.TOKENIZE_BATCH_SIZE.intValue(), getPrivateInt(controller, "tokenizeBatchSize")); + } + + @Test + public void testBatchSizeNegativeFallsToDefault() throws Exception { + writeEnv("TOKENIZE_BATCH_SIZE=-10"); + VaultController controller = createController(); + TokenizeRequest req = TokenizeRequest.builder().data(generateRecords(10)).build(); + try { + controller.bulkTokenize(req); + } catch (Exception ignored) {} + + assertEquals(Constants.TOKENIZE_BATCH_SIZE.intValue(), getPrivateInt(controller, "tokenizeBatchSize")); + } + + @Test + public void testConcurrencyZeroFallsToDefault() throws Exception { + writeEnv("TOKENIZE_CONCURRENCY_LIMIT=0"); + VaultController controller = createController(); + TokenizeRequest req = TokenizeRequest.builder().data(generateRecords(10)).build(); + try { + controller.bulkTokenize(req); + } catch (Exception ignored) {} + + int maxNeeded = (10 + Constants.TOKENIZE_BATCH_SIZE - 1) / Constants.TOKENIZE_BATCH_SIZE; + int expected = Math.min(Constants.TOKENIZE_CONCURRENCY_LIMIT, maxNeeded); + assertEquals(expected, getPrivateInt(controller, "tokenizeConcurrencyLimit")); + } + + @Test + public void testTotalRequestsLessThanBatchSize() throws Exception { + writeEnv("TOKENIZE_BATCH_SIZE=100\nTOKENIZE_CONCURRENCY_LIMIT=10"); + VaultController controller = createController(); + TokenizeRequest req = TokenizeRequest.builder().data(generateRecords(10)).build(); + try { + controller.bulkTokenize(req); + } catch (Exception ignored) {} + + assertEquals(100, getPrivateInt(controller, "tokenizeBatchSize")); + assertEquals(1, getPrivateInt(controller, "tokenizeConcurrencyLimit")); + } + + @Test + public void testHighConcurrencyForLowRecords() throws Exception { + writeEnv("TOKENIZE_BATCH_SIZE=1000\nTOKENIZE_CONCURRENCY_LIMIT=100"); + VaultController controller = createController(); + TokenizeRequest req = TokenizeRequest.builder().data(generateRecords(10000)).build(); + try { + controller.bulkTokenize(req); + } catch (Exception ignored) {} + + assertEquals(1000, getPrivateInt(controller, "tokenizeBatchSize")); + assertEquals(Constants.MAX_TOKENIZE_CONCURRENCY_LIMIT.intValue(), getPrivateInt(controller, "tokenizeConcurrencyLimit")); + } + + @Test + public void testFractionalLastBatch() throws Exception { + writeEnv("TOKENIZE_BATCH_SIZE=100"); + VaultController controller = createController(); + TokenizeRequest req = TokenizeRequest.builder().data(generateRecords(9050)).build(); + try { + controller.bulkTokenize(req); + } catch (Exception ignored) {} + + assertEquals(100, getPrivateInt(controller, "tokenizeBatchSize")); + assertEquals(Constants.TOKENIZE_CONCURRENCY_LIMIT.intValue(), getPrivateInt(controller, "tokenizeConcurrencyLimit")); + } + + @Test + public void testZeroRecordsThrowsException() throws Exception { + VaultController controller = createController(); + TokenizeRequest req = TokenizeRequest.builder().data(new ArrayList<>()).build(); + boolean exceptionThrown = false; + try { + controller.bulkTokenize(req); + } catch (Exception e) { + exceptionThrown = true; + } + assertTrue("Exception should be thrown for zero records", exceptionThrown); + } + + // ─── tokenizeBatchFutures catch branch ─────────────────────────────────── + + @Test + public void testTokenizeBatchFutures_catchBranchAddsErrorRecord() throws Exception { + VaultController controller = createController(); + setPrivateField(controller, "tokenizeBatchSize", 2); + + // Pass null batches list to trigger the catch branch inside tokenizeBatchFutures + List batches = null; + + Method method = VaultController.class.getDeclaredMethod( + "tokenizeBatchFutures", ExecutorService.class, List.class); + method.setAccessible(true); + + ExecutorService executor = Executors.newFixedThreadPool(1); + @SuppressWarnings("unchecked") + List> futures = + (List>) method.invoke(controller, executor, batches); + + // errors are now returned via futures, not a shared list + Assert.assertNotNull(futures); + executor.shutdownNow(); + } + + // ─── processTokenizeSync via reflection ────────────────────────────────── + + @Test + public void testProcessTokenizeSyncNormalPath() throws Exception { + VaultConfig cfg = new VaultConfig(); + cfg.setVaultId("vault123"); + cfg.setClusterId("cluster123"); + cfg.setEnv(Env.DEV); + Credentials creds = new Credentials(); + creds.setApiKey("sky-ab123-abcd1234cdef1234abcd4321cdef4321"); + cfg.setCredentials(creds); + + VaultController controller = new VaultController(cfg, creds); + setPrivateField(controller, "tokenizeConcurrencyLimit", 1); + setPrivateField(controller, "tokenizeBatchSize", 1); + + ArrayList data = new ArrayList<>(); + data.add(TokenizeRecord.builder().value("val1").tokenGroupNames(Collections.singletonList("g1")).build()); + TokenizeRequest request = TokenizeRequest.builder().data(data).build(); + + Method getRequestBody = VaultController.class.getSuperclass() + .getDeclaredMethod("getTokenizeRequestBody", TokenizeRequest.class); + getRequestBody.setAccessible(true); + Object requestObj = getRequestBody.invoke(controller, request); + + Method processSync = VaultController.class.getDeclaredMethod( + "processTokenizeSync", + com.skyflow.generated.rest.resources.flowservice.requests.V1FlowTokenizeRequest.class, + ArrayList.class + ); + processSync.setAccessible(true); + + try { + processSync.invoke(controller, requestObj, data); + } catch (java.lang.reflect.InvocationTargetException e) { + Throwable cause = e.getCause(); + assertTrue(cause instanceof SkyflowException + || cause instanceof java.util.concurrent.ExecutionException + || cause instanceof RuntimeException); + } + } +} diff --git a/v3/src/test/java/com/skyflow/vault/data/DeleteTokensRequestTests.java b/v3/src/test/java/com/skyflow/vault/data/DeleteTokensRequestTests.java new file mode 100644 index 00000000..32deb1b3 --- /dev/null +++ b/v3/src/test/java/com/skyflow/vault/data/DeleteTokensRequestTests.java @@ -0,0 +1,161 @@ +package com.skyflow.vault.data; + +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.utils.validations.Validations; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class DeleteTokensRequestTests { + + @Test + public void testDeleteTokensRequestBuilderAndGetters() { + List tokens = Arrays.asList("token1", "token2"); + DeleteTokensRequest request = DeleteTokensRequest.builder() + .tokens(tokens) + .build(); + Assert.assertEquals(tokens, request.getTokens()); + } + + @Test + public void testDeleteTokensRequestNullTokens() { + DeleteTokensRequest request = DeleteTokensRequest.builder() + .tokens(null) + .build(); + Assert.assertNull(request.getTokens()); + } + + @Test + public void testValidateDeleteTokensRequestValid() { + try { + List tokens = Arrays.asList("token1", "token2"); + DeleteTokensRequest request = DeleteTokensRequest.builder() + .tokens(tokens) + .build(); + Validations.validateDeleteTokensRequest(request); + } catch (SkyflowException e) { + Assert.fail("Should not have thrown exception for valid request"); + } + } + + @Test + public void testValidateDeleteTokensRequestNull() { + try { + Validations.validateDeleteTokensRequest(null); + Assert.fail("Should have thrown exception for null request"); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals(ErrorMessage.DeleteTokensRequestNull.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidateDeleteTokensRequestNullTokensList() { + try { + DeleteTokensRequest request = DeleteTokensRequest.builder() + .tokens(null) + .build(); + Validations.validateDeleteTokensRequest(request); + Assert.fail("Should have thrown exception for null tokens"); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals(ErrorMessage.EmptyDeleteTokensData.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidateDeleteTokensRequestEmptyTokensList() { + try { + DeleteTokensRequest request = DeleteTokensRequest.builder() + .tokens(new ArrayList<>()) + .build(); + Validations.validateDeleteTokensRequest(request); + Assert.fail("Should have thrown exception for empty tokens list"); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals(ErrorMessage.EmptyDeleteTokensData.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidateDeleteTokensRequestNullTokenInList() { + try { + List tokens = Arrays.asList("token1", null, "token3"); + DeleteTokensRequest request = DeleteTokensRequest.builder() + .tokens(tokens) + .build(); + Validations.validateDeleteTokensRequest(request); + Assert.fail("Should have thrown exception for null token in list"); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals(ErrorMessage.EmptyTokenInDeleteTokensData.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidateDeleteTokensRequestEmptyTokenInList() { + try { + List tokens = Arrays.asList("token1", " ", "token3"); + DeleteTokensRequest request = DeleteTokensRequest.builder() + .tokens(tokens) + .build(); + Validations.validateDeleteTokensRequest(request); + Assert.fail("Should have thrown exception for empty token in list"); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals(ErrorMessage.EmptyTokenInDeleteTokensData.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidateDeleteTokensRequestTokensSizeExceed() { + try { + List tokens = new ArrayList<>(); + for (int i = 0; i < 10001; i++) { + tokens.add("token" + i); + } + DeleteTokensRequest request = DeleteTokensRequest.builder() + .tokens(tokens) + .build(); + Validations.validateDeleteTokensRequest(request); + Assert.fail("Should have thrown exception for tokens size exceed"); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals(ErrorMessage.DeleteTokensSizeExceedError.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidateDeleteTokensRequestMaxAllowedTokens() { + try { + List tokens = new ArrayList<>(); + for (int i = 0; i < 10000; i++) { + tokens.add("token" + i); + } + DeleteTokensRequest request = DeleteTokensRequest.builder() + .tokens(tokens) + .build(); + Validations.validateDeleteTokensRequest(request); + } catch (SkyflowException e) { + Assert.fail("Should not have thrown exception for exactly 10000 tokens: " + e.getMessage()); + } + } + + @Test + public void testValidateDeleteTokensRequestSingleToken() { + try { + DeleteTokensRequest request = DeleteTokensRequest.builder() + .tokens(Collections.singletonList("single-token")) + .build(); + Validations.validateDeleteTokensRequest(request); + } catch (SkyflowException e) { + Assert.fail("Should not have thrown exception for single valid token: " + e.getMessage()); + } + } +} diff --git a/v3/src/test/java/com/skyflow/vault/data/DeleteTokensResponseTests.java b/v3/src/test/java/com/skyflow/vault/data/DeleteTokensResponseTests.java new file mode 100644 index 00000000..42628bef --- /dev/null +++ b/v3/src/test/java/com/skyflow/vault/data/DeleteTokensResponseTests.java @@ -0,0 +1,117 @@ +package com.skyflow.vault.data; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class DeleteTokensResponseTests { + + @Test + public void testDeleteTokensResponseGettersAndSummary() { + List success = Arrays.asList( + new DeleteTokensSuccess(0, "token1"), + new DeleteTokensSuccess(1, "token2") + ); + List errors = Arrays.asList( + new ErrorRecord(2, "error1", 404) + ); + List originalPayload = Arrays.asList("token1", "token2", "token3"); + DeleteTokensResponse response = new DeleteTokensResponse(success, errors, originalPayload); + + Assert.assertEquals(success, response.getSuccess()); + Assert.assertEquals(errors, response.getErrors()); + Assert.assertNotNull(response.getSummary()); + Assert.assertEquals(3, response.getSummary().getTotalTokens()); + Assert.assertEquals(2, response.getSummary().getTotalDeleted()); + Assert.assertEquals(1, response.getSummary().getTotalFailed()); + } + + @Test + public void testDeleteTokensResponseToString() { + List success = Collections.singletonList( + new DeleteTokensSuccess(0, "token1") + ); + List errors = Collections.singletonList( + new ErrorRecord(1, "error1", 400) + ); + List originalPayload = Arrays.asList("token1", "token2"); + DeleteTokensResponse response = new DeleteTokensResponse(success, errors, originalPayload); + String json = response.toString(); + Assert.assertTrue(json.contains("token1")); + Assert.assertTrue(json.contains("error1")); + Assert.assertTrue(json.contains("summary")); + } + + @Test + public void testDeleteTokensResponseConstructorWithoutPayload() { + List success = Collections.emptyList(); + List errors = Collections.emptyList(); + DeleteTokensResponse response = new DeleteTokensResponse(success, errors); + Assert.assertEquals(success, response.getSuccess()); + Assert.assertEquals(errors, response.getErrors()); + Assert.assertNull(response.getSummary()); + } + + @Test + public void testDeleteTokensResponseAllSuccess() { + List success = Arrays.asList( + new DeleteTokensSuccess(0, "token1"), + new DeleteTokensSuccess(1, "token2"), + new DeleteTokensSuccess(2, "token3") + ); + List errors = Collections.emptyList(); + List originalPayload = Arrays.asList("token1", "token2", "token3"); + DeleteTokensResponse response = new DeleteTokensResponse(success, errors, originalPayload); + + Assert.assertEquals(3, response.getSummary().getTotalTokens()); + Assert.assertEquals(3, response.getSummary().getTotalDeleted()); + Assert.assertEquals(0, response.getSummary().getTotalFailed()); + } + + @Test + public void testDeleteTokensResponseAllErrors() { + List success = Collections.emptyList(); + List errors = Arrays.asList( + new ErrorRecord(0, "error1", 404), + new ErrorRecord(1, "error2", 500) + ); + List originalPayload = Arrays.asList("token1", "token2"); + DeleteTokensResponse response = new DeleteTokensResponse(success, errors, originalPayload); + + Assert.assertEquals(2, response.getSummary().getTotalTokens()); + Assert.assertEquals(0, response.getSummary().getTotalDeleted()); + Assert.assertEquals(2, response.getSummary().getTotalFailed()); + } + + @Test + public void testDeleteTokensSuccessGetters() { + DeleteTokensSuccess s = new DeleteTokensSuccess(3, "my-token"); + Assert.assertEquals(3, s.getIndex()); + Assert.assertEquals("my-token", s.getToken()); + } + + @Test + public void testDeleteTokensSuccessToString() { + DeleteTokensSuccess s = new DeleteTokensSuccess(0, "tok"); + String json = s.toString(); + Assert.assertTrue(json.contains("tok")); + } + + @Test + public void testDeleteTokensSummaryGetters() { + DeleteTokensSummary summary = new DeleteTokensSummary(10, 8, 2); + Assert.assertEquals(10, summary.getTotalTokens()); + Assert.assertEquals(8, summary.getTotalDeleted()); + Assert.assertEquals(2, summary.getTotalFailed()); + } + + @Test + public void testDeleteTokensSummaryToString() { + DeleteTokensSummary summary = new DeleteTokensSummary(5, 4, 1); + String json = summary.toString(); + Assert.assertTrue(json.contains("totalTokens") || json.contains("5")); + } +} diff --git a/v3/src/test/java/com/skyflow/vault/data/TokenizeRequestTests.java b/v3/src/test/java/com/skyflow/vault/data/TokenizeRequestTests.java new file mode 100644 index 00000000..4f69c081 --- /dev/null +++ b/v3/src/test/java/com/skyflow/vault/data/TokenizeRequestTests.java @@ -0,0 +1,241 @@ +package com.skyflow.vault.data; + +import com.skyflow.errors.ErrorCode; +import com.skyflow.errors.ErrorMessage; +import com.skyflow.errors.SkyflowException; +import com.skyflow.utils.validations.Validations; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; + +public class TokenizeRequestTests { + + private TokenizeRecord validRecord(String value, String... groupNames) { + return TokenizeRecord.builder() + .value(value) + .tokenGroupNames(Arrays.asList(groupNames)) + .build(); + } + + // ─── Builder / getter tests ────────────────────────────────────────────── + + @Test + public void testTokenizeRecordBuilderAndGetters() { + TokenizeRecord record = TokenizeRecord.builder() + .value("sachin") + .tokenGroupNames(Arrays.asList("group1", "group2")) + .build(); + Assert.assertEquals("sachin", record.getValue()); + Assert.assertEquals(Arrays.asList("group1", "group2"), record.getTokenGroupNames()); + } + + @Test + public void testTokenizeRequestBuilderAndGetters() { + ArrayList records = new ArrayList<>(); + records.add(validRecord("val1", "group1")); + TokenizeRequest req = TokenizeRequest.builder().data(records).build(); + Assert.assertEquals(records, req.getData()); + } + + // ─── Validation: null / empty request ──────────────────────────────────── + + @Test + public void testValidateTokenizeRequest_nullRequest() { + try { + Validations.validateTokenizeRequest(null); + Assert.fail("Expected SkyflowException for null request"); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals(ErrorMessage.TokenizeRequestNull.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidateTokenizeRequest_nullData() { + TokenizeRequest req = TokenizeRequest.builder().data(null).build(); + try { + Validations.validateTokenizeRequest(req); + Assert.fail("Expected SkyflowException for null data"); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals(ErrorMessage.EmptyTokenizeData.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidateTokenizeRequest_emptyData() { + TokenizeRequest req = TokenizeRequest.builder().data(new ArrayList<>()).build(); + try { + Validations.validateTokenizeRequest(req); + Assert.fail("Expected SkyflowException for empty data"); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals(ErrorMessage.EmptyTokenizeData.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidateTokenizeRequest_dataSizeExceed() { + ArrayList records = new ArrayList<>(); + for (int i = 0; i < 10001; i++) { + records.add(validRecord("v" + i, "g1")); + } + TokenizeRequest req = TokenizeRequest.builder().data(records).build(); + try { + Validations.validateTokenizeRequest(req); + Assert.fail("Expected SkyflowException for size exceed"); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals(ErrorMessage.TokenizeDataSizeExceedError.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidateTokenizeRequest_maxAllowedSize() { + ArrayList records = new ArrayList<>(); + for (int i = 0; i < 10000; i++) { + records.add(validRecord("v" + i, "g1")); + } + TokenizeRequest req = TokenizeRequest.builder().data(records).build(); + try { + Validations.validateTokenizeRequest(req); + } catch (SkyflowException e) { + Assert.fail("Should not throw for exactly 10000 records: " + e.getMessage()); + } + } + + // ─── Validation: null record in list ───────────────────────────────────── + + @Test + public void testValidateTokenizeRequest_nullRecordInList() { + ArrayList records = new ArrayList<>(); + records.add(validRecord("v1", "g1")); + records.add(null); + TokenizeRequest req = TokenizeRequest.builder().data(records).build(); + try { + Validations.validateTokenizeRequest(req); + Assert.fail("Expected SkyflowException for null record"); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals(ErrorMessage.TokenizeRecordNull.getMessage(), e.getMessage()); + } + } + + // ─── Validation: empty / null value ────────────────────────────────────── + + @Test + public void testValidateTokenizeRequest_nullValue() { + ArrayList records = new ArrayList<>(); + records.add(TokenizeRecord.builder().value(null).tokenGroupNames(Collections.singletonList("g1")).build()); + TokenizeRequest req = TokenizeRequest.builder().data(records).build(); + try { + Validations.validateTokenizeRequest(req); + Assert.fail("Expected SkyflowException for null value"); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals(ErrorMessage.EmptyValueInTokenizeRecord.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidateTokenizeRequest_emptyValue() { + ArrayList records = new ArrayList<>(); + records.add(TokenizeRecord.builder().value(" ").tokenGroupNames(Collections.singletonList("g1")).build()); + TokenizeRequest req = TokenizeRequest.builder().data(records).build(); + try { + Validations.validateTokenizeRequest(req); + Assert.fail("Expected SkyflowException for empty value"); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals(ErrorMessage.EmptyValueInTokenizeRecord.getMessage(), e.getMessage()); + } + } + + // ─── Validation: empty / null tokenGroupNames ───────────────────────────── + + @Test + public void testValidateTokenizeRequest_nullTokenGroupNames() { + ArrayList records = new ArrayList<>(); + records.add(TokenizeRecord.builder().value("val").tokenGroupNames(null).build()); + TokenizeRequest req = TokenizeRequest.builder().data(records).build(); + try { + Validations.validateTokenizeRequest(req); + Assert.fail("Expected SkyflowException for null tokenGroupNames"); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals(ErrorMessage.EmptyTokenGroupNamesInTokenizeRecord.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidateTokenizeRequest_emptyTokenGroupNames() { + ArrayList records = new ArrayList<>(); + records.add(TokenizeRecord.builder().value("val").tokenGroupNames(new ArrayList<>()).build()); + TokenizeRequest req = TokenizeRequest.builder().data(records).build(); + try { + Validations.validateTokenizeRequest(req); + Assert.fail("Expected SkyflowException for empty tokenGroupNames"); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals(ErrorMessage.EmptyTokenGroupNamesInTokenizeRecord.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidateTokenizeRequest_nullTokenGroupNameInList() { + ArrayList records = new ArrayList<>(); + records.add(TokenizeRecord.builder().value("val").tokenGroupNames(Arrays.asList("g1", null)).build()); + TokenizeRequest req = TokenizeRequest.builder().data(records).build(); + try { + Validations.validateTokenizeRequest(req); + Assert.fail("Expected SkyflowException for null group name in list"); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals(ErrorMessage.EmptyTokenGroupNameInTokenizeRecord.getMessage(), e.getMessage()); + } + } + + @Test + public void testValidateTokenizeRequest_emptyTokenGroupNameInList() { + ArrayList records = new ArrayList<>(); + records.add(TokenizeRecord.builder().value("val").tokenGroupNames(Arrays.asList("g1", " ")).build()); + TokenizeRequest req = TokenizeRequest.builder().data(records).build(); + try { + Validations.validateTokenizeRequest(req); + Assert.fail("Expected SkyflowException for empty group name in list"); + } catch (SkyflowException e) { + Assert.assertEquals(ErrorCode.INVALID_INPUT.getCode(), e.getHttpCode()); + Assert.assertEquals(ErrorMessage.EmptyTokenGroupNameInTokenizeRecord.getMessage(), e.getMessage()); + } + } + + // ─── Validation: valid request ──────────────────────────────────────────── + + @Test + public void testValidateTokenizeRequest_valid() { + ArrayList records = new ArrayList<>(); + records.add(validRecord("sachin", "non_deterministic")); + records.add(validRecord("dhoni", "deterministic_string_tg", "group2")); + TokenizeRequest req = TokenizeRequest.builder().data(records).build(); + try { + Validations.validateTokenizeRequest(req); + } catch (SkyflowException e) { + Assert.fail("Should not throw for valid request: " + e.getMessage()); + } + } + + @Test + public void testValidateTokenizeRequest_singleRecord() { + ArrayList records = new ArrayList<>(); + records.add(validRecord("value1", "group1")); + TokenizeRequest req = TokenizeRequest.builder().data(records).build(); + try { + Validations.validateTokenizeRequest(req); + } catch (SkyflowException e) { + Assert.fail("Should not throw for single valid record: " + e.getMessage()); + } + } +} diff --git a/v3/src/test/java/com/skyflow/vault/data/TokenizeResponseTests.java b/v3/src/test/java/com/skyflow/vault/data/TokenizeResponseTests.java new file mode 100644 index 00000000..007d810b --- /dev/null +++ b/v3/src/test/java/com/skyflow/vault/data/TokenizeResponseTests.java @@ -0,0 +1,222 @@ +package com.skyflow.vault.data; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class TokenizeResponseTests { + + private static TokenizeSuccess makeSuccess(int index, String value, String groupName, String token) { + TokenizeSuccess s = new TokenizeSuccess(index, value); + s.addToken(groupName, token); + return s; + } + + @Test + public void testTokenizeResponseGettersAndSummary() { + // index 0 & 1 in success, index 2 in errors only → totalTokenized=2, totalPartial=0, totalFailed=1 + List success = Arrays.asList( + makeSuccess(0, "sachin", "non_deterministic", "tok1"), + makeSuccess(1, "sachin", "deterministic", "tok2") + ); + List errors = Collections.singletonList( + new ErrorRecord(2, "error1", 404) + ); + List originalPayload = Arrays.asList( + TokenizeRecord.builder().value("sachin").tokenGroupNames(Collections.singletonList("g1")).build(), + TokenizeRecord.builder().value("dhoni").tokenGroupNames(Collections.singletonList("g2")).build(), + TokenizeRecord.builder().value("kohli").tokenGroupNames(Collections.singletonList("g3")).build() + ); + TokenizeResponse response = new TokenizeResponse(success, errors, originalPayload); + + Assert.assertEquals(success, response.getSuccess()); + Assert.assertEquals(errors, response.getErrors()); + Assert.assertNotNull(response.getSummary()); + Assert.assertEquals(3, response.getSummary().getTotalTokens()); + Assert.assertEquals(2, response.getSummary().getTotalTokenized()); + Assert.assertEquals(0, response.getSummary().getTotalPartial()); + Assert.assertEquals(1, response.getSummary().getTotalFailed()); + } + + @Test + public void testTokenizeResponseToString() { + List success = Collections.singletonList( + makeSuccess(0, "val1", "group1", "tok1") + ); + List errors = Collections.singletonList( + new ErrorRecord(1, "some error", 400) + ); + List originalPayload = Arrays.asList( + TokenizeRecord.builder().value("v1").tokenGroupNames(Collections.singletonList("g1")).build(), + TokenizeRecord.builder().value("v2").tokenGroupNames(Collections.singletonList("g2")).build() + ); + TokenizeResponse response = new TokenizeResponse(success, errors, originalPayload); + String json = response.toString(); + Assert.assertTrue(json.contains("tok1")); + Assert.assertTrue(json.contains("some error")); + Assert.assertTrue(json.contains("summary")); + } + + @Test + public void testTokenizeResponseConstructorWithoutPayload() { + List success = Collections.emptyList(); + List errors = Collections.emptyList(); + TokenizeResponse response = new TokenizeResponse(success, errors); + Assert.assertEquals(success, response.getSuccess()); + Assert.assertEquals(errors, response.getErrors()); + Assert.assertNull(response.getSummary()); + } + + @Test + public void testTokenizeResponsePartialSuccess() { + // index 0 in both success and errors → totalPartial=1; index 1 success only → totalTokenized=1 + TokenizeSuccess s0 = new TokenizeSuccess(0, "test"); + s0.addToken("deterministic_string_tg", "tok_d"); + + TokenizeSuccess s1 = new TokenizeSuccess(1, "sachin22"); + s1.addToken("non_deterministic", "tok_nd2"); + s1.addToken("deterministic_string_tg", "tok_d2"); + + List success = Arrays.asList(s0, s1); + List errors = Collections.singletonList( + new ErrorRecord(0, "Token group non_deterministi is invalid.", 400) + ); + List originalPayload = Arrays.asList( + TokenizeRecord.builder().value("test").tokenGroupNames(Arrays.asList("non_deterministi", "deterministic_string_tg")).build(), + TokenizeRecord.builder().value("sachin22").tokenGroupNames(Arrays.asList("non_deterministic", "deterministic_string_tg")).build() + ); + TokenizeResponse response = new TokenizeResponse(success, errors, originalPayload); + + Assert.assertEquals(2, response.getSummary().getTotalTokens()); + Assert.assertEquals(1, response.getSummary().getTotalTokenized()); // index 1: all succeeded + Assert.assertEquals(1, response.getSummary().getTotalPartial()); // index 0: some succeeded, some failed + Assert.assertEquals(0, response.getSummary().getTotalFailed()); // no record had zero successes + // totalTokenized + totalPartial + totalFailed == totalTokens + Assert.assertEquals( + response.getSummary().getTotalTokens(), + response.getSummary().getTotalTokenized() + + response.getSummary().getTotalPartial() + + response.getSummary().getTotalFailed() + ); + } + + @Test + public void testTokenizeResponseAllSuccess() { + List success = Arrays.asList( + makeSuccess(0, "v1", "g1", "tok1"), + makeSuccess(1, "v2", "g2", "tok2") + ); + List errors = Collections.emptyList(); + List originalPayload = Arrays.asList( + TokenizeRecord.builder().value("v1").tokenGroupNames(Collections.singletonList("g1")).build(), + TokenizeRecord.builder().value("v2").tokenGroupNames(Collections.singletonList("g2")).build() + ); + TokenizeResponse response = new TokenizeResponse(success, errors, originalPayload); + + Assert.assertEquals(2, response.getSummary().getTotalTokens()); + Assert.assertEquals(2, response.getSummary().getTotalTokenized()); + Assert.assertEquals(0, response.getSummary().getTotalPartial()); + Assert.assertEquals(0, response.getSummary().getTotalFailed()); + } + + @Test + public void testTokenizeResponseAllErrors() { + List success = Collections.emptyList(); + List errors = Arrays.asList( + new ErrorRecord(0, "err1", 404), + new ErrorRecord(1, "err2", 500) + ); + List originalPayload = Arrays.asList( + TokenizeRecord.builder().value("v1").tokenGroupNames(Collections.singletonList("g1")).build(), + TokenizeRecord.builder().value("v2").tokenGroupNames(Collections.singletonList("g2")).build() + ); + TokenizeResponse response = new TokenizeResponse(success, errors, originalPayload); + + Assert.assertEquals(2, response.getSummary().getTotalTokens()); + Assert.assertEquals(0, response.getSummary().getTotalTokenized()); + Assert.assertEquals(0, response.getSummary().getTotalPartial()); + Assert.assertEquals(2, response.getSummary().getTotalFailed()); + } + + @Test + public void testTokenizeSuccessGetters() { + TokenizeSuccess s = new TokenizeSuccess(3, "myValue"); + s.addToken("myGroup", "myToken"); + Assert.assertEquals(3, s.getIndex()); + Assert.assertEquals("myValue", s.getValue()); + Assert.assertNotNull(s.getTokens()); + Assert.assertEquals("myToken", s.getTokens().get("myGroup")); + } + + @Test + public void testTokenizeSuccessMultipleTokenGroups() { + TokenizeSuccess s = new TokenizeSuccess(0, "sachin"); + s.addToken("non_deterministic", "tok_nd"); + s.addToken("deterministic_string_tg", "tok_d"); + Assert.assertEquals(2, s.getTokens().size()); + Assert.assertEquals("tok_nd", s.getTokens().get("non_deterministic")); + Assert.assertEquals("tok_d", s.getTokens().get("deterministic_string_tg")); + } + + @Test + public void testTokenizeSuccessToString() { + TokenizeSuccess s = new TokenizeSuccess(0, "val"); + s.addToken("grp", "tok"); + String json = s.toString(); + Assert.assertTrue(json.contains("tok") || json.contains("grp")); + } + + @Test + public void testTokenizeSummaryGetters() { + // totalTokens=10, totalTokenized=6, totalPartial=2, totalFailed=2 => 6+2+2=10 + TokenizeSummary summary = new TokenizeSummary(10, 6, 2, 2); + Assert.assertEquals(10, summary.getTotalTokens()); + Assert.assertEquals(6, summary.getTotalTokenized()); + Assert.assertEquals(2, summary.getTotalPartial()); + Assert.assertEquals(2, summary.getTotalFailed()); + Assert.assertEquals(summary.getTotalTokens(), + summary.getTotalTokenized() + summary.getTotalPartial() + summary.getTotalFailed()); + } + + @Test + public void testTokenizeSummaryToString() { + TokenizeSummary summary = new TokenizeSummary(5, 3, 1, 1); + String json = summary.toString(); + Assert.assertNotNull(json); + Assert.assertFalse(json.isEmpty()); + Assert.assertTrue(json.contains("totalPartial")); + } + + @Test + public void testPartialSuccessDoesNotCountAsFailure() { + // Record 0: 1 success + 1 error → partial + // Record 1: 2 successes → fully tokenized + // Record 2: 0 successes, 1 error → fully failed + TokenizeSuccess s0 = new TokenizeSuccess(0, "test"); + s0.addToken("deterministic_string_tg", "tok_d"); + + TokenizeSuccess s1 = new TokenizeSuccess(1, "sachin22"); + s1.addToken("non_deterministic", "tok_nd"); + s1.addToken("deterministic_string_tg", "tok_d2"); + + List success = Arrays.asList(s0, s1); + List errors = Arrays.asList( + new ErrorRecord(0, "Token group non_deterministi is invalid", 400), + new ErrorRecord(2, "Token group xyz is invalid", 400) + ); + List originalPayload = Arrays.asList( + TokenizeRecord.builder().value("test").tokenGroupNames(Arrays.asList("non_deterministi", "deterministic_string_tg")).build(), + TokenizeRecord.builder().value("sachin22").tokenGroupNames(Arrays.asList("non_deterministic", "deterministic_string_tg")).build(), + TokenizeRecord.builder().value("other").tokenGroupNames(Collections.singletonList("xyz")).build() + ); + TokenizeResponse response = new TokenizeResponse(success, errors, originalPayload); + + Assert.assertEquals(3, response.getSummary().getTotalTokens()); + Assert.assertEquals(1, response.getSummary().getTotalTokenized()); // only record 1 (all groups succeeded) + Assert.assertEquals(1, response.getSummary().getTotalPartial()); // record 0 (some succeeded, some failed) + Assert.assertEquals(1, response.getSummary().getTotalFailed()); // record 2 (all failed) + } +}