diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c9dc4b9f0..45c9f71f2 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1,2 @@ # https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners -* @Dovchik @650elx @krogers0607 @asein-sinch @JPPortier +* @Dovchik @krogers0607 @asein-sinch @JPPortier diff --git a/README.md b/README.md index 2990c4f84..a34e88f8c 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,10 @@ For more information on the Sinch APIs on which this SDK is based, refer to the - [Prerequisites](#prerequisites) - [Installation](#installation) - [Getting started](#getting-started) -- [Logging]() +- [Supported APIs](#supported-apis) +- [Logging](#logging) +- [Onboarding](#onboarding) +- [3rd party dependencies](#3rd-party-dependencies) ## Prerequisites @@ -40,7 +43,9 @@ Once the SDK is installed, you must start by initializing the main client class. ### Client initialization -To initialize communication with the Sinch servers, credentials obtained from the Sinch dashboard must be provided to the main client class of this SDK. It's highly recommended to not hardcode these credentials and to load them from environment variables instead. +To initialize communication with the Sinch servers, credentials obtained from the Sinch dashboard must be provided to the main client class of this SDK. + +It's highly recommended to not hardcode these credentials and to load them from environment variables instead. Sample: @@ -49,49 +54,106 @@ import com.sinch.sdk.SinchClient; import com.sinch.sdk.models.Configuration; ... -Configuration configuration = Configuration.builder().setKeyId(PARAM_KEY_ID) - .setKeySecret(PARAM_KEY_SECRET) - .setProjectId(PARAM_PROJECT_ID) - .build(); +Configuration configuration = Configuration.builder() + .setKeyId(PARAM_KEY_ID) + .setKeySecret(PARAM_KEY_SECRET) + .setProjectId(PARAM_PROJECT_ID) + .build(); ... SinchClient client = new SinchClient(configuration); ``` -## Products +## Supported APIs Here is the list of the Sinch products and their level of support by the Java SDK: -| API Category | API Name | Status | -|------------------------|-------------------------------------------------------------------------------------------------------------------------------------|:------:| -| Conversation | Conversation API [(javadoc)](https://developers.sinch.com/java-sdk/apidocs/com/sinch/sdk/domains/conversation/package-summary.html) | ✅ | -| Messaging | SMS API [(javadoc)](https://developers.sinch.com/java-sdk/apidocs/com/sinch/sdk/domains/sms/package-summary.html) | ✅ | -| Numbers & Connectivity | Numbers API [(javadoc)](https://developers.sinch.com/java-sdk/apidocs/com/sinch/sdk/domains/numbers/package-summary.html) | ✅ | -| Verification | Verification API [(javadoc)](https://developers.sinch.com/java-sdk/apidocs/com/sinch/sdk/domains/verification/package-summary.html) | ✅ | -| Voice and Video | Voice API [(javadoc)](https://developers.sinch.com/java-sdk/apidocs/com/sinch/sdk/domains/voice/package-summary.html) | ✅ | +| API Category | API Name | Status | +|------------------------|--------------------------------------------------------------------------------------------------------------------------------------|:------:| +| Conversation | Conversation API [(javadoc)](https://developers.sinch.com/java-sdk/apidocs/com/sinch/sdk/domains/conversation/package-summary.html) | ✅ | +| Messaging | SMS API [(javadoc)](https://developers.sinch.com/java-sdk/apidocs/com/sinch/sdk/domains/sms/package-summary.html) | ✅ | +| Numbers & Connectivity | Numbers API [(javadoc)](https://developers.sinch.com/java-sdk/apidocs/com/sinch/sdk/domains/numbers/package-summary.html) | ✅ | +| Verification | Verification API [(javadoc)](https://developers.sinch.com/java-sdk/apidocs/com/sinch/sdk/domains/verification/package-summary.html) | ✅ | +| Voice and Video | Voice API [(javadoc)](https://developers.sinch.com/java-sdk/apidocs/com/sinch/sdk/domains/voice/package-summary.html) | ✅ | ## Logging -The SDK uses the Java 8 logging feature ([java.util.logging](https://docs.oracle.com/javase/8/docs/api/java/util/logging/package-summary.html)) -Loggers and severity can be configured by using a `logging.properties` file like (see sample-app/src/main/resources/: +The SDK uses the Java 8 logging feature ([java.util.logging](https://docs.oracle.com/javase/8/docs/api/java/util/logging/package-summary.html#package.description)) + +When using java logging, Loggers and severity can be configured by using a `logging.properties` file like: ``` -handlers = java.util.logging.ConsoleHandler -java.util.logging.ConsoleHandler.level = INFO -com.sinch.sdk.level = INFO +# java.util.logging configuration sample +# See https://docs.oracle.com/javase/8/docs/api/java/util/logging/package-summary.html#package.description + +# +# Layers logging severity configuration +# + +# Sinch SDK +com.sinch.level = INFO + +# Apache HTTP Client +# org.apache.hc.level = + +# +# console output handler sample +# +handlers = java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter java.util.logging.SimpleFormatter.format=[%1$tF %1$tT] [%4$-7s %2$s] %5$s %n +java.util.logging.ConsoleHandler.level = FINEST ``` +If you are using a different logging framework (such as SLF4J or Spring), please refer to the documentation for your specific framework. ## Onboarding -To improve onboarding experience, following resources are available: -- Sinch developpers online doucmentation: https://developers.sinch.com -- A dedicated Java SDK quickstart repository with tutorials and templates enabling to start quickly a new project: https://github.com/sinch/sinch-sdk-java-quickstart -- A dedicated Java SDK sippets repository with basic code snippets: https://github.com/sinch/sinch-sdk-java-snippets -- Java SDK online javdoc: https://developers.sinch.com/java-sdk/apidocs +To enhance the onboarding experience, the following resources are available: +- Sinch Online Developers Documentation: https://developers.sinch.com +- Java SDK Online Javadoc: https://developers.sinch.com/java-sdk/apidocs +- Java SDK Quickstart Repository: A repository with tutorials and templates to help you quickly start a new project: https://github.com/sinch/sinch-sdk-java-quickstart +- Java SDK Snippets Repository: A collection of basic code snippets for reference: https://github.com/sinch/sinch-sdk-java-snippets + +## 3rd party dependencies +The SDK relies on the following third-party dependencies: +- [Jackson's library](https://github.com/FasterXML/jackson-jakarta-rs-providers): Provides JSON serialization/deserialization functionality. +- [Apache HTTP client](https://hc.apache.org/httpcomponents-client-5.4.x/5.4.1/httpclient5/project-info.html): Manages communication with Sinch products' REST APIs + +### Jackson/Java EE/jaxrs/Jakarta Compatibility Consideration +The transition from javax to jakarta namespaces with the Java EE to Jakarta EE migration may cause compatibility issues. Refer to [Oracle's note about the transition](https://blogs.oracle.com/javamagazine/post/transition-from-java-ee-to-jakarta-ee) for additional details. + +Jackson maintainers provide two variants of the library: +> (*) NOTE: Jakarta-RS is the package under jakarta.ws.rs, replacing older JAX-RS which lived under javax.ws.rs. For JAX-RS variant, see repo jackson-jaxrs-providers +By default, the Sinch Java SDK uses the "new" [jackson-jakarta-rs-providers](https://github.com/FasterXML/jackson-jakarta-rs-providers). However, you can switch to the "older" [jackson-jaxrs-providers](https://github.com/FasterXML/jackson-jaxrs-providers) if required. +#### Switching to jackson-jaxrs-providers +Depending on your use case, you may need to adjust dependencies to enable jaxrs usage. + +Add the following dependency to your configuration: +Note: Replace VERSION-YOU-WANT-TO-BE-USED by a Jackson version of at least `2.15.2`. +```xml +... + + com.sinch.sdk + sinch-sdk-java + ${sinch.sdk.java.version} + + + com.fasterxml.jackson.jaxrs + jackson-jakarta-rs-json-provider + + + + + com.fasterxml.jackson.jakarta.rs + jackson-jaxrs-json-provider + VERSION-YOU-WANT-TO-BE-USED + +... +``` ## License -This project is licensed under the Apache License. See the [LICENSE](LICENSE) file for the license text. +This project is licensed under the Apache License. + +See the [LICENSE](LICENSE) file for the license text. diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationWebhooksAuthenticationValidation.java b/client/src/main/com/sinch/sdk/auth/HmacAuthenticationValidation.java similarity index 78% rename from client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationWebhooksAuthenticationValidation.java rename to client/src/main/com/sinch/sdk/auth/HmacAuthenticationValidation.java index f64ce1fdd..db56533e8 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationWebhooksAuthenticationValidation.java +++ b/client/src/main/com/sinch/sdk/auth/HmacAuthenticationValidation.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.api.v1.adapters; +package com.sinch.sdk.auth; import com.sinch.sdk.core.exceptions.ApiAuthException; import com.sinch.sdk.core.utils.MapUtils; @@ -12,15 +12,15 @@ import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; -public class ConversationWebhooksAuthenticationValidation { +public class HmacAuthenticationValidation { private static final Logger LOGGER = - Logger.getLogger(ConversationWebhooksAuthenticationValidation.class.getName()); + Logger.getLogger(HmacAuthenticationValidation.class.getName()); - static final String TIMESTAMP_HEADER = "x-sinch-webhook-signature-timestamp"; - static final String NONCE_HEADER = "x-sinch-webhook-signature-nonce"; - static final String ALGORITHM_HEADER = "x-sinch-webhook-signature-algorithm"; - static final String SIGNATURE_HEADER = "x-sinch-webhook-signature"; + public static final String TIMESTAMP_HEADER = "x-sinch-webhook-signature-timestamp"; + public static final String NONCE_HEADER = "x-sinch-webhook-signature-nonce"; + public static final String ALGORITHM_HEADER = "x-sinch-webhook-signature-algorithm"; + public static final String SIGNATURE_HEADER = "x-sinch-webhook-signature"; public boolean validateAuthenticationHeader( String secret, Map _headers, String jsonPayload) { diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationService.java index 96ec9192b..e05220560 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationService.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationService.java @@ -1,5 +1,6 @@ package com.sinch.sdk.domains.conversation.api.v1.adapters; +import com.sinch.sdk.auth.HmacAuthenticationValidation; import com.sinch.sdk.auth.adapters.OAuthManager; import com.sinch.sdk.core.http.AuthManager; import com.sinch.sdk.core.http.HttpClient; @@ -118,11 +119,7 @@ public WebHooksService webhooks() { if (null == this.webhooks) { this.webhooks = new WebHooksService( - uriUUID, - context, - httpClient, - authManagers, - new ConversationWebhooksAuthenticationValidation()); + uriUUID, context, httpClient, authManagers, new HmacAuthenticationValidation()); } return this.webhooks; } diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksService.java index 7d53749c8..82df2fa26 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksService.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksService.java @@ -1,6 +1,7 @@ package com.sinch.sdk.domains.conversation.api.v1.adapters; import com.fasterxml.jackson.core.JsonProcessingException; +import com.sinch.sdk.auth.HmacAuthenticationValidation; import com.sinch.sdk.core.exceptions.ApiMappingException; import com.sinch.sdk.core.http.AuthManager; import com.sinch.sdk.core.http.HttpClient; @@ -22,7 +23,7 @@ public class WebHooksService implements com.sinch.sdk.domains.conversation.api.v1.WebHooksService { - private final ConversationWebhooksAuthenticationValidation authenticationChecker; + private final HmacAuthenticationValidation authenticationChecker; private final String uriUUID; private final WebhooksApi api; @@ -32,7 +33,7 @@ public WebHooksService( ConversationContext context, HttpClient httpClient, Map authManagers, - ConversationWebhooksAuthenticationValidation authenticationChecker) { + HmacAuthenticationValidation authenticationChecker) { this.authenticationChecker = authenticationChecker; this.uriUUID = uriUUID; this.api = new WebhooksApi(httpClient, context.getServer(), authManagers, new HttpMapper()); diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/AppMessageInternalMapper.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/AppMessageInternalMapper.java index cd439f287..477c72508 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/AppMessageInternalMapper.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/AppMessageInternalMapper.java @@ -4,10 +4,12 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.sinch.sdk.core.models.OptionalValue; import com.sinch.sdk.core.utils.databind.Mapper; +import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; import com.sinch.sdk.domains.conversation.models.v1.messages.types.card.CardMessage; import com.sinch.sdk.domains.conversation.models.v1.messages.types.card.CardMessageImpl; import com.sinch.sdk.domains.conversation.models.v1.messages.types.carousel.CarouselMessage; import com.sinch.sdk.domains.conversation.models.v1.messages.types.carousel.CarouselMessageMapper; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.ChannelSpecificMessage; import com.sinch.sdk.domains.conversation.models.v1.messages.types.choice.ChoiceMessage; import com.sinch.sdk.domains.conversation.models.v1.messages.types.choice.ChoiceMessageImpl; import com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo.ContactInfoMessage; @@ -22,6 +24,7 @@ import com.sinch.sdk.domains.conversation.models.v1.messages.types.template.TemplateMessageMapper; import com.sinch.sdk.domains.conversation.models.v1.messages.types.text.TextMessage; import com.sinch.sdk.domains.conversation.models.v1.messages.types.text.TextMessageImpl; +import java.util.Map; public class AppMessageInternalMapper { @@ -87,6 +90,14 @@ public OptionalValue templateMessage() { public OptionalValue textMessage() { return super.textMessage(); } + + @Override + @JsonSerialize( + using = ChannelSpecificMessageInternalMapper.ChannelSpecificMessageMapSerializer.class) + public OptionalValue> + channelSpecificMessage() { + return super.channelSpecificMessage(); + } } static class AppMessageInternalBuilderMapperMixin extends AppMessageInternalImpl.Builder { diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageInternalMapper.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageInternalMapper.java index 13a3904a0..27173859d 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageInternalMapper.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageInternalMapper.java @@ -1,18 +1,32 @@ package com.sinch.sdk.domains.conversation.models.v1.messages.internal; +import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.sinch.sdk.core.models.OptionalValue; import com.sinch.sdk.core.utils.databind.Mapper; +import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; +import com.sinch.sdk.domains.conversation.models.v1.messages.internal.ChannelSpecificMessageInternal.MessageTypeEnum; import com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.ChannelSpecificMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.whatsapp.flows.FlowChannelSpecificMessage; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; public class ChannelSpecificMessageInternalMapper { + private static final Logger LOGGER = + Logger.getLogger(ChannelSpecificMessageInternalMapper.class.getName()); public static void initMapper() { SimpleModule module = new SimpleModule().addDeserializer(ChannelSpecificMessage.class, new Deserializer()); + Mapper.getInstance().registerModule(module); } @@ -30,10 +44,80 @@ public Deserializer(Class vc) { public ChannelSpecificMessage deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { - ChannelSpecificMessageMessageInternalImpl deserialized = + Object deserialized = jp.readValueAs(ChannelSpecificMessageInternal.class); + + if (null == deserialized) { + return null; + } + if (!(deserialized instanceof ChannelSpecificMessageInternal)) { + // do not throw exception to not break all schema's deserialization + LOGGER.log(Level.SEVERE, "Input data does not match schema: {}", deserialized); + return null; + } + + ChannelSpecificMessageInternalImpl channelSpecificMessageInternalImpl = + (ChannelSpecificMessageInternalImpl) deserialized; + ChannelSpecificMessageMessageInternalImpl channelSpecificMessageMessageInternal = (ChannelSpecificMessageMessageInternalImpl) - jp.readValueAs(ChannelSpecificMessageMessageInternal.class); - return (ChannelSpecificMessage) deserialized.getActualInstance(); + channelSpecificMessageInternalImpl.getMessage(); + + if (null == channelSpecificMessageMessageInternal) { + return null; + } + return (ChannelSpecificMessage) channelSpecificMessageMessageInternal.getActualInstance(); + } + } + + static class ChannelSpecificMessageMapSerializer + extends StdSerializer>> { + + public ChannelSpecificMessageMapSerializer() { + this(null); + } + + public ChannelSpecificMessageMapSerializer( + Class>> t) { + super(t); + } + + @Override + public void serialize( + OptionalValue> raw, + JsonGenerator jgen, + SerializerProvider provider) + throws IOException { + + if (null == raw || !raw.isPresent()) { + return; + } + + Map value = raw.get(); + if (null == value) { + jgen.writeObject(null); + return; + } + + Map out = new HashMap<>(value.size()); + value.forEach( + (channel, message) -> { + ChannelSpecificMessageMessageInternalImpl internal = + new ChannelSpecificMessageMessageInternalImpl(); + internal.setActualInstance(message); + + MessageTypeEnum type = null; + ChannelSpecificMessageInternal.Builder builder = + ChannelSpecificMessageInternal.builder(); + if (message instanceof FlowChannelSpecificMessage) { + type = MessageTypeEnum.FLOWS; + } else { + // do not throw exception to not break all schema's serialization + LOGGER.log(Level.SEVERE, "Unexpected message: {}", message); + } + builder.setMessageType(type).setMessage(internal); + out.put(channel, builder.build()); + }); + + jgen.writeObject(out); } } } diff --git a/client/src/main/com/sinch/sdk/domains/sms/SMSService.java b/client/src/main/com/sinch/sdk/domains/sms/SMSService.java index 1d0da811f..4dccccb6e 100644 --- a/client/src/main/com/sinch/sdk/domains/sms/SMSService.java +++ b/client/src/main/com/sinch/sdk/domains/sms/SMSService.java @@ -9,6 +9,16 @@ */ public interface SMSService { + /** + * SMS Service V1 + * + * @return V1 service instance for project + * @see Documentation + * @since 1.5 + */ + com.sinch.sdk.domains.sms.api.v1.SMSService v1(); + /** * Batches Service instance * diff --git a/client/src/main/com/sinch/sdk/domains/sms/adapters/SMSService.java b/client/src/main/com/sinch/sdk/domains/sms/adapters/SMSService.java index 11f8f8926..07ed46fd1 100644 --- a/client/src/main/com/sinch/sdk/domains/sms/adapters/SMSService.java +++ b/client/src/main/com/sinch/sdk/domains/sms/adapters/SMSService.java @@ -29,6 +29,7 @@ public class SMSService implements com.sinch.sdk.domains.sms.SMSService { private final String uriUUID; private final SmsContext context; private final HttpClient httpClient; + private com.sinch.sdk.domains.sms.api.v1.SMSService v1; private BatchesService batches; private WebHooksService webHooks; private DeliveryReportsService deliveryReports; @@ -60,6 +61,10 @@ public SMSService( this.authManagers = Stream.of(new AbstractMap.SimpleEntry<>(SECURITY_SCHEME_KEYWORD_SMS, oAuthManager)) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + this.v1 = + new com.sinch.sdk.domains.sms.api.v1.adapters.SMSService( + credentials, context, oAuthServer, httpClient); } public SMSService( @@ -83,6 +88,14 @@ public SMSService( this.authManagers = Stream.of(new AbstractMap.SimpleEntry<>(SECURITY_SCHEME_KEYWORD_SMS, authManager)) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + this.v1 = + new com.sinch.sdk.domains.sms.api.v1.adapters.SMSService(credentials, context, httpClient); + } + + @Override + public com.sinch.sdk.domains.sms.api.v1.SMSService v1() { + return this.v1; } @Override diff --git a/client/src/main/com/sinch/sdk/domains/sms/api/v1/SMSService.java b/client/src/main/com/sinch/sdk/domains/sms/api/v1/SMSService.java new file mode 100644 index 000000000..92f06fcce --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/api/v1/SMSService.java @@ -0,0 +1,51 @@ +package com.sinch.sdk.domains.sms.api.v1; + +/** + * SMS Service + * + * @see https://developers.sinch.com/docs/sms/api-reference/ + * @since 1.5 + */ +public interface SMSService { + + /** + * Batches Service instance + * + * @return service instance for project + * @since 1.5 + */ + BatchesService batches(); + + /** + * Inbounds Service instance + * + * @return service instance for project + * @since 1.5 + */ + InboundsService inbounds(); + + /** + * Delivery Reports Service instance + * + * @return service instance for project + * @since 1.5 + */ + DeliveryReportsService deliveryReports(); + + /** + * Groups Service instance + * + * @return service instance for project + * @since 1.5 + */ + GroupsService groups(); + + /** + * WebHooksService Service instance + * + * @return service instance for project + * @since 1.5 + */ + WebHooksService webhooks(); +} diff --git a/client/src/main/com/sinch/sdk/domains/sms/api/v1/WebHooksService.java b/client/src/main/com/sinch/sdk/domains/sms/api/v1/WebHooksService.java new file mode 100644 index 000000000..1cf62c36c --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/api/v1/WebHooksService.java @@ -0,0 +1,47 @@ +package com.sinch.sdk.domains.sms.api.v1; + +import com.sinch.sdk.core.exceptions.ApiMappingException; +import com.sinch.sdk.domains.sms.models.v1.webhooks.SmsEvent; +import java.util.Map; + +/** + * SMS WebHooks service + * + *

Callbacks + * + *

A callback is an HTTP POST request with a notification made by the Sinch SMS REST API to a URI + * of your choosing. + * + *

The REST API expects the receiving server to respond with a response code within the 2xx + * success range. For 5xx the callback will be retried. For 429 + * the callback will be retried and the throughput will be lowered. For other status codes in the + * 4xx range the callback will not be retried. The first initial retry will happen 5 + * seconds after the first try. The next attempt is after 10 seconds, then after 20 seconds, after + * 40 seconds, after 80 seconds, doubling on every attempt. The last retry will be at 81920 seconds + * (or 22 hours 45 minutes) after the initial failed attempt. + * + *

The SMS REST API offers the following callback options which can be configured for your + * account upon request to your account manager. + * + *

    + *
  • Callback with mutual authentication over TLS (HTTPS) connection by provisioning the + * callback URL with client keystore and password. + *
  • Callback with basic authentication by provisioning the callback URL with username and + * password. + *
  • Callback with OAuth 2.0 by provisioning the callback URL with username, password and the + * URL to fetch OAuth access token. + *
  • Callback using AWS SNS by provisioning the callback URL with an Access Key ID, Secret Key + * and Region. + *
+ * + * @see https://developers.sinch.com/docs/sms/api-reference/sms/tag/Webhooks/ + * @since 1.5 + */ +public interface WebHooksService { + + SmsEvent parseEvent(String jsonPayload) throws ApiMappingException; + + boolean validateAuthenticationHeader( + String secret, Map headers, String jsonPayload); +} diff --git a/client/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/SMSService.java b/client/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/SMSService.java new file mode 100644 index 000000000..1650c4e51 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/SMSService.java @@ -0,0 +1,138 @@ +package com.sinch.sdk.domains.sms.api.v1.adapters; + +import com.sinch.sdk.auth.HmacAuthenticationValidation; +import com.sinch.sdk.auth.adapters.BearerAuthManager; +import com.sinch.sdk.auth.adapters.OAuthManager; +import com.sinch.sdk.core.http.AuthManager; +import com.sinch.sdk.core.http.HttpClient; +import com.sinch.sdk.core.http.HttpMapper; +import com.sinch.sdk.core.models.ServerConfiguration; +import com.sinch.sdk.core.utils.StringUtil; +import com.sinch.sdk.domains.sms.api.v1.BatchesService; +import com.sinch.sdk.domains.sms.api.v1.DeliveryReportsService; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import com.sinch.sdk.domains.sms.api.v1.InboundsService; +import com.sinch.sdk.models.SmsContext; +import com.sinch.sdk.models.SmsServicePlanCredentials; +import com.sinch.sdk.models.UnifiedCredentials; +import java.util.AbstractMap; +import java.util.Map; +import java.util.Objects; +import java.util.logging.Logger; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class SMSService implements com.sinch.sdk.domains.sms.api.v1.SMSService { + + private static final Logger LOGGER = Logger.getLogger(SMSService.class.getName()); + + private static final String SECURITY_SCHEME_KEYWORD_SMS = "BearerAuth"; + private final String uriUUID; + private final SmsContext context; + private final HttpClient httpClient; + private final Map authManagers; + + private BatchesService batches; + private InboundsService inbounds; + private DeliveryReportsService deliveryReports; + private GroupsService groups; + private WebHooksService webhooks; + + public SMSService( + UnifiedCredentials credentials, + SmsContext context, + ServerConfiguration oAuthServer, + HttpClient httpClient) { + + Objects.requireNonNull(credentials, "Credentials must be defined"); + Objects.requireNonNull(context, "Context must be defined"); + StringUtil.requireNonEmpty(credentials.getKeyId(), "'keyId' must be defined"); + StringUtil.requireNonEmpty(credentials.getKeySecret(), "'keySecret' must be defined"); + StringUtil.requireNonEmpty(credentials.getProjectId(), "'projectId' must be defined"); + StringUtil.requireNonEmpty(context.getSmsUrl(), "'smsUrl' must be defined"); + + LOGGER.fine("Activate SMS API with server='" + context.getSmsServer().getUrl() + "'"); + + OAuthManager oAuthManager = + new OAuthManager(credentials, oAuthServer, HttpMapper.getInstance(), httpClient); + + this.uriUUID = credentials.getProjectId(); + this.context = context; + this.httpClient = httpClient; + this.authManagers = + Stream.of(new AbstractMap.SimpleEntry<>(SECURITY_SCHEME_KEYWORD_SMS, oAuthManager)) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + } + + public SMSService( + SmsServicePlanCredentials credentials, SmsContext context, HttpClient httpClient) { + + Objects.requireNonNull(credentials, "Credentials must be defined"); + Objects.requireNonNull(context, "Context must be defined"); + StringUtil.requireNonEmpty(credentials.getServicePlanId(), "'servicePlanId' must be defined"); + StringUtil.requireNonEmpty(credentials.getApiToken(), "'apiToken' must be defined"); + StringUtil.requireNonEmpty(context.getSmsUrl(), "'smsUrl' must be defined"); + + LOGGER.fine( + "Activate SMS API with service plan ID support and server='" + + context.getSmsServer().getUrl() + + "'"); + + BearerAuthManager authManager = new BearerAuthManager(credentials.getApiToken()); + + this.uriUUID = credentials.getServicePlanId(); + this.context = context; + this.httpClient = httpClient; + this.authManagers = + Stream.of(new AbstractMap.SimpleEntry<>(SECURITY_SCHEME_KEYWORD_SMS, authManager)) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + } + + @Override + public BatchesService batches() { + if (null == this.batches) { + this.batches = + new BatchesServiceImpl( + httpClient, context.getSmsServer(), authManagers, HttpMapper.getInstance(), uriUUID); + } + return this.batches; + } + + @Override + public InboundsService inbounds() { + if (null == this.inbounds) { + this.inbounds = + new InboundsServiceImpl( + httpClient, context.getSmsServer(), authManagers, HttpMapper.getInstance(), uriUUID); + } + return this.inbounds; + } + + @Override + public DeliveryReportsService deliveryReports() { + if (null == this.deliveryReports) { + this.deliveryReports = + new DeliveryReportsServiceImpl( + httpClient, context.getSmsServer(), authManagers, HttpMapper.getInstance(), uriUUID); + } + return this.deliveryReports; + } + + @Override + public GroupsService groups() { + if (null == this.groups) { + this.groups = + new GroupsServiceImpl( + httpClient, context.getSmsServer(), authManagers, HttpMapper.getInstance(), uriUUID); + } + return this.groups; + } + + @Override + public WebHooksService webhooks() { + if (null == this.webhooks) { + this.webhooks = new WebHooksService(new HmacAuthenticationValidation()); + } + return this.webhooks; + } +} diff --git a/client/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/WebHooksService.java b/client/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/WebHooksService.java new file mode 100644 index 000000000..962b1de71 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/WebHooksService.java @@ -0,0 +1,32 @@ +package com.sinch.sdk.domains.sms.api.v1.adapters; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.sinch.sdk.auth.HmacAuthenticationValidation; +import com.sinch.sdk.core.exceptions.ApiMappingException; +import com.sinch.sdk.core.utils.databind.Mapper; +import com.sinch.sdk.domains.sms.models.v1.webhooks.SmsEvent; +import java.util.Map; + +public class WebHooksService implements com.sinch.sdk.domains.sms.api.v1.WebHooksService { + + private final HmacAuthenticationValidation authenticationChecker; + + public WebHooksService(HmacAuthenticationValidation authenticationChecker) { + this.authenticationChecker = authenticationChecker; + } + + public SmsEvent parseEvent(String jsonPayload) throws ApiMappingException { + + try { + return Mapper.getInstance().readValue(jsonPayload, SmsEvent.class); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + public boolean validateAuthenticationHeader( + String secret, Map headers, String jsonPayload) { + + return authenticationChecker.validateAuthenticationHeader(secret, headers, jsonPayload); + } +} diff --git a/client/src/main/com/sinch/sdk/domains/sms/api/v1/package-info.java b/client/src/main/com/sinch/sdk/domains/sms/api/v1/package-info.java new file mode 100644 index 000000000..190f1b57f --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/api/v1/package-info.java @@ -0,0 +1,6 @@ +/** + * SMS API interface + * + * @since 1.5 + */ +package com.sinch.sdk.domains.sms.api.v1; diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/requests/SendSmsBatchBinaryRequest.java b/client/src/main/com/sinch/sdk/domains/sms/models/requests/SendSmsBatchBinaryRequest.java index b0f17ee44..a3b2ce2f6 100644 --- a/client/src/main/com/sinch/sdk/domains/sms/models/requests/SendSmsBatchBinaryRequest.java +++ b/client/src/main/com/sinch/sdk/domains/sms/models/requests/SendSmsBatchBinaryRequest.java @@ -112,6 +112,7 @@ private Builder() { /** * @param flashMessage If sent as a flash message, displays true. * @return current builder + * @deprecated */ public Builder setFlashMessage(boolean flashMessage) { this.flashMessage = OptionalValue.of(flashMessage); @@ -121,6 +122,7 @@ public Builder setFlashMessage(boolean flashMessage) { /** * @param truncateConcat If set to true, the message was shortened when exceeding one part. * @return current builder + * @deprecated */ public Builder setTruncateConcat(boolean truncateConcat) { this.truncateConcat = OptionalValue.of(truncateConcat); @@ -130,6 +132,7 @@ public Builder setTruncateConcat(boolean truncateConcat) { /** * @param maxNumberOfMessageParts Displays the number of message parts set in the request. * @return current builder + * @deprecated */ public Builder setMaxNumberOfMessageParts(int maxNumberOfMessageParts) { this.maxNumberOfMessageParts = OptionalValue.of(maxNumberOfMessageParts); diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/package-info.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/package-info.java new file mode 100644 index 000000000..8527568af --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/package-info.java @@ -0,0 +1,6 @@ +/** + * SMS Batches API related models + * + * @since 1.5 + */ +package com.sinch.sdk.domains.sms.models.v1.batches; diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/BatchRequest.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/BatchRequest.java new file mode 100644 index 000000000..5af7766aa --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/BatchRequest.java @@ -0,0 +1,11 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +/** + * Base class for all batch request classes + * + * @see com.sinch.sdk.domains.sms.api.v1.BatchesService#send(BatchRequest) + * @see com.sinch.sdk.domains.sms.api.v1.BatchesService#dryRun(BatchRequest) + * @see com.sinch.sdk.domains.sms.api.v1.BatchesService#replace(String, BatchRequest) + * @since 1.5 + */ +public interface BatchRequest {} diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateBatchRequest.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateBatchRequest.java new file mode 100644 index 000000000..781034cbe --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateBatchRequest.java @@ -0,0 +1,9 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +/** + * Base class for all classes supported to update batches + * + * @see com.sinch.sdk.domains.sms.api.v1.BatchesService#update(String, UpdateBatchRequest) + * @since 1.5 + */ +public interface UpdateBatchRequest {} diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/package-info.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/package-info.java new file mode 100644 index 000000000..37e6560dc --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/package-info.java @@ -0,0 +1,6 @@ +/** + * Batches API requests related models + * + * @since 1.5 + */ +package com.sinch.sdk.domains.sms.models.v1.batches.request; diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/BatchResponse.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/BatchResponse.java new file mode 100644 index 000000000..f44bed4bd --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/BatchResponse.java @@ -0,0 +1,7 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.response; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.domains.sms.models.v1.batches.response.internal.BatchResponseInternalImpl; + +@JsonDeserialize(using = BatchResponseInternalImpl.Deserializer.class) +public interface BatchResponse {} diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/package-info.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/package-info.java new file mode 100644 index 000000000..46deffe24 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/package-info.java @@ -0,0 +1,6 @@ +/** + * Batches API responses related models + * + * @since 1.5 + */ +package com.sinch.sdk.domains.sms.models.v1.batches.response; diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReport.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReport.java new file mode 100644 index 000000000..0bdf1319e --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReport.java @@ -0,0 +1,16 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.internal.BatchDeliveryReportOneOfImpl; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.request.BatchDeliveryReportQueryParameters; + +/** + * Base class for all classes supporting Batch DeliveryReport + * + * @see com.sinch.sdk.domains.sms.api.v1.DeliveryReportsService#get(String, + * BatchDeliveryReportQueryParameters) + * @see com.sinch.sdk.domains.sms.api.v1.WebHooksService#parseEvent(String) + * @since 1.5 + */ +@JsonDeserialize(using = BatchDeliveryReportOneOfImpl.Deserializer.class) +public interface BatchDeliveryReport extends DeliveryReport {} diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/DeliveryReport.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/DeliveryReport.java new file mode 100644 index 000000000..75d30610d --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/DeliveryReport.java @@ -0,0 +1,11 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.sinch.sdk.domains.sms.models.v1.webhooks.SmsEvent; + +/** + * Base class for all classes supporting DeliveryReport + * + * @see com.sinch.sdk.domains.sms.api.v1.WebHooksService#parseEvent(String) + * @since 1.5 + */ +public interface DeliveryReport extends SmsEvent {} diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReport.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReport.java new file mode 100644 index 000000000..536cb2204 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReport.java @@ -0,0 +1,17 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.internal.RecipientDeliveryReportOneOfImpl; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.request.ListDeliveryReportsQueryParameters; + +/** + * Base class for all classes supporting Recipient DeliveryReport + * + * @see com.sinch.sdk.domains.sms.api.v1.DeliveryReportsService#getForNumber(String, String) + * @see + * com.sinch.sdk.domains.sms.api.v1.DeliveryReportsService#list(ListDeliveryReportsQueryParameters) + * @see com.sinch.sdk.domains.sms.api.v1.WebHooksService#parseEvent(String) + * @since 1.5 + */ +@JsonDeserialize(using = RecipientDeliveryReportOneOfImpl.Deserializer.class) +public interface RecipientDeliveryReport extends DeliveryReport {} diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/package-info.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/package-info.java new file mode 100644 index 000000000..00b4ce163 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/package-info.java @@ -0,0 +1,6 @@ +/** + * SMS Delivery Reports API related models + * + * @since 1.5 + */ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/package-info.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/package-info.java new file mode 100644 index 000000000..c6de71fda --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/package-info.java @@ -0,0 +1,6 @@ +/** + * Delivery Reports API requests related models + * + * @since 1.5 + */ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports.request; diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/response/package-info.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/response/package-info.java new file mode 100644 index 000000000..a4facb36c --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/response/package-info.java @@ -0,0 +1,6 @@ +/** + * Delivery Reports API responses related models + * + * @since 1.5 + */ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports.response; diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/groups/package-info.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/groups/package-info.java new file mode 100644 index 000000000..18ee160b4 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/groups/package-info.java @@ -0,0 +1,6 @@ +/** + * SMS Groups API related models + * + * @since 1.5 + */ +package com.sinch.sdk.domains.sms.models.v1.groups; diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/package-info.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/package-info.java new file mode 100644 index 000000000..98b122470 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/package-info.java @@ -0,0 +1,6 @@ +/** + * Groups API requests related models + * + * @since 1.5 + */ +package com.sinch.sdk.domains.sms.models.v1.groups.request; diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/groups/response/package-info.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/groups/response/package-info.java new file mode 100644 index 000000000..2ec79ea72 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/groups/response/package-info.java @@ -0,0 +1,6 @@ +/** + * Groups API responses related models + * + * @since 1.5 + */ +package com.sinch.sdk.domains.sms.models.v1.groups.response; diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/InboundMessage.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/InboundMessage.java new file mode 100644 index 000000000..a24878770 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/InboundMessage.java @@ -0,0 +1,17 @@ +package com.sinch.sdk.domains.sms.models.v1.inbounds; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.domains.sms.models.v1.inbounds.request.ListInboundMessagesQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.inbounds.response.internal.InboundInternalImpl; +import com.sinch.sdk.domains.sms.models.v1.webhooks.SmsEvent; + +/** + * Base class for all classes supporting InBounds + * + * @see com.sinch.sdk.domains.sms.api.v1.InboundsService#get(String) + * @see com.sinch.sdk.domains.sms.api.v1.InboundsService#list(ListInboundMessagesQueryParameters) + * @see com.sinch.sdk.domains.sms.api.v1.WebHooksService#parseEvent(String) + * @since 1.5 + */ +@JsonDeserialize(using = InboundInternalImpl.Deserializer.class) +public interface InboundMessage extends SmsEvent {} diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/package-info.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/package-info.java new file mode 100644 index 000000000..fcbc1eac7 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/package-info.java @@ -0,0 +1,6 @@ +/** + * SMS Inbounds API related models + * + * @since 1.5 + */ +package com.sinch.sdk.domains.sms.models.v1.inbounds; diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/request/package-info.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/request/package-info.java new file mode 100644 index 000000000..42b49db2e --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/request/package-info.java @@ -0,0 +1,6 @@ +/** + * Inbounds API requests related models + * + * @since 1.5 + */ +package com.sinch.sdk.domains.sms.models.v1.inbounds.request; diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/package-info.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/package-info.java new file mode 100644 index 000000000..948cfcd60 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/package-info.java @@ -0,0 +1,6 @@ +/** + * Inbounds API responses related models + * + * @since 1.5 + */ +package com.sinch.sdk.domains.sms.models.v1.inbounds.response; diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/internal/SMSCursorPageNavigator.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/internal/SMSCursorPageNavigator.java new file mode 100644 index 000000000..1075d0ab0 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/internal/SMSCursorPageNavigator.java @@ -0,0 +1,35 @@ +package com.sinch.sdk.domains.sms.models.v1.internal; + +import com.sinch.sdk.core.models.pagination.PageNavigator; + +public class SMSCursorPageNavigator extends PageNavigator { + + private final Integer currentPage; + private final Integer pageSize; + + public SMSCursorPageNavigator(Integer currentPage, Integer pageSize) { + super(null); + this.currentPage = currentPage; + this.pageSize = pageSize; + } + + private Integer computeNextPageCursor() { + return null == pageSize || pageSize == 0 ? null : currentPage + 1; + } + + @Override + public Integer getToken() { + return computeNextPageCursor(); + } + + @Override + public String toString() { + return "SMSCursorPageNavigator{" + + "currentPage=" + + currentPage + + ", pageSize=" + + pageSize + + "} " + + super.toString(); + } +} diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/package-info.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/package-info.java new file mode 100644 index 000000000..a31fb92a3 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/package-info.java @@ -0,0 +1,6 @@ +/** + * SMS API related models + * + * @since 1.5 + */ +package com.sinch.sdk.domains.sms.models.v1; diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/webhooks/SmsEvent.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/webhooks/SmsEvent.java new file mode 100644 index 000000000..6257897ec --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/webhooks/SmsEvent.java @@ -0,0 +1,13 @@ +package com.sinch.sdk.domains.sms.models.v1.webhooks; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.domains.sms.models.v1.webhooks.internal.WebhookEventOneOfImpl; + +/** + * Base class for all WebHook event's class + * + * @see com.sinch.sdk.domains.sms.api.v1.WebHooksService#parseEvent(String) + * @since 1.5 + */ +@JsonDeserialize(using = WebhookEventOneOfImpl.Deserializer.class) +public interface SmsEvent {} diff --git a/client/src/main/com/sinch/sdk/domains/sms/models/v1/webhooks/package-info.java b/client/src/main/com/sinch/sdk/domains/sms/models/v1/webhooks/package-info.java new file mode 100644 index 000000000..f1aa66b4d --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/sms/models/v1/webhooks/package-info.java @@ -0,0 +1,57 @@ +/** + * SMS API webhooks related models + * + *

Incoming SMS WebHook

+ * + *

An inbound message is a message sent to one of your short codes or long numbers from a mobile + * phone. To receive inbound message callbacks, a URL needs to be added to your REST API. + * + *

This URL can be specified in your Dashboard. + * + *

See https://developers.sinch.com/docs/sms/api-reference/sms/tag/Webhooks/#tag/Webhooks/operation/incomingSMS + * + *

Delivery Report WebHook

+ * + *

A delivery report contains the status and status code for each recipient of a batch. To get a + * delivery report callback for a message or batch of messages, set the delivery_report + * field accordingly when creating a batch. + * + *

The following is provided so you can better understand our webhooks/callbacks. Configuration + * of both webhooks and the type of delivery report requested happens when sending a batch. + * + *

Callback URL + * + *

The callback URL can either be provided for each batch or provisioned globally for your + * account in your Sinch Customer Dashboard. + * Learn how to configure a webhook/callback here + * + *

Type + * + *

The type is the type of delivery report webhook. The response will vary depending + * on the webhook delivery report you selected when the batch was sent, so choose the appropriate + * selection under "One of". + * + *

    + *
  • The delivery_report_sms and delivery_report_mms types are + * documented under Delivery report. + *

    These are reports containing either + * a full report or summary report, depending on your selection at the time the batch was + * sent. + *

  • The recipient_delivery_report_sms and recipient_delivery_report_mms + * delivery report types are documented under Recipient delivery report. + *

    These are delivery reports for recipient phone numbers. If you set per_recipient + * for the delivery_report parameter when sending the batch, a recipient + * report gets sent to you for each status change for each recipient in your batch. If you set + * per_recipient_final, a recipient report gets sent to you for the final status + * of each recipient in your batch. + *

+ * + * See https://developers.sinch.com/docs/sms/api-reference/sms/tag/Webhooks/#tag/Webhooks/operation/deliveryReport + * + * @since 1.5 + */ +package com.sinch.sdk.domains.sms.models.v1.webhooks; diff --git a/client/src/main/com/sinch/sdk/package-info.java b/client/src/main/com/sinch/sdk/package-info.java index d930893d6..2e4779f4f 100644 --- a/client/src/main/com/sinch/sdk/package-info.java +++ b/client/src/main/com/sinch/sdk/package-info.java @@ -1,5 +1,5 @@ /** - * Sinch Java SDK for Numbers, SMS & Verification + * Sinch Java SDK for Conversation, Numbers, SMS, Verification & Voice * *

Provides the client necessary to interface with Sinch APIS * diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationWebhooksAuthenticationValidationTest.java b/client/src/test/java/com/sinch/sdk/auth/HmacAuthenticationValidationTest.java similarity index 71% rename from client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationWebhooksAuthenticationValidationTest.java rename to client/src/test/java/com/sinch/sdk/auth/HmacAuthenticationValidationTest.java index 6851a88f4..7d7e09273 100644 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationWebhooksAuthenticationValidationTest.java +++ b/client/src/test/java/com/sinch/sdk/auth/HmacAuthenticationValidationTest.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.api.v1.adapters; +package com.sinch.sdk.auth; import static org.junit.jupiter.api.Assertions.*; @@ -9,23 +9,21 @@ import java.util.stream.Stream; import org.junit.jupiter.api.Test; -class ConversationWebhooksAuthenticationValidationTest { +class HmacAuthenticationValidationTest { - ConversationWebhooksAuthenticationValidation webhooksService = - new ConversationWebhooksAuthenticationValidation(); + HmacAuthenticationValidation webhooksService = new HmacAuthenticationValidation(); Map headers = Stream.of( new AbstractMap.SimpleEntry<>( - ConversationWebhooksAuthenticationValidation.SIGNATURE_HEADER, + HmacAuthenticationValidation.SIGNATURE_HEADER, "6bpJoRmFoXVjfJIVglMoJzYXxnoxRujzR4k2GOXewOE="), new AbstractMap.SimpleEntry<>( - ConversationWebhooksAuthenticationValidation.ALGORITHM_HEADER, "HmacSHA256"), + HmacAuthenticationValidation.ALGORITHM_HEADER, "HmacSHA256"), new AbstractMap.SimpleEntry<>( - ConversationWebhooksAuthenticationValidation.NONCE_HEADER, - "01FJA8B4A7BM43YGWSG9GBV067"), + HmacAuthenticationValidation.NONCE_HEADER, "01FJA8B4A7BM43YGWSG9GBV067"), new AbstractMap.SimpleEntry<>( - ConversationWebhooksAuthenticationValidation.TIMESTAMP_HEADER, "1634579353")) + HmacAuthenticationValidation.TIMESTAMP_HEADER, "1634579353")) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); String secret = "foo_secret1234"; @@ -66,11 +64,7 @@ void checkValidateAuthenticatedRequestMissingSignature() { Map headerSet = headers.entrySet().stream() - .filter( - entry -> - !entry - .getKey() - .equals(ConversationWebhooksAuthenticationValidation.SIGNATURE_HEADER)) + .filter(entry -> !entry.getKey().equals(HmacAuthenticationValidation.SIGNATURE_HEADER)) .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); boolean authenticationResult = @@ -84,11 +78,7 @@ void checkValidateAuthenticatedRequestMissingAlgorithm() { Map headerSet = headers.entrySet().stream() - .filter( - entry -> - !entry - .getKey() - .equals(ConversationWebhooksAuthenticationValidation.ALGORITHM_HEADER)) + .filter(entry -> !entry.getKey().equals(HmacAuthenticationValidation.ALGORITHM_HEADER)) .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); boolean authenticationResult = @@ -102,11 +92,7 @@ void checkValidateAuthenticatedMissingNonce() { Map headerSet = headers.entrySet().stream() - .filter( - entry -> - !entry - .getKey() - .equals(ConversationWebhooksAuthenticationValidation.NONCE_HEADER)) + .filter(entry -> !entry.getKey().equals(HmacAuthenticationValidation.NONCE_HEADER)) .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); boolean authenticationResult = @@ -120,11 +106,7 @@ void checkValidateAuthenticatedMissingTimeStamp() { Map headerSet = headers.entrySet().stream() - .filter( - entry -> - !entry - .getKey() - .equals(ConversationWebhooksAuthenticationValidation.TIMESTAMP_HEADER)) + .filter(entry -> !entry.getKey().equals(HmacAuthenticationValidation.TIMESTAMP_HEADER)) .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); boolean authenticationResult = diff --git a/client/src/test/java/com/sinch/sdk/domains/PaginationFillerHelper.java b/client/src/test/java/com/sinch/sdk/domains/PaginationFillerHelper.java new file mode 100644 index 000000000..aec8749f6 --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/domains/PaginationFillerHelper.java @@ -0,0 +1,29 @@ +package com.sinch.sdk.domains; + +import com.sinch.sdk.core.http.URLParameter; +import com.sinch.sdk.core.http.URLParameter.STYLE; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class PaginationFillerHelper { + + public static Collection parametersFiller( + String name, Object value, STYLE style, boolean explode, List values) { + + List parameters = new ArrayList<>(); + + URLParameter parameter = new URLParameter(name, value, style, explode); + parameters.add(parameter); + for (int i = 0; i < values.size(); ) { + parameter = + new URLParameter( + (String) values.get(i++), + values.get(i++), + (STYLE) values.get(i++), + (boolean) values.get(i++)); + parameters.add(parameter); + } + return parameters; + } +} diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksClientServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksClientServiceTest.java index 24fb82e75..f4430de81 100644 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksClientServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksClientServiceTest.java @@ -8,6 +8,7 @@ import static org.mockito.Mockito.when; import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.sinch.sdk.auth.HmacAuthenticationValidation; import com.sinch.sdk.core.TestHelpers; import com.sinch.sdk.core.exceptions.ApiException; import com.sinch.sdk.core.http.AuthManager; @@ -40,7 +41,7 @@ public class WebHooksClientServiceTest extends ConversationBaseTest { @Mock WebhooksApi api; @Mock HttpClient httpClient; @Mock Map authManagers; - @Mock ConversationWebhooksAuthenticationValidation authenticationValidation; + @Mock HmacAuthenticationValidation authenticationValidation; @Captor ArgumentCaptor uriPartIDCaptor; @Captor ArgumentCaptor idCaptor; diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksServiceTest.java index d9feab74d..136dbd3ce 100644 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksServiceTest.java @@ -5,6 +5,7 @@ import com.adelean.inject.resources.junit.jupiter.GivenTextResource; import com.adelean.inject.resources.junit.jupiter.TestWithResources; import com.sinch.sdk.SinchClient; +import com.sinch.sdk.auth.HmacAuthenticationValidation; import com.sinch.sdk.core.exceptions.ApiException; import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.capability.CapabilityEvent; import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.channel.ChannelEvent; @@ -119,15 +120,14 @@ void checkApplicationAuthentication() throws ApiException { Map headers = Stream.of( new AbstractMap.SimpleEntry<>( - ConversationWebhooksAuthenticationValidation.SIGNATURE_HEADER, + HmacAuthenticationValidation.SIGNATURE_HEADER, "6bpJoRmFoXVjfJIVglMoJzYXxnoxRujzR4k2GOXewOE="), new AbstractMap.SimpleEntry<>( - ConversationWebhooksAuthenticationValidation.ALGORITHM_HEADER, "HmacSHA256"), + HmacAuthenticationValidation.ALGORITHM_HEADER, "HmacSHA256"), new AbstractMap.SimpleEntry<>( - ConversationWebhooksAuthenticationValidation.NONCE_HEADER, - "01FJA8B4A7BM43YGWSG9GBV067"), + HmacAuthenticationValidation.NONCE_HEADER, "01FJA8B4A7BM43YGWSG9GBV067"), new AbstractMap.SimpleEntry<>( - ConversationWebhooksAuthenticationValidation.TIMESTAMP_HEADER, "1634579353")) + HmacAuthenticationValidation.TIMESTAMP_HEADER, "1634579353")) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); boolean authenticationResult = diff --git a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/BatchesServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/BatchesServiceTest.java index c1f461e02..e2b2b1ad2 100644 --- a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/BatchesServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/BatchesServiceTest.java @@ -246,25 +246,25 @@ public class BatchesServiceTest extends BaseTest { .setUdh(udh) .build(); - @GivenJsonResource("/domains/sms/v1/BinaryResponseDto.json") + @GivenJsonResource("/domains/sms/v1/batches/response/BinaryResponseDto.json") public SendSMS201ResponseDto binaryResponseDto; - @GivenJsonResource("/domains/sms/v1/MediaResponseDto.json") + @GivenJsonResource("/domains/sms/v1/batches/response/MediaResponseDto.json") SendSMS201ResponseDto mediaResponseDto; - @GivenJsonResource("/domains/sms/v1/TextResponseDto.json") + @GivenJsonResource("/domains/sms/v1/batches/response/TextResponseDto.json") SendSMS201ResponseDto textResponseDto; - @GivenJsonResource("/domains/sms/v1/DryRunResponseDto.json") + @GivenJsonResource("/domains/sms/v1/batches/response/DryRunResponseDto.json") DryRun200ResponseDto dryRunResponseDto; - @GivenJsonResource("/domains/sms/v1/ListBatchesResponseDtoPage0.json") + @GivenJsonResource("/domains/sms/v1/batches/response/ListBatchesResponseDtoPage0.json") ApiBatchListDto listBatchesResponseDtoPage0; - @GivenJsonResource("/domains/sms/v1/ListBatchesResponseDtoPage1.json") + @GivenJsonResource("/domains/sms/v1/batches/response/ListBatchesResponseDtoPage1.json") ApiBatchListDto listBatchesResponseDtoPage1; - @GivenJsonResource("/domains/sms/v1/ListBatchesResponseDtoPage2.json") + @GivenJsonResource("/domains/sms/v1/batches/response/ListBatchesResponseDtoPage2.json") ApiBatchListDto listBatchesResponseDtoPage2; @Mock SmsContext context; diff --git a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/DeliveryReportsServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/DeliveryReportsServiceTest.java index dde863784..b82028ca0 100644 --- a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/DeliveryReportsServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/DeliveryReportsServiceTest.java @@ -50,25 +50,28 @@ class DeliveryReportsServiceTest extends BaseTest { DeliveryReportsService service; String uriPartID = "foovalue"; - @GivenJsonResource("/domains/sms/v1/DeliveryReportBatchSMSDto.json") + @GivenJsonResource("/domains/sms/v1/deliveryreports/BatchDeliveryReportSMSDto.json") DeliveryReportDto deliveryReportBatchSMSDto; - @GivenJsonResource("/domains/sms/v1/DeliveryReportBatchMMSDto.json") + @GivenJsonResource("/domains/sms/v1/deliveryreports/BatchDeliveryReportMMSDto.json") DeliveryReportDto deliveryReportBatchMMSDto; - @GivenJsonResource("/domains/sms/v1/DeliveryReportRecipientSMSDto.json") + @GivenJsonResource("/domains/sms/v1/deliveryreports/RecipientDeliveryReportSMSDto.json") RecipientDeliveryReportDto deliveryReportRecipientSMSDto; - @GivenJsonResource("/domains/sms/v1/DeliveryReportRecipientMMSDto.json") + @GivenJsonResource("/domains/sms/v1/deliveryreports/RecipientDeliveryReportMMSDto.json") RecipientDeliveryReportDto deliveryReportRecipientMMSDto; - @GivenJsonResource("/domains/sms/v1/ListDeliveryReportResponseDtoPage0.json") + @GivenJsonResource( + "/domains/sms/v1/deliveryreports/response/ListDeliveryReportResponseDtoPage0.json") DeliveryReportListDto listDeliveryReportResponseDtoPage0; - @GivenJsonResource("/domains/sms/v1/ListDeliveryReportResponseDtoPage1.json") + @GivenJsonResource( + "/domains/sms/v1/deliveryreports/response/ListDeliveryReportResponseDtoPage1.json") DeliveryReportListDto listDeliveryReportResponseDtoPage1; - @GivenJsonResource("/domains/sms/v1/ListDeliveryReportResponseDtoPage2.json") + @GivenJsonResource( + "/domains/sms/v1/deliveryreports/response/ListDeliveryReportResponseDtoPage2.json") DeliveryReportListDto listDeliveryReportResponseDtoPage2; @BeforeEach diff --git a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/GroupsServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/GroupsServiceTest.java index 9bc1bfe99..41ed9aac2 100644 --- a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/GroupsServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/GroupsServiceTest.java @@ -51,16 +51,16 @@ class GroupsServiceTest extends BaseTest { @Captor ArgumentCaptor groupIdCaptor; - @GivenJsonResource("/domains/sms/v1/GroupResponseDto.json") + @GivenJsonResource("/domains/sms/v1/groups/GroupDto.json") CreateGroupResponseDto createGroupResponseDto; - @GivenJsonResource("/domains/sms/v1/GroupsListResponseDtoPage0.json") + @GivenJsonResource("/domains/sms/v1/groups/response/ListGroupsResponseDtoPage0.json") ApiGroupListDto groupsListResponseDtoPage0; - @GivenJsonResource("/domains/sms/v1/GroupsListResponseDtoPage1.json") + @GivenJsonResource("/domains/sms/v1/groups/response/ListGroupsResponseDtoPage1.json") ApiGroupListDto groupsListResponseDtoPage1; - @GivenJsonResource("/domains/sms/v1/GroupsListResponseDtoPage2.json") + @GivenJsonResource("/domains/sms/v1/groups/response/ListGroupsResponseDtoPage2.json") ApiGroupListDto groupsListResponseDtoPage2; @BeforeEach @@ -121,14 +121,11 @@ void list() throws ApiException { .setAutoUpdate( GroupAutoUpdate.builder() .setTo("15551231234") - .setAdd( - GroupAutoUpdateKeyword.builder() - .setFirstWord("Add 1st keyword") - .build()) + .setAdd(GroupAutoUpdateKeyword.builder().setFirstWord("1stKeyword").build()) .setRemove( GroupAutoUpdateKeyword.builder() - .setFirstWord("remove 1st keyword") - .setSecondWord("remove 2nd keyword") + .setFirstWord("1stKeyword") + .setSecondWord("2ndKeyword") .build()) .build()) .build()); @@ -155,14 +152,11 @@ void list() throws ApiException { .setAutoUpdate( GroupAutoUpdate.builder() .setTo("15551231234") - .setAdd( - GroupAutoUpdateKeyword.builder() - .setFirstWord("Add 1st keyword") - .build()) + .setAdd(GroupAutoUpdateKeyword.builder().setFirstWord("1stKeyword").build()) .setRemove( GroupAutoUpdateKeyword.builder() - .setFirstWord("remove 1st keyword") - .setSecondWord("remove 2nd keyword") + .setFirstWord("1stKeyword") + .setSecondWord("2ndKeyword") .build()) .build()) .build()); diff --git a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/InboundsServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/InboundsServiceTest.java index f75637c62..bc3816cd3 100644 --- a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/InboundsServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/InboundsServiceTest.java @@ -40,19 +40,19 @@ class InboundsServiceTest extends BaseTest { String uriPartID = "foovalue"; - @GivenJsonResource("/domains/sms/v1/MOBinaryDto.json") + @GivenJsonResource("/domains/sms/v1/inbounds/InboundBinaryDto.json") InboundDto binary; - @GivenJsonResource("/domains/sms/v1/MOTextDto.json") + @GivenJsonResource("/domains/sms/v1/inbounds/InboundTextDto.json") InboundDto text; - @GivenJsonResource("/domains/sms/v1/InboundsListResponseDtoPage0.json") + @GivenJsonResource("/domains/sms/v1/inbounds/response/internal/InboundsListResponseDtoPage0.json") ApiInboundListDto inboundsLisResponseDtoPage0; - @GivenJsonResource("/domains/sms/v1/InboundsListResponseDtoPage1.json") + @GivenJsonResource("/domains/sms/v1/inbounds/response/internal/InboundsListResponseDtoPage1.json") ApiInboundListDto inboundsLisResponseDtoPage1; - @GivenJsonResource("/domains/sms/v1/InboundsListResponseDtoPage2.json") + @GivenJsonResource("/domains/sms/v1/inbounds/response/internal/InboundsListResponseDtoPage2.json") ApiInboundListDto inboundsLisResponseDtoPage2; @BeforeEach diff --git a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/WebHooksServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/WebHooksServiceTest.java index afe604226..5a3fbcb0f 100644 --- a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/WebHooksServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/WebHooksServiceTest.java @@ -28,22 +28,22 @@ @TestWithResources public class WebHooksServiceTest extends BaseTest { - @GivenTextResource("/domains/sms/v1/MOBinaryDto.json") + @GivenTextResource("/domains/sms/v1/inbounds/InboundBinaryDto.json") String incomingSMSBinaryJsonString; - @GivenTextResource("/domains/sms/v1/MOTextDto.json") + @GivenTextResource("/domains/sms/v1/inbounds/InboundTextDto.json") String incomingSMSTextJsonString; - @GivenTextResource("/domains/sms/v1/DeliveryReportRecipientSMSDto.json") + @GivenTextResource("/domains/sms/v1/deliveryreports/RecipientDeliveryReportSMSDto.json") String deliveryReportRecipientSMSJsonString; - @GivenTextResource("/domains/sms/v1/DeliveryReportRecipientMMSDto.json") + @GivenTextResource("/domains/sms/v1/deliveryreports/RecipientDeliveryReportMMSDto.json") String deliveryReportRecipientMMSJsonString; - @GivenTextResource("/domains/sms/v1/DeliveryReportBatchSMSDto.json") + @GivenTextResource("/domains/sms/v1/deliveryreports/BatchDeliveryReportSMSDto.json") String deliveryReportBatchSMSJsonString; - @GivenTextResource("/domains/sms/v1/DeliveryReportBatchMMSDto.json") + @GivenTextResource("/domains/sms/v1/deliveryreports/BatchDeliveryReportMMSDto.json") String deliveryReportBatchMMSJsonString; @InjectMocks WebHooksService service; diff --git a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/converters/BatchDtoConverterTest.java b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/converters/BatchDtoConverterTest.java index b5428ace0..22ea01b7e 100644 --- a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/converters/BatchDtoConverterTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/converters/BatchDtoConverterTest.java @@ -27,22 +27,22 @@ @TestWithResources class BatchDtoConverterTest extends BaseTest { - @GivenJsonResource("/domains/sms/v1/BinaryResponseDto.json") + @GivenJsonResource("/domains/sms/v1/batches/response/BinaryResponseDto.json") public SendSMS201ResponseDto binaryResponseDto; - @GivenJsonResource("/domains/sms/v1/TextResponseDto.json") + @GivenJsonResource("/domains/sms/v1/batches/response/TextResponseDto.json") public SendSMS201ResponseDto textResponseDto; - @GivenJsonResource("/domains/sms/v1/MediaResponseDto.json") + @GivenJsonResource("/domains/sms/v1/batches/response/MediaResponseDto.json") public SendSMS201ResponseDto mediaResponseDto; - @GivenJsonResource("/domains/sms/v1/SendSMSBinaryRequestDto.json") + @GivenJsonResource("/domains/sms/v1/BinaryRequestDto.json") public SendSMSRequestDto sendBinaryRequestDto; - @GivenJsonResource("/domains/sms/v1/SendSMSTextRequestDto.json") + @GivenJsonResource("/domains/sms/v1/batches/request/TextRequestDto.json") public SendSMSRequestDto sendTextRequestDto; - @GivenJsonResource("/domains/sms/v1/SendSMSMediaRequestDto.json") + @GivenJsonResource("/domains/sms/v1/batches/request/MediaRequestDto.json") public SendSMSRequestDto sendMediaRequestDto; @GivenJsonResource("/domains/sms/v1/UpdateSMSTextRequestDto.json") diff --git a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/converters/DeliveryReportBatchDtoConverterTest.java b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/converters/DeliveryReportBatchDtoConverterTest.java index 789d6416d..cbfd8a515 100644 --- a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/converters/DeliveryReportBatchDtoConverterTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/converters/DeliveryReportBatchDtoConverterTest.java @@ -22,10 +22,10 @@ @TestWithResources class DeliveryReportBatchDtoConverterTest extends BaseTest { - @GivenJsonResource("/domains/sms/v1/DeliveryReportBatchSMSDto.json") + @GivenJsonResource("/domains/sms/v1/deliveryreports/BatchDeliveryReportSMSDto.json") DeliveryReportDto deliveryReportSMSClientDto; - @GivenJsonResource("/domains/sms/v1/DeliveryReportBatchMMSDto.json") + @GivenJsonResource("/domains/sms/v1/deliveryreports/BatchDeliveryReportMMSDto.json") DeliveryReportDto deliveryReportMMSClientDto; public static void compareWithDto( diff --git a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/converters/DryRunDtoConverterTest.java b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/converters/DryRunDtoConverterTest.java index 4f53ccaa1..7b262f973 100644 --- a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/converters/DryRunDtoConverterTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/converters/DryRunDtoConverterTest.java @@ -13,7 +13,7 @@ @TestWithResources public class DryRunDtoConverterTest extends BaseTest { - @GivenJsonResource("/domains/sms/v1/DryRunResponseDto.json") + @GivenJsonResource("/domains/sms/v1/batches/response/DryRunResponseDto.json") DryRun200ResponseDto loadedDto; public static DryRun dryRunClient = diff --git a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/converters/GroupsDtoConverterTest.java b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/converters/GroupsDtoConverterTest.java index dba3a52ee..047c233f6 100644 --- a/client/src/test/java/com/sinch/sdk/domains/sms/adapters/converters/GroupsDtoConverterTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/sms/adapters/converters/GroupsDtoConverterTest.java @@ -27,16 +27,16 @@ @TestWithResources class GroupsDtoConverterTest extends BaseTest { - @GivenJsonResource("/domains/sms/v1/GroupResponseDto.json") + @GivenJsonResource("/domains/sms/v1/groups/GroupDto.json") CreateGroupResponseDto createGroupResponseDto; - @GivenJsonResource("/domains/sms/v1/GroupCreateRequestParametersDto.json") + @GivenJsonResource("/domains/sms/v1/CreateGroupRequestDto.json") GroupObjectDto createGroupRequestParametersDto; - @GivenJsonResource("/domains/sms/v1/GroupUpdateRequestParametersDto.json") + @GivenJsonResource("/domains/sms/v1/groups/request/GroupUpdateRequestDto.json") UpdateGroupRequestDto groupUpdateRequestParametersDto; - @GivenJsonResource("/domains/sms/v1/GroupReplaceRequestParametersDto.json") + @GivenJsonResource("/domains/sms/v1/ReplaceGroupRequestDto.json") ReplaceGroupRequestDto groupReplaceRequestParametersDto; static void compareWithDto(Group client, CreateGroupResponseDto dto) { @@ -105,16 +105,17 @@ void convertUpdateRequestParameters() throws UnexpectedException { GroupUpdateRequestParameters client = GroupUpdateRequestParameters.builder() .setName("My new customers") - .setAdd(Collections.singletonList("foo")) - .setRemove(Arrays.asList("01FC66621XXXXX119Z8PMV1AHY", "01FC66621XXXXX119Z8PMV1A00")) - .setAddFromGroup("add from group string") - .setRemoveFromGroup("remove from group string") + .setAdd(Collections.singletonList("+12345674890")) + .setRemove(Arrays.asList("+0987654321", "+3456789123")) + .setAddFromGroup("01FC66621XXXXX119Z8PMV1AHY") + .setRemoveFromGroup("01FC66621XXXXX119Z8PMV1A00") .setAutoUpdate( GroupAutoUpdateRequestParameters.builder() .setTo("15551231234") .setAdd( GroupAutoUpdateKeywordRequestParameters.builder() .setFirstWord("Add 1st keyword") + .setSecondWord("Add 2nd keyword") .build()) .setRemove( GroupAutoUpdateKeywordRequestParameters.builder() diff --git a/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/BatchesServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/BatchesServiceTest.java new file mode 100644 index 000000000..c13c7b9fa --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/BatchesServiceTest.java @@ -0,0 +1,505 @@ +package com.sinch.sdk.domains.sms.api.v1.adapters; + +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + +import com.adelean.inject.resources.junit.jupiter.GivenJsonResource; +import com.adelean.inject.resources.junit.jupiter.GivenTextResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.sinch.sdk.BaseTest; +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.core.http.AuthManager; +import com.sinch.sdk.core.http.HttpClient; +import com.sinch.sdk.core.http.HttpContentType; +import com.sinch.sdk.core.http.HttpMapper; +import com.sinch.sdk.core.http.HttpMethod; +import com.sinch.sdk.core.http.HttpRequest; +import com.sinch.sdk.core.http.HttpRequestTest.HttpRequestMatcher; +import com.sinch.sdk.core.http.HttpResponse; +import com.sinch.sdk.core.http.URLParameter; +import com.sinch.sdk.core.http.URLParameter.STYLE; +import com.sinch.sdk.core.http.URLPathUtils; +import com.sinch.sdk.core.models.ServerConfiguration; +import com.sinch.sdk.domains.PaginationFillerHelper; +import com.sinch.sdk.domains.sms.api.v1.BatchesService; +import com.sinch.sdk.domains.sms.models.v1.batches.request.DryRunQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.batches.request.ListBatchesQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.batches.request.SendDeliveryFeedbackRequest; +import com.sinch.sdk.domains.sms.models.v1.batches.request.TextRequest; +import com.sinch.sdk.domains.sms.models.v1.batches.request.UpdateTextRequest; +import com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse; +import com.sinch.sdk.domains.sms.models.v1.batches.response.DryRunResponse; +import com.sinch.sdk.domains.sms.models.v1.batches.response.ListBatchesResponse; +import com.sinch.sdk.domains.sms.models.v1.batches.response.internal.ApiBatchList; +import java.time.Instant; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; + +@TestWithResources +public class BatchesServiceTest extends BaseTest { + + static final String SMS_AUTH_NAMES = "BearerAuth"; + + static final String SERVICE_PLAN_ID = "foo value"; + static final String BATCH_ID = "foo batchID"; + + @GivenJsonResource("/domains/sms/v1/batches/request/TextRequestDto.json") + TextRequest textRequestDto; + + @GivenTextResource("/domains/sms/v1/batches/response/TextResponseDto.json") + String jsonTextResponseDto; + + @GivenJsonResource("/domains/sms/v1/batches/response/TextResponseDto.json") + BatchResponse textResponseDto; + + @GivenTextResource("/domains/sms/v1/batches/response/DryRunResponseDto.json") + String jsonDryRunResponseDto; + + @GivenJsonResource("/domains/sms/v1/batches/response/DryRunResponseDto.json") + DryRunResponse dryRunResponseDto; + + @GivenTextResource("/domains/sms/v1/batches/response/ListBatchesResponseDtoPage0.json") + String jsonBatchesResponseDtoPage0; + + @GivenJsonResource("/domains/sms/v1/batches/response/ListBatchesResponseDtoPage0.json") + ApiBatchList listBatchesResponseDtoPage0; + + @GivenTextResource("/domains/sms/v1/batches/response/ListBatchesResponseDtoPage1.json") + String jsonBatchesResponseDtoPage1; + + @GivenJsonResource("/domains/sms/v1/batches/response/ListBatchesResponseDtoPage1.json") + ApiBatchList listBatchesResponseDtoPage1; + + @GivenTextResource("/domains/sms/v1/batches/response/ListBatchesResponseDtoPage2.json") + String jsonBatchesResponseDtoPage2; + + @GivenJsonResource("/domains/sms/v1/batches/request/UpdateTextRequestDto.json") + UpdateTextRequest updateTextRequestDto; + + @GivenJsonResource("/domains/sms/v1/batches/request/SendDeliveryFeedbackRequestDto.json") + SendDeliveryFeedbackRequest sendDeliveryFeedbackRequestDto; + + @Mock HttpClient httpClient; + @Mock ServerConfiguration serverConfiguration; + @Mock Map authManagers; + + BatchesService service; + + @BeforeEach + public void initMocks() { + service = + new BatchesServiceImpl( + httpClient, + serverConfiguration, + authManagers, + HttpMapper.getInstance(), + SERVICE_PLAN_ID); + } + + @Test + void get() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + + "/batches/" + + URLPathUtils.encodePathSegment(BATCH_ID), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonTextResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + BatchResponse response = service.get(BATCH_ID); + + TestHelpers.recursiveEquals(response, textResponseDto); + } + + @Test + void send() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/batches", + HttpMethod.POST, + Collections.emptyList(), + HttpMapper.getInstance() + .serialize( + Collections.singletonList(HttpContentType.APPLICATION_JSON), textRequestDto), + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonTextResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + BatchResponse response = service.send(textRequestDto); + + TestHelpers.recursiveEquals(response, textResponseDto); + } + + @Test + void dryRunDefault() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/batches/dry_run", + HttpMethod.POST, + Collections.emptyList(), + HttpMapper.getInstance() + .serialize( + Collections.singletonList(HttpContentType.APPLICATION_JSON), textRequestDto), + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonDryRunResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + DryRunResponse response = service.dryRun(textRequestDto); + + TestHelpers.recursiveEquals(response, dryRunResponseDto); + } + + @Test + void dryRun() throws ApiException { + + DryRunQueryParameters queryParameters = + DryRunQueryParameters.builder().setPerRecipient(true).setNumberOfRecipients(456).build(); + + Collection urlParameters = + Arrays.asList( + new URLParameter("per_recipient", true, STYLE.FORM, true), + new URLParameter("number_of_recipients", 456, STYLE.FORM, true)); + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/batches/dry_run", + HttpMethod.POST, + urlParameters, + HttpMapper.getInstance() + .serialize( + Collections.singletonList(HttpContentType.APPLICATION_JSON), textRequestDto), + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonDryRunResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + DryRunResponse response = service.dryRun(queryParameters, textRequestDto); + + TestHelpers.recursiveEquals(response, dryRunResponseDto); + } + + @Test + void listDefault() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/batches", + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonBatchesResponseDtoPage0.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + ListBatchesResponse response = service.list(); + + TestHelpers.recursiveEquals(response.getContent(), listBatchesResponseDtoPage0.getItems()); + } + + @Test + void list() throws ApiException { + + List commonParameters = + Arrays.asList( + "page_size", + 2, + STYLE.FORM, + true, + "from", + "+1234567890", + STYLE.FORM, + true, + "start_date", + "2023-11-03T15:21:21.113Z", + STYLE.FORM, + true, + "end_date", + "2023-12-12T15:54:21.321Z", + STYLE.FORM, + true, + "client_reference", + "client reference", + STYLE.FORM, + true); + + Collection urlParametersPage0 = + PaginationFillerHelper.parametersFiller("page", 0, STYLE.FORM, true, commonParameters); + Collection urlParametersPage1 = + PaginationFillerHelper.parametersFiller("page", 1, STYLE.FORM, true, commonParameters); + Collection urlParametersPage2 = + PaginationFillerHelper.parametersFiller("page", 2, STYLE.FORM, true, commonParameters); + + HttpRequest httpRequest0 = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/batches", + HttpMethod.GET, + urlParametersPage0, + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + + HttpRequest httpRequest1 = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/batches", + HttpMethod.GET, + urlParametersPage1, + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + + HttpRequest httpRequest2 = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/batches", + HttpMethod.GET, + urlParametersPage2, + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + + HttpResponse httpResponse0 = + new HttpResponse(200, null, Collections.emptyMap(), jsonBatchesResponseDtoPage0.getBytes()); + HttpResponse httpResponse1 = + new HttpResponse(200, null, Collections.emptyMap(), jsonBatchesResponseDtoPage1.getBytes()); + HttpResponse httpResponse2 = + new HttpResponse(200, null, Collections.emptyMap(), jsonBatchesResponseDtoPage2.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest0)))) + .thenReturn(httpResponse0); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest1)))) + .thenReturn(httpResponse1); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest2)))) + .thenReturn(httpResponse2); + + ListBatchesQueryParameters initialRequest = + ListBatchesQueryParameters.builder() + .setPage(0) + .setPageSize(2) + .setFrom("+1234567890") + .setClientReference("client reference") + .setStartDate(Instant.parse("2023-11-03T15:21:21.113Z")) + .setEndDate(Instant.parse("2023-12-12T15:54:21.321Z")) + .build(); + + ListBatchesResponse response = service.list(initialRequest); + + Iterator iterator = response.iterator(); + + BatchResponse item = iterator.next(); + TestHelpers.recursiveEquals(item, listBatchesResponseDtoPage0.getItems().get(0)); + Assertions.assertThat(iterator.hasNext()).isEqualTo(true); + + item = iterator.next(); + TestHelpers.recursiveEquals(item, listBatchesResponseDtoPage0.getItems().get(1)); + Assertions.assertThat(iterator.hasNext()).isEqualTo(true); + + item = iterator.next(); + TestHelpers.recursiveEquals(item, listBatchesResponseDtoPage1.getItems().get(0)); + + Assertions.assertThat(iterator.hasNext()).isEqualTo(false); + } + + @Test + void update() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + + "/batches/" + + URLPathUtils.encodePathSegment(BATCH_ID), + HttpMethod.POST, + Collections.emptyList(), + HttpMapper.getInstance() + .serialize( + Collections.singletonList(HttpContentType.APPLICATION_JSON), + updateTextRequestDto), + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonTextResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + BatchResponse response = service.update(BATCH_ID, updateTextRequestDto); + + TestHelpers.recursiveEquals(response, textResponseDto); + } + + @Test + void replace() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + + "/batches/" + + URLPathUtils.encodePathSegment(BATCH_ID), + HttpMethod.PUT, + Collections.emptyList(), + HttpMapper.getInstance() + .serialize( + Collections.singletonList(HttpContentType.APPLICATION_JSON), textRequestDto), + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonTextResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + BatchResponse response = service.replace(BATCH_ID, textRequestDto); + + TestHelpers.recursiveEquals(response, textResponseDto); + } + + @Test + void cancel() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + + "/batches/" + + URLPathUtils.encodePathSegment(BATCH_ID), + HttpMethod.DELETE, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonTextResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + BatchResponse response = service.cancel(BATCH_ID); + + TestHelpers.recursiveEquals(response, textResponseDto); + } + + @Test + void sendDeliveryFeedback() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + + "/batches/" + + URLPathUtils.encodePathSegment(BATCH_ID) + + "/delivery_feedback", + HttpMethod.POST, + Collections.emptyList(), + HttpMapper.getInstance() + .serialize( + Collections.singletonList(HttpContentType.APPLICATION_JSON), + sendDeliveryFeedbackRequestDto), + Collections.emptyMap(), + Collections.emptyList(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = new HttpResponse(200, null, Collections.emptyMap(), null); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + service.sendDeliveryFeedback(BATCH_ID, sendDeliveryFeedbackRequestDto); + } +} diff --git a/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/DeliveryReportsServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/DeliveryReportsServiceTest.java new file mode 100644 index 000000000..1b4ef291b --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/DeliveryReportsServiceTest.java @@ -0,0 +1,318 @@ +package com.sinch.sdk.domains.sms.api.v1.adapters; + +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + +import com.adelean.inject.resources.junit.jupiter.GivenJsonResource; +import com.adelean.inject.resources.junit.jupiter.GivenTextResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.sinch.sdk.BaseTest; +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.core.http.AuthManager; +import com.sinch.sdk.core.http.HttpClient; +import com.sinch.sdk.core.http.HttpContentType; +import com.sinch.sdk.core.http.HttpMapper; +import com.sinch.sdk.core.http.HttpMethod; +import com.sinch.sdk.core.http.HttpRequest; +import com.sinch.sdk.core.http.HttpRequestTest.HttpRequestMatcher; +import com.sinch.sdk.core.http.HttpResponse; +import com.sinch.sdk.core.http.URLParameter; +import com.sinch.sdk.core.http.URLParameter.STYLE; +import com.sinch.sdk.core.http.URLPathUtils; +import com.sinch.sdk.core.models.ServerConfiguration; +import com.sinch.sdk.domains.PaginationFillerHelper; +import com.sinch.sdk.domains.sms.api.v1.DeliveryReportsService; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReport; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryReceiptErrorCode; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryStatus; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReport; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.request.ListDeliveryReportsQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.response.ListDeliveryReportsResponse; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.response.internal.DeliveryReportList; +import java.time.Instant; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; + +@TestWithResources +class DeliveryReportsServiceTest extends BaseTest { + static final String SMS_AUTH_NAMES = "BearerAuth"; + static final String SERVICE_PLAN_ID = "foo value"; + static final String BATCH_ID = "foo batchID"; + + @GivenTextResource("/domains/sms/v1/deliveryreports/BatchDeliveryReportSMSDto.json") + String jsonBatchDeliveryReportSMSDto; + + @GivenJsonResource("/domains/sms/v1/deliveryreports/BatchDeliveryReportSMSDto.json") + BatchDeliveryReport batchDeliveryReportSMSDto; + + @GivenTextResource("/domains/sms/v1/deliveryreports/RecipientDeliveryReportMMSDto.json") + String jsonRecipientDeliveryReportMMSDto; + + @GivenJsonResource("/domains/sms/v1/deliveryreports/RecipientDeliveryReportMMSDto.json") + RecipientDeliveryReport recipientDeliveryReportMMSDto; + + @GivenTextResource( + "/domains/sms/v1/deliveryreports/response/ListDeliveryReportResponseDtoPage0.json") + String jsonListDeliveryReportResponseDtoPage0; + + @GivenJsonResource( + "/domains/sms/v1/deliveryreports/response/ListDeliveryReportResponseDtoPage0.json") + DeliveryReportList listDeliveryReportResponseDtoPage0; + + @GivenTextResource( + "/domains/sms/v1/deliveryreports/response/ListDeliveryReportResponseDtoPage1.json") + String jsonListDeliveryReportResponseDtoPage1; + + @GivenJsonResource( + "/domains/sms/v1/deliveryreports/response/ListDeliveryReportResponseDtoPage1.json") + DeliveryReportList listDeliveryReportResponseDtoPage1; + + @GivenTextResource( + "/domains/sms/v1/deliveryreports/response/ListDeliveryReportResponseDtoPage2.json") + String jsonListDeliveryReportResponseDtoPage2; + + @Mock ServerConfiguration serverConfiguration; + @Mock HttpClient httpClient; + @Mock Map authManagers; + + DeliveryReportsService service; + + @BeforeEach + public void initMocks() { + service = + new DeliveryReportsServiceImpl( + httpClient, + serverConfiguration, + authManagers, + HttpMapper.getInstance(), + SERVICE_PLAN_ID); + } + + @Test + void getBatchDeliveryReport() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + + "/batches/" + + URLPathUtils.encodePathSegment(BATCH_ID) + + "/delivery_report", + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonBatchDeliveryReportSMSDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + BatchDeliveryReport response = service.get(BATCH_ID); + + TestHelpers.recursiveEquals(response, batchDeliveryReportSMSDto); + } + + @Test + void getRecipientDeliveryReport() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + + "/batches/" + + URLPathUtils.encodePathSegment(BATCH_ID) + + "/delivery_report/" + + URLPathUtils.encodePathSegment("+1234567890"), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonRecipientDeliveryReportMMSDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + RecipientDeliveryReport response = service.getForNumber(BATCH_ID, "+1234567890"); + + TestHelpers.recursiveEquals(response, recipientDeliveryReportMMSDto); + } + + @Test + void listDefault() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/delivery_reports", + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonListDeliveryReportResponseDtoPage0.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + ListDeliveryReportsResponse response = service.list(); + TestHelpers.recursiveEquals( + response.getContent(), listDeliveryReportResponseDtoPage0.getItems()); + } + + @Test + void list() throws ApiException { + + List commonParameters = + Arrays.asList( + "page_size", + 2, + STYLE.FORM, + true, + "start_date", + "2023-11-03T15:21:21.113Z", + STYLE.FORM, + true, + "end_date", + "2023-12-12T15:54:21.321Z", + STYLE.FORM, + true, + "status", + Arrays.asList(DeliveryStatus.QUEUED, DeliveryStatus.DISPATCHED), + STYLE.FORM, + false, + "code", + Arrays.asList( + DeliveryReceiptErrorCode.DISPATCHED, DeliveryReceiptErrorCode.UNPROVISIONED_REGION), + STYLE.FORM, + false, + "client_reference", + "client reference", + STYLE.FORM, + true); + + Collection urlParameters0 = + PaginationFillerHelper.parametersFiller("page", 0, STYLE.FORM, true, commonParameters); + Collection urlParameters1 = + PaginationFillerHelper.parametersFiller("page", 1, STYLE.FORM, true, commonParameters); + Collection urlParameters2 = + PaginationFillerHelper.parametersFiller("page", 2, STYLE.FORM, true, commonParameters); + + HttpRequest httpRequest0 = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/delivery_reports", + HttpMethod.GET, + urlParameters0, + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpRequest httpRequest1 = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/delivery_reports", + HttpMethod.GET, + urlParameters1, + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpRequest httpRequest2 = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/delivery_reports", + HttpMethod.GET, + urlParameters2, + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse0 = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonListDeliveryReportResponseDtoPage0.getBytes()); + HttpResponse httpResponse1 = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonListDeliveryReportResponseDtoPage1.getBytes()); + HttpResponse httpResponse2 = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonListDeliveryReportResponseDtoPage2.getBytes()); + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest0)))) + .thenReturn(httpResponse0); + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest1)))) + .thenReturn(httpResponse1); + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest2)))) + .thenReturn(httpResponse2); + + ListDeliveryReportsQueryParameters initialRequest = + ListDeliveryReportsQueryParameters.builder() + .setPage(0) + .setPageSize(2) + .setStartDate(Instant.parse("2023-11-03T15:21:21.113Z")) + .setEndDate(Instant.parse("2023-12-12T15:54:21.321Z")) + .setStatus(Arrays.asList(DeliveryStatus.QUEUED, DeliveryStatus.DISPATCHED)) + .setCode( + Arrays.asList( + DeliveryReceiptErrorCode.DISPATCHED, + DeliveryReceiptErrorCode.UNPROVISIONED_REGION)) + .setClientReference("client reference") + .build(); + + ListDeliveryReportsResponse response = service.list(initialRequest); + + Iterator iterator = response.iterator(); + + RecipientDeliveryReport item = iterator.next(); + TestHelpers.recursiveEquals(item, listDeliveryReportResponseDtoPage0.getItems().get(0)); + Assertions.assertThat(iterator.hasNext()).isEqualTo(true); + + item = iterator.next(); + TestHelpers.recursiveEquals(item, listDeliveryReportResponseDtoPage0.getItems().get(1)); + Assertions.assertThat(iterator.hasNext()).isEqualTo(true); + + item = iterator.next(); + TestHelpers.recursiveEquals(item, listDeliveryReportResponseDtoPage1.getItems().get(0)); + + Assertions.assertThat(iterator.hasNext()).isEqualTo(false); + } +} diff --git a/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/GroupsServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/GroupsServiceTest.java new file mode 100644 index 000000000..35e49e913 --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/GroupsServiceTest.java @@ -0,0 +1,388 @@ +package com.sinch.sdk.domains.sms.api.v1.adapters; + +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + +import com.adelean.inject.resources.junit.jupiter.GivenJsonResource; +import com.adelean.inject.resources.junit.jupiter.GivenTextResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.sinch.sdk.BaseTest; +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.core.http.AuthManager; +import com.sinch.sdk.core.http.HttpClient; +import com.sinch.sdk.core.http.HttpContentType; +import com.sinch.sdk.core.http.HttpMapper; +import com.sinch.sdk.core.http.HttpMethod; +import com.sinch.sdk.core.http.HttpRequest; +import com.sinch.sdk.core.http.HttpRequestTest.HttpRequestMatcher; +import com.sinch.sdk.core.http.HttpResponse; +import com.sinch.sdk.core.http.URLParameter; +import com.sinch.sdk.core.http.URLParameter.STYLE; +import com.sinch.sdk.core.http.URLPathUtils; +import com.sinch.sdk.core.models.ServerConfiguration; +import com.sinch.sdk.domains.PaginationFillerHelper; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import com.sinch.sdk.domains.sms.models.v1.groups.Group; +import com.sinch.sdk.domains.sms.models.v1.groups.request.GroupRequest; +import com.sinch.sdk.domains.sms.models.v1.groups.request.GroupUpdateRequestDtoTest; +import com.sinch.sdk.domains.sms.models.v1.groups.request.ListGroupsQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.groups.response.ListGroupsResponse; +import com.sinch.sdk.domains.sms.models.v1.groups.response.internal.ApiGroupList; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; + +@TestWithResources +class GroupsServiceTest extends BaseTest { + + static final String SMS_AUTH_NAMES = "BearerAuth"; + + static final String SERVICE_PLAN_ID = "foo value"; + static final String GROUP_ID = "foo groupID"; + + @GivenTextResource("/domains/sms/v1/groups/GroupDto.json") + String jsonGroupDto; + + @GivenJsonResource("/domains/sms/v1/groups/GroupDto.json") + Group groupDto; + + @GivenTextResource("/domains/sms/v1/groups/response/ListGroupsResponseDtoPage0.json") + String jsonListGroupsResponseDtoPage0; + + @GivenJsonResource("/domains/sms/v1/groups/response/ListGroupsResponseDtoPage0.json") + ApiGroupList listGroupsResponseDtoPage0; + + @GivenTextResource("/domains/sms/v1/groups/response/ListGroupsResponseDtoPage1.json") + String jsonListGroupsResponseDtoPage1; + + @GivenJsonResource("/domains/sms/v1/groups/response/ListGroupsResponseDtoPage1.json") + ApiGroupList listGroupsResponseDtoPage1; + + @GivenTextResource("/domains/sms/v1/groups/response/ListGroupsResponseDtoPage2.json") + String jsonListGroupsResponseDtoPage2; + + @Mock ServerConfiguration serverConfiguration; + @Mock HttpClient httpClient; + @Mock Map authManagers; + GroupsService service; + + @BeforeEach + public void initMocks() { + service = + new GroupsServiceImpl( + httpClient, + serverConfiguration, + authManagers, + HttpMapper.getInstance(), + SERVICE_PLAN_ID); + } + + @Test + void get() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + + "/groups/" + + URLPathUtils.encodePathSegment(GROUP_ID), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonGroupDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + Group response = service.get(GROUP_ID); + + TestHelpers.recursiveEquals(response, groupDto); + } + + @Test + void create() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/groups", + HttpMethod.POST, + Collections.emptyList(), + HttpMapper.getInstance() + .serialize( + Collections.singletonList(HttpContentType.APPLICATION_JSON), + GroupRequest.builder().setName("foo").build()), + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonGroupDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + Group response = service.create(GroupRequest.builder().setName("foo").build()); + + TestHelpers.recursiveEquals(response, groupDto); + } + + @Test + void listDefault() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/groups", + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonListGroupsResponseDtoPage0.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + ListGroupsResponse response = service.list(); + TestHelpers.recursiveEquals(response.getContent(), listGroupsResponseDtoPage0.getItems()); + } + + @Test + void list() throws ApiException { + + List commonParameters = Arrays.asList("page_size", 2, STYLE.FORM, true); + + Collection urlParameters0 = + PaginationFillerHelper.parametersFiller("page", 0, STYLE.FORM, true, commonParameters); + Collection urlParameters1 = + PaginationFillerHelper.parametersFiller("page", 1, STYLE.FORM, true, commonParameters); + Collection urlParameters2 = + PaginationFillerHelper.parametersFiller("page", 2, STYLE.FORM, true, commonParameters); + + HttpRequest httpRequest0 = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/groups", + HttpMethod.GET, + urlParameters0, + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpRequest httpRequest1 = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/groups", + HttpMethod.GET, + urlParameters1, + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpRequest httpRequest2 = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/groups", + HttpMethod.GET, + urlParameters2, + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse0 = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonListGroupsResponseDtoPage0.getBytes()); + HttpResponse httpResponse1 = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonListGroupsResponseDtoPage1.getBytes()); + HttpResponse httpResponse2 = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonListGroupsResponseDtoPage2.getBytes()); + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest0)))) + .thenReturn(httpResponse0); + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest1)))) + .thenReturn(httpResponse1); + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest2)))) + .thenReturn(httpResponse2); + + ListGroupsQueryParameters initialRequest = + ListGroupsQueryParameters.builder().setPage(0).setPageSize(2).build(); + + ListGroupsResponse response = service.list(initialRequest); + + Iterator iterator = response.iterator(); + + Group item = iterator.next(); + TestHelpers.recursiveEquals(item, listGroupsResponseDtoPage0.getItems().get(0)); + Assertions.assertThat(iterator.hasNext()).isEqualTo(true); + + item = iterator.next(); + TestHelpers.recursiveEquals(item, listGroupsResponseDtoPage0.getItems().get(1)); + Assertions.assertThat(iterator.hasNext()).isEqualTo(true); + + item = iterator.next(); + TestHelpers.recursiveEquals(item, listGroupsResponseDtoPage1.getItems().get(0)); + + Assertions.assertThat(iterator.hasNext()).isEqualTo(false); + } + + @Test + void replace() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + + "/groups/" + + URLPathUtils.encodePathSegment(GROUP_ID), + HttpMethod.PUT, + Collections.emptyList(), + HttpMapper.getInstance() + .serialize( + Collections.singletonList(HttpContentType.APPLICATION_JSON), + GroupRequest.builder().setName("foo").build()), + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonGroupDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + Group response = service.replace(GROUP_ID, GroupRequest.builder().setName("foo").build()); + + TestHelpers.recursiveEquals(response, groupDto); + } + + @Test + void update() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + + "/groups/" + + URLPathUtils.encodePathSegment(GROUP_ID), + HttpMethod.POST, + Collections.emptyList(), + HttpMapper.getInstance() + .serialize( + Collections.singletonList(HttpContentType.APPLICATION_JSON), + GroupUpdateRequestDtoTest.requestDTO), + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonGroupDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + Group response = service.update(GROUP_ID, GroupUpdateRequestDtoTest.requestDTO); + + TestHelpers.recursiveEquals(response, groupDto); + } + + @Test + void delete() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + + "/groups/" + + URLPathUtils.encodePathSegment(GROUP_ID), + HttpMethod.DELETE, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.emptyList(), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = new HttpResponse(200, null, Collections.emptyMap(), null); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + service.delete(GROUP_ID); + } + + @Test + void listMembers() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + + "/groups/" + + URLPathUtils.encodePathSegment(GROUP_ID) + + "/members", + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse( + 200, null, Collections.emptyMap(), "[\"entry 1\", \"entry 2\"]".getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + Collection members = service.listMembers(GROUP_ID); + TestHelpers.recursiveEquals(members, new ArrayList<>(Arrays.asList("entry 1", "entry 2"))); + } +} diff --git a/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/InboundsServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/InboundsServiceTest.java new file mode 100644 index 000000000..053d9dcc0 --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/InboundsServiceTest.java @@ -0,0 +1,261 @@ +package com.sinch.sdk.domains.sms.api.v1.adapters; + +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + +import com.adelean.inject.resources.junit.jupiter.GivenJsonResource; +import com.adelean.inject.resources.junit.jupiter.GivenTextResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.sinch.sdk.BaseTest; +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.core.http.AuthManager; +import com.sinch.sdk.core.http.HttpClient; +import com.sinch.sdk.core.http.HttpContentType; +import com.sinch.sdk.core.http.HttpMapper; +import com.sinch.sdk.core.http.HttpMethod; +import com.sinch.sdk.core.http.HttpRequest; +import com.sinch.sdk.core.http.HttpRequestTest.HttpRequestMatcher; +import com.sinch.sdk.core.http.HttpResponse; +import com.sinch.sdk.core.http.URLParameter; +import com.sinch.sdk.core.http.URLParameter.STYLE; +import com.sinch.sdk.core.http.URLPathUtils; +import com.sinch.sdk.core.models.ServerConfiguration; +import com.sinch.sdk.domains.PaginationFillerHelper; +import com.sinch.sdk.domains.sms.api.v1.InboundsService; +import com.sinch.sdk.domains.sms.models.v1.inbounds.InboundMessage; +import com.sinch.sdk.domains.sms.models.v1.inbounds.TextMessage; +import com.sinch.sdk.domains.sms.models.v1.inbounds.request.ListInboundMessagesQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.inbounds.response.ListInboundsResponse; +import com.sinch.sdk.domains.sms.models.v1.inbounds.response.internal.ApiInboundList; +import java.time.Instant; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; + +@TestWithResources +public class InboundsServiceTest extends BaseTest { + + static final String SMS_AUTH_NAMES = "BearerAuth"; + static final String SERVICE_PLAN_ID = "foo value"; + static final String BATCH_ID = "foo batchID"; + + @GivenTextResource("/domains/sms/v1/inbounds/InboundTextDto.json") + String jsonTextMessageDto; + + @GivenJsonResource("/domains/sms/v1/inbounds/InboundTextDto.json") + TextMessage textMessageDto; + + @GivenTextResource("/domains/sms/v1/inbounds/response/internal/InboundsListResponseDtoPage0.json") + String jsonInboundsListResponseDto0; + + @GivenJsonResource("/domains/sms/v1/inbounds/response/internal/InboundsListResponseDtoPage0.json") + ApiInboundList listInboundsListResponseDto0; + + @GivenTextResource("/domains/sms/v1/inbounds/response/internal/InboundsListResponseDtoPage1.json") + String jsonInboundsListResponseDto1; + + @GivenJsonResource("/domains/sms/v1/inbounds/response/internal/InboundsListResponseDtoPage1.json") + ApiInboundList listInboundsListResponseDto1; + + @GivenTextResource("/domains/sms/v1/inbounds/response/internal/InboundsListResponseDtoPage2.json") + String jsonInboundsListResponseDto2; + + @Mock HttpClient httpClient; + @Mock ServerConfiguration serverConfiguration; + @Mock Map authManagers; + + InboundsService service; + + @BeforeEach + public void initMocks() { + service = + new InboundsServiceImpl( + httpClient, + serverConfiguration, + authManagers, + HttpMapper.getInstance(), + SERVICE_PLAN_ID); + } + + @Test + void get() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + + "/inbounds/" + + URLPathUtils.encodePathSegment(BATCH_ID), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonTextMessageDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + InboundMessage response = service.get(BATCH_ID); + + TestHelpers.recursiveEquals(response, textMessageDto); + } + + @Test + void listDefault() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/inbounds", + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonInboundsListResponseDto0.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + ListInboundsResponse response = service.list(); + TestHelpers.recursiveEquals(response.getContent(), listInboundsListResponseDto0.getItems()); + } + + @Test + void list() throws ApiException { + + List commonParameters = + Arrays.asList( + "page_size", + 2, + STYLE.FORM, + true, + "to", + "+1234567890", + STYLE.FORM, + true, + "start_date", + "2023-11-03T15:21:21.113Z", + STYLE.FORM, + true, + "end_date", + "2023-12-12T15:54:21.321Z", + STYLE.FORM, + true, + "client_reference", + "client reference", + STYLE.FORM, + true); + + Collection urlParameters0 = + PaginationFillerHelper.parametersFiller("page", 0, STYLE.FORM, true, commonParameters); + Collection urlParameters1 = + PaginationFillerHelper.parametersFiller("page", 1, STYLE.FORM, true, commonParameters); + Collection urlParameters2 = + PaginationFillerHelper.parametersFiller("page", 2, STYLE.FORM, true, commonParameters); + + HttpRequest httpRequest0 = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/inbounds", + HttpMethod.GET, + urlParameters0, + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpRequest httpRequest1 = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/inbounds", + HttpMethod.GET, + urlParameters1, + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpRequest httpRequest2 = + new HttpRequest( + "/xms/v1/" + URLPathUtils.encodePathSegment(SERVICE_PLAN_ID) + "/inbounds", + HttpMethod.GET, + urlParameters2, + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + Collections.singletonList(SMS_AUTH_NAMES)); + HttpResponse httpResponse0 = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonInboundsListResponseDto0.getBytes()); + HttpResponse httpResponse1 = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonInboundsListResponseDto1.getBytes()); + HttpResponse httpResponse2 = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonInboundsListResponseDto2.getBytes()); + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest0)))) + .thenReturn(httpResponse0); + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest1)))) + .thenReturn(httpResponse1); + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest2)))) + .thenReturn(httpResponse2); + + ListInboundMessagesQueryParameters initialRequest = + ListInboundMessagesQueryParameters.builder() + .setPage(0) + .setPageSize(2) + .setTo(Arrays.asList("+1234567890")) + .setClientReference("client reference") + .setStartDate(Instant.parse("2023-11-03T15:21:21.113Z")) + .setEndDate(Instant.parse("2023-12-12T15:54:21.321Z")) + .build(); + + ListInboundsResponse response = service.list(initialRequest); + + Iterator iterator = response.iterator(); + + InboundMessage item = iterator.next(); + TestHelpers.recursiveEquals(item, listInboundsListResponseDto0.getItems().get(0)); + Assertions.assertThat(iterator.hasNext()).isEqualTo(true); + + item = iterator.next(); + TestHelpers.recursiveEquals(item, listInboundsListResponseDto0.getItems().get(1)); + Assertions.assertThat(iterator.hasNext()).isEqualTo(true); + + item = iterator.next(); + TestHelpers.recursiveEquals(item, listInboundsListResponseDto1.getItems().get(0)); + + Assertions.assertThat(iterator.hasNext()).isEqualTo(false); + } +} diff --git a/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/SMSServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/SMSServiceTest.java new file mode 100644 index 000000000..c520d8d4b --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/SMSServiceTest.java @@ -0,0 +1,189 @@ +package com.sinch.sdk.domains.sms.api.v1.adapters; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import com.sinch.sdk.core.http.HttpClient; +import com.sinch.sdk.core.models.ServerConfiguration; +import com.sinch.sdk.models.SmsContext; +import com.sinch.sdk.models.SmsServicePlanCredentials; +import com.sinch.sdk.models.UnifiedCredentials; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; + +class SMSServiceTest { + + @Mock HttpClient httpClient; + + @Test + void projectIdDoNotAcceptNullKey() { + UnifiedCredentials credentials = + UnifiedCredentials.builder().setKeyId(null).setKeySecret("foo").setProjectId("foo").build(); + SmsContext context = SmsContext.builder().setSmsUrl("https://sms.foo.url").build(); + ServerConfiguration server = new ServerConfiguration("https://oauth.foo.url"); + Exception exception = + assertThrows( + IllegalArgumentException.class, + () -> new SMSService(credentials, context, server, httpClient)); + assertTrue(exception.getMessage().contains("keyId")); + } + + @Test + void projectIdDoNotAcceptNullKeySecret() { + UnifiedCredentials credentials = + UnifiedCredentials.builder().setKeyId("foo").setKeySecret(null).setProjectId("foo").build(); + SmsContext context = SmsContext.builder().setSmsUrl("https://sms.foo.url").build(); + ServerConfiguration server = new ServerConfiguration("https://oauth.foo.url"); + Exception exception = + assertThrows( + IllegalArgumentException.class, + () -> new SMSService(credentials, context, server, httpClient)); + assertTrue(exception.getMessage().contains("keySecret")); + } + + @Test + void projectIdDoNotAcceptNullProject() { + UnifiedCredentials credentials = + UnifiedCredentials.builder().setKeyId("foo").setKeySecret("foo").setProjectId(null).build(); + SmsContext context = SmsContext.builder().setSmsUrl("https://sms.foo.url").build(); + ServerConfiguration server = new ServerConfiguration("https://oauth.foo.url"); + + Exception exception = + assertThrows( + IllegalArgumentException.class, + () -> new SMSService(credentials, context, server, httpClient)); + assertTrue(exception.getMessage().contains("projectId")); + } + + @Test + void projectIdDoNotAcceptNullCredentials() { + + SmsContext context = SmsContext.builder().setSmsUrl("https://sms.foo.url").build(); + ServerConfiguration server = new ServerConfiguration("https://oauth.foo.url"); + Exception exception = + assertThrows( + NullPointerException.class, () -> new SMSService(null, context, server, httpClient)); + assertTrue(exception.getMessage().contains("Credentials must be defined")); + } + + @Test + void projectIdDoNotAcceptNullContext() { + UnifiedCredentials credentials = + UnifiedCredentials.builder() + .setKeyId("foo") + .setKeySecret("foo") + .setProjectId("foo") + .build(); + ServerConfiguration server = new ServerConfiguration("https://oauth.foo.url"); + Exception exception = + assertThrows( + NullPointerException.class, + () -> new SMSService(credentials, null, server, httpClient)); + assertTrue(exception.getMessage().contains("Context must be defined")); + } + + @Test + void projectIdDoNotAcceptNullSmsUrl() { + UnifiedCredentials credentials = + UnifiedCredentials.builder() + .setKeyId("foo") + .setKeySecret("foo") + .setProjectId("foo") + .build(); + SmsContext context = SmsContext.builder().setSmsUrl(null).build(); + ServerConfiguration server = new ServerConfiguration("https://oauth.foo.url"); + Exception exception = + assertThrows( + IllegalArgumentException.class, + () -> new SMSService(credentials, context, server, httpClient)); + assertTrue(exception.getMessage().contains("smsUrl")); + } + + @Test + void projectIdUsagePassed() { + + UnifiedCredentials credentials = + UnifiedCredentials.builder() + .setKeyId("foo key ") + .setKeySecret("foo secret") + .setProjectId("foo project") + .build(); + SmsContext context = SmsContext.builder().setSmsUrl("https://sms.foo.url").build(); + ServerConfiguration server = new ServerConfiguration("https://oauth.foo.url"); + + assertDoesNotThrow( + () -> new SMSService(credentials, context, server, httpClient), "Init passed"); + } + + @Test + void servicePlanIdDoNotAcceptNullApiToken() { + SmsServicePlanCredentials credentials = + SmsServicePlanCredentials.builder().setApiToken(null).setServicePlanId("foo plan").build(); + SmsContext context = SmsContext.builder().setSmsUrl("https://sms.foo.url").build(); + Exception exception = + assertThrows( + IllegalArgumentException.class, () -> new SMSService(credentials, context, httpClient)); + assertTrue(exception.getMessage().contains("apiToken")); + } + + @Test + void servicePlanIdDoNotAcceptNullServicePlanId() { + SmsServicePlanCredentials credentials = + SmsServicePlanCredentials.builder().setApiToken("foo token").setServicePlanId(null).build(); + SmsContext context = SmsContext.builder().setSmsUrl("https://sms.foo.url").build(); + Exception exception = + assertThrows( + IllegalArgumentException.class, () -> new SMSService(credentials, context, httpClient)); + assertTrue(exception.getMessage().contains("servicePlanId")); + } + + @Test + void servicePlanIdDoNotAcceptNullCredentials() { + + SmsContext context = SmsContext.builder().setSmsUrl("https://sms.foo.url").build(); + Exception exception = + assertThrows(NullPointerException.class, () -> new SMSService(null, context, httpClient)); + assertTrue(exception.getMessage().contains("Credentials must be defined")); + } + + @Test + void servicePlanIdDoNotAcceptNullContext() { + SmsServicePlanCredentials credentials = + SmsServicePlanCredentials.builder() + .setApiToken("foo token") + .setServicePlanId("foo plan") + .build(); + Exception exception = + assertThrows( + NullPointerException.class, () -> new SMSService(credentials, null, httpClient)); + assertTrue(exception.getMessage().contains("Context must be defined")); + } + + @Test + void servicePlanIdDoNotAcceptNullSmsUrl() { + SmsServicePlanCredentials credentials = + SmsServicePlanCredentials.builder() + .setApiToken("foo token") + .setServicePlanId("foo plan") + .build(); + SmsContext context = SmsContext.builder().setSmsUrl(null).build(); + Exception exception = + assertThrows( + IllegalArgumentException.class, () -> new SMSService(credentials, context, httpClient)); + assertTrue(exception.getMessage().contains("smsUrl")); + } + + @Test + void servicePlanIdUsagePassed() { + + SmsServicePlanCredentials credentials = + SmsServicePlanCredentials.builder() + .setApiToken("foo token") + .setServicePlanId("foo plan") + .build(); + SmsContext context = SmsContext.builder().setSmsUrl("https://sms.foo.url").build(); + + assertDoesNotThrow(() -> new SMSService(credentials, context, httpClient), "Init passed"); + } +} diff --git a/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/WebHooksServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/WebHooksServiceTest.java new file mode 100644 index 000000000..d9838badc --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/domains/sms/api/v1/adapters/WebHooksServiceTest.java @@ -0,0 +1,147 @@ +package com.sinch.sdk.domains.sms.api.v1.adapters; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +import com.adelean.inject.resources.junit.jupiter.GivenTextResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.sinch.sdk.BaseTest; +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.auth.HmacAuthenticationValidation; +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.domains.sms.api.v1.WebHooksService; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReportDtoTest; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReportDtoTest; +import com.sinch.sdk.domains.sms.models.v1.inbounds.InboundMessageDtoTest; +import com.sinch.sdk.domains.sms.models.v1.webhooks.SmsEvent; +import com.sinch.sdk.models.Configuration; +import java.util.AbstractMap; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +@TestWithResources +public class WebHooksServiceTest extends BaseTest { + + @GivenTextResource("/domains/sms/v1/inbounds/InboundBinaryDto.json") + String loadedInboundBinaryEvent; + + @GivenTextResource("/domains/sms/v1/inbounds/InboundTextDto.json") + String loadedInboundTextEvent; + + @GivenTextResource("/domains/sms/v1/inbounds/InboundMediaDto.json") + String loadedInboundMediaEvent; + + @GivenTextResource("/domains/sms/v1/deliveryreports/BatchDeliveryReportSMSDto.json") + String loadedBatchDeliveryReportSMSEvent; + + @GivenTextResource("/domains/sms/v1/deliveryreports/BatchDeliveryReportMMSDto.json") + String loadedBatchDeliveryReportMMSEvent; + + @GivenTextResource("/domains/sms/v1/deliveryreports/RecipientDeliveryReportSMSDto.json") + String loadedRecipientDeliveryReportSMSEvent; + + @GivenTextResource("/domains/sms/v1/deliveryreports/RecipientDeliveryReportMMSDto.json") + String loadedRecipientDeliveryReportMMSEvent; + + WebHooksService service; + + @BeforeEach + public void setUp() { + + Configuration configuration = + Configuration.builder() + .setProjectId("unused") + .setKeyId("unused") + .setKeySecret("unused") + .build(); + service = new SinchClient(configuration).sms().v1().webhooks(); + } + + @Test + void checkApplicationAuthentication() throws ApiException { + + Map headers = + Stream.of( + new AbstractMap.SimpleEntry<>( + HmacAuthenticationValidation.SIGNATURE_HEADER, + "ZoHei66PPN/kZjw7hFVfGhJOnml3iGNCMWoyQVcE5o0="), + new AbstractMap.SimpleEntry<>( + HmacAuthenticationValidation.ALGORITHM_HEADER, "HmacSHA256"), + new AbstractMap.SimpleEntry<>( + HmacAuthenticationValidation.NONCE_HEADER, "01JHFFHWYY7HSS4FWTMDTQEK8V"), + new AbstractMap.SimpleEntry<>( + HmacAuthenticationValidation.TIMESTAMP_HEADER, "1736760161")) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + boolean authenticationResult = + service.validateAuthenticationHeader( + "SMSWebhooksSecret", + headers, + "{\"at\":\"2025-01-13T09:22:40.914Z\",\"batch_id\":\"01JHFFHQ0P99JPPNQPJDV7JTBP\",\"client_reference\":\"a" + + " client" + + " reference\",\"code\":0,\"operator_status_at\":\"2025-01-13T09:22:00Z\",\"recipient\":\"33662162466\",\"status\":\"Delivered\",\"type\":\"recipient_delivery_report_sms\"}"); + + assertTrue(authenticationResult); + } + + @Test + void incomingSMSBinary() throws ApiException { + + SmsEvent response = service.parseEvent(loadedInboundBinaryEvent); + + TestHelpers.recursiveEquals(InboundMessageDtoTest.binaryDTO, response); + } + + @Test + void incomingSMSText() throws ApiException { + + SmsEvent response = service.parseEvent(loadedInboundTextEvent); + + TestHelpers.recursiveEquals(InboundMessageDtoTest.textDTO, response); + } + + @Test + void incomingSMSMedia() throws ApiException { + + SmsEvent response = service.parseEvent(loadedInboundMediaEvent); + + TestHelpers.recursiveEquals(InboundMessageDtoTest.mediaDTO, response); + } + + @Test + void deliveryReportRecipientDeliveryReportSms() throws ApiException { + + SmsEvent response = service.parseEvent(loadedRecipientDeliveryReportSMSEvent); + + TestHelpers.recursiveEquals( + RecipientDeliveryReportDtoTest.deliveryReportRecipientSMS, response); + } + + @Test + void deliveryReportRecipientDeliveryReportMms() throws ApiException { + + SmsEvent response = service.parseEvent(loadedRecipientDeliveryReportMMSEvent); + + TestHelpers.recursiveEquals( + RecipientDeliveryReportDtoTest.deliveryReportRecipientMMS, response); + } + + @Test + void deliveryReportBatchDeliveryReportSms() throws ApiException { + + SmsEvent response = service.parseEvent(loadedBatchDeliveryReportSMSEvent); + + TestHelpers.recursiveEquals(BatchDeliveryReportDtoTest.deliveryReportBatchSMS, response); + } + + @Test + void deliveryReportBatchDeliveryReportMms() throws ApiException { + + SmsEvent response = service.parseEvent(loadedBatchDeliveryReportMMSEvent); + + TestHelpers.recursiveEquals(BatchDeliveryReportDtoTest.deliveryReportBatchMMS, response); + } +} diff --git a/client/src/test/java/com/sinch/sdk/domains/sms/models/v1/internal/SMSCursorPageNavigatorTest.java b/client/src/test/java/com/sinch/sdk/domains/sms/models/v1/internal/SMSCursorPageNavigatorTest.java new file mode 100644 index 000000000..521cd1453 --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/domains/sms/models/v1/internal/SMSCursorPageNavigatorTest.java @@ -0,0 +1,25 @@ +package com.sinch.sdk.domains.sms.models.v1.internal; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +class SMSCursorPageNavigatorTest { + + @Test + void getTokenNullPageSize() { + SMSCursorPageNavigator cursorNavigator = new SMSCursorPageNavigator(45, null); + Assertions.assertThat(cursorNavigator.getToken()).isEqualTo(null); + } + + @Test + void getTokenZeroPageSize() { + SMSCursorPageNavigator cursorNavigator = new SMSCursorPageNavigator(45, 0); + Assertions.assertThat(cursorNavigator.getToken()).isEqualTo(null); + } + + @Test + void getToken() { + SMSCursorPageNavigator cursorNavigator = new SMSCursorPageNavigator(0, 15); + Assertions.assertThat(cursorNavigator.getToken()).isEqualTo(1); + } +} diff --git a/client/src/test/java/com/sinch/sdk/e2e/Config.java b/client/src/test/java/com/sinch/sdk/e2e/Config.java index e0eec03ab..515741888 100644 --- a/client/src/test/java/com/sinch/sdk/e2e/Config.java +++ b/client/src/test/java/com/sinch/sdk/e2e/Config.java @@ -5,6 +5,7 @@ import com.sinch.sdk.models.ConversationContext; import com.sinch.sdk.models.ConversationRegion; import com.sinch.sdk.models.MailgunContext; +import com.sinch.sdk.models.SmsContext; import com.sinch.sdk.models.VoiceContext; import java.util.Arrays; @@ -27,6 +28,8 @@ public class Config { public static final String MAILGUN_API_KEY = "apiKey"; public static final String MAILGUN_STORAGE = "http://localhost:3021"; + public static final String SMS_HOST_NAME = "http://localhost:3017"; + private final SinchClient client; private Config() { @@ -54,6 +57,7 @@ private Config() { MailgunContext.builder().setStorageUrls(Arrays.asList(MAILGUN_STORAGE)).build()) .setMailgunApiKey(MAILGUN_API_KEY) .setMailgunUrl(MAILGUN_HOST_NAME) + .setSmsContext(SmsContext.builder().setSmsUrl(SMS_HOST_NAME).build()) .build(); client = new SinchClient(configuration); diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/BatchesSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/BatchesSteps.java new file mode 100644 index 000000000..ca7d7053b --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/BatchesSteps.java @@ -0,0 +1,367 @@ +package com.sinch.sdk.e2e.domains.sms.v0; + +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.core.utils.Pair; +import com.sinch.sdk.domains.sms.BatchesService; +import com.sinch.sdk.domains.sms.models.BatchText; +import com.sinch.sdk.domains.sms.models.DeliveryReportType; +import com.sinch.sdk.domains.sms.models.DryRun; +import com.sinch.sdk.domains.sms.models.DryRunPerRecipientDetails; +import com.sinch.sdk.domains.sms.models.Parameters; +import com.sinch.sdk.domains.sms.models.requests.BatchesListRequestParameters; +import com.sinch.sdk.domains.sms.models.requests.SendSmsBatchTextRequest; +import com.sinch.sdk.domains.sms.models.requests.UpdateSmsBatchTextRequest; +import com.sinch.sdk.domains.sms.models.responses.BatchesListResponse; +import com.sinch.sdk.e2e.Config; +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import java.time.Instant; +import java.util.Arrays; +import java.util.Collections; +import java.util.concurrent.atomic.AtomicInteger; +import org.junit.jupiter.api.Assertions; + +public class BatchesSteps { + + BatchesService service; + + BatchText sendTextResponse; + BatchText sendTextWithParametersResponse; + DryRun dryRunResponse; + BatchesListResponse listOnePageResponse; + BatchesListResponse listAllResponse; + BatchesListResponse listAllByPageResponse; + BatchText getBatchResponse; + BatchText updateResponse; + BatchText replaceResponse; + BatchText cancelResponse; + Boolean sendDeliveryFeedbackPassed; + + @Given("^the SMS service \"Batches\" is available") + public void serviceAvailable() { + + service = Config.getSinchClient().sms().batches(); + } + + @When("^I send a request to send a text message$") + public void send() { + SendSmsBatchTextRequest request = + SendSmsBatchTextRequest.builder() + .setBody("SMS body message") + .setTo(Collections.singletonList("+12017777777")) + .setFrom("+12015555555") + .setSendAt(Instant.parse("2024-06-06T09:25:00Z")) + .setDeliveryReport(DeliveryReportType.FULL) + .setFeedbackEnabled(true) + .build(); + + sendTextResponse = service.send(request); + } + + @When("^I send a request to send a text message with multiple parameters$") + public void sendWithParameters() { + SendSmsBatchTextRequest request = + SendSmsBatchTextRequest.builder() + .setBody("Hello ${name}! Get 20% off with this discount code ${code}") + .setTo(Arrays.asList("+12017777777", "+12018888888")) + .setFrom("+12015555555") + .setParameters( + new Parameters( + Arrays.asList( + new Parameters.Entry("name", new Pair<>("+12017777777", "John"), "there"), + new Parameters.Entry("name", new Pair<>("+12018888888", "Paul")), + new Parameters.Entry( + "code", new Pair<>("+12017777777", "HALLOWEEN20 \uD83C\uDF83"))))) + .setDeliveryReport(DeliveryReportType.FULL) + .build(); + + sendTextWithParametersResponse = service.send(request); + } + + @When("^I send a request to perform a dry run of a batch$") + public void dryRun() { + SendSmsBatchTextRequest request = + SendSmsBatchTextRequest.builder() + .setBody("Hello ${name}!") + .setTo(Arrays.asList("+12017777777", "+12018888888", "+12019999999")) + .setFrom("+12015555555") + .setParameters( + new Parameters( + Arrays.asList( + new Parameters.Entry("name", new Pair<>("+12017777777", "John"), "there")))) + .setDeliveryReport(DeliveryReportType.NONE) + .build(); + + dryRunResponse = service.dryRun(true, 3, request); + } + + @When("^I send a request to list the SMS batches$") + public void listOnePage() { + BatchesListRequestParameters request = + BatchesListRequestParameters.builder().setPageSize(2).build(); + + listOnePageResponse = service.list(request); + } + + @When("^I send a request to list all the SMS batches$") + public void listAll() { + BatchesListRequestParameters request = + BatchesListRequestParameters.builder().setPageSize(2).build(); + + listAllResponse = service.list(request); + } + + @When("^I iterate manually over the SMS batches pages$") + public void listAllByPage() { + BatchesListRequestParameters request = + BatchesListRequestParameters.builder().setPageSize(2).build(); + + listAllByPageResponse = service.list(request); + } + + @When("^I send a request to retrieve an SMS batch$") + public void get() { + + getBatchResponse = service.get("foo"); + } + + @When("^I send a request to update an SMS batch$") + public void update() { + + UpdateSmsBatchTextRequest request = + UpdateSmsBatchTextRequest.builder() + .setFrom("+12016666666") + .setToAdd(Collections.singletonList("01W4FFL35P4NC4K35SMSGROUP1")) + .setDeliveryReport(DeliveryReportType.SUMMARY) + .build(); + updateResponse = service.update("foo", request); + } + + @When("^I send a request to replace an SMS batch$") + public void replace() { + + SendSmsBatchTextRequest request = + SendSmsBatchTextRequest.builder() + .setFrom("+12016666666") + .setTo(Collections.singletonList("+12018888888")) + .setBody("This is the replacement batch") + .setSendAt(Instant.parse("2024-06-06T09:35:00Z")) + .build(); + replaceResponse = service.replace("foo", request); + } + + @When("^I send a request to cancel an SMS batch$") + public void cancel() { + + cancelResponse = service.cancel("foo"); + } + + @When("^I send a request to send delivery feedbacks$") + public void sendDeliveryFeedback() { + + service.sendDeliveryFeedback("foo", Arrays.asList("+12017777777")); + sendDeliveryFeedbackPassed = true; + } + + @Then("the response contains the text SMS details") + public void sendResult() { + BatchText expected = + BatchText.builder() + .setId("01W4FFL35P4NC4K35SMSBATCH1") + .setTo(Collections.singletonList("12017777777")) + .setFrom("12015555555") + .setCanceled(false) + .setBody("SMS body message") + .setCreatedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setModifiedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setDeliveryReport(DeliveryReportType.FULL) + .setSendAt(Instant.parse("2024-06-06T09:25:00Z")) + .setExpireAt(Instant.parse("2024-06-09T09:25:00Z")) + .setFeedbackEnabled(true) + .setFlashMessage(false) + .build(); + + TestHelpers.recursiveEquals(sendTextResponse, expected); + } + + @Then("the response contains the text SMS details with multiple parameters") + public void sendWithParametersResult() { + BatchText expected = + BatchText.builder() + .setId("01W4FFL35P4NC4K35SMSBATCH2") + .setTo(Arrays.asList("12017777777", "12018888888")) + .setFrom("12015555555") + .setCanceled(false) + .setParameters( + new Parameters( + Arrays.asList( + new Parameters.Entry("name", new Pair<>("+12017777777", "John"), "there"), + new Parameters.Entry("name", new Pair<>("+12018888888", "Paul")), + new Parameters.Entry( + "code", new Pair<>("+12017777777", "HALLOWEEN20 \uD83C\uDF83"))))) + .setBody("Hello ${name}! Get 20% off with this discount code ${code}") + .setCreatedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setModifiedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setDeliveryReport(DeliveryReportType.FULL) + .setExpireAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setFlashMessage(false) + .build(); + + TestHelpers.recursiveEquals(sendTextWithParametersResponse, expected); + } + + @Then( + "the response contains the calculated bodies and number of parts for all messages in the" + + " batch") + public void dryRunResult() { + DryRun expected = + DryRun.builder() + .setNumberOfRecipients(3) + .setNumberOfMessages(3) + .setPerRecipient( + Arrays.asList( + DryRunPerRecipientDetails.builder() + .setRecipient("12017777777") + .setNumberOfParts(1) + .setBody("Hello John!") + .setEncoding("text") + .build(), + DryRunPerRecipientDetails.builder() + .setRecipient("12019999999") + .setNumberOfParts(1) + .setBody("Hello there!") + .setEncoding("text") + .build(), + DryRunPerRecipientDetails.builder() + .setRecipient("12018888888") + .setNumberOfParts(1) + .setBody("Hello there!") + .setEncoding("text") + .build())) + .build(); + + TestHelpers.recursiveEquals(dryRunResponse, expected); + } + + @Then("the response contains \"{int}\" SMS batches") + public void onePageResult(int expected) { + + Assertions.assertEquals(listOnePageResponse.getContent().size(), expected); + } + + @Then("the SMS batches list contains \"{int}\" SMS batches") + public void listAllResult(int expected) { + + BatchesListResponse response = + null != listAllResponse ? listAllResponse : listAllByPageResponse; + + AtomicInteger count = new AtomicInteger(); + response.iterator().forEachRemaining(_unused -> count.getAndIncrement()); + + Assertions.assertEquals(count.get(), expected); + } + + @Then("the SMS batches iteration result contains the data from \"{int}\" pages") + public void listAllByPageResult(int expected) { + + int count = listAllByPageResponse.getContent().isEmpty() ? 0 : 1; + while (listAllByPageResponse.hasNextPage()) { + count++; + listAllByPageResponse = listAllByPageResponse.nextPage(); + } + Assertions.assertEquals(count, expected); + } + + @Then("the response contains the SMS batch details") + public void getResult() { + + BatchText expected = + BatchText.builder() + .setId("01W4FFL35P4NC4K35SMSBATCH1") + .setTo(Collections.singletonList("12017777777")) + .setFrom("12015555555") + .setCanceled(false) + .setBody("SMS body message") + .setCreatedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setModifiedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setDeliveryReport(DeliveryReportType.FULL) + .setSendAt(Instant.parse("2024-06-06T09:25:00Z")) + .setExpireAt(Instant.parse("2024-06-09T09:25:00Z")) + .setFeedbackEnabled(true) + .setFlashMessage(false) + .build(); + + TestHelpers.recursiveEquals(getBatchResponse, expected); + } + + @Then("the response contains the SMS batch details with updated data") + public void updateResult() { + + BatchText expected = + BatchText.builder() + .setId("01W4FFL35P4NC4K35SMSBATCH1") + .setTo(Arrays.asList("12017777777", "01W4FFL35P4NC4K35SMSGROUP1")) + .setFrom("12016666666") + .setCanceled(false) + .setBody("SMS body message") + .setCreatedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setModifiedAt(Instant.parse("2024-06-06T09:22:48.054Z")) + .setDeliveryReport(DeliveryReportType.SUMMARY) + .setSendAt(Instant.parse("2024-06-06T09:25:00Z")) + .setExpireAt(Instant.parse("2024-06-09T09:25:00Z")) + .setFeedbackEnabled(true) + .setFlashMessage(false) + .build(); + + TestHelpers.recursiveEquals(updateResponse, expected); + } + + @Then("the response contains the new SMS batch details with the provided data for replacement") + public void replaceResult() { + + BatchText expected = + BatchText.builder() + .setId("01W4FFL35P4NC4K35SMSBATCH1") + .setTo(Arrays.asList("12018888888")) + .setFrom("12016666666") + .setCanceled(false) + .setBody("This is the replacement batch") + .setCreatedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setModifiedAt(Instant.parse("2024-06-06T09:23:32.504Z")) + .setDeliveryReport(DeliveryReportType.NONE) + .setSendAt(Instant.parse("2024-06-06T09:35:00Z")) + .setExpireAt(Instant.parse("2024-06-09T09:35:00Z")) + .setFlashMessage(false) + .build(); + + TestHelpers.recursiveEquals(replaceResponse, expected); + } + + @Then("the response contains the SMS batch details with a cancelled status") + public void cancelResult() { + + BatchText expected = + BatchText.builder() + .setId("01W4FFL35P4NC4K35SMSBATCH1") + .setTo(Arrays.asList("12017777777")) + .setFrom("12015555555") + .setCanceled(true) + .setBody("SMS body message") + .setCreatedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setModifiedAt(Instant.parse("2024-06-06T09:22:29.978Z")) + .setDeliveryReport(DeliveryReportType.FULL) + .setSendAt(Instant.parse("2024-06-06T09:25:00Z")) + .setExpireAt(Instant.parse("2024-06-09T09:25:00Z")) + .setFeedbackEnabled(true) + .setFlashMessage(false) + .build(); + + TestHelpers.recursiveEquals(cancelResponse, expected); + } + + @Then("the delivery feedback response contains no data") + public void setSendDeliveryFeedbackResult() { + Assertions.assertTrue(sendDeliveryFeedbackPassed); + } +} diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/DeliveryReportsSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/DeliveryReportsSteps.java new file mode 100644 index 000000000..74ec37136 --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/DeliveryReportsSteps.java @@ -0,0 +1,184 @@ +package com.sinch.sdk.e2e.domains.sms.v0; + +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.sms.DeliveryReportsService; +import com.sinch.sdk.domains.sms.models.DeliveryReportBatch; +import com.sinch.sdk.domains.sms.models.DeliveryReportBatchSMS; +import com.sinch.sdk.domains.sms.models.DeliveryReportErrorCode; +import com.sinch.sdk.domains.sms.models.DeliveryReportRecipient; +import com.sinch.sdk.domains.sms.models.DeliveryReportRecipientSMS; +import com.sinch.sdk.domains.sms.models.DeliveryReportStatus; +import com.sinch.sdk.domains.sms.models.DeliveryReportStatusDetails; +import com.sinch.sdk.domains.sms.models.DeliveryReportType; +import com.sinch.sdk.domains.sms.models.requests.DeliveryReportBatchGetRequestParameters; +import com.sinch.sdk.domains.sms.models.requests.DeliveryReportListRequestParameters; +import com.sinch.sdk.domains.sms.models.responses.DeliveryReportsListResponse; +import com.sinch.sdk.e2e.Config; +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import java.time.Instant; +import java.util.Arrays; +import java.util.Collections; +import java.util.concurrent.atomic.AtomicInteger; +import org.junit.jupiter.api.Assertions; + +public class DeliveryReportsSteps { + + DeliveryReportsService service; + + DeliveryReportBatch summaryReport; + DeliveryReportBatch fullReport; + DeliveryReportRecipient recipientReport; + DeliveryReportsListResponse listOnePageResponse; + DeliveryReportsListResponse listAllResponse; + DeliveryReportsListResponse listAllByPageResponse; + + @Given("^the SMS service \"Delivery Reports\" is available") + public void serviceAvailable() { + + service = Config.getSinchClient().sms().deliveryReports(); + } + + @When("^I send a request to retrieve a summary SMS delivery report$") + public void getSummary() { + DeliveryReportBatchGetRequestParameters request = + DeliveryReportBatchGetRequestParameters.builder() + .setType(DeliveryReportType.SUMMARY) + .setStatuses(Arrays.asList(DeliveryReportStatus.DELIVERED, DeliveryReportStatus.FAILED)) + .setCodes(Arrays.asList(15, 0)) + .build(); + + summaryReport = service.get("foo", request); + } + + @When("^I send a request to retrieve a full SMS delivery report$") + public void getFull() { + DeliveryReportBatchGetRequestParameters request = + DeliveryReportBatchGetRequestParameters.builder().setType(DeliveryReportType.FULL).build(); + + fullReport = service.get("foo", request); + } + + @When("^I send a request to retrieve a recipient's delivery report$") + public void getRecipient() { + + recipientReport = service.getForNumber("foo", "+12345678"); + } + + @When("^I send a request to list the SMS delivery reports$") + public void listOnePage() { + DeliveryReportListRequestParameters request = + DeliveryReportListRequestParameters.builder().setPageSize(2).build(); + + listOnePageResponse = service.list(request); + } + + @When("^I send a request to list all the SMS delivery reports$") + public void listAll() { + DeliveryReportListRequestParameters request = + DeliveryReportListRequestParameters.builder().setPageSize(2).build(); + + listAllResponse = service.list(request); + } + + @When("^I iterate manually over the SMS delivery reports pages$") + public void listAllByPage() { + DeliveryReportListRequestParameters request = + DeliveryReportListRequestParameters.builder().setPageSize(2).build(); + + listAllByPageResponse = service.list(request); + } + + @Then("the response contains a summary SMS delivery report") + public void getSummaryResult() { + DeliveryReportBatch expected = + DeliveryReportBatchSMS.builder() + .setBatchId("01W4FFL35P4NC4K35SMSBATCH1") + .setClientReference("reference_e2e") + .setStatuses( + Arrays.asList( + DeliveryReportStatusDetails.builder() + .setCode(15) + .setCount(1) + .setStatus(DeliveryReportStatus.FAILED) + .build(), + DeliveryReportStatusDetails.builder() + .setCode(0) + .setCount(1) + .setStatus(DeliveryReportStatus.DELIVERED) + .build())) + .setTotalMessageCount(2) + .build(); + TestHelpers.recursiveEquals(summaryReport, expected); + } + + @Then("the response contains a full SMS delivery report") + public void getFullResult() { + DeliveryReportBatch expected = + DeliveryReportBatchSMS.builder() + .setBatchId("01W4FFL35P4NC4K35SMSBATCH1") + .setClientReference("reference_e2e") + .setStatuses( + Arrays.asList( + DeliveryReportStatusDetails.builder() + .setCode(0) + .setCount(1) + .setStatus(DeliveryReportStatus.DELIVERED) + .setRecipients(Collections.singletonList("12017777777")) + .build(), + DeliveryReportStatusDetails.builder() + .setCode(15) + .setCount(1) + .setStatus(DeliveryReportStatus.FAILED) + .setRecipients(Collections.singletonList("12018888888")) + .build())) + .setTotalMessageCount(2) + .build(); + TestHelpers.recursiveEquals(fullReport, expected); + } + + @Then("the response contains the recipient's delivery report details") + public void getRecipientResult() { + DeliveryReportRecipient expected = + DeliveryReportRecipientSMS.builder() + .setAt(Instant.parse("2024-06-06T13:06:27.833Z")) + .setBatchId("01W4FFL35P4NC4K35SMSBATCH1") + .setClientReference("reference_e2e") + .setCode(DeliveryReportErrorCode.from(0)) + .setOperatorStatusAt(Instant.parse("2024-06-06T13:06:00Z")) + .setRecipient("12017777777") + .setStatus(DeliveryReportStatus.DELIVERED) + .build(); + + TestHelpers.recursiveEquals(recipientReport, expected); + } + + @Then("the response contains \"{int}\" SMS delivery reports") + public void onePageResult(int expected) { + + Assertions.assertEquals(listOnePageResponse.getContent().size(), expected); + } + + @Then("the SMS delivery reports list contains \"{int}\" SMS delivery reports") + public void listAllResult(int expected) { + DeliveryReportsListResponse response = + null != listAllResponse ? listAllResponse : listAllByPageResponse; + + AtomicInteger count = new AtomicInteger(); + response.iterator().forEachRemaining(_unused -> count.getAndIncrement()); + + Assertions.assertEquals(count.get(), expected); + } + + @Then("the SMS delivery reports iteration result contains the data from \"{int}\" pages") + public void listAllByPageResult(int expected) { + + int count = listAllByPageResponse.getContent().isEmpty() ? 0 : 1; + while (listAllByPageResponse.hasNextPage()) { + count++; + listAllByPageResponse = listAllByPageResponse.nextPage(); + } + Assertions.assertEquals(count, expected); + } +} diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/GroupsSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/GroupsSteps.java new file mode 100644 index 000000000..41edc12d1 --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/GroupsSteps.java @@ -0,0 +1,227 @@ +package com.sinch.sdk.e2e.domains.sms.v0; + +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.sms.GroupsService; +import com.sinch.sdk.domains.sms.models.Group; +import com.sinch.sdk.domains.sms.models.requests.GroupCreateRequestParameters; +import com.sinch.sdk.domains.sms.models.requests.GroupReplaceRequestParameters; +import com.sinch.sdk.domains.sms.models.requests.GroupUpdateRequestParameters; +import com.sinch.sdk.domains.sms.models.requests.GroupsListRequestParameters; +import com.sinch.sdk.domains.sms.models.responses.GroupsListResponse; +import com.sinch.sdk.e2e.Config; +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.concurrent.atomic.AtomicInteger; +import org.junit.jupiter.api.Assertions; + +public class GroupsSteps { + + GroupsService service; + Group createResponse; + Group getResponse; + GroupsListResponse listOnePageResponse; + GroupsListResponse listAllResponse; + GroupsListResponse listAllByPageResponse; + Group updateResponse; + Group updateRemoveNameResponse; + Group replaceResponse; + Boolean deletePassed; + Collection lisMembersResponse; + + @Given("^the SMS service \"Groups\" is available") + public void serviceAvailable() { + + service = Config.getSinchClient().sms().groups(); + } + + @When("^I send a request to create an SMS group$") + public void create() { + GroupCreateRequestParameters request = + GroupCreateRequestParameters.builder() + .setName("Group master") + .setMembers(Arrays.asList("+12017778888", "+12018887777")) + .setChildGroupIds(Collections.singletonList("01W4FFL35P4NC4K35SUBGROUP1")) + .build(); + + createResponse = service.create(request); + } + + @When("^I send a request to retrieve an SMS group$") + public void get() { + + getResponse = service.get("01W4FFL35P4NC4K35SMSGROUP1"); + } + + @When("^I send a request to list the existing SMS groups$") + public void listOnePage() { + GroupsListRequestParameters request = + GroupsListRequestParameters.builder().setPageSize(2).build(); + + listOnePageResponse = service.list(request); + } + + @When("^I send a request to list all the SMS groups$") + public void listAll() { + GroupsListRequestParameters request = + GroupsListRequestParameters.builder().setPageSize(2).build(); + + listAllResponse = service.list(request); + } + + @When("^I iterate manually over the SMS groups pages$") + public void listAllByPage() { + GroupsListRequestParameters request = + GroupsListRequestParameters.builder().setPageSize(2).build(); + + listAllByPageResponse = service.list(request); + } + + @When("^I send a request to update an SMS group$") + public void update() { + + GroupUpdateRequestParameters parameters = + GroupUpdateRequestParameters.builder() + .setName("Updated group name") + .setAdd(Arrays.asList("+12017771111", "+12017772222")) + .setRemove(Arrays.asList("+12017773333", "+12017774444")) + .setAddFromGroup("01W4FFL35P4NC4K35SMSGROUP2") + .setRemoveFromGroup("01W4FFL35P4NC4K35SMSGROUP3") + .build(); + updateResponse = service.update("groupid", parameters); + } + + @When("^I send a request to update an SMS group to remove its name$") + public void updateRemoveName() { + + GroupUpdateRequestParameters parameters = + GroupUpdateRequestParameters.builder().setName(null).build(); + updateRemoveNameResponse = service.update("groupid", parameters); + } + + @When("^I send a request to replace an SMS group$") + public void replace() { + + GroupReplaceRequestParameters parameters = + GroupReplaceRequestParameters.builder() + .setName("Replacement group") + .setMembers(Arrays.asList("+12018881111", "+12018882222", "+12018883333")) + .build(); + replaceResponse = service.replace("groupid", parameters); + } + + @When("^I send a request to delete an SMS group$") + public void delete() { + + service.delete("groupid"); + deletePassed = true; + } + + @When("^I send a request to list the members of an SMS group$") + public void listMembers() { + + lisMembersResponse = service.listMembers("groupid"); + } + + @Then("the response contains the SMS group details") + public void createOrGetResult() { + Group expected = + Group.builder() + .setId("01W4FFL35P4NC4K35SMSGROUP1") + .setName("Group master") + .setSize(2) + .setCreatedAt(Instant.parse("2024-06-06T08:59:22.156Z")) + .setModifiedAt(Instant.parse("2024-06-06T08:59:22.156Z")) + .setChildGroupIds(Collections.singletonList("01W4FFL35P4NC4K35SUBGROUP1")) + .build(); + + Group current = null != createResponse ? createResponse : getResponse; + + TestHelpers.recursiveEquals(current, expected); + } + + @Then("the response contains \"{int}\" SMS groups") + public void onePageResult(int expected) { + + Assertions.assertEquals(listOnePageResponse.getContent().size(), expected); + } + + @Then("the SMS groups list contains \"{int}\" SMS groups") + public void listAllResult(int expected) { + GroupsListResponse response = null != listAllResponse ? listAllResponse : listAllByPageResponse; + + AtomicInteger count = new AtomicInteger(); + response.iterator().forEachRemaining(_unused -> count.getAndIncrement()); + + Assertions.assertEquals(count.get(), expected); + } + + @Then("the SMS groups iteration result contains the data from \"{int}\" pages") + public void listAllByPageResult(int expected) { + + int count = listAllByPageResponse.getContent().isEmpty() ? 0 : 1; + while (listAllByPageResponse.hasNextPage()) { + count++; + listAllByPageResponse = listAllByPageResponse.nextPage(); + } + Assertions.assertEquals(count, expected); + } + + @Then("the response contains the updated SMS group details") + public void updateResult() { + Group expected = + Group.builder() + .setId("01W4FFL35P4NC4K35SMSGROUP1") + .setName("Updated group name") + .setSize(6) + .setCreatedAt(Instant.parse("2024-06-06T08:59:22.156Z")) + .setModifiedAt(Instant.parse("2024-06-06T09:19:58.147Z")) + .setChildGroupIds(Arrays.asList("01W4FFL35P4NC4K35SUBGROUP1")) + .build(); + TestHelpers.recursiveEquals(updateResponse, expected); + } + + @Then("the response contains the updated SMS group details where the name has been removed") + public void updateRemoveNameResult() { + Group expected = + Group.builder() + .setId("01W4FFL35P4NC4K35SMSGROUP2") + .setSize(5) + .setCreatedAt(Instant.parse("2024-06-06T12:45:18.761Z")) + .setModifiedAt(Instant.parse("2024-06-06T13:12:05.137Z")) + .setChildGroupIds(Collections.emptyList()) + .build(); + TestHelpers.recursiveEquals(updateRemoveNameResponse, expected); + } + + @Then("the response contains the replaced SMS group details") + public void replaceResult() { + Group expected = + Group.builder() + .setId("01W4FFL35P4NC4K35SMSGROUP1") + .setName("Replacement group") + .setSize(3) + .setCreatedAt(Instant.parse("2024-06-06T08:59:22.156Z")) + .setModifiedAt(Instant.parse("2024-08-21T09:39:36.679Z")) + .setChildGroupIds(Collections.singletonList("01W4FFL35P4NC4K35SUBGROUP1")) + .build(); + TestHelpers.recursiveEquals(replaceResponse, expected); + } + + @Then("the delete SMS group response contains no data") + public void deleteResult() { + Assertions.assertTrue(deletePassed); + } + + @Then("the response contains the phone numbers of the SMS group") + public void lisMembersResult() { + Collection expected = + new ArrayList<>(Arrays.asList("12018881111", "12018882222", "12018883333")); + TestHelpers.recursiveEquals(lisMembersResponse, expected); + } +} diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/InboundsSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/InboundsSteps.java new file mode 100644 index 000000000..85f323bbe --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/InboundsSteps.java @@ -0,0 +1,112 @@ +package com.sinch.sdk.e2e.domains.sms.v0; + +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.sms.InboundsService; +import com.sinch.sdk.domains.sms.models.InboundText; +import com.sinch.sdk.domains.sms.models.requests.InboundsListRequestParameters; +import com.sinch.sdk.domains.sms.models.responses.InboundsListResponse; +import com.sinch.sdk.e2e.Config; +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import java.time.Instant; +import java.util.Arrays; +import java.util.concurrent.atomic.AtomicInteger; +import org.junit.jupiter.api.Assertions; + +public class InboundsSteps { + + InboundsService service; + InboundText getResponse; + InboundsListResponse listOnePageResponse; + InboundsListResponse listAllResponse; + InboundsListResponse listAllByPageResponse; + + @Given("^the SMS service \"Inbounds\" is available") + public void serviceAvailable() { + + service = Config.getSinchClient().sms().inbounds(); + } + + @When("^I send a request to retrieve an inbound message") + public void get() { + + getResponse = (InboundText) service.get("inboundid"); + } + + @When("^I send a request to list the inbound messages$") + public void listOnePage() { + InboundsListRequestParameters request = + InboundsListRequestParameters.builder() + .setTo(Arrays.asList("12017777777", "12018888888")) + .setPageSize(2) + .build(); + + listOnePageResponse = service.list(request); + } + + @When("^I send a request to list all the inbound messages$") + public void listAll() { + InboundsListRequestParameters request = + InboundsListRequestParameters.builder() + .setTo(Arrays.asList("12017777777", "12018888888")) + .setPageSize(2) + .build(); + + listAllResponse = service.list(request); + } + + @When("^I iterate manually over the inbound messages pages$") + public void listAllByPage() { + InboundsListRequestParameters request = + InboundsListRequestParameters.builder() + .setTo(Arrays.asList("12017777777", "12018888888")) + .setPageSize(2) + .build(); + + listAllByPageResponse = service.list(request); + } + + @Then("the response contains the inbound message details") + public void getResult() { + InboundText expected = + InboundText.builder() + .setBody("Hello John!") + .setFrom("12015555555") + .setId("01W4FFL35P4NC4K35INBOUND01") + .setOperatorId("311071") + .setReceivedAt(Instant.parse("2024-06-06T14:16:54.777Z")) + .setTo("12017777777") + .build(); + + TestHelpers.recursiveEquals(getResponse, expected); + } + + @Then("the response contains \"{int}\" inbound messages") + public void onePageResult(int expected) { + + Assertions.assertEquals(listOnePageResponse.getContent().size(), expected); + } + + @Then("the inbound messages list contains \"{int}\" inbound messages") + public void listAllResult(int expected) { + InboundsListResponse response = + null != listAllResponse ? listAllResponse : listAllByPageResponse; + + AtomicInteger count = new AtomicInteger(); + response.iterator().forEachRemaining(_unused -> count.getAndIncrement()); + + Assertions.assertEquals(count.get(), expected); + } + + @Then("the inbound messages iteration result contains the data from \"{int}\" pages") + public void listAllByPageResult(int expected) { + + int count = listAllByPageResponse.getContent().isEmpty() ? 0 : 1; + while (listAllByPageResponse.hasNextPage()) { + count++; + listAllByPageResponse = listAllByPageResponse.nextPage(); + } + Assertions.assertEquals(count, expected); + } +} diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/SmsIT.java b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/SmsIT.java new file mode 100644 index 000000000..0361145fe --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/SmsIT.java @@ -0,0 +1,16 @@ +package com.sinch.sdk.e2e.domains.sms.v0; + +import static io.cucumber.junit.platform.engine.Constants.GLUE_PROPERTY_NAME; + +import org.junit.platform.suite.api.ConfigurationParameter; +import org.junit.platform.suite.api.IncludeEngines; +import org.junit.platform.suite.api.SelectClasspathResource; +import org.junit.platform.suite.api.Suite; +import org.junit.platform.suite.api.SuiteDisplayName; + +@Suite +@SuiteDisplayName("SMS V0") +@IncludeEngines("cucumber") +@SelectClasspathResource("features/sms") +@ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "com.sinch.sdk.e2e.domains.sms.v0") +public class SmsIT {} diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/WebhooksSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/WebhooksSteps.java new file mode 100644 index 000000000..390644936 --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v0/WebhooksSteps.java @@ -0,0 +1,151 @@ +package com.sinch.sdk.e2e.domains.sms.v0; + +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.sms.WebHooksService; +import com.sinch.sdk.domains.sms.models.DeliveryReportBatchSMS; +import com.sinch.sdk.domains.sms.models.DeliveryReportErrorCode; +import com.sinch.sdk.domains.sms.models.DeliveryReportRecipient; +import com.sinch.sdk.domains.sms.models.DeliveryReportRecipientSMS; +import com.sinch.sdk.domains.sms.models.DeliveryReportStatus; +import com.sinch.sdk.domains.sms.models.DeliveryReportStatusDetails; +import com.sinch.sdk.domains.sms.models.InboundText; +import com.sinch.sdk.domains.sms.models.webhooks.WebhooksEvent; +import com.sinch.sdk.e2e.Config; +import com.sinch.sdk.e2e.domains.WebhooksHelper; +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import java.io.IOException; +import java.net.URL; +import java.time.Instant; +import java.util.Arrays; + +public class WebhooksSteps { + + static final String WEBHOOKS_PATH_PREFIX = "/webhooks/sms"; + static final String WEBHOOKS_URL = Config.SMS_HOST_NAME + WEBHOOKS_PATH_PREFIX; + + WebHooksService service; + WebhooksHelper.Response incoming; + WebhooksHelper.Response deliveryReport; + WebhooksHelper.Response deliveryReportRecipientDelivered; + WebhooksHelper.Response deliveryReportRecipientAborted; + + @Given("^the SMS Webhooks handler is available") + public void serviceAvailable() { + + service = Config.getSinchClient().sms().webHooks(); + } + + @When("^I send a request to trigger an \"incoming SMS\" event") + public void incoming() throws IOException { + + incoming = WebhooksHelper.callURL(new URL(WEBHOOKS_URL + "/incoming-sms"), service::parse); + } + + @When("^I send a request to trigger an \"SMS delivery report\" event") + public void deliveryReport() throws IOException { + + deliveryReport = + WebhooksHelper.callURL(new URL(WEBHOOKS_URL + "/delivery-report-sms"), service::parse); + } + + @When( + "^I send a request to trigger an \"SMS recipient delivery report\" event with the status" + + " \"Delivered\"") + public void deliveryReportRecipientDelivered() throws IOException { + + deliveryReportRecipientDelivered = + WebhooksHelper.callURL( + new URL(WEBHOOKS_URL + "/recipient-delivery-report-sms-delivered"), service::parse); + } + + @When( + "^I send a request to trigger an \"SMS recipient delivery report\" event with the status" + + " \"Aborted\"") + public void deliveryReportRecipientAborted() throws IOException { + + deliveryReportRecipientAborted = + WebhooksHelper.callURL( + new URL(WEBHOOKS_URL + "/recipient-delivery-report-sms-aborted"), service::parse); + } + + @Then("the SMS event describes an \"incoming SMS\" event") + public void incomingResult() { + InboundText expected = + InboundText.builder() + .setBody("Hello John! 👋") + .setFrom("12015555555") + .setId("01W4FFL35P4NC4K35SMSBATCH8") + .setOperatorId("311071") + .setReceivedAt(Instant.parse("2024-06-06T07:52:37.386Z")) + .setTo("12017777777") + .build(); + + TestHelpers.recursiveEquals(incoming.event, expected); + } + + @Then("the SMS event describes an \"SMS delivery report\" event") + public void deliveryReportResult() { + DeliveryReportBatchSMS expected = + DeliveryReportBatchSMS.builder() + .setBatchId("01W4FFL35P4NC4K35SMSBATCH8") + .setClientReference("client-ref") + .setStatuses( + Arrays.asList( + DeliveryReportStatusDetails.builder() + .setCode(0) + .setCount(2) + .setRecipients(Arrays.asList("12017777777", "33612345678")) + .setStatus(DeliveryReportStatus.DELIVERED) + .build())) + .setTotalMessageCount(2) + .build(); + + TestHelpers.recursiveEquals(deliveryReport.event, expected); + } + + @Then( + "the SMS event describes an SMS recipient delivery report event with the status" + + " \"Delivered\"") + public void deliveryReportRecipientDeliveredResult() { + DeliveryReportRecipient expected = + DeliveryReportRecipientSMS.builder() + .setAt(Instant.parse("2024-06-06T08:17:19.210Z")) + .setBatchId("01W4FFL35P4NC4K35SMSBATCH9") + .setClientReference("client-ref") + .setCode(DeliveryReportErrorCode.from(0)) + .setOperatorStatusAt(Instant.parse("2024-06-06T08:17:00Z")) + .setRecipient("12017777777") + .setStatus(DeliveryReportStatus.DELIVERED) + .build(); + + TestHelpers.recursiveEquals(deliveryReportRecipientDelivered.event, expected); + } + + @Then( + "the SMS event describes an SMS recipient delivery report event with the status \"Aborted\"") + public void deliveryReportRecipientAbortedResult() { + DeliveryReportRecipient expected = + DeliveryReportRecipientSMS.builder() + .setAt(Instant.parse("2024-06-06T08:17:15.603Z")) + .setBatchId("01W4FFL35P4NC4K35SMSBATCH9") + .setClientReference("client-ref") + .setCode(DeliveryReportErrorCode.UNPROVISIONED_REGION) + .setRecipient("12010000000") + .setStatus(DeliveryReportStatus.ABORTED) + .build(); + + TestHelpers.recursiveEquals(deliveryReportRecipientAborted.event, expected); + } + + @Then("the header of the event {string} contains a valid signature") + public void validateHeader(String _unused) { + // dummy empty validation: V0 do not support authentication + } + + @Then("the header of the event {string} with the status {string} contains a valid signature") + public void validateHeader(String _unused, String status) { + // dummy empty validation: V0 do not support authentication + } +} diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/BatchesSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/BatchesSteps.java new file mode 100644 index 000000000..a73724315 --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/BatchesSteps.java @@ -0,0 +1,410 @@ +package com.sinch.sdk.e2e.domains.sms.v1; + +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.sms.api.v1.BatchesService; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import com.sinch.sdk.domains.sms.models.v1.batches.request.DryRunQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.batches.request.ListBatchesQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.batches.request.SendDeliveryFeedbackRequest; +import com.sinch.sdk.domains.sms.models.v1.batches.request.TextRequest; +import com.sinch.sdk.domains.sms.models.v1.batches.request.UpdateTextRequest; +import com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse; +import com.sinch.sdk.domains.sms.models.v1.batches.response.DryRunPerRecipientDetails; +import com.sinch.sdk.domains.sms.models.v1.batches.response.DryRunResponse; +import com.sinch.sdk.domains.sms.models.v1.batches.response.ListBatchesResponse; +import com.sinch.sdk.domains.sms.models.v1.batches.response.TextResponse; +import com.sinch.sdk.e2e.Config; +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import java.time.Instant; +import java.util.AbstractMap; +import java.util.Arrays; +import java.util.Collections; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.junit.jupiter.api.Assertions; + +public class BatchesSteps { + + BatchesService service; + + BatchResponse sendTextResponse; + BatchResponse sendTextWithParametersResponse; + DryRunResponse dryRunResponse; + ListBatchesResponse listOnePageResponse; + ListBatchesResponse listAllResponse; + ListBatchesResponse listAllByPageResponse; + BatchResponse getBatchResponse; + BatchResponse updateResponse; + BatchResponse replaceResponse; + BatchResponse cancelResponse; + Boolean sendDeliveryFeedbackPassed; + + @Given("^the SMS service \"Batches\" is available") + public void serviceAvailable() { + + service = Config.getSinchClient().sms().v1().batches(); + } + + @When("^I send a request to send a text message$") + public void send() { + TextRequest request = + TextRequest.builder() + .setBody("SMS body message") + .setTo(Collections.singletonList("+12017777777")) + .setFrom("+12015555555") + .setSendAt(Instant.parse("2024-06-06T09:25:00Z")) + .setDeliveryReport(DeliveryReportType.FULL) + .setFeedbackEnabled(true) + .build(); + + sendTextResponse = service.send(request); + } + + @When("^I send a request to send a text message with multiple parameters$") + public void sendWithParameters() { + + Map nameParameters = + Stream.of( + new AbstractMap.SimpleEntry<>("+12017777777", "John"), + new AbstractMap.SimpleEntry<>("+12018888888", "Paul"), + new AbstractMap.SimpleEntry<>("default", "there")) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + Map codeParameters = + Stream.of(new AbstractMap.SimpleEntry<>("+12017777777", "HALLOWEEN20 \uD83C\uDF83")) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + Map> parameters = + Stream.of( + new AbstractMap.SimpleEntry<>("name", nameParameters), + new AbstractMap.SimpleEntry<>("code", codeParameters)) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + TextRequest request = + TextRequest.builder() + .setBody("Hello ${name}! Get 20% off with this discount code ${code}") + .setTo(Arrays.asList("+12017777777", "+12018888888")) + .setFrom("+12015555555") + .setParameters(parameters) + .setDeliveryReport(DeliveryReportType.FULL) + .build(); + + sendTextWithParametersResponse = service.send(request); + } + + @When("^I send a request to perform a dry run of a batch$") + public void dryRun() { + + Map nameParameters = + Stream.of( + new AbstractMap.SimpleEntry<>("+12017777777", "John"), + new AbstractMap.SimpleEntry<>("default", "there")) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + Map> parameters = + Stream.of(new AbstractMap.SimpleEntry<>("name", nameParameters)) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + TextRequest request = + TextRequest.builder() + .setBody("Hello ${name}!") + .setTo(Arrays.asList("+12017777777", "+12018888888", "+12019999999")) + .setFrom("+12015555555") + .setParameters(parameters) + .setDeliveryReport(DeliveryReportType.NONE) + .build(); + + DryRunQueryParameters queryParameters = + DryRunQueryParameters.builder().setPerRecipient(true).setNumberOfRecipients(3).build(); + dryRunResponse = service.dryRun(queryParameters, request); + } + + @When("^I send a request to list the SMS batches$") + public void listOnePage() { + ListBatchesQueryParameters request = + ListBatchesQueryParameters.builder().setPageSize(2).build(); + + listOnePageResponse = service.list(request); + } + + @When("^I send a request to list all the SMS batches$") + public void listAll() { + ListBatchesQueryParameters request = + ListBatchesQueryParameters.builder().setPageSize(2).build(); + + listAllResponse = service.list(request); + } + + @When("^I iterate manually over the SMS batches pages$") + public void listAllByPage() { + ListBatchesQueryParameters request = + ListBatchesQueryParameters.builder().setPageSize(2).build(); + + listAllByPageResponse = service.list(request); + } + + @When("^I send a request to retrieve an SMS batch$") + public void get() { + + getBatchResponse = service.get("foo"); + } + + @When("^I send a request to update an SMS batch$") + public void update() { + + UpdateTextRequest request = + UpdateTextRequest.builder() + .setFrom("+12016666666") + .setToAdd(Collections.singletonList("01W4FFL35P4NC4K35SMSGROUP1")) + .setDeliveryReport(DeliveryReportType.SUMMARY) + .build(); + updateResponse = service.update("foo", request); + } + + @When("^I send a request to replace an SMS batch$") + public void replace() { + + TextRequest request = + TextRequest.builder() + .setFrom("+12016666666") + .setTo(Collections.singletonList("+12018888888")) + .setBody("This is the replacement batch") + .setSendAt(Instant.parse("2024-06-06T09:35:00Z")) + .build(); + replaceResponse = service.replace("foo", request); + } + + @When("^I send a request to cancel an SMS batch$") + public void cancel() { + + cancelResponse = service.cancel("foo"); + } + + @When("^I send a request to send delivery feedbacks$") + public void sendDeliveryFeedback() { + + SendDeliveryFeedbackRequest request = + SendDeliveryFeedbackRequest.builder() + .setRecipients(Collections.singletonList("+12017777777")) + .build(); + service.sendDeliveryFeedback("foo", request); + sendDeliveryFeedbackPassed = true; + } + + @Then("the response contains the text SMS details") + public void sendResult() { + TextResponse expected = + TextResponse.builder() + .setId("01W4FFL35P4NC4K35SMSBATCH1") + .setTo(Collections.singletonList("12017777777")) + .setFrom("12015555555") + .setCanceled(false) + .setBody("SMS body message") + .setCreatedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setModifiedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setDeliveryReport(DeliveryReportType.FULL) + .setSendAt(Instant.parse("2024-06-06T09:25:00Z")) + .setExpireAt(Instant.parse("2024-06-09T09:25:00Z")) + .setFeedbackEnabled(true) + .setFlashMessage(false) + .build(); + + TestHelpers.recursiveEquals(sendTextResponse, expected); + } + + @Then("the response contains the text SMS details with multiple parameters") + public void sendWithParametersResult() { + + Map nameParameters = + Stream.of( + new AbstractMap.SimpleEntry<>("+12017777777", "John"), + new AbstractMap.SimpleEntry<>("+12018888888", "Paul"), + new AbstractMap.SimpleEntry<>("default", "there")) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + Map codeParameters = + Stream.of(new AbstractMap.SimpleEntry<>("+12017777777", "HALLOWEEN20 \uD83C\uDF83")) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + Map> parameters = + Stream.of( + new AbstractMap.SimpleEntry<>("name", nameParameters), + new AbstractMap.SimpleEntry<>("code", codeParameters)) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + TextResponse expected = + TextResponse.builder() + .setId("01W4FFL35P4NC4K35SMSBATCH2") + .setTo(Arrays.asList("12017777777", "12018888888")) + .setFrom("12015555555") + .setCanceled(false) + .setParameters(parameters) + .setBody("Hello ${name}! Get 20% off with this discount code ${code}") + .setCreatedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setModifiedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setDeliveryReport(DeliveryReportType.FULL) + .setExpireAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setFlashMessage(false) + .build(); + + TestHelpers.recursiveEquals(sendTextWithParametersResponse, expected); + } + + @Then( + "the response contains the calculated bodies and number of parts for all messages in the" + + " batch") + public void dryRunResult() { + DryRunResponse expected = + DryRunResponse.builder() + .setNumberOfRecipients(3) + .setNumberOfMessages(3) + .setPerRecipient( + Arrays.asList( + DryRunPerRecipientDetails.builder() + .setRecipient("12017777777") + .setNumberOfParts(1) + .setBody("Hello John!") + .setEncoding("text") + .build(), + DryRunPerRecipientDetails.builder() + .setRecipient("12019999999") + .setNumberOfParts(1) + .setBody("Hello there!") + .setEncoding("text") + .build(), + DryRunPerRecipientDetails.builder() + .setRecipient("12018888888") + .setNumberOfParts(1) + .setBody("Hello there!") + .setEncoding("text") + .build())) + .build(); + + TestHelpers.recursiveEquals(dryRunResponse, expected); + } + + @Then("the response contains \"{int}\" SMS batches") + public void onePageResult(int expected) { + + Assertions.assertEquals(listOnePageResponse.getContent().size(), expected); + } + + @Then("the SMS batches list contains \"{int}\" SMS batches") + public void listAllResult(int expected) { + + ListBatchesResponse response = + null != listAllResponse ? listAllResponse : listAllByPageResponse; + + AtomicInteger count = new AtomicInteger(); + response.iterator().forEachRemaining(_unused -> count.getAndIncrement()); + + Assertions.assertEquals(count.get(), expected); + } + + @Then("the SMS batches iteration result contains the data from \"{int}\" pages") + public void listAllByPageResult(int expected) { + + int count = listAllByPageResponse.getContent().isEmpty() ? 0 : 1; + while (listAllByPageResponse.hasNextPage()) { + count++; + listAllByPageResponse = listAllByPageResponse.nextPage(); + } + Assertions.assertEquals(count, expected); + } + + @Then("the response contains the SMS batch details") + public void getResult() { + + TextResponse expected = + TextResponse.builder() + .setId("01W4FFL35P4NC4K35SMSBATCH1") + .setTo(Collections.singletonList("12017777777")) + .setFrom("12015555555") + .setCanceled(false) + .setBody("SMS body message") + .setCreatedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setModifiedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setDeliveryReport(DeliveryReportType.FULL) + .setSendAt(Instant.parse("2024-06-06T09:25:00Z")) + .setExpireAt(Instant.parse("2024-06-09T09:25:00Z")) + .setFeedbackEnabled(true) + .setFlashMessage(false) + .build(); + + TestHelpers.recursiveEquals(getBatchResponse, expected); + } + + @Then("the response contains the SMS batch details with updated data") + public void updateResult() { + + TextResponse expected = + TextResponse.builder() + .setId("01W4FFL35P4NC4K35SMSBATCH1") + .setTo(Arrays.asList("12017777777", "01W4FFL35P4NC4K35SMSGROUP1")) + .setFrom("12016666666") + .setCanceled(false) + .setBody("SMS body message") + .setCreatedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setModifiedAt(Instant.parse("2024-06-06T09:22:48.054Z")) + .setDeliveryReport(DeliveryReportType.SUMMARY) + .setSendAt(Instant.parse("2024-06-06T09:25:00Z")) + .setExpireAt(Instant.parse("2024-06-09T09:25:00Z")) + .setFeedbackEnabled(true) + .setFlashMessage(false) + .build(); + + TestHelpers.recursiveEquals(updateResponse, expected); + } + + @Then("the response contains the new SMS batch details with the provided data for replacement") + public void replaceResult() { + + TextResponse expected = + TextResponse.builder() + .setId("01W4FFL35P4NC4K35SMSBATCH1") + .setTo(Arrays.asList("12018888888")) + .setFrom("12016666666") + .setCanceled(false) + .setBody("This is the replacement batch") + .setCreatedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setModifiedAt(Instant.parse("2024-06-06T09:23:32.504Z")) + .setDeliveryReport(DeliveryReportType.NONE) + .setSendAt(Instant.parse("2024-06-06T09:35:00Z")) + .setExpireAt(Instant.parse("2024-06-09T09:35:00Z")) + .setFlashMessage(false) + .build(); + + TestHelpers.recursiveEquals(replaceResponse, expected); + } + + @Then("the response contains the SMS batch details with a cancelled status") + public void cancelResult() { + + TextResponse expected = + TextResponse.builder() + .setId("01W4FFL35P4NC4K35SMSBATCH1") + .setTo(Arrays.asList("12017777777")) + .setFrom("12015555555") + .setCanceled(true) + .setBody("SMS body message") + .setCreatedAt(Instant.parse("2024-06-06T09:22:14.304Z")) + .setModifiedAt(Instant.parse("2024-06-06T09:22:29.978Z")) + .setDeliveryReport(DeliveryReportType.FULL) + .setSendAt(Instant.parse("2024-06-06T09:25:00Z")) + .setExpireAt(Instant.parse("2024-06-09T09:25:00Z")) + .setFeedbackEnabled(true) + .setFlashMessage(false) + .build(); + + TestHelpers.recursiveEquals(cancelResponse, expected); + } + + @Then("the delivery feedback response contains no data") + public void setSendDeliveryFeedbackResult() { + Assertions.assertTrue(sendDeliveryFeedbackPassed); + } +} diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/DeliveryReportsSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/DeliveryReportsSteps.java new file mode 100644 index 000000000..a7dfb1ca7 --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/DeliveryReportsSteps.java @@ -0,0 +1,186 @@ +package com.sinch.sdk.e2e.domains.sms.v1; + +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.sms.api.v1.DeliveryReportsService; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReport; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReportSMS; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryReceiptErrorCode; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryStatus; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.MessageDeliveryStatus; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReport; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReportSMS; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.request.BatchDeliveryReportQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.request.ListDeliveryReportsQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.request.QueryReportType; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.response.ListDeliveryReportsResponse; +import com.sinch.sdk.e2e.Config; +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import java.time.Instant; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.concurrent.atomic.AtomicInteger; +import org.junit.jupiter.api.Assertions; + +public class DeliveryReportsSteps { + + DeliveryReportsService service; + + BatchDeliveryReport summaryReport; + BatchDeliveryReport fullReport; + RecipientDeliveryReport recipientReport; + ListDeliveryReportsResponse listOnePageResponse; + ListDeliveryReportsResponse listAllResponse; + ListDeliveryReportsResponse listAllByPageResponse; + + @Given("^the SMS service \"Delivery Reports\" is available") + public void serviceAvailable() { + + service = Config.getSinchClient().sms().v1().deliveryReports(); + } + + @When("^I send a request to retrieve a summary SMS delivery report$") + public void getSummary() { + BatchDeliveryReportQueryParameters request = + BatchDeliveryReportQueryParameters.builder() + .setType(QueryReportType.SUMMARY) + .setStatus(Arrays.asList(DeliveryStatus.DELIVERED, DeliveryStatus.FAILED)) + .setCode( + Arrays.asList(DeliveryReceiptErrorCode.from(15), DeliveryReceiptErrorCode.from(0))) + .build(); + + summaryReport = service.get("foo", request); + } + + @When("^I send a request to retrieve a full SMS delivery report$") + public void getFull() { + BatchDeliveryReportQueryParameters request = + BatchDeliveryReportQueryParameters.builder().setType(QueryReportType.FULL).build(); + + fullReport = service.get("foo", request); + } + + @When("^I send a request to retrieve a recipient's delivery report$") + public void getRecipient() { + + recipientReport = service.getForNumber("foo", "+12345678"); + } + + @When("^I send a request to list the SMS delivery reports$") + public void listOnePage() { + ListDeliveryReportsQueryParameters request = + ListDeliveryReportsQueryParameters.builder().setPageSize(2).build(); + + listOnePageResponse = service.list(request); + } + + @When("^I send a request to list all the SMS delivery reports$") + public void listAll() { + ListDeliveryReportsQueryParameters request = + ListDeliveryReportsQueryParameters.builder().setPageSize(2).build(); + + listAllResponse = service.list(request); + } + + @When("^I iterate manually over the SMS delivery reports pages$") + public void listAllByPage() { + ListDeliveryReportsQueryParameters request = + ListDeliveryReportsQueryParameters.builder().setPageSize(2).build(); + + listAllByPageResponse = service.list(request); + } + + @Then("the response contains a summary SMS delivery report") + public void getSummaryResult() { + BatchDeliveryReport expected = + BatchDeliveryReportSMS.builder() + .setBatchId("01W4FFL35P4NC4K35SMSBATCH1") + .setClientReference("reference_e2e") + .setStatuses( + Arrays.asList( + MessageDeliveryStatus.builder() + .setCode(DeliveryReceiptErrorCode.from(15)) + .setCount(1) + .setStatus(DeliveryStatus.FAILED) + .build(), + MessageDeliveryStatus.builder() + .setCode(DeliveryReceiptErrorCode.from(0)) + .setCount(1) + .setStatus(DeliveryStatus.DELIVERED) + .build())) + .setTotalMessageCount(2) + .build(); + TestHelpers.recursiveEquals(summaryReport, expected); + } + + @Then("the response contains a full SMS delivery report") + public void getFullResult() { + BatchDeliveryReport expected = + BatchDeliveryReportSMS.builder() + .setBatchId("01W4FFL35P4NC4K35SMSBATCH1") + .setClientReference("reference_e2e") + .setStatuses( + Arrays.asList( + MessageDeliveryStatus.builder() + .setCode(DeliveryReceiptErrorCode.from(0)) + .setCount(1) + .setStatus(DeliveryStatus.DELIVERED) + .setRecipients(new HashSet<>(Collections.singletonList("12017777777"))) + .build(), + MessageDeliveryStatus.builder() + .setCode(DeliveryReceiptErrorCode.from(15)) + .setCount(1) + .setStatus(DeliveryStatus.FAILED) + .setRecipients(new HashSet<>(Collections.singletonList("12018888888"))) + .build())) + .setTotalMessageCount(2) + .build(); + TestHelpers.recursiveEquals(fullReport, expected); + } + + @Then("the response contains the recipient's delivery report details") + public void getRecipientResult() { + RecipientDeliveryReport expected = + RecipientDeliveryReportSMS.builder() + .setCreatedAt(Instant.parse("2024-06-06T13:06:27.833Z")) + .setBatchId("01W4FFL35P4NC4K35SMSBATCH1") + .setClientReference("reference_e2e") + .setCode(DeliveryReceiptErrorCode.from(0)) + .setOperatorStatusAt(Instant.parse("2024-06-06T13:06:00Z")) + .setRecipient("12017777777") + .setStatus(DeliveryStatus.DELIVERED) + .build(); + + TestHelpers.recursiveEquals(recipientReport, expected); + } + + @Then("the response contains \"{int}\" SMS delivery reports") + public void onePageResult(int expected) { + + Assertions.assertEquals(listOnePageResponse.getContent().size(), expected); + } + + @Then("the SMS delivery reports list contains \"{int}\" SMS delivery reports") + public void listAllResult(int expected) { + ListDeliveryReportsResponse response = + null != listAllResponse ? listAllResponse : listAllByPageResponse; + + AtomicInteger count = new AtomicInteger(); + response.iterator().forEachRemaining(_unused -> count.getAndIncrement()); + + Assertions.assertEquals(count.get(), expected); + } + + @Then("the SMS delivery reports iteration result contains the data from \"{int}\" pages") + public void listAllByPageResult(int expected) { + + int count = listAllByPageResponse.getContent().isEmpty() ? 0 : 1; + while (listAllByPageResponse.hasNextPage()) { + count++; + listAllByPageResponse = listAllByPageResponse.nextPage(); + } + Assertions.assertEquals(count, expected); + } +} diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/GroupsSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/GroupsSteps.java new file mode 100644 index 000000000..2c303a00b --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/GroupsSteps.java @@ -0,0 +1,224 @@ +package com.sinch.sdk.e2e.domains.sms.v1; + +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import com.sinch.sdk.domains.sms.models.v1.groups.Group; +import com.sinch.sdk.domains.sms.models.v1.groups.request.GroupRequest; +import com.sinch.sdk.domains.sms.models.v1.groups.request.GroupUpdateRequest; +import com.sinch.sdk.domains.sms.models.v1.groups.request.ListGroupsQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.groups.response.ListGroupsResponse; +import com.sinch.sdk.e2e.Config; +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.concurrent.atomic.AtomicInteger; +import org.junit.jupiter.api.Assertions; + +public class GroupsSteps { + + GroupsService service; + Group createResponse; + Group getResponse; + ListGroupsResponse listOnePageResponse; + ListGroupsResponse listAllResponse; + ListGroupsResponse listAllByPageResponse; + Group updateResponse; + Group updateRemoveNameResponse; + Group replaceResponse; + Boolean deletePassed; + Collection lisMembersResponse; + + @Given("^the SMS service \"Groups\" is available") + public void serviceAvailable() { + + service = Config.getSinchClient().sms().v1().groups(); + } + + @When("^I send a request to create an SMS group$") + public void create() { + GroupRequest request = + GroupRequest.builder() + .setName("Group master") + .setMembers(new HashSet<>(Arrays.asList("+12017778888", "+12018887777"))) + .setChildGroups(new HashSet<>(Arrays.asList("01W4FFL35P4NC4K35SUBGROUP1"))) + .build(); + + createResponse = service.create(request); + } + + @When("^I send a request to retrieve an SMS group$") + public void get() { + + getResponse = service.get("01W4FFL35P4NC4K35SMSGROUP1"); + } + + @When("^I send a request to list the existing SMS groups$") + public void listOnePage() { + ListGroupsQueryParameters request = ListGroupsQueryParameters.builder().setPageSize(2).build(); + + listOnePageResponse = service.list(request); + } + + @When("^I send a request to list all the SMS groups$") + public void listAll() { + ListGroupsQueryParameters request = ListGroupsQueryParameters.builder().setPageSize(2).build(); + + listAllResponse = service.list(request); + } + + @When("^I iterate manually over the SMS groups pages$") + public void listAllByPage() { + ListGroupsQueryParameters request = ListGroupsQueryParameters.builder().setPageSize(2).build(); + + listAllByPageResponse = service.list(request); + } + + @When("^I send a request to update an SMS group$") + public void update() { + + GroupUpdateRequest parameters = + GroupUpdateRequest.builder() + .setName("Updated group name") + .setAdd(Arrays.asList("+12017771111", "+12017772222")) + .setRemove(Arrays.asList("+12017773333", "+12017774444")) + .setAddFromGroup("01W4FFL35P4NC4K35SMSGROUP2") + .setRemoveFromGroup("01W4FFL35P4NC4K35SMSGROUP3") + .build(); + updateResponse = service.update("groupid", parameters); + } + + @When("^I send a request to update an SMS group to remove its name$") + public void updateRemoveName() { + + GroupUpdateRequest parameters = GroupUpdateRequest.builder().setName(null).build(); + updateRemoveNameResponse = service.update("groupid", parameters); + } + + @When("^I send a request to replace an SMS group$") + public void replace() { + + GroupRequest parameters = + GroupRequest.builder() + .setName("Replacement group") + .setMembers( + new HashSet<>(Arrays.asList("+12018881111", "+12018882222", "+12018883333"))) + .build(); + replaceResponse = service.replace("groupid", parameters); + } + + @When("^I send a request to delete an SMS group$") + public void delete() { + + service.delete("groupid"); + deletePassed = true; + } + + @When("^I send a request to list the members of an SMS group$") + public void listMembers() { + + lisMembersResponse = service.listMembers("groupid"); + } + + @Then("the response contains the SMS group details") + public void createOrGetResult() { + Group expected = + Group.builder() + .setId("01W4FFL35P4NC4K35SMSGROUP1") + .setName("Group master") + .setSize(2) + .setCreatedAt(Instant.parse("2024-06-06T08:59:22.156Z")) + .setModifiedAt(Instant.parse("2024-06-06T08:59:22.156Z")) + .setChildGroups(new HashSet<>(Collections.singleton("01W4FFL35P4NC4K35SUBGROUP1"))) + .build(); + + Group current = null != createResponse ? createResponse : getResponse; + + TestHelpers.recursiveEquals(current, expected); + } + + @Then("the response contains \"{int}\" SMS groups") + public void onePageResult(int expected) { + + Assertions.assertEquals(listOnePageResponse.getContent().size(), expected); + } + + @Then("the SMS groups list contains \"{int}\" SMS groups") + public void listAllResult(int expected) { + ListGroupsResponse response = null != listAllResponse ? listAllResponse : listAllByPageResponse; + + AtomicInteger count = new AtomicInteger(); + response.iterator().forEachRemaining(_unused -> count.getAndIncrement()); + + Assertions.assertEquals(count.get(), expected); + } + + @Then("the SMS groups iteration result contains the data from \"{int}\" pages") + public void listAllByPageResult(int expected) { + + int count = listAllByPageResponse.getContent().isEmpty() ? 0 : 1; + while (listAllByPageResponse.hasNextPage()) { + count++; + listAllByPageResponse = listAllByPageResponse.nextPage(); + } + Assertions.assertEquals(count, expected); + } + + @Then("the response contains the updated SMS group details") + public void updateResult() { + Group expected = + Group.builder() + .setId("01W4FFL35P4NC4K35SMSGROUP1") + .setName("Updated group name") + .setSize(6) + .setCreatedAt(Instant.parse("2024-06-06T08:59:22.156Z")) + .setModifiedAt(Instant.parse("2024-06-06T09:19:58.147Z")) + .setChildGroups(new HashSet<>(Collections.singleton("01W4FFL35P4NC4K35SUBGROUP1"))) + .build(); + TestHelpers.recursiveEquals(updateResponse, expected); + } + + @Then("the response contains the updated SMS group details where the name has been removed") + public void updateRemoveNameResult() { + Group expected = + Group.builder() + .setId("01W4FFL35P4NC4K35SMSGROUP2") + .setSize(5) + .setCreatedAt(Instant.parse("2024-06-06T12:45:18.761Z")) + .setModifiedAt(Instant.parse("2024-06-06T13:12:05.137Z")) + .setChildGroups(new HashSet<>()) + .build(); + TestHelpers.recursiveEquals(updateRemoveNameResponse, expected); + } + + @Then("the response contains the replaced SMS group details") + public void replaceResult() { + Group expected = + Group.builder() + .setId("01W4FFL35P4NC4K35SMSGROUP1") + .setName("Replacement group") + .setSize(3) + .setCreatedAt(Instant.parse("2024-06-06T08:59:22.156Z")) + .setModifiedAt(Instant.parse("2024-08-21T09:39:36.679Z")) + .setChildGroups(new HashSet<>(Collections.singleton("01W4FFL35P4NC4K35SUBGROUP1"))) + .build(); + TestHelpers.recursiveEquals(replaceResponse, expected); + } + + @Then("the delete SMS group response contains no data") + public void deleteResult() { + Assertions.assertTrue(deletePassed); + } + + @Then("the response contains the phone numbers of the SMS group") + public void lisMembersResult() { + Collection expected = + new ArrayList<>(Arrays.asList("12018881111", "12018882222", "12018883333")); + TestHelpers.recursiveEquals(lisMembersResponse, expected); + } +} diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/InboundsSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/InboundsSteps.java new file mode 100644 index 000000000..0a0311438 --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/InboundsSteps.java @@ -0,0 +1,113 @@ +package com.sinch.sdk.e2e.domains.sms.v1; + +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.sms.api.v1.InboundsService; +import com.sinch.sdk.domains.sms.models.v1.inbounds.InboundMessage; +import com.sinch.sdk.domains.sms.models.v1.inbounds.TextMessage; +import com.sinch.sdk.domains.sms.models.v1.inbounds.request.ListInboundMessagesQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.inbounds.response.ListInboundsResponse; +import com.sinch.sdk.e2e.Config; +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import java.time.Instant; +import java.util.Arrays; +import java.util.concurrent.atomic.AtomicInteger; +import org.junit.jupiter.api.Assertions; + +public class InboundsSteps { + + InboundsService service; + InboundMessage getResponse; + ListInboundsResponse listOnePageResponse; + ListInboundsResponse listAllResponse; + ListInboundsResponse listAllByPageResponse; + + @Given("^the SMS service \"Inbounds\" is available") + public void serviceAvailable() { + + service = Config.getSinchClient().sms().v1().inbounds(); + } + + @When("^I send a request to retrieve an inbound message") + public void get() { + + getResponse = service.get("inboundid"); + } + + @When("^I send a request to list the inbound messages$") + public void listOnePage() { + ListInboundMessagesQueryParameters request = + ListInboundMessagesQueryParameters.builder() + .setTo(Arrays.asList("12017777777", "12018888888")) + .setPageSize(2) + .build(); + + listOnePageResponse = service.list(request); + } + + @When("^I send a request to list all the inbound messages$") + public void listAll() { + ListInboundMessagesQueryParameters request = + ListInboundMessagesQueryParameters.builder() + .setTo(Arrays.asList("12017777777", "12018888888")) + .setPageSize(2) + .build(); + + listAllResponse = service.list(request); + } + + @When("^I iterate manually over the inbound messages pages$") + public void listAllByPage() { + ListInboundMessagesQueryParameters request = + ListInboundMessagesQueryParameters.builder() + .setTo(Arrays.asList("12017777777", "12018888888")) + .setPageSize(2) + .build(); + + listAllByPageResponse = service.list(request); + } + + @Then("the response contains the inbound message details") + public void getResult() { + TextMessage expected = + TextMessage.builder() + .setBody("Hello John!") + .setFrom("12015555555") + .setId("01W4FFL35P4NC4K35INBOUND01") + .setOperatorId("311071") + .setReceivedAt(Instant.parse("2024-06-06T14:16:54.777Z")) + .setTo("12017777777") + .build(); + + TestHelpers.recursiveEquals(getResponse, expected); + } + + @Then("the response contains \"{int}\" inbound messages") + public void onePageResult(int expected) { + + Assertions.assertEquals(listOnePageResponse.getContent().size(), expected); + } + + @Then("the inbound messages list contains \"{int}\" inbound messages") + public void listAllResult(int expected) { + ListInboundsResponse response = + null != listAllResponse ? listAllResponse : listAllByPageResponse; + + AtomicInteger count = new AtomicInteger(); + response.iterator().forEachRemaining(_unused -> count.getAndIncrement()); + + Assertions.assertEquals(count.get(), expected); + } + + @Then("the inbound messages iteration result contains the data from \"{int}\" pages") + public void listAllByPageResult(int expected) { + + int count = listAllByPageResponse.getContent().isEmpty() ? 0 : 1; + while (listAllByPageResponse.hasNextPage()) { + count++; + listAllByPageResponse = listAllByPageResponse.nextPage(); + } + Assertions.assertEquals(count, expected); + } +} diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/SmsIT.java b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/SmsIT.java new file mode 100644 index 000000000..42139b9be --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/SmsIT.java @@ -0,0 +1,16 @@ +package com.sinch.sdk.e2e.domains.sms.v1; + +import static io.cucumber.junit.platform.engine.Constants.GLUE_PROPERTY_NAME; + +import org.junit.platform.suite.api.ConfigurationParameter; +import org.junit.platform.suite.api.IncludeEngines; +import org.junit.platform.suite.api.SelectClasspathResource; +import org.junit.platform.suite.api.Suite; +import org.junit.platform.suite.api.SuiteDisplayName; + +@Suite +@SuiteDisplayName("SMS V1") +@IncludeEngines("cucumber") +@SelectClasspathResource("features/sms") +@ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "com.sinch.sdk.e2e.domains.sms.v1") +public class SmsIT {} diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/WebhooksSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/WebhooksSteps.java new file mode 100644 index 000000000..8334f1bda --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/sms/v1/WebhooksSteps.java @@ -0,0 +1,175 @@ +package com.sinch.sdk.e2e.domains.sms.v1; + +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.sms.api.v1.WebHooksService; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReportSMS; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryReceiptErrorCode; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryStatus; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.MessageDeliveryStatus; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReportSMS; +import com.sinch.sdk.domains.sms.models.v1.inbounds.TextMessage; +import com.sinch.sdk.domains.sms.models.v1.webhooks.SmsEvent; +import com.sinch.sdk.e2e.Config; +import com.sinch.sdk.e2e.domains.WebhooksHelper; +import io.cucumber.java.en.Given; +import io.cucumber.java.en.Then; +import io.cucumber.java.en.When; +import java.io.IOException; +import java.net.URL; +import java.time.Instant; +import java.util.Arrays; +import java.util.HashSet; +import org.junit.jupiter.api.Assertions; + +public class WebhooksSteps { + + static final String WEBHOOKS_PATH_PREFIX = "/webhooks/sms"; + static final String WEBHOOKS_URL = Config.SMS_HOST_NAME + WEBHOOKS_PATH_PREFIX; + + static final String SECRET = "KayakingTheSwell"; + + WebHooksService service; + WebhooksHelper.Response incoming; + WebhooksHelper.Response deliveryReport; + WebhooksHelper.Response deliveryReportRecipientDelivered; + WebhooksHelper.Response deliveryReportRecipientAborted; + + @Given("^the SMS Webhooks handler is available") + public void serviceAvailable() { + + service = Config.getSinchClient().sms().v1().webhooks(); + } + + @When("^I send a request to trigger an \"incoming SMS\" event") + public void incoming() throws IOException { + + incoming = WebhooksHelper.callURL(new URL(WEBHOOKS_URL + "/incoming-sms"), service::parseEvent); + } + + @When("^I send a request to trigger an \"SMS delivery report\" event") + public void deliveryReport() throws IOException { + + deliveryReport = + WebhooksHelper.callURL(new URL(WEBHOOKS_URL + "/delivery-report-sms"), service::parseEvent); + } + + @When( + "^I send a request to trigger an \"SMS recipient delivery report\" event with the status" + + " \"Delivered\"") + public void deliveryReportRecipientDelivered() throws IOException { + + deliveryReportRecipientDelivered = + WebhooksHelper.callURL( + new URL(WEBHOOKS_URL + "/recipient-delivery-report-sms-delivered"), + service::parseEvent); + } + + @When( + "^I send a request to trigger an \"SMS recipient delivery report\" event with the status" + + " \"Aborted\"") + public void deliveryReportRecipientAborted() throws IOException { + + deliveryReportRecipientAborted = + WebhooksHelper.callURL( + new URL(WEBHOOKS_URL + "/recipient-delivery-report-sms-aborted"), service::parseEvent); + } + + @Then("the SMS event describes an \"incoming SMS\" event") + public void incomingResult() { + SmsEvent expected = + TextMessage.builder() + .setBody("Hello John! 👋") + .setFrom("12015555555") + .setId("01W4FFL35P4NC4K35SMSBATCH8") + .setOperatorId("311071") + .setReceivedAt(Instant.parse("2024-06-06T07:52:37.386Z")) + .setTo("12017777777") + .build(); + + TestHelpers.recursiveEquals(incoming.event, expected); + } + + @Then("the SMS event describes an \"SMS delivery report\" event") + public void deliveryReportResult() { + SmsEvent expected = + BatchDeliveryReportSMS.builder() + .setBatchId("01W4FFL35P4NC4K35SMSBATCH8") + .setClientReference("client-ref") + .setStatuses( + Arrays.asList( + MessageDeliveryStatus.builder() + .setCode(DeliveryReceiptErrorCode.from(0)) + .setCount(2) + .setRecipients(new HashSet<>(Arrays.asList("12017777777", "33612345678"))) + .setStatus(DeliveryStatus.DELIVERED) + .build())) + .setTotalMessageCount(2) + .build(); + + TestHelpers.recursiveEquals(deliveryReport.event, expected); + } + + @Then( + "the SMS event describes an SMS recipient delivery report event with the status" + + " \"Delivered\"") + public void deliveryReportRecipientDeliveredResult() { + SmsEvent expected = + RecipientDeliveryReportSMS.builder() + .setCreatedAt(Instant.parse("2024-06-06T08:17:19.210Z")) + .setBatchId("01W4FFL35P4NC4K35SMSBATCH9") + .setClientReference("client-ref") + .setCode(DeliveryReceiptErrorCode.from(0)) + .setOperatorStatusAt(Instant.parse("2024-06-06T08:17:00Z")) + .setRecipient("12017777777") + .setStatus(DeliveryStatus.DELIVERED) + .build(); + + TestHelpers.recursiveEquals(deliveryReportRecipientDelivered.event, expected); + } + + @Then( + "the SMS event describes an SMS recipient delivery report event with the status \"Aborted\"") + public void deliveryReportRecipientAbortedResult() { + SmsEvent expected = + RecipientDeliveryReportSMS.builder() + .setCreatedAt(Instant.parse("2024-06-06T08:17:15.603Z")) + .setBatchId("01W4FFL35P4NC4K35SMSBATCH9") + .setClientReference("client-ref") + .setCode(DeliveryReceiptErrorCode.UNPROVISIONED_REGION) + .setRecipient("12010000000") + .setStatus(DeliveryStatus.ABORTED) + .build(); + + TestHelpers.recursiveEquals(deliveryReportRecipientAborted.event, expected); + } + + @Then("the header of the event {string} contains a valid signature") + public void validateHeader(String event) { + + WebhooksHelper.Response response = null; + if (event.equals("IncomingSMS")) { + response = incoming; + } else if (event.equals("DeliveryReport")) { + response = deliveryReport; + } + + boolean validated = + service.validateAuthenticationHeader(SECRET, response.headers, response.rawPayload); + Assertions.assertTrue(validated); + } + + @Then("the header of the event {string} with the status {string} contains a valid signature") + public void validateHeader(String _unused, String status) { + + WebhooksHelper.Response response = null; + if (status.equals("Delivered")) { + response = deliveryReportRecipientDelivered; + } else if (status.equals("Aborted")) { + response = deliveryReportRecipientAborted; + } + + boolean validated = + service.validateAuthenticationHeader(SECRET, response.headers, response.rawPayload); + Assertions.assertTrue(validated); + } +} diff --git a/core/src/main/com/sinch/sdk/core/databind/QueryParameterSerializer.java b/core/src/main/com/sinch/sdk/core/databind/QueryParameterSerializer.java new file mode 100644 index 000000000..9b049d1f6 --- /dev/null +++ b/core/src/main/com/sinch/sdk/core/databind/QueryParameterSerializer.java @@ -0,0 +1,5 @@ +package com.sinch.sdk.core.databind; + +import java.util.function.Function; + +public interface QueryParameterSerializer extends Function {} diff --git a/core/src/main/com/sinch/sdk/core/databind/query_parameter/CollectionStringToCommaSerializer.java b/core/src/main/com/sinch/sdk/core/databind/query_parameter/CollectionStringToCommaSerializer.java new file mode 100644 index 000000000..3255642b2 --- /dev/null +++ b/core/src/main/com/sinch/sdk/core/databind/query_parameter/CollectionStringToCommaSerializer.java @@ -0,0 +1,27 @@ +package com.sinch.sdk.core.databind.query_parameter; + +import com.sinch.sdk.core.databind.QueryParameterSerializer; +import java.util.Collection; + +public class CollectionStringToCommaSerializer + implements QueryParameterSerializer, String> { + + public static CollectionStringToCommaSerializer getInstance() { + return CollectionStringToCommaSerializer.LazyHolder.INSTANCE; + } + + @Override + public String apply(Collection collection) { + if (null == collection) { + return null; + } + return String.join(",", collection); + } + + private static class LazyHolder { + private static final CollectionStringToCommaSerializer INSTANCE = + new CollectionStringToCommaSerializer(); + } + + private CollectionStringToCommaSerializer() {} +} diff --git a/core/src/main/com/sinch/sdk/core/databind/query_parameter/InstantToIso8601Serializer.java b/core/src/main/com/sinch/sdk/core/databind/query_parameter/InstantToIso8601Serializer.java new file mode 100644 index 000000000..b41c9fd92 --- /dev/null +++ b/core/src/main/com/sinch/sdk/core/databind/query_parameter/InstantToIso8601Serializer.java @@ -0,0 +1,25 @@ +package com.sinch.sdk.core.databind.query_parameter; + +import com.sinch.sdk.core.databind.QueryParameterSerializer; +import java.time.Instant; + +public class InstantToIso8601Serializer implements QueryParameterSerializer { + + public static InstantToIso8601Serializer getInstance() { + return LazyHolder.INSTANCE; + } + + @Override + public String apply(Instant instant) { + if (null == instant) { + return null; + } + return instant.toString(); + } + + private static class LazyHolder { + private static final InstantToIso8601Serializer INSTANCE = new InstantToIso8601Serializer(); + } + + private InstantToIso8601Serializer() {} +} diff --git a/core/src/main/com/sinch/sdk/core/http/URLParameter.java b/core/src/main/com/sinch/sdk/core/http/URLParameter.java index 82a54171f..dd44c9546 100644 --- a/core/src/main/com/sinch/sdk/core/http/URLParameter.java +++ b/core/src/main/com/sinch/sdk/core/http/URLParameter.java @@ -1,5 +1,7 @@ package com.sinch.sdk.core.http; +import java.util.Objects; + public class URLParameter { private final String name; private final Object value; @@ -62,6 +64,26 @@ public String toString() { + '}'; } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof URLParameter)) { + return false; + } + URLParameter that = (URLParameter) o; + return isExplode() == that.isExplode() + && Objects.equals(getName(), that.getName()) + && Objects.equals(getValue(), that.getValue()) + && getStyle() == that.getStyle(); + } + + @Override + public int hashCode() { + return Objects.hash(getName(), getValue(), getStyle(), isExplode()); + } + public enum STYLE { MATRIX, LABEL, @@ -69,6 +91,17 @@ public enum STYLE { SIMPLE, SPACE_DELIMITED, PIPE_DELIMITED, - DEEP_OBJECT + DEEP_OBJECT; } + + // the following constants do not follow java standard by purpose + // Aim is to have direct access to OpenApi Spec authorized values as constant without overhead + // ref: https://spec.openapis.org/oas/latest.html#style-values + public static final STYLE matrix = STYLE.MATRIX; + public static final STYLE label = STYLE.LABEL; + public static final STYLE form = STYLE.FORM; + public static final STYLE simple = STYLE.SIMPLE; + public static final STYLE spaceDelimited = STYLE.SPACE_DELIMITED; + public static final STYLE pipeDelimited = STYLE.PIPE_DELIMITED; + public static final STYLE deepObject = STYLE.DEEP_OBJECT; } diff --git a/core/src/main/com/sinch/sdk/core/http/URLParameterUtils.java b/core/src/main/com/sinch/sdk/core/http/URLParameterUtils.java index 7ced9d8b9..6def5f845 100644 --- a/core/src/main/com/sinch/sdk/core/http/URLParameterUtils.java +++ b/core/src/main/com/sinch/sdk/core/http/URLParameterUtils.java @@ -1,6 +1,9 @@ package com.sinch.sdk.core.http; +import com.sinch.sdk.core.databind.QueryParameterSerializer; import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.core.http.URLParameter.STYLE; +import com.sinch.sdk.core.models.OptionalValue; import com.sinch.sdk.core.utils.EnumDynamic; import com.sinch.sdk.core.utils.StringUtil; import java.io.UnsupportedEncodingException; @@ -8,6 +11,7 @@ import java.security.InvalidParameterException; import java.util.Arrays; import java.util.Collection; +import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -26,7 +30,7 @@ public static String encodeParametersAsString(Collection parameter .collect(Collectors.joining("&")); } - public static Optional encode(URLParameter parameter) { + protected static Optional encode(URLParameter parameter) { if (null == parameter || StringUtil.isEmpty(parameter.getName()) @@ -195,7 +199,7 @@ private static Optional encodeObject(URLParameter parameter) { throw new ApiException("Not yet implemented '" + parameter + "'"); } - public static String encodeParameterValue(String value) { + private static String encodeParameterValue(String value) { try { return URLEncoder.encode(value, "UTF-8").replaceAll("\\.", "%2E"); @@ -203,4 +207,21 @@ public static String encodeParameterValue(String value) { return value; } } + + public static void addQueryParam( + OptionalValue optionalValue, + String paramName, + STYLE paramStyle, + QueryParameterSerializer serializer, + List queryParametersList, + boolean explode) { + optionalValue.ifPresent( + value -> + queryParametersList.add( + new URLParameter( + paramName, + null == serializer ? value : serializer.apply(value), + paramStyle, + explode))); + } } diff --git a/core/src/test/java/com/sinch/sdk/core/TestHelpers.java b/core/src/test/java/com/sinch/sdk/core/TestHelpers.java index 0b965fe0b..e74f7db49 100644 --- a/core/src/test/java/com/sinch/sdk/core/TestHelpers.java +++ b/core/src/test/java/com/sinch/sdk/core/TestHelpers.java @@ -8,11 +8,11 @@ public class TestHelpers { private static final RecursiveComparisonConfiguration recursiveComparisonConfiguration = RecursiveComparisonConfiguration.builder().withStrictTypeChecking(true).build(); - public static void recursiveEquals(Object o1, Object o2) { + public static void recursiveEquals(Object actual, Object expected) { - Assertions.assertThat(o1.getClass()).isEqualTo(o2.getClass()); - Assertions.assertThat(o1) + Assertions.assertThat(actual.getClass()).isEqualTo(expected.getClass()); + Assertions.assertThat(actual) .usingRecursiveComparison(recursiveComparisonConfiguration) - .isEqualTo(o2); + .isEqualTo(expected); } } diff --git a/core/src/test/java/com/sinch/sdk/core/databind/query_parameter/CollectionStringToCommaSerializerTest.java b/core/src/test/java/com/sinch/sdk/core/databind/query_parameter/CollectionStringToCommaSerializerTest.java new file mode 100644 index 000000000..d90add527 --- /dev/null +++ b/core/src/test/java/com/sinch/sdk/core/databind/query_parameter/CollectionStringToCommaSerializerTest.java @@ -0,0 +1,49 @@ +package com.sinch.sdk.core.databind.query_parameter; + +import com.sinch.sdk.core.TestHelpers; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class CollectionStringToCommaSerializerTest { + + CollectionStringToCommaSerializer serializer = CollectionStringToCommaSerializer.getInstance(); + + @Test + void serialize() { + + List list = Arrays.asList("foo1", "foo2"); + + String serialized = serializer.apply(list); + + TestHelpers.recursiveEquals("foo1,foo2", serialized); + } + + @Test + void serializeSingle() { + + List list = Collections.singletonList("foo1"); + + String serialized = serializer.apply(list); + + TestHelpers.recursiveEquals("foo1", serialized); + } + + @Test + void serializeEmpty() { + + String serialized = serializer.apply(Collections.emptyList()); + + Assertions.assertEquals("", serialized); + } + + @Test + void serializeNull() { + + String serialized = serializer.apply(null); + + Assertions.assertNull(serialized); + } +} diff --git a/core/src/test/java/com/sinch/sdk/core/databind/query_parameter/InstantToIso8601SerializerTest.java b/core/src/test/java/com/sinch/sdk/core/databind/query_parameter/InstantToIso8601SerializerTest.java new file mode 100644 index 000000000..2806c58a1 --- /dev/null +++ b/core/src/test/java/com/sinch/sdk/core/databind/query_parameter/InstantToIso8601SerializerTest.java @@ -0,0 +1,29 @@ +package com.sinch.sdk.core.databind.query_parameter; + +import com.sinch.sdk.core.TestHelpers; +import java.time.Instant; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class InstantToIso8601SerializerTest { + + InstantToIso8601Serializer serializer = InstantToIso8601Serializer.getInstance(); + + @Test + void serialize() { + + Instant instant = Instant.parse("2024-05-04T10:00:00.123Z"); + + String serialized = serializer.apply(instant); + + TestHelpers.recursiveEquals("2024-05-04T10:00:00.123Z", serialized); + } + + @Test + void serializeNull() { + + String serialized = serializer.apply(null); + + Assertions.assertNull(serialized); + } +} diff --git a/core/src/test/java/com/sinch/sdk/core/http/URLParameterTest.java b/core/src/test/java/com/sinch/sdk/core/http/URLParameterTest.java new file mode 100644 index 000000000..f39bcf295 --- /dev/null +++ b/core/src/test/java/com/sinch/sdk/core/http/URLParameterTest.java @@ -0,0 +1,44 @@ +package com.sinch.sdk.core.http; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.sinch.sdk.core.http.URLParameter.STYLE; +import org.junit.jupiter.api.Test; + +class URLParameterTest { + + @Test + void matrix() { + assertEquals(STYLE.MATRIX, URLParameter.matrix); + } + + @Test + void label() { + assertEquals(STYLE.LABEL, URLParameter.label); + } + + @Test + void form() { + assertEquals(STYLE.FORM, URLParameter.form); + } + + @Test + void simple() { + assertEquals(STYLE.SIMPLE, URLParameter.simple); + } + + @Test + void spaceDelimited() { + assertEquals(STYLE.SPACE_DELIMITED, URLParameter.spaceDelimited); + } + + @Test + void pipeDelimited() { + assertEquals(STYLE.PIPE_DELIMITED, URLParameter.pipeDelimited); + } + + @Test + void deepObject() { + assertEquals(STYLE.DEEP_OBJECT, URLParameter.deepObject); + } +} diff --git a/core/src/test/java/com/sinch/sdk/core/http/URLParameterUtilsTest.java b/core/src/test/java/com/sinch/sdk/core/http/URLParameterUtilsTest.java index 35b582384..0d977de46 100644 --- a/core/src/test/java/com/sinch/sdk/core/http/URLParameterUtilsTest.java +++ b/core/src/test/java/com/sinch/sdk/core/http/URLParameterUtilsTest.java @@ -1,10 +1,18 @@ package com.sinch.sdk.core.http; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.core.databind.query_parameter.InstantToIso8601Serializer; import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.core.http.URLParameter.STYLE; +import com.sinch.sdk.core.models.OptionalValue; +import java.time.Instant; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.Optional; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -374,4 +382,51 @@ void encodePipeDelimitedArrayExplode() { URLParameter.STYLE.PIPE_DELIMITED, true))); } + + @Test + void addQueryParamNotPresent() { + + // Collections.emptyList() is not modifiable and will throw an exception if trying to add an + // entry + assertDoesNotThrow( + () -> + URLParameterUtils.addQueryParam( + OptionalValue.empty(), + "foo name", + STYLE.DEEP_OBJECT, + null, + Collections.emptyList(), + false), + "Ignored empty value"); + } + + @Test + void addQueryParamInteger() { + ArrayList list = new ArrayList<>(); + + URLParameterUtils.addQueryParam( + OptionalValue.of(15), "foo name", STYLE.DEEP_OBJECT, null, list, true); + assertEquals(1, list.size()); + + TestHelpers.recursiveEquals( + list.get(0), new URLParameter("foo name", 15, STYLE.DEEP_OBJECT, true)); + } + + @Test + void addQueryParamInstant() { + ArrayList list = new ArrayList<>(); + + URLParameterUtils.addQueryParam( + OptionalValue.of(Instant.parse("2024-05-04T10:00:00.123Z")), + "foo name", + STYLE.DEEP_OBJECT, + InstantToIso8601Serializer.getInstance(), + list, + true); + assertEquals(1, list.size()); + + TestHelpers.recursiveEquals( + list.get(0), + new URLParameter("foo name", "2024-05-04T10:00:00.123Z", STYLE.DEEP_OBJECT, true)); + } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/AppApi.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/AppApi.java index 87bdb3b32..20e980aa5 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/AppApi.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/AppApi.java @@ -427,6 +427,7 @@ private HttpRequest appUpdateAppRequestBuilder( .replaceAll("\\{" + "app_id" + "\\}", URLPathUtils.encodePathSegment(appId.toString())); List localVarQueryParams = new ArrayList<>(); + if (null != updateMask) { localVarQueryParams.add( new URLParameter( diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/ContactApi.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/ContactApi.java index 8daf06e90..70753721e 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/ContactApi.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/ContactApi.java @@ -483,26 +483,31 @@ private HttpRequest contactListContactsRequestBuilder( "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); List localVarQueryParams = new ArrayList<>(); + if (null != pageSize) { localVarQueryParams.add( new URLParameter( "page_size", pageSize, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != pageToken) { localVarQueryParams.add( new URLParameter( "page_token", pageToken, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != externalId) { localVarQueryParams.add( new URLParameter( "external_id", externalId, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != channel) { localVarQueryParams.add( new URLParameter( "channel", channel, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != identity) { localVarQueryParams.add( new URLParameter( @@ -708,6 +713,7 @@ private HttpRequest contactUpdateContactRequestBuilder( "\\{" + "contact_id" + "\\}", URLPathUtils.encodePathSegment(contactId.toString())); List localVarQueryParams = new ArrayList<>(); + if (null != updateMask) { localVarQueryParams.add( new URLParameter( diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/ConversationApi.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/ConversationApi.java index e817c65f3..dd39f4f8e 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/ConversationApi.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/ConversationApi.java @@ -515,31 +515,37 @@ private HttpRequest conversationListConversationsRequestBuilder( "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); List localVarQueryParams = new ArrayList<>(); + if (null != appId) { localVarQueryParams.add( new URLParameter( "app_id", appId, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != contactId) { localVarQueryParams.add( new URLParameter( "contact_id", contactId, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != onlyActive) { localVarQueryParams.add( new URLParameter( "only_active", onlyActive, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != pageSize) { localVarQueryParams.add( new URLParameter( "page_size", pageSize, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != pageToken) { localVarQueryParams.add( new URLParameter( "page_token", pageToken, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != activeChannel) { localVarQueryParams.add( new URLParameter( @@ -668,26 +674,31 @@ private HttpRequest conversationListRecentConversationsRequestBuilder( "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); List localVarQueryParams = new ArrayList<>(); + if (null != appId) { localVarQueryParams.add( new URLParameter( "app_id", appId, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != onlyActive) { localVarQueryParams.add( new URLParameter( "only_active", onlyActive, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != pageSize) { localVarQueryParams.add( new URLParameter( "page_size", pageSize, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != pageToken) { localVarQueryParams.add( new URLParameter( "page_token", pageToken, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != order) { localVarQueryParams.add( new URLParameter("order", order, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); @@ -899,11 +910,13 @@ private HttpRequest conversationUpdateConversationRequestBuilder( URLPathUtils.encodePathSegment(conversationId.toString())); List localVarQueryParams = new ArrayList<>(); + if (null != updateMask) { localVarQueryParams.add( new URLParameter( "update_mask", updateMask, URLParameter.STYLE.valueOf("form".toUpperCase()), false)); } + if (null != metadataUpdateStrategy) { localVarQueryParams.add( new URLParameter( diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/EventsApi.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/EventsApi.java index bfffc668e..b8e16e461 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/EventsApi.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/EventsApi.java @@ -275,6 +275,7 @@ private HttpRequest eventsListEventsRequestBuilder( "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); List localVarQueryParams = new ArrayList<>(); + if (null != conversationId) { localVarQueryParams.add( new URLParameter( @@ -283,16 +284,19 @@ private HttpRequest eventsListEventsRequestBuilder( URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != contactId) { localVarQueryParams.add( new URLParameter( "contact_id", contactId, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != pageSize) { localVarQueryParams.add( new URLParameter( "page_size", pageSize, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != pageToken) { localVarQueryParams.add( new URLParameter( diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/MessagesApi.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/MessagesApi.java index 538ff4beb..ed79a3bda 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/MessagesApi.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/MessagesApi.java @@ -125,6 +125,7 @@ private HttpRequest messagesDeleteMessageRequestBuilder( "\\{" + "message_id" + "\\}", URLPathUtils.encodePathSegment(messageId.toString())); List localVarQueryParams = new ArrayList<>(); + if (null != messagesSource) { localVarQueryParams.add( new URLParameter( @@ -223,6 +224,7 @@ private HttpRequest messagesGetMessageRequestBuilder( "\\{" + "message_id" + "\\}", URLPathUtils.encodePathSegment(messageId.toString())); List localVarQueryParams = new ArrayList<>(); + if (null != messagesSource) { localVarQueryParams.add( new URLParameter( @@ -410,6 +412,7 @@ private HttpRequest messagesListMessagesRequestBuilder( "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); List localVarQueryParams = new ArrayList<>(); + if (null != conversationId) { localVarQueryParams.add( new URLParameter( @@ -418,16 +421,19 @@ private HttpRequest messagesListMessagesRequestBuilder( URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != contactId) { localVarQueryParams.add( new URLParameter( "contact_id", contactId, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != appId) { localVarQueryParams.add( new URLParameter( "app_id", appId, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != channelIdentity) { localVarQueryParams.add( new URLParameter( @@ -436,30 +442,36 @@ private HttpRequest messagesListMessagesRequestBuilder( URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != startTime) { localVarQueryParams.add( new URLParameter( "start_time", startTime, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != endTime) { localVarQueryParams.add( new URLParameter( "end_time", endTime, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != pageSize) { localVarQueryParams.add( new URLParameter( "page_size", pageSize, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != pageToken) { localVarQueryParams.add( new URLParameter( "page_token", pageToken, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != view) { localVarQueryParams.add( new URLParameter("view", view, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != messagesSource) { localVarQueryParams.add( new URLParameter( @@ -468,6 +480,7 @@ private HttpRequest messagesListMessagesRequestBuilder( URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != onlyRecipientOriginated) { localVarQueryParams.add( new URLParameter( @@ -476,6 +489,7 @@ private HttpRequest messagesListMessagesRequestBuilder( URLParameter.STYLE.valueOf("form".toUpperCase()), true)); } + if (null != channel) { localVarQueryParams.add( new URLParameter( @@ -680,6 +694,7 @@ private HttpRequest messagesUpdateMessageMetadataRequestBuilder( "\\{" + "message_id" + "\\}", URLPathUtils.encodePathSegment(messageId.toString())); List localVarQueryParams = new ArrayList<>(); + if (null != messagesSource) { localVarQueryParams.add( new URLParameter( diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/WebhooksApi.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/WebhooksApi.java index 2409a57ff..7072d87b9 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/WebhooksApi.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/WebhooksApi.java @@ -449,6 +449,7 @@ private HttpRequest webhooksUpdateWebhookRequestBuilder( "\\{" + "webhook_id" + "\\}", URLPathUtils.encodePathSegment(webhookId.toString())); List localVarQueryParams = new ArrayList<>(); + if (null != updateMask) { localVarQueryParams.add( new URLParameter( diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/capability/request/QueryCapabilityRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/capability/request/QueryCapabilityRequest.java index e24c3ac6e..52401c7d7 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/capability/request/QueryCapabilityRequest.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/capability/request/QueryCapabilityRequest.java @@ -25,7 +25,7 @@ public interface QueryCapabilityRequest { String getAppId(); /** - * Get recipient + * Identifies the recipient. * * @return recipient */ diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/capability/response/QueryCapabilityResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/capability/response/QueryCapabilityResponse.java index b8934c16c..7866542f6 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/capability/response/QueryCapabilityResponse.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/capability/response/QueryCapabilityResponse.java @@ -28,7 +28,7 @@ public interface QueryCapabilityResponse { String getAppId(); /** - * Get recipient + * Identifies the recipient. * * @return recipient */ diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/GetChannelProfileRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/GetChannelProfileRequest.java index 67173b22b..cb2765809 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/GetChannelProfileRequest.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/GetChannelProfileRequest.java @@ -25,7 +25,7 @@ public interface GetChannelProfileRequest { String getAppId(); /** - * Get recipient + * Identifies the recipient. * * @return recipient */ diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/request/SendEventRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/request/SendEventRequest.java index 7bd59335c..76b53c41c 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/request/SendEventRequest.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/request/SendEventRequest.java @@ -67,7 +67,9 @@ public interface SendEventRequest { MessageQueue getQueue(); /** - * Get recipient + * Identifies the recipient. If Dispatch Mode is + * used, you must use the identified_by field. * * @return recipient */ diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageInternal.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageInternal.java index 7a90796dc..5bb8819ab 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageInternal.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageInternal.java @@ -13,7 +13,6 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.sinch.sdk.core.utils.EnumDynamic; import com.sinch.sdk.core.utils.EnumSupportDynamic; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.ChannelSpecificMessage; import java.util.Arrays; import java.util.stream.Stream; @@ -57,7 +56,7 @@ public static String valueOf(MessageTypeEnum e) { * * @return message */ - ChannelSpecificMessage getMessage(); + ChannelSpecificMessageMessageInternal getMessage(); /** * Getting builder @@ -87,7 +86,7 @@ interface Builder { * @return Current builder * @see #getMessage */ - Builder setMessage(ChannelSpecificMessage message); + Builder setMessage(ChannelSpecificMessageMessageInternal message); /** * Create instance diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageInternalImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageInternalImpl.java index 42e87c7c7..e835b115e 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageInternalImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageInternalImpl.java @@ -7,7 +7,6 @@ import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; import com.sinch.sdk.core.models.OptionalValue; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.ChannelSpecificMessage; import java.util.Objects; @JsonPropertyOrder({ @@ -25,12 +24,13 @@ public class ChannelSpecificMessageInternalImpl implements ChannelSpecificMessag public static final String JSON_PROPERTY_MESSAGE = "message"; - private OptionalValue message; + private OptionalValue message; public ChannelSpecificMessageInternalImpl() {} protected ChannelSpecificMessageInternalImpl( - OptionalValue messageType, OptionalValue message) { + OptionalValue messageType, + OptionalValue message) { this.messageType = messageType; this.message = message; } @@ -47,13 +47,13 @@ public OptionalValue messageType() { } @JsonIgnore - public ChannelSpecificMessage getMessage() { + public ChannelSpecificMessageMessageInternal getMessage() { return message.orElse(null); } @JsonProperty(JSON_PROPERTY_MESSAGE) @JsonInclude(value = JsonInclude.Include.ALWAYS) - public OptionalValue message() { + public OptionalValue message() { return message; } @@ -100,7 +100,7 @@ private String toIndentedString(Object o) { @JsonPOJOBuilder(withPrefix = "set") static class Builder implements ChannelSpecificMessageInternal.Builder { OptionalValue messageType = OptionalValue.empty(); - OptionalValue message = OptionalValue.empty(); + OptionalValue message = OptionalValue.empty(); @JsonProperty(JSON_PROPERTY_MESSAGE_TYPE) public Builder setMessageType(MessageTypeEnum messageType) { @@ -109,7 +109,7 @@ public Builder setMessageType(MessageTypeEnum messageType) { } @JsonProperty(JSON_PROPERTY_MESSAGE) - public Builder setMessage(ChannelSpecificMessage message) { + public Builder setMessage(ChannelSpecificMessageMessageInternal message) { this.message = OptionalValue.of(message); return this; } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/SendMessageRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/SendMessageRequest.java index 842f04343..a56b19b40 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/SendMessageRequest.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/SendMessageRequest.java @@ -109,7 +109,9 @@ public interface SendMessageRequest { MessageQueue getQueue(); /** - * Get recipient + * Identifies the recipient. If Dispatch Mode is + * used, you must use the identified_by field. * * @return recipient */ diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/internal/CreateWebhookRequestInternal.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/internal/CreateWebhookRequestInternal.java index eeac1e3b5..310932923 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/internal/CreateWebhookRequestInternal.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/internal/CreateWebhookRequestInternal.java @@ -105,16 +105,6 @@ interface Builder { */ Builder setClientCredentials(ClientCredentials clientCredentials); - /** - * see getter - * - * @param id see getter - * @return Current builder - * @see #getId - * @readOnly This field is returned by the server and cannot be modified - */ - Builder setId(String id); - /** * see getter * diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/adapters/api/v1/BatchesApi.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/adapters/api/v1/BatchesApi.java index bd4b53145..50ee62f98 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/adapters/api/v1/BatchesApi.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/adapters/api/v1/BatchesApi.java @@ -761,8 +761,8 @@ private HttpRequest sendSMSRequestBuilder( } /** - * Update a Batch message This operation updates all specified parameters of a batch that matches - * the provided batch ID. + * Update a BatchResponse message This operation updates all specified parameters of a batch that + * matches the provided batch ID. * * @param servicePlanId Your service plan ID. You can find this on your * [Dashboard](https://dashboard.sinch.com/sms/api/rest). (required) diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/BatchesService.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/BatchesService.java new file mode 100644 index 000000000..1b979d7e0 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/BatchesService.java @@ -0,0 +1,143 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.api.v1; + +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.domains.sms.models.v1.batches.request.BatchRequest; +import com.sinch.sdk.domains.sms.models.v1.batches.request.DryRunQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.batches.request.ListBatchesQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.batches.request.SendDeliveryFeedbackRequest; +import com.sinch.sdk.domains.sms.models.v1.batches.request.UpdateBatchRequest; +import com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse; +import com.sinch.sdk.domains.sms.models.v1.batches.response.DryRunResponse; +import com.sinch.sdk.domains.sms.models.v1.batches.response.ListBatchesResponse; + +/** Batches Service */ +public interface BatchesService { + + /** + * Cancel a batch message A batch can be canceled at any point. If a batch is canceled while + * it's currently being delivered some messages currently being processed might still be + * delivered. The delivery report will indicate which messages were canceled and which + * weren't. Canceling a batch scheduled in the future will result in an empty delivery report + * while canceling an already sent batch would result in no change to the completed delivery + * report. + * + * @param batchId The batch ID you received from sending a message. (required) + * @return BatchResponse + * @throws ApiException if fails to make API call + */ + BatchResponse cancel(String batchId) throws ApiException; + + /** + * Dry run (using default parameters) This operation will perform a dry run of a batch which + * calculates the bodies and number of parts for all messages in the batch without actually + * sending any messages. + * + * @param sendRequest (optional) + * @return DryRunResponse + * @throws ApiException if fails to make API call + */ + DryRunResponse dryRun(BatchRequest sendRequest) throws ApiException; + + /** + * Dry run This operation will perform a dry run of a batch which calculates the bodies and number + * of parts for all messages in the batch without actually sending any messages. + * + * @param queryParameter (optional) + * @param sendRequest (optional) + * @return DryRunResponse + * @throws ApiException if fails to make API call + */ + DryRunResponse dryRun(DryRunQueryParameters queryParameter, BatchRequest sendRequest) + throws ApiException; + + /** + * Get a batch message This operation returns a specific batch that matches the provided batch ID. + * + * @param batchId The batch ID you received from sending a message. (required) + * @return BatchResponse + * @throws ApiException if fails to make API call + */ + BatchResponse get(String batchId) throws ApiException; + + /** + * List Batches (using default parameters) With the list operation you can list batch messages + * created in the last 14 days that you have created. This operation supports pagination. + * + * @return ListBatchesResponse + * @throws ApiException if fails to make API call + */ + ListBatchesResponse list() throws ApiException; + + /** + * List Batches With the list operation you can list batch messages created in the last 14 days + * that you have created. This operation supports pagination. + * + * @param queryParameter (optional) + * @return ListBatchesResponse + * @throws ApiException if fails to make API call + */ + ListBatchesResponse list(ListBatchesQueryParameters queryParameter) throws ApiException; + + /** + * Replace a batch This operation will replace all the parameters of a batch with the provided + * values. It is the same as cancelling a batch and sending a new one instead. + * + * @param batchId The batch ID you received from sending a message. (required) + * @param sendRequest (optional) + * @return BatchResponse + * @throws ApiException if fails to make API call + */ + BatchResponse replace(String batchId, BatchRequest sendRequest) throws ApiException; + + /** + * Send delivery feedback for a message Send feedback if your system can confirm successful + * message delivery. Feedback can only be provided if `feedback_enabled` was set when + * batch was submitted. **Batches**: It is possible to submit feedback multiple times for the same + * batch for different recipients. Feedback without specified recipients is treated as successful + * message delivery to all recipients referenced in the batch. Note that the + * `recipients` key is still required even if the value is empty. **Groups**: If the + * batch message was creating using a group ID, at least one recipient is required. Excluding + * recipients (an empty recipient list) does not work and will result in a failed request. + * + * @param batchId The batch ID you received from sending a message. (required) + * @param sendDeliveryFeedbackRequest A list of phone numbers (MSISDNs) that successfully received + * the message. (required) + * @throws ApiException if fails to make API call + */ + void sendDeliveryFeedback(String batchId, SendDeliveryFeedbackRequest sendDeliveryFeedbackRequest) + throws ApiException; + + /** + * Send Send a message or a batch of messages. Depending on the length of the body, one message + * might be split into multiple parts and charged accordingly. Any groups targeted in a scheduled + * batch will be evaluated at the time of sending. If a group is deleted between batch creation + * and scheduled date, it will be considered empty. Be sure to use the correct + * [region](/docs/sms/api-reference/#base-url) in the server URL. + * + * @param sendRequest Default schema is Text if type is not specified. (optional) + * @return BatchResponse + * @throws ApiException if fails to make API call + */ + BatchResponse send(BatchRequest sendRequest) throws ApiException; + + /** + * Update a Batch message This operation updates all specified parameters of a batch that matches + * the provided batch ID. + * + * @param batchId The batch ID you received from sending a message. (required) + * @param updateBatchRequest (optional) + * @return BatchResponse + * @throws ApiException if fails to make API call + */ + BatchResponse update(String batchId, UpdateBatchRequest updateBatchRequest) throws ApiException; +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/DeliveryReportsService.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/DeliveryReportsService.java new file mode 100644 index 000000000..363b85efb --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/DeliveryReportsService.java @@ -0,0 +1,79 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.api.v1; + +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReport; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReport; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.request.BatchDeliveryReportQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.request.ListDeliveryReportsQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.response.ListDeliveryReportsResponse; + +/** Delivery reports Service */ +public interface DeliveryReportsService { + + /** + * Retrieve a delivery report (using default parameters) Delivery reports can be retrieved even if + * no callback was requested. The difference between a summary and a full report is only that the + * full report contains the phone numbers in + * [E.164](https://community.sinch.com/t5/Glossary/E-164/ta-p/7537) format for each status code. + * + * @param batchId The batch ID you received from sending a message. (required) + * @return BatchDeliveryReport + * @throws ApiException if fails to make API call + */ + BatchDeliveryReport get(String batchId) throws ApiException; + + /** + * Retrieve a delivery report Delivery reports can be retrieved even if no callback was requested. + * The difference between a summary and a full report is only that the full report contains the + * phone numbers in [E.164](https://community.sinch.com/t5/Glossary/E-164/ta-p/7537) format for + * each status code. + * + * @param batchId The batch ID you received from sending a message. (required) + * @param queryParameter (optional) + * @return BatchDeliveryReport + * @throws ApiException if fails to make API call + */ + BatchDeliveryReport get(String batchId, BatchDeliveryReportQueryParameters queryParameter) + throws ApiException; + + /** + * Retrieve a recipient delivery report A recipient delivery report contains the message status + * for a single recipient phone number. + * + * @param batchId The batch ID you received from sending a message. (required) + * @param recipientMsisdn Phone number for which you to want to search. (required) + * @return RecipientDeliveryReport + * @throws ApiException if fails to make API call + */ + RecipientDeliveryReport getForNumber(String batchId, String recipientMsisdn) throws ApiException; + + /** + * Retrieve a list of delivery reports (using default parameters) Get a list of finished delivery + * reports. This operation supports pagination. + * + * @return ListDeliveryReportsResponse + * @throws ApiException if fails to make API call + */ + ListDeliveryReportsResponse list() throws ApiException; + + /** + * Retrieve a list of delivery reports Get a list of finished delivery reports. This operation + * supports pagination. + * + * @param queryParameter (optional) + * @return ListDeliveryReportsResponse + * @throws ApiException if fails to make API call + */ + ListDeliveryReportsResponse list(ListDeliveryReportsQueryParameters queryParameter) + throws ApiException; +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/GroupsService.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/GroupsService.java new file mode 100644 index 000000000..f40560e1e --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/GroupsService.java @@ -0,0 +1,118 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.api.v1; + +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.domains.sms.models.v1.groups.Group; +import com.sinch.sdk.domains.sms.models.v1.groups.request.GroupRequest; +import com.sinch.sdk.domains.sms.models.v1.groups.request.GroupUpdateRequest; +import com.sinch.sdk.domains.sms.models.v1.groups.request.ListGroupsQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.groups.response.ListGroupsResponse; +import java.util.List; + +/** Groups Service */ +public interface GroupsService { + + /** + * Create a group This endpoint allows you to create a group of recipients. A new group must be + * created with a group name. This is represented by the `name` field which can be up to + * 20 charecters. In addition, there are a number of optional fields: - `members` field + * enables groups to be created with an initial list of contacts - `auto_update` allows + * customers to auto subscribe to a new group. This contains three fields. The `to` + * field contains the group creator's number. (This number **must be provisioned by contacting + * your account manager**.) The `add` and `remove` fields are objects + * containing the keywords that customers need to text to join or leave a group. + * + * @param groupRequest (optional) + * @return Group + * @throws ApiException if fails to make API call + */ + Group create(GroupRequest groupRequest) throws ApiException; + + /** + * Delete a group This operation deletes the group with the provided group ID. + * + * @param groupId ID of a group that you are interested in getting. (required) + * @throws ApiException if fails to make API call + */ + void delete(String groupId) throws ApiException; + + /** + * Get phone numbers for a group This operation retrieves the members of the group with the + * provided group ID. + * + * @param groupId ID of a group that you are interested in getting. (required) + * @return List<String> + * @throws ApiException if fails to make API call + */ + List listMembers(String groupId) throws ApiException; + + /** + * List Groups (using default parameters) With the list operation you can list all groups that you + * have created. This operation supports pagination. Groups are returned in reverse chronological + * order. + * + * @return ListGroupsResponse + * @throws ApiException if fails to make API call + */ + ListGroupsResponse list() throws ApiException; + + /** + * List Groups With the list operation you can list all groups that you have created. This + * operation supports pagination. Groups are returned in reverse chronological order. + * + * @param queryParameter (optional) + * @return ListGroupsResponse + * @throws ApiException if fails to make API call + */ + ListGroupsResponse list(ListGroupsQueryParameters queryParameter) throws ApiException; + + /** + * Replace a group The replace operation will replace all parameters, including members, of an + * existing group with new values. Replacing a group targeted by a batch message scheduled in the + * future is allowed and changes will be reflected when the batch is sent. + * + * @param groupId ID of a group that you are interested in getting. (required) + * @param groupRequest (optional) + * @return Group + * @throws ApiException if fails to make API call + */ + Group replace(String groupId, GroupRequest groupRequest) throws ApiException; + + /** + * Retrieve a group This operation retrieves a specific group with the provided group ID. + * + * @param groupId ID of a group that you are interested in getting. (required) + * @return Group + * @throws ApiException if fails to make API call + */ + Group get(String groupId) throws ApiException; + + /** + * Update a group With the update group operation, you can add and remove members in an existing + * group as well as rename the group. This method encompasses a few ways to update a group: 1. By + * using `add` and `remove` arrays containing phone numbers, you control the + * group movements. Any list of valid numbers in E.164 format can be added. 2. By using the + * `auto_update` object, your customer can add or remove themselves from groups. 3. You + * can also add or remove other groups into this group with `add_from_group` and + * `remove_from_group`. #### Other group update info - The request will not be rejected + * for duplicate adds or unknown removes. - The additions will be done before the deletions. If an + * phone number is on both lists, it will not be apart of the resulting group. - Updating a group + * targeted by a batch message scheduled in the future is allowed. Changes will be reflected when + * the batch is sent. + * + * @param groupId ID of a group that you are interested in getting. (required) + * @param groupUpdateRequest (optional) + * @return Group + * @throws ApiException if fails to make API call + */ + Group update(String groupId, GroupUpdateRequest groupUpdateRequest) throws ApiException; +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/InboundsService.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/InboundsService.java new file mode 100644 index 000000000..d53c5d1e9 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/InboundsService.java @@ -0,0 +1,51 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.api.v1; + +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.domains.sms.models.v1.inbounds.InboundMessage; +import com.sinch.sdk.domains.sms.models.v1.inbounds.request.ListInboundMessagesQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.inbounds.response.ListInboundsResponse; + +/** Inbounds Service */ +public interface InboundsService { + + /** + * List incoming messages (using default parameters) With the list operation, you can list all + * inbound messages that you have received. This operation supports pagination. Inbounds are + * returned in reverse chronological order. + * + * @return ListInboundsResponse + * @throws ApiException if fails to make API call + */ + ListInboundsResponse list() throws ApiException; + + /** + * List incoming messages With the list operation, you can list all inbound messages that you have + * received. This operation supports pagination. Inbounds are returned in reverse chronological + * order. + * + * @param queryParameter (optional) + * @return ListInboundsResponse + * @throws ApiException if fails to make API call + */ + ListInboundsResponse list(ListInboundMessagesQueryParameters queryParameter) throws ApiException; + + /** + * Retrieve inbound message This operation retrieves a specific inbound message with the provided + * inbound ID. + * + * @param inboundId The inbound ID found when listing inbound messages. (required) + * @return InboundMessage + * @throws ApiException if fails to make API call + */ + InboundMessage get(String inboundId) throws ApiException; +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/BatchesServiceImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/BatchesServiceImpl.java new file mode 100644 index 000000000..3cd18a999 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/BatchesServiceImpl.java @@ -0,0 +1,664 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.api.v1.adapters; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.sinch.sdk.core.databind.query_parameter.InstantToIso8601Serializer; +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.core.exceptions.ApiExceptionBuilder; +import com.sinch.sdk.core.http.AuthManager; +import com.sinch.sdk.core.http.HttpClient; +import com.sinch.sdk.core.http.HttpMapper; +import com.sinch.sdk.core.http.HttpMethod; +import com.sinch.sdk.core.http.HttpRequest; +import com.sinch.sdk.core.http.HttpResponse; +import com.sinch.sdk.core.http.HttpStatus; +import com.sinch.sdk.core.http.URLParameter; +import com.sinch.sdk.core.http.URLParameterUtils; +import com.sinch.sdk.core.http.URLPathUtils; +import com.sinch.sdk.core.models.ServerConfiguration; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.sms.models.v1.batches.request.BatchRequest; +import com.sinch.sdk.domains.sms.models.v1.batches.request.DryRunQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.batches.request.ListBatchesQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.batches.request.SendDeliveryFeedbackRequest; +import com.sinch.sdk.domains.sms.models.v1.batches.request.UpdateBatchRequest; +import com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse; +import com.sinch.sdk.domains.sms.models.v1.batches.response.DryRunResponse; +import com.sinch.sdk.domains.sms.models.v1.batches.response.ListBatchesResponse; +import com.sinch.sdk.domains.sms.models.v1.batches.response.internal.ApiBatchList; +import com.sinch.sdk.domains.sms.models.v1.internal.SMSCursorPageNavigator; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Logger; + +public class BatchesServiceImpl implements com.sinch.sdk.domains.sms.api.v1.BatchesService { + + private static final Logger LOGGER = Logger.getLogger(BatchesServiceImpl.class.getName()); + private final HttpClient httpClient; + private final ServerConfiguration serverConfiguration; + private final Map authManagersByOasSecuritySchemes; + private final HttpMapper mapper; + + private final String servicePlanId; + + public BatchesServiceImpl( + HttpClient httpClient, + ServerConfiguration serverConfiguration, + Map authManagersByOasSecuritySchemes, + HttpMapper mapper, + String servicePlanId) { + this.httpClient = httpClient; + this.serverConfiguration = serverConfiguration; + this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; + this.mapper = mapper; + this.servicePlanId = servicePlanId; + } + + public BatchResponse cancel(String batchId) throws ApiException { + + LOGGER.finest("[cancel]" + " " + "batchId: " + batchId); + + HttpRequest httpRequest = cancelRequestBuilder(batchId); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + return mapper.deserialize(response, new TypeReference() {}); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest cancelRequestBuilder(String batchId) throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling cancel"); + } + // verify the required parameter 'batchId' is set + if (batchId == null) { + throw new ApiException(400, "Missing the required parameter 'batchId' when calling cancel"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/batches/{batch_id}" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())) + .replaceAll( + "\\{" + "batch_id" + "\\}", URLPathUtils.encodePathSegment(batchId.toString())); + + List localVarQueryParams = new ArrayList<>(); + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList(); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.DELETE, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public DryRunResponse dryRun(BatchRequest sendRequest) throws ApiException { + + return dryRun(null, sendRequest); + } + + public DryRunResponse dryRun(DryRunQueryParameters queryParameter, BatchRequest sendRequest) + throws ApiException { + + LOGGER.finest( + "[dryRun]" + + " " + + "queryParameter: " + + queryParameter + + ", " + + "sendRequest: " + + sendRequest); + + HttpRequest httpRequest = dryRunRequestBuilder(queryParameter, sendRequest); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + return mapper.deserialize(response, new TypeReference() {}); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest dryRunRequestBuilder( + DryRunQueryParameters queryParameter, BatchRequest sendRequest) throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling dryRun"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/batches/dry_run" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())); + + List localVarQueryParams = new ArrayList<>(); + if (null != queryParameter) { + + URLParameterUtils.addQueryParam( + queryParameter.getPerRecipient(), + "per_recipient", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getNumberOfRecipients(), + "number_of_recipients", + URLParameter.form, + null, + localVarQueryParams, + true); + } + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList("application/json"); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = mapper.serialize(localVarContentTypes, sendRequest); + + return new HttpRequest( + localVarPath, + HttpMethod.POST, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public BatchResponse get(String batchId) throws ApiException { + + LOGGER.finest("[get]" + " " + "batchId: " + batchId); + + HttpRequest httpRequest = getRequestBuilder(batchId); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + return mapper.deserialize(response, new TypeReference() {}); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest getRequestBuilder(String batchId) throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling get"); + } + // verify the required parameter 'batchId' is set + if (batchId == null) { + throw new ApiException(400, "Missing the required parameter 'batchId' when calling get"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/batches/{batch_id}" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())) + .replaceAll( + "\\{" + "batch_id" + "\\}", URLPathUtils.encodePathSegment(batchId.toString())); + + List localVarQueryParams = new ArrayList<>(); + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList(); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public ListBatchesResponse list() throws ApiException { + + return list(null); + } + + public ListBatchesResponse list(ListBatchesQueryParameters queryParameter) throws ApiException { + + LOGGER.finest("[list]" + " " + "queryParameter: " + queryParameter); + + HttpRequest httpRequest = listRequestBuilder(queryParameter); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + + ApiBatchList deserialized = + mapper.deserialize(response, new TypeReference() {}); + + return new ListBatchesResponse( + this, + new Page<>( + queryParameter, + deserialized.getItems(), + new SMSCursorPageNavigator(deserialized.getPage(), deserialized.getPageSize()))); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest listRequestBuilder(ListBatchesQueryParameters queryParameter) + throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling list"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/batches" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())); + + List localVarQueryParams = new ArrayList<>(); + if (null != queryParameter) { + + URLParameterUtils.addQueryParam( + queryParameter.getPage(), "page", URLParameter.form, null, localVarQueryParams, true); + + URLParameterUtils.addQueryParam( + queryParameter.getPageSize(), + "page_size", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getFrom(), "from", URLParameter.form, null, localVarQueryParams, true); + + URLParameterUtils.addQueryParam( + queryParameter.getStartDate(), + "start_date", + URLParameter.form, + InstantToIso8601Serializer.getInstance(), + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getEndDate(), + "end_date", + URLParameter.form, + InstantToIso8601Serializer.getInstance(), + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getClientReference(), + "client_reference", + URLParameter.form, + null, + localVarQueryParams, + true); + } + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList(); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public BatchResponse replace(String batchId, BatchRequest sendRequest) throws ApiException { + + LOGGER.finest("[replace]" + " " + "batchId: " + batchId + ", " + "sendRequest: " + sendRequest); + + HttpRequest httpRequest = replaceRequestBuilder(batchId, sendRequest); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + return mapper.deserialize(response, new TypeReference() {}); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest replaceRequestBuilder(String batchId, BatchRequest sendRequest) + throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling replace"); + } + // verify the required parameter 'batchId' is set + if (batchId == null) { + throw new ApiException(400, "Missing the required parameter 'batchId' when calling replace"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/batches/{batch_id}" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())) + .replaceAll( + "\\{" + "batch_id" + "\\}", URLPathUtils.encodePathSegment(batchId.toString())); + + List localVarQueryParams = new ArrayList<>(); + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList("application/json"); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = mapper.serialize(localVarContentTypes, sendRequest); + + return new HttpRequest( + localVarPath, + HttpMethod.PUT, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public void sendDeliveryFeedback( + String batchId, SendDeliveryFeedbackRequest sendDeliveryFeedbackRequest) throws ApiException { + + LOGGER.finest( + "[sendDeliveryFeedback]" + + " " + + "batchId: " + + batchId + + ", " + + "sendDeliveryFeedbackRequest: " + + sendDeliveryFeedbackRequest); + + HttpRequest httpRequest = + sendDeliveryFeedbackRequestBuilder(batchId, sendDeliveryFeedbackRequest); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + return; + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest sendDeliveryFeedbackRequestBuilder( + String batchId, SendDeliveryFeedbackRequest sendDeliveryFeedbackRequest) throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, + "Missing the required parameter 'this.servicePlanId' when calling sendDeliveryFeedback"); + } + // verify the required parameter 'batchId' is set + if (batchId == null) { + throw new ApiException( + 400, "Missing the required parameter 'batchId' when calling sendDeliveryFeedback"); + } + // verify the required parameter 'sendDeliveryFeedbackRequest' is set + if (sendDeliveryFeedbackRequest == null) { + throw new ApiException( + 400, + "Missing the required parameter 'sendDeliveryFeedbackRequest' when calling" + + " sendDeliveryFeedback"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/batches/{batch_id}/delivery_feedback" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())) + .replaceAll( + "\\{" + "batch_id" + "\\}", URLPathUtils.encodePathSegment(batchId.toString())); + + List localVarQueryParams = new ArrayList<>(); + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList(); + + final Collection localVarContentTypes = Arrays.asList("application/json"); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = + mapper.serialize(localVarContentTypes, sendDeliveryFeedbackRequest); + + return new HttpRequest( + localVarPath, + HttpMethod.POST, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public BatchResponse send(BatchRequest sendRequest) throws ApiException { + + LOGGER.finest("[send]" + " " + "sendRequest: " + sendRequest); + + HttpRequest httpRequest = sendRequestBuilder(sendRequest); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + return mapper.deserialize(response, new TypeReference() {}); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest sendRequestBuilder(BatchRequest sendRequest) throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling send"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/batches" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())); + + List localVarQueryParams = new ArrayList<>(); + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList("application/json"); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = mapper.serialize(localVarContentTypes, sendRequest); + + return new HttpRequest( + localVarPath, + HttpMethod.POST, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public BatchResponse update(String batchId, UpdateBatchRequest updateBatchRequest) + throws ApiException { + + LOGGER.finest( + "[update]" + + " " + + "batchId: " + + batchId + + ", " + + "updateBatchRequest: " + + updateBatchRequest); + + HttpRequest httpRequest = updateRequestBuilder(batchId, updateBatchRequest); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + return mapper.deserialize(response, new TypeReference() {}); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest updateRequestBuilder(String batchId, UpdateBatchRequest updateBatchRequest) + throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling update"); + } + // verify the required parameter 'batchId' is set + if (batchId == null) { + throw new ApiException(400, "Missing the required parameter 'batchId' when calling update"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/batches/{batch_id}" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())) + .replaceAll( + "\\{" + "batch_id" + "\\}", URLPathUtils.encodePathSegment(batchId.toString())); + + List localVarQueryParams = new ArrayList<>(); + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList("application/json"); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = mapper.serialize(localVarContentTypes, updateBatchRequest); + + return new HttpRequest( + localVarPath, + HttpMethod.POST, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/DeliveryReportsServiceImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/DeliveryReportsServiceImpl.java new file mode 100644 index 000000000..44613b688 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/DeliveryReportsServiceImpl.java @@ -0,0 +1,353 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.api.v1.adapters; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.sinch.sdk.core.databind.query_parameter.InstantToIso8601Serializer; +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.core.exceptions.ApiExceptionBuilder; +import com.sinch.sdk.core.http.AuthManager; +import com.sinch.sdk.core.http.HttpClient; +import com.sinch.sdk.core.http.HttpMapper; +import com.sinch.sdk.core.http.HttpMethod; +import com.sinch.sdk.core.http.HttpRequest; +import com.sinch.sdk.core.http.HttpResponse; +import com.sinch.sdk.core.http.HttpStatus; +import com.sinch.sdk.core.http.URLParameter; +import com.sinch.sdk.core.http.URLParameterUtils; +import com.sinch.sdk.core.http.URLPathUtils; +import com.sinch.sdk.core.models.ServerConfiguration; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReport; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReport; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.request.BatchDeliveryReportQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.request.ListDeliveryReportsQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.response.ListDeliveryReportsResponse; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.response.internal.DeliveryReportList; +import com.sinch.sdk.domains.sms.models.v1.internal.SMSCursorPageNavigator; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Logger; + +public class DeliveryReportsServiceImpl + implements com.sinch.sdk.domains.sms.api.v1.DeliveryReportsService { + + private static final Logger LOGGER = Logger.getLogger(DeliveryReportsServiceImpl.class.getName()); + private final HttpClient httpClient; + private final ServerConfiguration serverConfiguration; + private final Map authManagersByOasSecuritySchemes; + private final HttpMapper mapper; + + private final String servicePlanId; + + public DeliveryReportsServiceImpl( + HttpClient httpClient, + ServerConfiguration serverConfiguration, + Map authManagersByOasSecuritySchemes, + HttpMapper mapper, + String servicePlanId) { + this.httpClient = httpClient; + this.serverConfiguration = serverConfiguration; + this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; + this.mapper = mapper; + this.servicePlanId = servicePlanId; + } + + public BatchDeliveryReport get(String batchId) throws ApiException { + + return get(batchId, null); + } + + public BatchDeliveryReport get(String batchId, BatchDeliveryReportQueryParameters queryParameter) + throws ApiException { + + LOGGER.finest( + "[get]" + " " + "batchId: " + batchId + ", " + "queryParameter: " + queryParameter); + + HttpRequest httpRequest = getRequestBuilder(batchId, queryParameter); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + return mapper.deserialize(response, new TypeReference() {}); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest getRequestBuilder( + String batchId, BatchDeliveryReportQueryParameters queryParameter) throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling get"); + } + // verify the required parameter 'batchId' is set + if (batchId == null) { + throw new ApiException(400, "Missing the required parameter 'batchId' when calling get"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/batches/{batch_id}/delivery_report" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())) + .replaceAll( + "\\{" + "batch_id" + "\\}", URLPathUtils.encodePathSegment(batchId.toString())); + + List localVarQueryParams = new ArrayList<>(); + if (null != queryParameter) { + + URLParameterUtils.addQueryParam( + queryParameter.getType(), "type", URLParameter.form, null, localVarQueryParams, true); + + URLParameterUtils.addQueryParam( + queryParameter.getStatus(), + "status", + URLParameter.form, + null, + localVarQueryParams, + false); + + URLParameterUtils.addQueryParam( + queryParameter.getCode(), "code", URLParameter.form, null, localVarQueryParams, false); + } + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList(); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public RecipientDeliveryReport getForNumber(String batchId, String recipientMsisdn) + throws ApiException { + + LOGGER.finest( + "[getForNumber]" + + " " + + "batchId: " + + batchId + + ", " + + "recipientMsisdn: " + + recipientMsisdn); + + HttpRequest httpRequest = getForNumberRequestBuilder(batchId, recipientMsisdn); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + return mapper.deserialize(response, new TypeReference() {}); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest getForNumberRequestBuilder(String batchId, String recipientMsisdn) + throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling getForNumber"); + } + // verify the required parameter 'batchId' is set + if (batchId == null) { + throw new ApiException( + 400, "Missing the required parameter 'batchId' when calling getForNumber"); + } + // verify the required parameter 'recipientMsisdn' is set + if (recipientMsisdn == null) { + throw new ApiException( + 400, "Missing the required parameter 'recipientMsisdn' when calling getForNumber"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/batches/{batch_id}/delivery_report/{recipient_msisdn}" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())) + .replaceAll( + "\\{" + "batch_id" + "\\}", URLPathUtils.encodePathSegment(batchId.toString())) + .replaceAll( + "\\{" + "recipient_msisdn" + "\\}", + URLPathUtils.encodePathSegment(recipientMsisdn.toString())); + + List localVarQueryParams = new ArrayList<>(); + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList(); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public ListDeliveryReportsResponse list() throws ApiException { + + return list(null); + } + + public ListDeliveryReportsResponse list(ListDeliveryReportsQueryParameters queryParameter) + throws ApiException { + + LOGGER.finest("[list]" + " " + "queryParameter: " + queryParameter); + + HttpRequest httpRequest = listRequestBuilder(queryParameter); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + + DeliveryReportList deserialized = + mapper.deserialize(response, new TypeReference() {}); + + return new ListDeliveryReportsResponse( + this, + new Page<>( + queryParameter, + deserialized.getItems(), + new SMSCursorPageNavigator(deserialized.getPage(), deserialized.getPageSize()))); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest listRequestBuilder(ListDeliveryReportsQueryParameters queryParameter) + throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling list"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/delivery_reports" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())); + + List localVarQueryParams = new ArrayList<>(); + if (null != queryParameter) { + + URLParameterUtils.addQueryParam( + queryParameter.getPage(), "page", URLParameter.form, null, localVarQueryParams, true); + + URLParameterUtils.addQueryParam( + queryParameter.getPageSize(), + "page_size", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getStartDate(), + "start_date", + URLParameter.form, + InstantToIso8601Serializer.getInstance(), + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getEndDate(), + "end_date", + URLParameter.form, + InstantToIso8601Serializer.getInstance(), + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getStatus(), + "status", + URLParameter.form, + null, + localVarQueryParams, + false); + + URLParameterUtils.addQueryParam( + queryParameter.getCode(), "code", URLParameter.form, null, localVarQueryParams, false); + + URLParameterUtils.addQueryParam( + queryParameter.getClientReference(), + "client_reference", + URLParameter.form, + null, + localVarQueryParams, + true); + } + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList(); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/GroupsServiceImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/GroupsServiceImpl.java new file mode 100644 index 000000000..3c2f2107d --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/GroupsServiceImpl.java @@ -0,0 +1,526 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.api.v1.adapters; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.core.exceptions.ApiExceptionBuilder; +import com.sinch.sdk.core.http.AuthManager; +import com.sinch.sdk.core.http.HttpClient; +import com.sinch.sdk.core.http.HttpMapper; +import com.sinch.sdk.core.http.HttpMethod; +import com.sinch.sdk.core.http.HttpRequest; +import com.sinch.sdk.core.http.HttpResponse; +import com.sinch.sdk.core.http.HttpStatus; +import com.sinch.sdk.core.http.URLParameter; +import com.sinch.sdk.core.http.URLParameterUtils; +import com.sinch.sdk.core.http.URLPathUtils; +import com.sinch.sdk.core.models.ServerConfiguration; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.sms.models.v1.groups.Group; +import com.sinch.sdk.domains.sms.models.v1.groups.request.GroupRequest; +import com.sinch.sdk.domains.sms.models.v1.groups.request.GroupUpdateRequest; +import com.sinch.sdk.domains.sms.models.v1.groups.request.ListGroupsQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.groups.response.ListGroupsResponse; +import com.sinch.sdk.domains.sms.models.v1.groups.response.internal.ApiGroupList; +import com.sinch.sdk.domains.sms.models.v1.internal.SMSCursorPageNavigator; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Logger; + +public class GroupsServiceImpl implements com.sinch.sdk.domains.sms.api.v1.GroupsService { + + private static final Logger LOGGER = Logger.getLogger(GroupsServiceImpl.class.getName()); + private final HttpClient httpClient; + private final ServerConfiguration serverConfiguration; + private final Map authManagersByOasSecuritySchemes; + private final HttpMapper mapper; + + private final String servicePlanId; + + public GroupsServiceImpl( + HttpClient httpClient, + ServerConfiguration serverConfiguration, + Map authManagersByOasSecuritySchemes, + HttpMapper mapper, + String servicePlanId) { + this.httpClient = httpClient; + this.serverConfiguration = serverConfiguration; + this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; + this.mapper = mapper; + this.servicePlanId = servicePlanId; + } + + public Group create(GroupRequest groupRequest) throws ApiException { + + LOGGER.finest("[create]" + " " + "groupRequest: " + groupRequest); + + HttpRequest httpRequest = createRequestBuilder(groupRequest); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + return mapper.deserialize(response, new TypeReference() {}); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest createRequestBuilder(GroupRequest groupRequest) throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling create"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/groups" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())); + + List localVarQueryParams = new ArrayList<>(); + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList("application/json"); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = mapper.serialize(localVarContentTypes, groupRequest); + + return new HttpRequest( + localVarPath, + HttpMethod.POST, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public void delete(String groupId) throws ApiException { + + LOGGER.finest("[delete]" + " " + "groupId: " + groupId); + + HttpRequest httpRequest = deleteRequestBuilder(groupId); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + return; + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest deleteRequestBuilder(String groupId) throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling delete"); + } + // verify the required parameter 'groupId' is set + if (groupId == null) { + throw new ApiException(400, "Missing the required parameter 'groupId' when calling delete"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/groups/{group_id}" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())) + .replaceAll( + "\\{" + "group_id" + "\\}", URLPathUtils.encodePathSegment(groupId.toString())); + + List localVarQueryParams = new ArrayList<>(); + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList(); + + final Collection localVarContentTypes = Arrays.asList(); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.DELETE, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public List listMembers(String groupId) throws ApiException { + + LOGGER.finest("[listMembers]" + " " + "groupId: " + groupId); + + HttpRequest httpRequest = listMembersRequestBuilder(groupId); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + return mapper.deserialize(response, new TypeReference>() {}); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest listMembersRequestBuilder(String groupId) throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling listMembers"); + } + // verify the required parameter 'groupId' is set + if (groupId == null) { + throw new ApiException( + 400, "Missing the required parameter 'groupId' when calling listMembers"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/groups/{group_id}/members" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())) + .replaceAll( + "\\{" + "group_id" + "\\}", URLPathUtils.encodePathSegment(groupId.toString())); + + List localVarQueryParams = new ArrayList<>(); + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList(); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public ListGroupsResponse list() throws ApiException { + + return list(null); + } + + public ListGroupsResponse list(ListGroupsQueryParameters queryParameter) throws ApiException { + + LOGGER.finest("[list]" + " " + "queryParameter: " + queryParameter); + + HttpRequest httpRequest = listRequestBuilder(queryParameter); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + + ApiGroupList deserialized = + mapper.deserialize(response, new TypeReference() {}); + + return new ListGroupsResponse( + this, + new Page<>( + queryParameter, + deserialized.getItems(), + new SMSCursorPageNavigator(deserialized.getPage(), deserialized.getPageSize()))); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest listRequestBuilder(ListGroupsQueryParameters queryParameter) + throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling list"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/groups" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())); + + List localVarQueryParams = new ArrayList<>(); + if (null != queryParameter) { + + URLParameterUtils.addQueryParam( + queryParameter.getPage(), "page", URLParameter.form, null, localVarQueryParams, true); + + URLParameterUtils.addQueryParam( + queryParameter.getPageSize(), + "page_size", + URLParameter.form, + null, + localVarQueryParams, + true); + } + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList(); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public Group replace(String groupId, GroupRequest groupRequest) throws ApiException { + + LOGGER.finest( + "[replace]" + " " + "groupId: " + groupId + ", " + "groupRequest: " + groupRequest); + + HttpRequest httpRequest = replaceRequestBuilder(groupId, groupRequest); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + return mapper.deserialize(response, new TypeReference() {}); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest replaceRequestBuilder(String groupId, GroupRequest groupRequest) + throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling replace"); + } + // verify the required parameter 'groupId' is set + if (groupId == null) { + throw new ApiException(400, "Missing the required parameter 'groupId' when calling replace"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/groups/{group_id}" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())) + .replaceAll( + "\\{" + "group_id" + "\\}", URLPathUtils.encodePathSegment(groupId.toString())); + + List localVarQueryParams = new ArrayList<>(); + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList("application/json"); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = mapper.serialize(localVarContentTypes, groupRequest); + + return new HttpRequest( + localVarPath, + HttpMethod.PUT, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public Group get(String groupId) throws ApiException { + + LOGGER.finest("[get]" + " " + "groupId: " + groupId); + + HttpRequest httpRequest = getRequestBuilder(groupId); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + return mapper.deserialize(response, new TypeReference() {}); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest getRequestBuilder(String groupId) throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling get"); + } + // verify the required parameter 'groupId' is set + if (groupId == null) { + throw new ApiException(400, "Missing the required parameter 'groupId' when calling get"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/groups/{group_id}" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())) + .replaceAll( + "\\{" + "group_id" + "\\}", URLPathUtils.encodePathSegment(groupId.toString())); + + List localVarQueryParams = new ArrayList<>(); + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList(); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public Group update(String groupId, GroupUpdateRequest groupUpdateRequest) throws ApiException { + + LOGGER.finest( + "[update]" + + " " + + "groupId: " + + groupId + + ", " + + "groupUpdateRequest: " + + groupUpdateRequest); + + HttpRequest httpRequest = updateRequestBuilder(groupId, groupUpdateRequest); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + return mapper.deserialize(response, new TypeReference() {}); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest updateRequestBuilder(String groupId, GroupUpdateRequest groupUpdateRequest) + throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling update"); + } + // verify the required parameter 'groupId' is set + if (groupId == null) { + throw new ApiException(400, "Missing the required parameter 'groupId' when calling update"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/groups/{group_id}" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())) + .replaceAll( + "\\{" + "group_id" + "\\}", URLPathUtils.encodePathSegment(groupId.toString())); + + List localVarQueryParams = new ArrayList<>(); + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList("application/json"); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = mapper.serialize(localVarContentTypes, groupUpdateRequest); + + return new HttpRequest( + localVarPath, + HttpMethod.POST, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/InboundsServiceImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/InboundsServiceImpl.java new file mode 100644 index 000000000..af85db19f --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/api/v1/adapters/InboundsServiceImpl.java @@ -0,0 +1,244 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.api.v1.adapters; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.sinch.sdk.core.databind.query_parameter.CollectionStringToCommaSerializer; +import com.sinch.sdk.core.databind.query_parameter.InstantToIso8601Serializer; +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.core.exceptions.ApiExceptionBuilder; +import com.sinch.sdk.core.http.AuthManager; +import com.sinch.sdk.core.http.HttpClient; +import com.sinch.sdk.core.http.HttpMapper; +import com.sinch.sdk.core.http.HttpMethod; +import com.sinch.sdk.core.http.HttpRequest; +import com.sinch.sdk.core.http.HttpResponse; +import com.sinch.sdk.core.http.HttpStatus; +import com.sinch.sdk.core.http.URLParameter; +import com.sinch.sdk.core.http.URLParameterUtils; +import com.sinch.sdk.core.http.URLPathUtils; +import com.sinch.sdk.core.models.ServerConfiguration; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.sms.models.v1.inbounds.InboundMessage; +import com.sinch.sdk.domains.sms.models.v1.inbounds.request.ListInboundMessagesQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.inbounds.response.ListInboundsResponse; +import com.sinch.sdk.domains.sms.models.v1.inbounds.response.internal.ApiInboundList; +import com.sinch.sdk.domains.sms.models.v1.internal.SMSCursorPageNavigator; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Logger; + +public class InboundsServiceImpl implements com.sinch.sdk.domains.sms.api.v1.InboundsService { + + private static final Logger LOGGER = Logger.getLogger(InboundsServiceImpl.class.getName()); + private final HttpClient httpClient; + private final ServerConfiguration serverConfiguration; + private final Map authManagersByOasSecuritySchemes; + private final HttpMapper mapper; + + private final String servicePlanId; + + public InboundsServiceImpl( + HttpClient httpClient, + ServerConfiguration serverConfiguration, + Map authManagersByOasSecuritySchemes, + HttpMapper mapper, + String servicePlanId) { + this.httpClient = httpClient; + this.serverConfiguration = serverConfiguration; + this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; + this.mapper = mapper; + this.servicePlanId = servicePlanId; + } + + public ListInboundsResponse list() throws ApiException { + + return list(null); + } + + public ListInboundsResponse list(ListInboundMessagesQueryParameters queryParameter) + throws ApiException { + + LOGGER.finest("[list]" + " " + "queryParameter: " + queryParameter); + + HttpRequest httpRequest = listRequestBuilder(queryParameter); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + + ApiInboundList deserialized = + mapper.deserialize(response, new TypeReference() {}); + + return new ListInboundsResponse( + this, + new Page<>( + queryParameter, + deserialized.getItems(), + new SMSCursorPageNavigator(deserialized.getPage(), deserialized.getPageSize()))); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest listRequestBuilder(ListInboundMessagesQueryParameters queryParameter) + throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling list"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/inbounds" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())); + + List localVarQueryParams = new ArrayList<>(); + if (null != queryParameter) { + + URLParameterUtils.addQueryParam( + queryParameter.getPage(), "page", URLParameter.form, null, localVarQueryParams, true); + + URLParameterUtils.addQueryParam( + queryParameter.getPageSize(), + "page_size", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getTo(), + "to", + URLParameter.form, + CollectionStringToCommaSerializer.getInstance(), + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getStartDate(), + "start_date", + URLParameter.form, + InstantToIso8601Serializer.getInstance(), + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getEndDate(), + "end_date", + URLParameter.form, + InstantToIso8601Serializer.getInstance(), + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getClientReference(), + "client_reference", + URLParameter.form, + null, + localVarQueryParams, + true); + } + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList(); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public InboundMessage get(String inboundId) throws ApiException { + + LOGGER.finest("[get]" + " " + "inboundId: " + inboundId); + + HttpRequest httpRequest = getRequestBuilder(inboundId); + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + return mapper.deserialize(response, new TypeReference() {}); + } + // fallback to default errors handling: + // all error cases definition are not required from specs: will try some "hardcoded" content + // parsing + throw ApiExceptionBuilder.build( + response.getMessage(), + response.getCode(), + mapper.deserialize(response, new TypeReference>() {})); + } + + private HttpRequest getRequestBuilder(String inboundId) throws ApiException { + // verify the required parameter 'this.servicePlanId' is set + if (this.servicePlanId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.servicePlanId' when calling get"); + } + // verify the required parameter 'inboundId' is set + if (inboundId == null) { + throw new ApiException(400, "Missing the required parameter 'inboundId' when calling get"); + } + + String localVarPath = + "/xms/v1/{service_plan_id}/inbounds/{inbound_id}" + .replaceAll( + "\\{" + "service_plan_id" + "\\}", + URLPathUtils.encodePathSegment(this.servicePlanId.toString())) + .replaceAll( + "\\{" + "inbound_id" + "\\}", URLPathUtils.encodePathSegment(inboundId.toString())); + + List localVarQueryParams = new ArrayList<>(); + + Map localVarHeaderParams = new HashMap<>(); + + final Collection localVarAccepts = Arrays.asList("application/json"); + + final Collection localVarContentTypes = Arrays.asList(); + + final Collection localVarAuthNames = Arrays.asList("BearerAuth"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/DeliveryReportType.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/DeliveryReportType.java new file mode 100644 index 000000000..e5277bedc --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/DeliveryReportType.java @@ -0,0 +1,61 @@ +package com.sinch.sdk.domains.sms.models.v1.batches; + +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import java.util.Arrays; +import java.util.stream.Stream; + +/** Kind of delivery report */ +public class DeliveryReportType extends EnumDynamic { + + /** No delivery report callback will be sent. */ + public static final DeliveryReportType NONE = new DeliveryReportType("none"); + + /** A single delivery report callback will be sent. */ + public static final DeliveryReportType SUMMARY = new DeliveryReportType("summary"); + + /** + * A single delivery report callback will be sent which includes a list of recipients per delivery + * status. + */ + public static final DeliveryReportType FULL = new DeliveryReportType("full"); + + /** + * A delivery report callback will be sent for each status change of a message. This could result + * in a lot of callbacks and should be used with caution for larger batches. + * These delivery reports also include a timestamp of when the Delivery Report originated from the + * SMSC. + */ + public static final DeliveryReportType PER_RECIPIENT = new DeliveryReportType("per_recipient"); + + /** + * A delivery report callback representing the final status of a message will be sent for each + * recipient. This will send only one callback per recipient, compared to the multiple callbacks + * sent when using per_recipient. The delivery report will also include a timestamp + * of when it originated from the SMSC. + */ + public static final DeliveryReportType PER_RECIPIENT_FINAL = + new DeliveryReportType("per_recipient_final"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>( + DeliveryReportType.class, + DeliveryReportType::new, + Arrays.asList(NONE, SUMMARY, FULL, PER_RECIPIENT, PER_RECIPIENT_FINAL)); + + private DeliveryReportType(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static DeliveryReportType from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(DeliveryReportType e) { + return ENUM_SUPPORT.valueOf(e); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/MediaBody.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/MediaBody.java new file mode 100644 index 000000000..63c078302 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/MediaBody.java @@ -0,0 +1,86 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +/** The message content, including a URL to the media file */ +@JsonDeserialize(builder = MediaBodyImpl.Builder.class) +public interface MediaBody { + + /** + * The subject text + * + * @return subject + */ + String getSubject(); + + /** + * The message text. Text only media messages will be rejected, please use SMS instead. + * + * @return message + */ + String getMessage(); + + /** + * URL to the media file + * + * @return url + */ + String getUrl(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new MediaBodyImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param subject see getter + * @return Current builder + * @see #getSubject + */ + Builder setSubject(String subject); + + /** + * see getter + * + * @param message see getter + * @return Current builder + * @see #getMessage + */ + Builder setMessage(String message); + + /** + * see getter + * + * @param url see getter + * @return Current builder + * @see #getUrl + */ + Builder setUrl(String url); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + MediaBody build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/MediaBodyImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/MediaBodyImpl.java new file mode 100644 index 000000000..6294d51a1 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/MediaBodyImpl.java @@ -0,0 +1,145 @@ +package com.sinch.sdk.domains.sms.models.v1.batches; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +@JsonPropertyOrder({ + MediaBodyImpl.JSON_PROPERTY_SUBJECT, + MediaBodyImpl.JSON_PROPERTY_MESSAGE, + MediaBodyImpl.JSON_PROPERTY_URL +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class MediaBodyImpl implements MediaBody { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_SUBJECT = "subject"; + + private OptionalValue subject; + + public static final String JSON_PROPERTY_MESSAGE = "message"; + + private OptionalValue message; + + public static final String JSON_PROPERTY_URL = "url"; + + private OptionalValue url; + + public MediaBodyImpl() {} + + protected MediaBodyImpl( + OptionalValue subject, OptionalValue message, OptionalValue url) { + this.subject = subject; + this.message = message; + this.url = url; + } + + @JsonIgnore + public String getSubject() { + return subject.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_SUBJECT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue subject() { + return subject; + } + + @JsonIgnore + public String getMessage() { + return message.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_MESSAGE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue message() { + return message; + } + + @JsonIgnore + public String getUrl() { + return url.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_URL) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue url() { + return url; + } + + /** Return true if this MediaBody object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MediaBodyImpl mediaBody = (MediaBodyImpl) o; + return Objects.equals(this.subject, mediaBody.subject) + && Objects.equals(this.message, mediaBody.message) + && Objects.equals(this.url, mediaBody.url); + } + + @Override + public int hashCode() { + return Objects.hash(subject, message, url); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class MediaBodyImpl {\n"); + sb.append(" subject: ").append(toIndentedString(subject)).append("\n"); + sb.append(" message: ").append(toIndentedString(message)).append("\n"); + sb.append(" url: ").append(toIndentedString(url)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements MediaBody.Builder { + OptionalValue subject = OptionalValue.empty(); + OptionalValue message = OptionalValue.empty(); + OptionalValue url = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_SUBJECT) + public Builder setSubject(String subject) { + this.subject = OptionalValue.of(subject); + return this; + } + + @JsonProperty(JSON_PROPERTY_MESSAGE) + public Builder setMessage(String message) { + this.message = OptionalValue.of(message); + return this; + } + + @JsonProperty(JSON_PROPERTY_URL) + public Builder setUrl(String url) { + this.url = OptionalValue.of(url); + return this; + } + + public MediaBody build() { + return new MediaBodyImpl(subject, message, url); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/BinaryRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/BinaryRequest.java new file mode 100644 index 000000000..0bb00c522 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/BinaryRequest.java @@ -0,0 +1,281 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import java.time.Instant; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +/** BinaryRequest */ +@JsonDeserialize(builder = BinaryRequestImpl.Builder.class) +public interface BinaryRequest extends BatchRequest { + + /** + * A list of phone numbers and group IDs that will receive the batch. More info. + * + * @return to + */ + List getTo(); + + /** + * Sender number. Must be valid phone number, short code or alphanumeric. Required if Automatic + * Default Originator not configured. + * + * @return from + */ + String getFrom(); + + /** + * The message content Base64 encoded. Max 140 bytes including udh. + * + * @return body + */ + String getBody(); + + /** + * The UDH header of a binary message HEX encoded. Max 140 bytes including the body. + * + * @return udh + */ + String getUdh(); + + /** + * SMS in binary + * format. + */ + public class TypeEnum extends EnumDynamic { + public static final TypeEnum MT_BINARY = new TypeEnum("mt_binary"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>(TypeEnum.class, TypeEnum::new, Arrays.asList(MT_BINARY)); + + private TypeEnum(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static TypeEnum from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(TypeEnum e) { + return ENUM_SUPPORT.valueOf(e); + } + } + + /** + * Get deliveryReport + * + * @return deliveryReport + */ + DeliveryReportType getDeliveryReport(); + + /** + * If set in the future the message will be delayed until send_at occurs. Must be + * before expire_at. If set in the past, messages will be sent immediately. Formatted + * as ISO-8601. For example: + * YYYY-MM-DDThh:mm:ss.SSSZ. + * + * @return sendAt + */ + Instant getSendAt(); + + /** + * If set, the system will stop trying to deliver the message at this point. Must be after + * send_at. Default and max is 3 days after send_at. Formatted as ISO-8601. For example: + * YYYY-MM-DDThh:mm:ss.SSSZ. + * + * @return expireAt + */ + Instant getExpireAt(); + + /** + * Override the default callback URL for this batch. Must be a valid URL. Learn how to + * set a default callback URL here. + * + * @return callbackUrl + */ + String getCallbackUrl(); + + /** + * The client identifier of a batch message. If set, the identifier will be added in the delivery + * report/callback of this batch. + * + * @return clientReference + */ + String getClientReference(); + + /** + * If set to true then feedback + * is expected after successful delivery. + * + * @return feedbackEnabled + */ + Boolean getFeedbackEnabled(); + + /** + * The type of number for the sender number. Use to override the automatic detection. + * + *

minimum: 0 maximum: 6 + * + * @return fromTon + */ + Integer getFromTon(); + + /** + * Number Plan Indicator for the sender number. Use to override the automatic detection. + * + *

minimum: 0 maximum: 18 + * + * @return fromNpi + */ + Integer getFromNpi(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new BinaryRequestImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param to see getter + * @return Current builder + * @see #getTo + */ + Builder setTo(List to); + + /** + * see getter + * + * @param from see getter + * @return Current builder + * @see #getFrom + */ + Builder setFrom(String from); + + /** + * see getter + * + * @param body see getter + * @return Current builder + * @see #getBody + */ + Builder setBody(String body); + + /** + * see getter + * + * @param udh see getter + * @return Current builder + * @see #getUdh + */ + Builder setUdh(String udh); + + /** + * see getter + * + * @param deliveryReport see getter + * @return Current builder + * @see #getDeliveryReport + */ + Builder setDeliveryReport(DeliveryReportType deliveryReport); + + /** + * see getter + * + * @param sendAt see getter + * @return Current builder + * @see #getSendAt + */ + Builder setSendAt(Instant sendAt); + + /** + * see getter + * + * @param expireAt see getter + * @return Current builder + * @see #getExpireAt + */ + Builder setExpireAt(Instant expireAt); + + /** + * see getter + * + * @param callbackUrl see getter + * @return Current builder + * @see #getCallbackUrl + */ + Builder setCallbackUrl(String callbackUrl); + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * see getter + * + * @param feedbackEnabled see getter + * @return Current builder + * @see #getFeedbackEnabled + */ + Builder setFeedbackEnabled(Boolean feedbackEnabled); + + /** + * see getter + * + * @param fromTon see getter + * @return Current builder + * @see #getFromTon + */ + Builder setFromTon(Integer fromTon); + + /** + * see getter + * + * @param fromNpi see getter + * @return Current builder + * @see #getFromNpi + */ + Builder setFromNpi(Integer fromNpi); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + BinaryRequest build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/BinaryRequestImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/BinaryRequestImpl.java new file mode 100644 index 000000000..39fa49dd7 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/BinaryRequestImpl.java @@ -0,0 +1,440 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import java.time.Instant; +import java.util.List; +import java.util.Objects; + +@JsonPropertyOrder({ + BinaryRequestImpl.JSON_PROPERTY_TO, + BinaryRequestImpl.JSON_PROPERTY_FROM, + BinaryRequestImpl.JSON_PROPERTY_BODY, + BinaryRequestImpl.JSON_PROPERTY_UDH, + BinaryRequestImpl.JSON_PROPERTY_TYPE, + BinaryRequestImpl.JSON_PROPERTY_DELIVERY_REPORT, + BinaryRequestImpl.JSON_PROPERTY_SEND_AT, + BinaryRequestImpl.JSON_PROPERTY_EXPIRE_AT, + BinaryRequestImpl.JSON_PROPERTY_CALLBACK_URL, + BinaryRequestImpl.JSON_PROPERTY_CLIENT_REFERENCE, + BinaryRequestImpl.JSON_PROPERTY_FEEDBACK_ENABLED, + BinaryRequestImpl.JSON_PROPERTY_FROM_TON, + BinaryRequestImpl.JSON_PROPERTY_FROM_NPI +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class BinaryRequestImpl implements BinaryRequest, BatchRequest { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_TO = "to"; + + private OptionalValue> to; + + public static final String JSON_PROPERTY_FROM = "from"; + + private OptionalValue from; + + public static final String JSON_PROPERTY_BODY = "body"; + + private OptionalValue body; + + public static final String JSON_PROPERTY_UDH = "udh"; + + private OptionalValue udh; + + public static final String JSON_PROPERTY_TYPE = "type"; + + private OptionalValue type; + + public static final String JSON_PROPERTY_DELIVERY_REPORT = "delivery_report"; + + private OptionalValue deliveryReport; + + public static final String JSON_PROPERTY_SEND_AT = "send_at"; + + private OptionalValue sendAt; + + public static final String JSON_PROPERTY_EXPIRE_AT = "expire_at"; + + private OptionalValue expireAt; + + public static final String JSON_PROPERTY_CALLBACK_URL = "callback_url"; + + private OptionalValue callbackUrl; + + public static final String JSON_PROPERTY_CLIENT_REFERENCE = "client_reference"; + + private OptionalValue clientReference; + + public static final String JSON_PROPERTY_FEEDBACK_ENABLED = "feedback_enabled"; + + private OptionalValue feedbackEnabled; + + public static final String JSON_PROPERTY_FROM_TON = "from_ton"; + + private OptionalValue fromTon; + + public static final String JSON_PROPERTY_FROM_NPI = "from_npi"; + + private OptionalValue fromNpi; + + public BinaryRequestImpl() {} + + protected BinaryRequestImpl( + OptionalValue> to, + OptionalValue from, + OptionalValue body, + OptionalValue udh, + OptionalValue type, + OptionalValue deliveryReport, + OptionalValue sendAt, + OptionalValue expireAt, + OptionalValue callbackUrl, + OptionalValue clientReference, + OptionalValue feedbackEnabled, + OptionalValue fromTon, + OptionalValue fromNpi) { + this.to = to; + this.from = from; + this.body = body; + this.udh = udh; + this.type = type; + this.deliveryReport = deliveryReport; + this.sendAt = sendAt; + this.expireAt = expireAt; + this.callbackUrl = callbackUrl; + this.clientReference = clientReference; + this.feedbackEnabled = feedbackEnabled; + this.fromTon = fromTon; + this.fromNpi = fromNpi; + } + + @JsonIgnore + public List getTo() { + return to.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TO) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue> to() { + return to; + } + + @JsonIgnore + public String getFrom() { + return from.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue from() { + return from; + } + + @JsonIgnore + public String getBody() { + return body.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_BODY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue body() { + return body; + } + + @JsonIgnore + public String getUdh() { + return udh.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_UDH) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue udh() { + return udh; + } + + @JsonIgnore + public TypeEnum getType() { + return type.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue type() { + return type; + } + + @JsonIgnore + public DeliveryReportType getDeliveryReport() { + return deliveryReport.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue deliveryReport() { + return deliveryReport; + } + + @JsonIgnore + public Instant getSendAt() { + return sendAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue sendAt() { + return sendAt; + } + + @JsonIgnore + public Instant getExpireAt() { + return expireAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue expireAt() { + return expireAt; + } + + @JsonIgnore + public String getCallbackUrl() { + return callbackUrl.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue callbackUrl() { + return callbackUrl; + } + + @JsonIgnore + public String getClientReference() { + return clientReference.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue clientReference() { + return clientReference; + } + + @JsonIgnore + public Boolean getFeedbackEnabled() { + return feedbackEnabled.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue feedbackEnabled() { + return feedbackEnabled; + } + + @JsonIgnore + public Integer getFromTon() { + return fromTon.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM_TON) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue fromTon() { + return fromTon; + } + + @JsonIgnore + public Integer getFromNpi() { + return fromNpi.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM_NPI) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue fromNpi() { + return fromNpi; + } + + /** Return true if this BinaryRequest object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BinaryRequestImpl binaryRequest = (BinaryRequestImpl) o; + return Objects.equals(this.to, binaryRequest.to) + && Objects.equals(this.from, binaryRequest.from) + && Objects.equals(this.body, binaryRequest.body) + && Objects.equals(this.udh, binaryRequest.udh) + && Objects.equals(this.type, binaryRequest.type) + && Objects.equals(this.deliveryReport, binaryRequest.deliveryReport) + && Objects.equals(this.sendAt, binaryRequest.sendAt) + && Objects.equals(this.expireAt, binaryRequest.expireAt) + && Objects.equals(this.callbackUrl, binaryRequest.callbackUrl) + && Objects.equals(this.clientReference, binaryRequest.clientReference) + && Objects.equals(this.feedbackEnabled, binaryRequest.feedbackEnabled) + && Objects.equals(this.fromTon, binaryRequest.fromTon) + && Objects.equals(this.fromNpi, binaryRequest.fromNpi); + } + + @Override + public int hashCode() { + return Objects.hash( + to, + from, + body, + udh, + type, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + fromTon, + fromNpi); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class BinaryRequestImpl {\n"); + sb.append(" to: ").append(toIndentedString(to)).append("\n"); + sb.append(" from: ").append(toIndentedString(from)).append("\n"); + sb.append(" body: ").append(toIndentedString(body)).append("\n"); + sb.append(" udh: ").append(toIndentedString(udh)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" deliveryReport: ").append(toIndentedString(deliveryReport)).append("\n"); + sb.append(" sendAt: ").append(toIndentedString(sendAt)).append("\n"); + sb.append(" expireAt: ").append(toIndentedString(expireAt)).append("\n"); + sb.append(" callbackUrl: ").append(toIndentedString(callbackUrl)).append("\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append(" feedbackEnabled: ").append(toIndentedString(feedbackEnabled)).append("\n"); + sb.append(" fromTon: ").append(toIndentedString(fromTon)).append("\n"); + sb.append(" fromNpi: ").append(toIndentedString(fromNpi)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements BinaryRequest.Builder { + OptionalValue> to = OptionalValue.empty(); + OptionalValue from = OptionalValue.empty(); + OptionalValue body = OptionalValue.empty(); + OptionalValue udh = OptionalValue.empty(); + OptionalValue type = OptionalValue.of(TypeEnum.MT_BINARY); + OptionalValue deliveryReport = OptionalValue.empty(); + OptionalValue sendAt = OptionalValue.empty(); + OptionalValue expireAt = OptionalValue.empty(); + OptionalValue callbackUrl = OptionalValue.empty(); + OptionalValue clientReference = OptionalValue.empty(); + OptionalValue feedbackEnabled = OptionalValue.empty(); + OptionalValue fromTon = OptionalValue.empty(); + OptionalValue fromNpi = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_TO) + public Builder setTo(List to) { + this.to = OptionalValue.of(to); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM) + public Builder setFrom(String from) { + this.from = OptionalValue.of(from); + return this; + } + + @JsonProperty(JSON_PROPERTY_BODY) + public Builder setBody(String body) { + this.body = OptionalValue.of(body); + return this; + } + + @JsonProperty(JSON_PROPERTY_UDH) + public Builder setUdh(String udh) { + this.udh = OptionalValue.of(udh); + return this; + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + public Builder setDeliveryReport(DeliveryReportType deliveryReport) { + this.deliveryReport = OptionalValue.of(deliveryReport); + return this; + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + public Builder setSendAt(Instant sendAt) { + this.sendAt = OptionalValue.of(sendAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + public Builder setExpireAt(Instant expireAt) { + this.expireAt = OptionalValue.of(expireAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + public Builder setCallbackUrl(String callbackUrl) { + this.callbackUrl = OptionalValue.of(callbackUrl); + return this; + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + public Builder setFeedbackEnabled(Boolean feedbackEnabled) { + this.feedbackEnabled = OptionalValue.of(feedbackEnabled); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM_TON) + public Builder setFromTon(Integer fromTon) { + this.fromTon = OptionalValue.of(fromTon); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM_NPI) + public Builder setFromNpi(Integer fromNpi) { + this.fromNpi = OptionalValue.of(fromNpi); + return this; + } + + public BinaryRequest build() { + return new BinaryRequestImpl( + to, + from, + body, + udh, + type, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + fromTon, + fromNpi); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/DryRunQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/DryRunQueryParameters.java new file mode 100644 index 000000000..2bc16fc1f --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/DryRunQueryParameters.java @@ -0,0 +1,78 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.sinch.sdk.core.models.OptionalValue; + +/** DryRunQueryParameters */ +public interface DryRunQueryParameters { + + /** + * Get perRecipient + * + * @return perRecipient + */ + OptionalValue getPerRecipient(); + + /** + * Get numberOfRecipients maximum: 1000 + * + * @return numberOfRecipients + */ + OptionalValue getNumberOfRecipients(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new DryRunQueryParametersImpl.Builder(); + } + + /** + * Getting builder from existing instance + * + * @return New Builder instance + */ + static Builder builder(DryRunQueryParameters parameters) { + return new DryRunQueryParametersImpl.Builder(parameters); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param perRecipient see getter + * @return Current builder + * @see #getPerRecipient + */ + Builder setPerRecipient(Boolean perRecipient); + + /** + * see getter + * + * @param numberOfRecipients see getter + * @return Current builder + * @see #getNumberOfRecipients + */ + Builder setNumberOfRecipients(Integer numberOfRecipients); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + DryRunQueryParameters build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/DryRunQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/DryRunQueryParametersImpl.java new file mode 100644 index 000000000..4d7790765 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/DryRunQueryParametersImpl.java @@ -0,0 +1,93 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +public class DryRunQueryParametersImpl implements DryRunQueryParameters { + + private final OptionalValue perRecipient; + private final OptionalValue numberOfRecipients; + + private DryRunQueryParametersImpl( + OptionalValue perRecipient, OptionalValue numberOfRecipients) { + this.perRecipient = perRecipient; + this.numberOfRecipients = numberOfRecipients; + } + + public OptionalValue getPerRecipient() { + return perRecipient; + } + + public OptionalValue getNumberOfRecipients() { + return numberOfRecipients; + } + + /** Return true if this DryRunQueryParameters object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DryRunQueryParametersImpl dryRunQueryParameters = (DryRunQueryParametersImpl) o; + return Objects.equals(this.perRecipient, dryRunQueryParameters.perRecipient) + && Objects.equals(this.numberOfRecipients, dryRunQueryParameters.numberOfRecipients); + } + + @Override + public int hashCode() { + return Objects.hash(perRecipient, numberOfRecipients); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class DryRunQueryParametersImpl {\n"); + sb.append(" perRecipient: ").append(toIndentedString(perRecipient)).append("\n"); + sb.append(" numberOfRecipients: ").append(toIndentedString(numberOfRecipients)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + static class Builder implements DryRunQueryParameters.Builder { + OptionalValue perRecipient = OptionalValue.empty(); + OptionalValue numberOfRecipients = OptionalValue.empty(); + + protected Builder() {} + + protected Builder(DryRunQueryParameters _parameters) { + if (null == _parameters) { + return; + } + DryRunQueryParametersImpl parameters = (DryRunQueryParametersImpl) _parameters; + this.perRecipient = parameters.getPerRecipient(); + this.numberOfRecipients = parameters.getNumberOfRecipients(); + } + + public Builder setPerRecipient(Boolean perRecipient) { + this.perRecipient = OptionalValue.of(perRecipient); + return this; + } + + public Builder setNumberOfRecipients(Integer numberOfRecipients) { + this.numberOfRecipients = OptionalValue.of(numberOfRecipients); + return this; + } + + public DryRunQueryParameters build() { + return new DryRunQueryParametersImpl(perRecipient, numberOfRecipients); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/ListBatchesQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/ListBatchesQueryParameters.java new file mode 100644 index 000000000..d2032cd22 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/ListBatchesQueryParameters.java @@ -0,0 +1,143 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.sinch.sdk.core.models.OptionalValue; +import java.time.Instant; + +/** ListBatchesQueryParameters */ +public interface ListBatchesQueryParameters { + + /** + * Get page minimum: 0 + * + * @return page + */ + OptionalValue getPage(); + + /** + * Get pageSize maximum: 100 + * + * @return pageSize + */ + OptionalValue getPageSize(); + + /** + * Get from + * + * @return from + */ + OptionalValue getFrom(); + + /** + * Get startDate + * + * @return startDate + */ + OptionalValue getStartDate(); + + /** + * Get endDate + * + * @return endDate + */ + OptionalValue getEndDate(); + + /** + * Get clientReference + * + * @return clientReference + */ + OptionalValue getClientReference(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new ListBatchesQueryParametersImpl.Builder(); + } + + /** + * Getting builder from existing instance + * + * @return New Builder instance + */ + static Builder builder(ListBatchesQueryParameters parameters) { + return new ListBatchesQueryParametersImpl.Builder(parameters); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param page see getter + * @return Current builder + * @see #getPage + */ + Builder setPage(Integer page); + + /** + * see getter + * + * @param pageSize see getter + * @return Current builder + * @see #getPageSize + */ + Builder setPageSize(Integer pageSize); + + /** + * see getter + * + * @param from see getter + * @return Current builder + * @see #getFrom + */ + Builder setFrom(String from); + + /** + * see getter + * + * @param startDate see getter + * @return Current builder + * @see #getStartDate + */ + Builder setStartDate(Instant startDate); + + /** + * see getter + * + * @param endDate see getter + * @return Current builder + * @see #getEndDate + */ + Builder setEndDate(Instant endDate); + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + ListBatchesQueryParameters build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/ListBatchesQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/ListBatchesQueryParametersImpl.java new file mode 100644 index 000000000..2d93afea2 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/ListBatchesQueryParametersImpl.java @@ -0,0 +1,160 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.sinch.sdk.core.models.OptionalValue; +import java.time.Instant; +import java.util.Objects; + +public class ListBatchesQueryParametersImpl implements ListBatchesQueryParameters { + + private final OptionalValue page; + private final OptionalValue pageSize; + private final OptionalValue from; + private final OptionalValue startDate; + private final OptionalValue endDate; + private final OptionalValue clientReference; + + private ListBatchesQueryParametersImpl( + OptionalValue page, + OptionalValue pageSize, + OptionalValue from, + OptionalValue startDate, + OptionalValue endDate, + OptionalValue clientReference) { + this.page = page; + this.pageSize = pageSize; + this.from = from; + this.startDate = startDate; + this.endDate = endDate; + this.clientReference = clientReference; + } + + public OptionalValue getPage() { + return page; + } + + public OptionalValue getPageSize() { + return pageSize; + } + + public OptionalValue getFrom() { + return from; + } + + public OptionalValue getStartDate() { + return startDate; + } + + public OptionalValue getEndDate() { + return endDate; + } + + public OptionalValue getClientReference() { + return clientReference; + } + + /** Return true if this ListBatchesQueryParameters object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ListBatchesQueryParametersImpl listBatchesQueryParameters = (ListBatchesQueryParametersImpl) o; + return Objects.equals(this.page, listBatchesQueryParameters.page) + && Objects.equals(this.pageSize, listBatchesQueryParameters.pageSize) + && Objects.equals(this.from, listBatchesQueryParameters.from) + && Objects.equals(this.startDate, listBatchesQueryParameters.startDate) + && Objects.equals(this.endDate, listBatchesQueryParameters.endDate) + && Objects.equals(this.clientReference, listBatchesQueryParameters.clientReference); + } + + @Override + public int hashCode() { + return Objects.hash(page, pageSize, from, startDate, endDate, clientReference); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ListBatchesQueryParametersImpl {\n"); + sb.append(" page: ").append(toIndentedString(page)).append("\n"); + sb.append(" pageSize: ").append(toIndentedString(pageSize)).append("\n"); + sb.append(" from: ").append(toIndentedString(from)).append("\n"); + sb.append(" startDate: ").append(toIndentedString(startDate)).append("\n"); + sb.append(" endDate: ").append(toIndentedString(endDate)).append("\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + static class Builder implements ListBatchesQueryParameters.Builder { + OptionalValue page = OptionalValue.empty(); + OptionalValue pageSize = OptionalValue.empty(); + OptionalValue from = OptionalValue.empty(); + OptionalValue startDate = OptionalValue.empty(); + OptionalValue endDate = OptionalValue.empty(); + OptionalValue clientReference = OptionalValue.empty(); + + protected Builder() {} + + protected Builder(ListBatchesQueryParameters _parameters) { + if (null == _parameters) { + return; + } + ListBatchesQueryParametersImpl parameters = (ListBatchesQueryParametersImpl) _parameters; + this.page = parameters.getPage(); + this.pageSize = parameters.getPageSize(); + this.from = parameters.getFrom(); + this.startDate = parameters.getStartDate(); + this.endDate = parameters.getEndDate(); + this.clientReference = parameters.getClientReference(); + } + + public Builder setPage(Integer page) { + this.page = OptionalValue.of(page); + return this; + } + + public Builder setPageSize(Integer pageSize) { + this.pageSize = OptionalValue.of(pageSize); + return this; + } + + public Builder setFrom(String from) { + this.from = OptionalValue.of(from); + return this; + } + + public Builder setStartDate(Instant startDate) { + this.startDate = OptionalValue.of(startDate); + return this; + } + + public Builder setEndDate(Instant endDate) { + this.endDate = OptionalValue.of(endDate); + return this; + } + + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + public ListBatchesQueryParameters build() { + return new ListBatchesQueryParametersImpl( + page, pageSize, from, startDate, endDate, clientReference); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/MediaRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/MediaRequest.java new file mode 100644 index 000000000..1774aad95 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/MediaRequest.java @@ -0,0 +1,263 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import com.sinch.sdk.domains.sms.models.v1.batches.MediaBody; +import java.time.Instant; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +/** Only available in the US. Contact your account manager if you wish to send MMS. */ +@JsonDeserialize(builder = MediaRequestImpl.Builder.class) +public interface MediaRequest extends BatchRequest { + + /** + * List of Phone numbers and group IDs that will receive the batch. More info + * + * @return to + */ + List getTo(); + + /** + * Sender number. Must be valid phone number, short code or alphanumeric. Required if Automatic + * Default Originator not configured. + * + * @return from + */ + String getFrom(); + + /** + * Get body + * + * @return body + */ + MediaBody getBody(); + + /** + * Contains the parameters that will be used for customizing the message for each recipient. Click here to learn more about + * parameterization. + * + * @return parameters + */ + Map> getParameters(); + + /** MMS */ + public class TypeEnum extends EnumDynamic { + public static final TypeEnum MT_MEDIA = new TypeEnum("mt_media"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>(TypeEnum.class, TypeEnum::new, Arrays.asList(MT_MEDIA)); + + private TypeEnum(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static TypeEnum from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(TypeEnum e) { + return ENUM_SUPPORT.valueOf(e); + } + } + + /** + * Get deliveryReport + * + * @return deliveryReport + */ + DeliveryReportType getDeliveryReport(); + + /** + * If set in the future, the message will be delayed until send_at occurs. Must be + * before expire_at. If set in the past, messages will be sent immediately. Formatted + * as ISO-8601: + * YYYY-MM-DDThh:mm:ss.SSSZ. + * + * @return sendAt + */ + Instant getSendAt(); + + /** + * If set, the system will stop trying to deliver the message at this point. Must be after + * send_at. Default and max is 3 days after send_at. Formatted as ISO-8601: YYYY-MM-DDThh:mm:ss.SSSZ + * . + * + * @return expireAt + */ + Instant getExpireAt(); + + /** + * Override the default callback URL for this batch. Must be valid URL. + * + * @return callbackUrl + */ + String getCallbackUrl(); + + /** + * The client identifier of a batch message. If set, the identifier will be added in the delivery + * report/callback of this batch + * + * @return clientReference + */ + String getClientReference(); + + /** + * If set to true, then feedback + * is expected after successful delivery. + * + * @return feedbackEnabled + */ + Boolean getFeedbackEnabled(); + + /** + * Whether or not you want the media included in your message to be checked against Sinch MMS channel best practices. If set to true, your + * message will be rejected if it doesn't conform to the listed recommendations, otherwise no + * validation will be performed. + * + * @return strictValidation + */ + Boolean getStrictValidation(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new MediaRequestImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param to see getter + * @return Current builder + * @see #getTo + */ + Builder setTo(List to); + + /** + * see getter + * + * @param from see getter + * @return Current builder + * @see #getFrom + */ + Builder setFrom(String from); + + /** + * see getter + * + * @param body see getter + * @return Current builder + * @see #getBody + */ + Builder setBody(MediaBody body); + + /** + * see getter + * + * @param parameters see getter + * @return Current builder + * @see #getParameters + */ + Builder setParameters(Map> parameters); + + /** + * see getter + * + * @param deliveryReport see getter + * @return Current builder + * @see #getDeliveryReport + */ + Builder setDeliveryReport(DeliveryReportType deliveryReport); + + /** + * see getter + * + * @param sendAt see getter + * @return Current builder + * @see #getSendAt + */ + Builder setSendAt(Instant sendAt); + + /** + * see getter + * + * @param expireAt see getter + * @return Current builder + * @see #getExpireAt + */ + Builder setExpireAt(Instant expireAt); + + /** + * see getter + * + * @param callbackUrl see getter + * @return Current builder + * @see #getCallbackUrl + */ + Builder setCallbackUrl(String callbackUrl); + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * see getter + * + * @param feedbackEnabled see getter + * @return Current builder + * @see #getFeedbackEnabled + */ + Builder setFeedbackEnabled(Boolean feedbackEnabled); + + /** + * see getter + * + * @param strictValidation see getter + * @return Current builder + * @see #getStrictValidation + */ + Builder setStrictValidation(Boolean strictValidation); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + MediaRequest build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/MediaRequestImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/MediaRequestImpl.java new file mode 100644 index 000000000..227379256 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/MediaRequestImpl.java @@ -0,0 +1,413 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import com.sinch.sdk.domains.sms.models.v1.batches.MediaBody; +import java.time.Instant; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@JsonPropertyOrder({ + MediaRequestImpl.JSON_PROPERTY_TO, + MediaRequestImpl.JSON_PROPERTY_FROM, + MediaRequestImpl.JSON_PROPERTY_BODY, + MediaRequestImpl.JSON_PROPERTY_PARAMETERS, + MediaRequestImpl.JSON_PROPERTY_TYPE, + MediaRequestImpl.JSON_PROPERTY_DELIVERY_REPORT, + MediaRequestImpl.JSON_PROPERTY_SEND_AT, + MediaRequestImpl.JSON_PROPERTY_EXPIRE_AT, + MediaRequestImpl.JSON_PROPERTY_CALLBACK_URL, + MediaRequestImpl.JSON_PROPERTY_CLIENT_REFERENCE, + MediaRequestImpl.JSON_PROPERTY_FEEDBACK_ENABLED, + MediaRequestImpl.JSON_PROPERTY_STRICT_VALIDATION +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class MediaRequestImpl implements MediaRequest, BatchRequest { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_TO = "to"; + + private OptionalValue> to; + + public static final String JSON_PROPERTY_FROM = "from"; + + private OptionalValue from; + + public static final String JSON_PROPERTY_BODY = "body"; + + private OptionalValue body; + + public static final String JSON_PROPERTY_PARAMETERS = "parameters"; + + private OptionalValue>> parameters; + + public static final String JSON_PROPERTY_TYPE = "type"; + + private OptionalValue type; + + public static final String JSON_PROPERTY_DELIVERY_REPORT = "delivery_report"; + + private OptionalValue deliveryReport; + + public static final String JSON_PROPERTY_SEND_AT = "send_at"; + + private OptionalValue sendAt; + + public static final String JSON_PROPERTY_EXPIRE_AT = "expire_at"; + + private OptionalValue expireAt; + + public static final String JSON_PROPERTY_CALLBACK_URL = "callback_url"; + + private OptionalValue callbackUrl; + + public static final String JSON_PROPERTY_CLIENT_REFERENCE = "client_reference"; + + private OptionalValue clientReference; + + public static final String JSON_PROPERTY_FEEDBACK_ENABLED = "feedback_enabled"; + + private OptionalValue feedbackEnabled; + + public static final String JSON_PROPERTY_STRICT_VALIDATION = "strict_validation"; + + private OptionalValue strictValidation; + + public MediaRequestImpl() {} + + protected MediaRequestImpl( + OptionalValue> to, + OptionalValue from, + OptionalValue body, + OptionalValue>> parameters, + OptionalValue type, + OptionalValue deliveryReport, + OptionalValue sendAt, + OptionalValue expireAt, + OptionalValue callbackUrl, + OptionalValue clientReference, + OptionalValue feedbackEnabled, + OptionalValue strictValidation) { + this.to = to; + this.from = from; + this.body = body; + this.parameters = parameters; + this.type = type; + this.deliveryReport = deliveryReport; + this.sendAt = sendAt; + this.expireAt = expireAt; + this.callbackUrl = callbackUrl; + this.clientReference = clientReference; + this.feedbackEnabled = feedbackEnabled; + this.strictValidation = strictValidation; + } + + @JsonIgnore + public List getTo() { + return to.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TO) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue> to() { + return to; + } + + @JsonIgnore + public String getFrom() { + return from.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue from() { + return from; + } + + @JsonIgnore + public MediaBody getBody() { + return body.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_BODY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue body() { + return body; + } + + @JsonIgnore + public Map> getParameters() { + return parameters.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_PARAMETERS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue>> parameters() { + return parameters; + } + + @JsonIgnore + public TypeEnum getType() { + return type.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue type() { + return type; + } + + @JsonIgnore + public DeliveryReportType getDeliveryReport() { + return deliveryReport.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue deliveryReport() { + return deliveryReport; + } + + @JsonIgnore + public Instant getSendAt() { + return sendAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue sendAt() { + return sendAt; + } + + @JsonIgnore + public Instant getExpireAt() { + return expireAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue expireAt() { + return expireAt; + } + + @JsonIgnore + public String getCallbackUrl() { + return callbackUrl.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue callbackUrl() { + return callbackUrl; + } + + @JsonIgnore + public String getClientReference() { + return clientReference.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue clientReference() { + return clientReference; + } + + @JsonIgnore + public Boolean getFeedbackEnabled() { + return feedbackEnabled.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue feedbackEnabled() { + return feedbackEnabled; + } + + @JsonIgnore + public Boolean getStrictValidation() { + return strictValidation.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_STRICT_VALIDATION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue strictValidation() { + return strictValidation; + } + + /** Return true if this MediaRequest object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MediaRequestImpl mediaRequest = (MediaRequestImpl) o; + return Objects.equals(this.to, mediaRequest.to) + && Objects.equals(this.from, mediaRequest.from) + && Objects.equals(this.body, mediaRequest.body) + && Objects.equals(this.parameters, mediaRequest.parameters) + && Objects.equals(this.type, mediaRequest.type) + && Objects.equals(this.deliveryReport, mediaRequest.deliveryReport) + && Objects.equals(this.sendAt, mediaRequest.sendAt) + && Objects.equals(this.expireAt, mediaRequest.expireAt) + && Objects.equals(this.callbackUrl, mediaRequest.callbackUrl) + && Objects.equals(this.clientReference, mediaRequest.clientReference) + && Objects.equals(this.feedbackEnabled, mediaRequest.feedbackEnabled) + && Objects.equals(this.strictValidation, mediaRequest.strictValidation); + } + + @Override + public int hashCode() { + return Objects.hash( + to, + from, + body, + parameters, + type, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + strictValidation); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class MediaRequestImpl {\n"); + sb.append(" to: ").append(toIndentedString(to)).append("\n"); + sb.append(" from: ").append(toIndentedString(from)).append("\n"); + sb.append(" body: ").append(toIndentedString(body)).append("\n"); + sb.append(" parameters: ").append(toIndentedString(parameters)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" deliveryReport: ").append(toIndentedString(deliveryReport)).append("\n"); + sb.append(" sendAt: ").append(toIndentedString(sendAt)).append("\n"); + sb.append(" expireAt: ").append(toIndentedString(expireAt)).append("\n"); + sb.append(" callbackUrl: ").append(toIndentedString(callbackUrl)).append("\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append(" feedbackEnabled: ").append(toIndentedString(feedbackEnabled)).append("\n"); + sb.append(" strictValidation: ").append(toIndentedString(strictValidation)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements MediaRequest.Builder { + OptionalValue> to = OptionalValue.empty(); + OptionalValue from = OptionalValue.empty(); + OptionalValue body = OptionalValue.empty(); + OptionalValue>> parameters = OptionalValue.empty(); + OptionalValue type = OptionalValue.of(TypeEnum.MT_MEDIA); + OptionalValue deliveryReport = OptionalValue.empty(); + OptionalValue sendAt = OptionalValue.empty(); + OptionalValue expireAt = OptionalValue.empty(); + OptionalValue callbackUrl = OptionalValue.empty(); + OptionalValue clientReference = OptionalValue.empty(); + OptionalValue feedbackEnabled = OptionalValue.empty(); + OptionalValue strictValidation = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_TO) + public Builder setTo(List to) { + this.to = OptionalValue.of(to); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM) + public Builder setFrom(String from) { + this.from = OptionalValue.of(from); + return this; + } + + @JsonProperty(JSON_PROPERTY_BODY) + public Builder setBody(MediaBody body) { + this.body = OptionalValue.of(body); + return this; + } + + @JsonProperty(JSON_PROPERTY_PARAMETERS) + public Builder setParameters(Map> parameters) { + this.parameters = OptionalValue.of(parameters); + return this; + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + public Builder setDeliveryReport(DeliveryReportType deliveryReport) { + this.deliveryReport = OptionalValue.of(deliveryReport); + return this; + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + public Builder setSendAt(Instant sendAt) { + this.sendAt = OptionalValue.of(sendAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + public Builder setExpireAt(Instant expireAt) { + this.expireAt = OptionalValue.of(expireAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + public Builder setCallbackUrl(String callbackUrl) { + this.callbackUrl = OptionalValue.of(callbackUrl); + return this; + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + public Builder setFeedbackEnabled(Boolean feedbackEnabled) { + this.feedbackEnabled = OptionalValue.of(feedbackEnabled); + return this; + } + + @JsonProperty(JSON_PROPERTY_STRICT_VALIDATION) + public Builder setStrictValidation(Boolean strictValidation) { + this.strictValidation = OptionalValue.of(strictValidation); + return this; + } + + public MediaRequest build() { + return new MediaRequestImpl( + to, + from, + body, + parameters, + type, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + strictValidation); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/SendDeliveryFeedbackRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/SendDeliveryFeedbackRequest.java new file mode 100644 index 000000000..809c98a80 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/SendDeliveryFeedbackRequest.java @@ -0,0 +1,57 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import java.util.List; + +/** SendDeliveryFeedbackRequest */ +@JsonDeserialize(builder = SendDeliveryFeedbackRequestImpl.Builder.class) +public interface SendDeliveryFeedbackRequest { + + /** + * A list of phone numbers (MSISDNs) that have successfully received the message. The key is + * required, however, the value can be an empty array ([]) for a batch. If + * the feedback was enabled for a group, at least one phone number is required. + * + * @return recipients + */ + List getRecipients(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new SendDeliveryFeedbackRequestImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param recipients see getter + * @return Current builder + * @see #getRecipients + */ + Builder setRecipients(List recipients); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + SendDeliveryFeedbackRequest build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/SendDeliveryFeedbackRequestImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/SendDeliveryFeedbackRequestImpl.java new file mode 100644 index 000000000..e9db52653 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/SendDeliveryFeedbackRequestImpl.java @@ -0,0 +1,91 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.util.List; +import java.util.Objects; + +@JsonPropertyOrder({SendDeliveryFeedbackRequestImpl.JSON_PROPERTY_RECIPIENTS}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class SendDeliveryFeedbackRequestImpl implements SendDeliveryFeedbackRequest { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_RECIPIENTS = "recipients"; + + private OptionalValue> recipients; + + public SendDeliveryFeedbackRequestImpl() {} + + protected SendDeliveryFeedbackRequestImpl(OptionalValue> recipients) { + this.recipients = recipients; + } + + @JsonIgnore + public List getRecipients() { + return recipients.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_RECIPIENTS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue> recipients() { + return recipients; + } + + /** Return true if this ApiDeliveryFeedback object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + SendDeliveryFeedbackRequestImpl apiDeliveryFeedback = (SendDeliveryFeedbackRequestImpl) o; + return Objects.equals(this.recipients, apiDeliveryFeedback.recipients); + } + + @Override + public int hashCode() { + return Objects.hash(recipients); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class SendDeliveryFeedbackRequestImpl {\n"); + sb.append(" recipients: ").append(toIndentedString(recipients)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements SendDeliveryFeedbackRequest.Builder { + OptionalValue> recipients = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_RECIPIENTS) + public Builder setRecipients(List recipients) { + this.recipients = OptionalValue.of(recipients); + return this; + } + + public SendDeliveryFeedbackRequest build() { + return new SendDeliveryFeedbackRequestImpl(recipients); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/TextRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/TextRequest.java new file mode 100644 index 000000000..207d0746a --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/TextRequest.java @@ -0,0 +1,332 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import java.time.Instant; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +/** TextRequest */ +@JsonDeserialize(builder = TextRequestImpl.Builder.class) +public interface TextRequest extends BatchRequest { + + /** + * List of Phone numbers and group IDs that will receive the batch. More info + * + * @return to + */ + List getTo(); + + /** + * Sender number. Must be valid phone number, short code or alphanumeric. Required if Automatic + * Default Originator not configured. + * + * @return from + */ + String getFrom(); + + /** + * Contains the parameters that will be used for customizing the message for each recipient. Click here to learn more about + * parameterization. + * + * @return parameters + */ + Map> getParameters(); + + /** + * The message content + * + * @return body + */ + String getBody(); + + /** Regular SMS */ + public class TypeEnum extends EnumDynamic { + public static final TypeEnum MT_TEXT = new TypeEnum("mt_text"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>(TypeEnum.class, TypeEnum::new, Arrays.asList(MT_TEXT)); + + private TypeEnum(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static TypeEnum from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(TypeEnum e) { + return ENUM_SUPPORT.valueOf(e); + } + } + + /** + * Get deliveryReport + * + * @return deliveryReport + */ + DeliveryReportType getDeliveryReport(); + + /** + * If set in the future, the message will be delayed until send_at occurs. Must be + * before expire_at. If set in the past, messages will be sent immediately. Formatted + * as ISO-8601: + * YYYY-MM-DDThh:mm:ss.SSSZ. + * + * @return sendAt + */ + Instant getSendAt(); + + /** + * If set, the system will stop trying to deliver the message at this point. Must be after + * send_at. Default and max is 3 days after send_at. Formatted as ISO-8601: YYYY-MM-DDThh:mm:ss.SSSZ + * . + * + * @return expireAt + */ + Instant getExpireAt(); + + /** + * Override the default callback URL for this batch. Must be a valid URL. Learn how to + * set a default callback URL here. + * + * @return callbackUrl + */ + String getCallbackUrl(); + + /** + * The client identifier of a batch message. If set, the identifier will be added in the delivery + * report/callback of this batch + * + * @return clientReference + */ + String getClientReference(); + + /** + * If set to true, then feedback + * is expected after successful delivery. + * + * @return feedbackEnabled + */ + Boolean getFeedbackEnabled(); + + /** + * Shows message on screen without user interaction while not saving the message to the inbox. + * + * @return flashMessage + */ + Boolean getFlashMessage(); + + /** + * If set to true the message will be shortened when exceeding one part. + * + * @return truncateConcat + */ + Boolean getTruncateConcat(); + + /** + * Message will be dispatched only if it is not split to more parts than Max Number of Message + * Parts + * + *

minimum: 1 + * + * @return maxNumberOfMessageParts + */ + Integer getMaxNumberOfMessageParts(); + + /** + * The type of number for the sender number. Use to override the automatic detection. + * + *

minimum: 0 maximum: 6 + * + * @return fromTon + */ + Integer getFromTon(); + + /** + * Number Plan Indicator for the sender number. Use to override the automatic detection. + * + *

minimum: 0 maximum: 18 + * + * @return fromNpi + */ + Integer getFromNpi(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new TextRequestImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param to see getter + * @return Current builder + * @see #getTo + */ + Builder setTo(List to); + + /** + * see getter + * + * @param from see getter + * @return Current builder + * @see #getFrom + */ + Builder setFrom(String from); + + /** + * see getter + * + * @param parameters see getter + * @return Current builder + * @see #getParameters + */ + Builder setParameters(Map> parameters); + + /** + * see getter + * + * @param body see getter + * @return Current builder + * @see #getBody + */ + Builder setBody(String body); + + /** + * see getter + * + * @param deliveryReport see getter + * @return Current builder + * @see #getDeliveryReport + */ + Builder setDeliveryReport(DeliveryReportType deliveryReport); + + /** + * see getter + * + * @param sendAt see getter + * @return Current builder + * @see #getSendAt + */ + Builder setSendAt(Instant sendAt); + + /** + * see getter + * + * @param expireAt see getter + * @return Current builder + * @see #getExpireAt + */ + Builder setExpireAt(Instant expireAt); + + /** + * see getter + * + * @param callbackUrl see getter + * @return Current builder + * @see #getCallbackUrl + */ + Builder setCallbackUrl(String callbackUrl); + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * see getter + * + * @param feedbackEnabled see getter + * @return Current builder + * @see #getFeedbackEnabled + */ + Builder setFeedbackEnabled(Boolean feedbackEnabled); + + /** + * see getter + * + * @param flashMessage see getter + * @return Current builder + * @see #getFlashMessage + */ + Builder setFlashMessage(Boolean flashMessage); + + /** + * see getter + * + * @param truncateConcat see getter + * @return Current builder + * @see #getTruncateConcat + */ + Builder setTruncateConcat(Boolean truncateConcat); + + /** + * see getter + * + * @param maxNumberOfMessageParts see getter + * @return Current builder + * @see #getMaxNumberOfMessageParts + */ + Builder setMaxNumberOfMessageParts(Integer maxNumberOfMessageParts); + + /** + * see getter + * + * @param fromTon see getter + * @return Current builder + * @see #getFromTon + */ + Builder setFromTon(Integer fromTon); + + /** + * see getter + * + * @param fromNpi see getter + * @return Current builder + * @see #getFromNpi + */ + Builder setFromNpi(Integer fromNpi); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + TextRequest build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/TextRequestImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/TextRequestImpl.java new file mode 100644 index 000000000..1cc714f5a --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/TextRequestImpl.java @@ -0,0 +1,531 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import java.time.Instant; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@JsonPropertyOrder({ + TextRequestImpl.JSON_PROPERTY_TO, + TextRequestImpl.JSON_PROPERTY_FROM, + TextRequestImpl.JSON_PROPERTY_PARAMETERS, + TextRequestImpl.JSON_PROPERTY_BODY, + TextRequestImpl.JSON_PROPERTY_TYPE, + TextRequestImpl.JSON_PROPERTY_DELIVERY_REPORT, + TextRequestImpl.JSON_PROPERTY_SEND_AT, + TextRequestImpl.JSON_PROPERTY_EXPIRE_AT, + TextRequestImpl.JSON_PROPERTY_CALLBACK_URL, + TextRequestImpl.JSON_PROPERTY_CLIENT_REFERENCE, + TextRequestImpl.JSON_PROPERTY_FEEDBACK_ENABLED, + TextRequestImpl.JSON_PROPERTY_FLASH_MESSAGE, + TextRequestImpl.JSON_PROPERTY_TRUNCATE_CONCAT, + TextRequestImpl.JSON_PROPERTY_MAX_NUMBER_OF_MESSAGE_PARTS, + TextRequestImpl.JSON_PROPERTY_FROM_TON, + TextRequestImpl.JSON_PROPERTY_FROM_NPI +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class TextRequestImpl implements TextRequest, BatchRequest { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_TO = "to"; + + private OptionalValue> to; + + public static final String JSON_PROPERTY_FROM = "from"; + + private OptionalValue from; + + public static final String JSON_PROPERTY_PARAMETERS = "parameters"; + + private OptionalValue>> parameters; + + public static final String JSON_PROPERTY_BODY = "body"; + + private OptionalValue body; + + public static final String JSON_PROPERTY_TYPE = "type"; + + private OptionalValue type; + + public static final String JSON_PROPERTY_DELIVERY_REPORT = "delivery_report"; + + private OptionalValue deliveryReport; + + public static final String JSON_PROPERTY_SEND_AT = "send_at"; + + private OptionalValue sendAt; + + public static final String JSON_PROPERTY_EXPIRE_AT = "expire_at"; + + private OptionalValue expireAt; + + public static final String JSON_PROPERTY_CALLBACK_URL = "callback_url"; + + private OptionalValue callbackUrl; + + public static final String JSON_PROPERTY_CLIENT_REFERENCE = "client_reference"; + + private OptionalValue clientReference; + + public static final String JSON_PROPERTY_FEEDBACK_ENABLED = "feedback_enabled"; + + private OptionalValue feedbackEnabled; + + public static final String JSON_PROPERTY_FLASH_MESSAGE = "flash_message"; + + private OptionalValue flashMessage; + + public static final String JSON_PROPERTY_TRUNCATE_CONCAT = "truncate_concat"; + + private OptionalValue truncateConcat; + + public static final String JSON_PROPERTY_MAX_NUMBER_OF_MESSAGE_PARTS = + "max_number_of_message_parts"; + + private OptionalValue maxNumberOfMessageParts; + + public static final String JSON_PROPERTY_FROM_TON = "from_ton"; + + private OptionalValue fromTon; + + public static final String JSON_PROPERTY_FROM_NPI = "from_npi"; + + private OptionalValue fromNpi; + + public TextRequestImpl() {} + + protected TextRequestImpl( + OptionalValue> to, + OptionalValue from, + OptionalValue>> parameters, + OptionalValue body, + OptionalValue type, + OptionalValue deliveryReport, + OptionalValue sendAt, + OptionalValue expireAt, + OptionalValue callbackUrl, + OptionalValue clientReference, + OptionalValue feedbackEnabled, + OptionalValue flashMessage, + OptionalValue truncateConcat, + OptionalValue maxNumberOfMessageParts, + OptionalValue fromTon, + OptionalValue fromNpi) { + this.to = to; + this.from = from; + this.parameters = parameters; + this.body = body; + this.type = type; + this.deliveryReport = deliveryReport; + this.sendAt = sendAt; + this.expireAt = expireAt; + this.callbackUrl = callbackUrl; + this.clientReference = clientReference; + this.feedbackEnabled = feedbackEnabled; + this.flashMessage = flashMessage; + this.truncateConcat = truncateConcat; + this.maxNumberOfMessageParts = maxNumberOfMessageParts; + this.fromTon = fromTon; + this.fromNpi = fromNpi; + } + + @JsonIgnore + public List getTo() { + return to.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TO) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue> to() { + return to; + } + + @JsonIgnore + public String getFrom() { + return from.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue from() { + return from; + } + + @JsonIgnore + public Map> getParameters() { + return parameters.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_PARAMETERS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue>> parameters() { + return parameters; + } + + @JsonIgnore + public String getBody() { + return body.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_BODY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue body() { + return body; + } + + @JsonIgnore + public TypeEnum getType() { + return type.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue type() { + return type; + } + + @JsonIgnore + public DeliveryReportType getDeliveryReport() { + return deliveryReport.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue deliveryReport() { + return deliveryReport; + } + + @JsonIgnore + public Instant getSendAt() { + return sendAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue sendAt() { + return sendAt; + } + + @JsonIgnore + public Instant getExpireAt() { + return expireAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue expireAt() { + return expireAt; + } + + @JsonIgnore + public String getCallbackUrl() { + return callbackUrl.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue callbackUrl() { + return callbackUrl; + } + + @JsonIgnore + public String getClientReference() { + return clientReference.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue clientReference() { + return clientReference; + } + + @JsonIgnore + public Boolean getFeedbackEnabled() { + return feedbackEnabled.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue feedbackEnabled() { + return feedbackEnabled; + } + + @JsonIgnore + public Boolean getFlashMessage() { + return flashMessage.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FLASH_MESSAGE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue flashMessage() { + return flashMessage; + } + + @JsonIgnore + public Boolean getTruncateConcat() { + return truncateConcat.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TRUNCATE_CONCAT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue truncateConcat() { + return truncateConcat; + } + + @JsonIgnore + public Integer getMaxNumberOfMessageParts() { + return maxNumberOfMessageParts.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_MAX_NUMBER_OF_MESSAGE_PARTS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue maxNumberOfMessageParts() { + return maxNumberOfMessageParts; + } + + @JsonIgnore + public Integer getFromTon() { + return fromTon.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM_TON) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue fromTon() { + return fromTon; + } + + @JsonIgnore + public Integer getFromNpi() { + return fromNpi.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM_NPI) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue fromNpi() { + return fromNpi; + } + + /** Return true if this TextRequest object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TextRequestImpl textRequest = (TextRequestImpl) o; + return Objects.equals(this.to, textRequest.to) + && Objects.equals(this.from, textRequest.from) + && Objects.equals(this.parameters, textRequest.parameters) + && Objects.equals(this.body, textRequest.body) + && Objects.equals(this.type, textRequest.type) + && Objects.equals(this.deliveryReport, textRequest.deliveryReport) + && Objects.equals(this.sendAt, textRequest.sendAt) + && Objects.equals(this.expireAt, textRequest.expireAt) + && Objects.equals(this.callbackUrl, textRequest.callbackUrl) + && Objects.equals(this.clientReference, textRequest.clientReference) + && Objects.equals(this.feedbackEnabled, textRequest.feedbackEnabled) + && Objects.equals(this.flashMessage, textRequest.flashMessage) + && Objects.equals(this.truncateConcat, textRequest.truncateConcat) + && Objects.equals(this.maxNumberOfMessageParts, textRequest.maxNumberOfMessageParts) + && Objects.equals(this.fromTon, textRequest.fromTon) + && Objects.equals(this.fromNpi, textRequest.fromNpi); + } + + @Override + public int hashCode() { + return Objects.hash( + to, + from, + parameters, + body, + type, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + flashMessage, + truncateConcat, + maxNumberOfMessageParts, + fromTon, + fromNpi); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TextRequestImpl {\n"); + sb.append(" to: ").append(toIndentedString(to)).append("\n"); + sb.append(" from: ").append(toIndentedString(from)).append("\n"); + sb.append(" parameters: ").append(toIndentedString(parameters)).append("\n"); + sb.append(" body: ").append(toIndentedString(body)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" deliveryReport: ").append(toIndentedString(deliveryReport)).append("\n"); + sb.append(" sendAt: ").append(toIndentedString(sendAt)).append("\n"); + sb.append(" expireAt: ").append(toIndentedString(expireAt)).append("\n"); + sb.append(" callbackUrl: ").append(toIndentedString(callbackUrl)).append("\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append(" feedbackEnabled: ").append(toIndentedString(feedbackEnabled)).append("\n"); + sb.append(" flashMessage: ").append(toIndentedString(flashMessage)).append("\n"); + sb.append(" truncateConcat: ").append(toIndentedString(truncateConcat)).append("\n"); + sb.append(" maxNumberOfMessageParts: ") + .append(toIndentedString(maxNumberOfMessageParts)) + .append("\n"); + sb.append(" fromTon: ").append(toIndentedString(fromTon)).append("\n"); + sb.append(" fromNpi: ").append(toIndentedString(fromNpi)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements TextRequest.Builder { + OptionalValue> to = OptionalValue.empty(); + OptionalValue from = OptionalValue.empty(); + OptionalValue>> parameters = OptionalValue.empty(); + OptionalValue body = OptionalValue.empty(); + OptionalValue type = OptionalValue.of(TypeEnum.MT_TEXT); + OptionalValue deliveryReport = OptionalValue.empty(); + OptionalValue sendAt = OptionalValue.empty(); + OptionalValue expireAt = OptionalValue.empty(); + OptionalValue callbackUrl = OptionalValue.empty(); + OptionalValue clientReference = OptionalValue.empty(); + OptionalValue feedbackEnabled = OptionalValue.empty(); + OptionalValue flashMessage = OptionalValue.empty(); + OptionalValue truncateConcat = OptionalValue.empty(); + OptionalValue maxNumberOfMessageParts = OptionalValue.empty(); + OptionalValue fromTon = OptionalValue.empty(); + OptionalValue fromNpi = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_TO) + public Builder setTo(List to) { + this.to = OptionalValue.of(to); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM) + public Builder setFrom(String from) { + this.from = OptionalValue.of(from); + return this; + } + + @JsonProperty(JSON_PROPERTY_PARAMETERS) + public Builder setParameters(Map> parameters) { + this.parameters = OptionalValue.of(parameters); + return this; + } + + @JsonProperty(JSON_PROPERTY_BODY) + public Builder setBody(String body) { + this.body = OptionalValue.of(body); + return this; + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + public Builder setDeliveryReport(DeliveryReportType deliveryReport) { + this.deliveryReport = OptionalValue.of(deliveryReport); + return this; + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + public Builder setSendAt(Instant sendAt) { + this.sendAt = OptionalValue.of(sendAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + public Builder setExpireAt(Instant expireAt) { + this.expireAt = OptionalValue.of(expireAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + public Builder setCallbackUrl(String callbackUrl) { + this.callbackUrl = OptionalValue.of(callbackUrl); + return this; + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + public Builder setFeedbackEnabled(Boolean feedbackEnabled) { + this.feedbackEnabled = OptionalValue.of(feedbackEnabled); + return this; + } + + @JsonProperty(JSON_PROPERTY_FLASH_MESSAGE) + public Builder setFlashMessage(Boolean flashMessage) { + this.flashMessage = OptionalValue.of(flashMessage); + return this; + } + + @JsonProperty(JSON_PROPERTY_TRUNCATE_CONCAT) + public Builder setTruncateConcat(Boolean truncateConcat) { + this.truncateConcat = OptionalValue.of(truncateConcat); + return this; + } + + @JsonProperty(JSON_PROPERTY_MAX_NUMBER_OF_MESSAGE_PARTS) + public Builder setMaxNumberOfMessageParts(Integer maxNumberOfMessageParts) { + this.maxNumberOfMessageParts = OptionalValue.of(maxNumberOfMessageParts); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM_TON) + public Builder setFromTon(Integer fromTon) { + this.fromTon = OptionalValue.of(fromTon); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM_NPI) + public Builder setFromNpi(Integer fromNpi) { + this.fromNpi = OptionalValue.of(fromNpi); + return this; + } + + public TextRequest build() { + return new TextRequestImpl( + to, + from, + parameters, + body, + type, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + flashMessage, + truncateConcat, + maxNumberOfMessageParts, + fromTon, + fromNpi); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateBinaryRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateBinaryRequest.java new file mode 100644 index 000000000..2db7675a9 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateBinaryRequest.java @@ -0,0 +1,291 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import java.time.Instant; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +/** Update binary message */ +@JsonDeserialize(builder = UpdateBinaryRequestImpl.Builder.class) +public interface UpdateBinaryRequest extends UpdateBatchRequest { + + /** + * Sender number. Must be valid phone number, short code or alphanumeric. + * + * @return from + */ + String getFrom(); + + /** + * SMS in binary + * format. + */ + public class TypeEnum extends EnumDynamic { + public static final TypeEnum MT_BINARY = new TypeEnum("mt_binary"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>(TypeEnum.class, TypeEnum::new, Arrays.asList(MT_BINARY)); + + private TypeEnum(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static TypeEnum from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(TypeEnum e) { + return ENUM_SUPPORT.valueOf(e); + } + } + + /** + * List of phone numbers and group IDs to add to the batch. + * + * @return toAdd + */ + List getToAdd(); + + /** + * List of phone numbers and group IDs to remove from the batch. + * + * @return toRemove + */ + List getToRemove(); + + /** + * Get deliveryReport + * + * @return deliveryReport + */ + DeliveryReportType getDeliveryReport(); + + /** + * If set, in the future the message will be delayed until send_at occurs. Formatted + * as ISO-8601: + * YYYY-MM-DDThh:mm:ss.SSSZ. Constraints: Must be before expire_at. If set in the past, + * messages will be sent immediately. + * + * @return sendAt + */ + Instant getSendAt(); + + /** + * If set, the system will stop trying to deliver the message at this point. Constraints: Must be + * after send_at Default: 3 days after send_at + * + * @return expireAt + */ + Instant getExpireAt(); + + /** + * Override the default callback URL for this batch. Constraints: Must be valid URL. + * + * @return callbackUrl + */ + String getCallbackUrl(); + + /** + * The client identifier of a batch message. If set, the identifier will be added in the delivery + * report/callback of this batch + * + * @return clientReference + */ + String getClientReference(); + + /** + * If set to true, then feedback + * is expected after successful delivery. + * + * @return feedbackEnabled + */ + Boolean getFeedbackEnabled(); + + /** + * The message content Base64 encoded. Max 140 bytes together with udh. + * + * @return body + */ + String getBody(); + + /** + * The UDH header of a binary message HEX encoded. Max 140 bytes together with body. + * + * @return udh + */ + String getUdh(); + + /** + * The type of number for the sender number. Use to override the automatic detection. + * + *

minimum: 0 maximum: 6 + * + * @return fromTon + */ + Integer getFromTon(); + + /** + * Number Plan Indicator for the sender number. Use to override the automatic detection. + * + *

minimum: 0 maximum: 18 + * + * @return fromNpi + */ + Integer getFromNpi(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new UpdateBinaryRequestImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param from see getter + * @return Current builder + * @see #getFrom + */ + Builder setFrom(String from); + + /** + * see getter + * + * @param toAdd see getter + * @return Current builder + * @see #getToAdd + */ + Builder setToAdd(List toAdd); + + /** + * see getter + * + * @param toRemove see getter + * @return Current builder + * @see #getToRemove + */ + Builder setToRemove(List toRemove); + + /** + * see getter + * + * @param deliveryReport see getter + * @return Current builder + * @see #getDeliveryReport + */ + Builder setDeliveryReport(DeliveryReportType deliveryReport); + + /** + * see getter + * + * @param sendAt see getter + * @return Current builder + * @see #getSendAt + */ + Builder setSendAt(Instant sendAt); + + /** + * see getter + * + * @param expireAt see getter + * @return Current builder + * @see #getExpireAt + */ + Builder setExpireAt(Instant expireAt); + + /** + * see getter + * + * @param callbackUrl see getter + * @return Current builder + * @see #getCallbackUrl + */ + Builder setCallbackUrl(String callbackUrl); + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * see getter + * + * @param feedbackEnabled see getter + * @return Current builder + * @see #getFeedbackEnabled + */ + Builder setFeedbackEnabled(Boolean feedbackEnabled); + + /** + * see getter + * + * @param body see getter + * @return Current builder + * @see #getBody + */ + Builder setBody(String body); + + /** + * see getter + * + * @param udh see getter + * @return Current builder + * @see #getUdh + */ + Builder setUdh(String udh); + + /** + * see getter + * + * @param fromTon see getter + * @return Current builder + * @see #getFromTon + */ + Builder setFromTon(Integer fromTon); + + /** + * see getter + * + * @param fromNpi see getter + * @return Current builder + * @see #getFromNpi + */ + Builder setFromNpi(Integer fromNpi); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + UpdateBinaryRequest build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateBinaryRequestImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateBinaryRequestImpl.java new file mode 100644 index 000000000..0366125d0 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateBinaryRequestImpl.java @@ -0,0 +1,469 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import java.time.Instant; +import java.util.List; +import java.util.Objects; + +@JsonPropertyOrder({ + UpdateBinaryRequestImpl.JSON_PROPERTY_FROM, + UpdateBinaryRequestImpl.JSON_PROPERTY_TYPE, + UpdateBinaryRequestImpl.JSON_PROPERTY_TO_ADD, + UpdateBinaryRequestImpl.JSON_PROPERTY_TO_REMOVE, + UpdateBinaryRequestImpl.JSON_PROPERTY_DELIVERY_REPORT, + UpdateBinaryRequestImpl.JSON_PROPERTY_SEND_AT, + UpdateBinaryRequestImpl.JSON_PROPERTY_EXPIRE_AT, + UpdateBinaryRequestImpl.JSON_PROPERTY_CALLBACK_URL, + UpdateBinaryRequestImpl.JSON_PROPERTY_CLIENT_REFERENCE, + UpdateBinaryRequestImpl.JSON_PROPERTY_FEEDBACK_ENABLED, + UpdateBinaryRequestImpl.JSON_PROPERTY_BODY, + UpdateBinaryRequestImpl.JSON_PROPERTY_UDH, + UpdateBinaryRequestImpl.JSON_PROPERTY_FROM_TON, + UpdateBinaryRequestImpl.JSON_PROPERTY_FROM_NPI +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class UpdateBinaryRequestImpl implements UpdateBinaryRequest, UpdateBatchRequest { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_FROM = "from"; + + private OptionalValue from; + + public static final String JSON_PROPERTY_TYPE = "type"; + + private OptionalValue type; + + public static final String JSON_PROPERTY_TO_ADD = "to_add"; + + private OptionalValue> toAdd; + + public static final String JSON_PROPERTY_TO_REMOVE = "to_remove"; + + private OptionalValue> toRemove; + + public static final String JSON_PROPERTY_DELIVERY_REPORT = "delivery_report"; + + private OptionalValue deliveryReport; + + public static final String JSON_PROPERTY_SEND_AT = "send_at"; + + private OptionalValue sendAt; + + public static final String JSON_PROPERTY_EXPIRE_AT = "expire_at"; + + private OptionalValue expireAt; + + public static final String JSON_PROPERTY_CALLBACK_URL = "callback_url"; + + private OptionalValue callbackUrl; + + public static final String JSON_PROPERTY_CLIENT_REFERENCE = "client_reference"; + + private OptionalValue clientReference; + + public static final String JSON_PROPERTY_FEEDBACK_ENABLED = "feedback_enabled"; + + private OptionalValue feedbackEnabled; + + public static final String JSON_PROPERTY_BODY = "body"; + + private OptionalValue body; + + public static final String JSON_PROPERTY_UDH = "udh"; + + private OptionalValue udh; + + public static final String JSON_PROPERTY_FROM_TON = "from_ton"; + + private OptionalValue fromTon; + + public static final String JSON_PROPERTY_FROM_NPI = "from_npi"; + + private OptionalValue fromNpi; + + public UpdateBinaryRequestImpl() {} + + protected UpdateBinaryRequestImpl( + OptionalValue from, + OptionalValue type, + OptionalValue> toAdd, + OptionalValue> toRemove, + OptionalValue deliveryReport, + OptionalValue sendAt, + OptionalValue expireAt, + OptionalValue callbackUrl, + OptionalValue clientReference, + OptionalValue feedbackEnabled, + OptionalValue body, + OptionalValue udh, + OptionalValue fromTon, + OptionalValue fromNpi) { + this.from = from; + this.type = type; + this.toAdd = toAdd; + this.toRemove = toRemove; + this.deliveryReport = deliveryReport; + this.sendAt = sendAt; + this.expireAt = expireAt; + this.callbackUrl = callbackUrl; + this.clientReference = clientReference; + this.feedbackEnabled = feedbackEnabled; + this.body = body; + this.udh = udh; + this.fromTon = fromTon; + this.fromNpi = fromNpi; + } + + @JsonIgnore + public String getFrom() { + return from.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue from() { + return from; + } + + @JsonIgnore + public TypeEnum getType() { + return type.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue type() { + return type; + } + + @JsonIgnore + public List getToAdd() { + return toAdd.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TO_ADD) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> toAdd() { + return toAdd; + } + + @JsonIgnore + public List getToRemove() { + return toRemove.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TO_REMOVE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> toRemove() { + return toRemove; + } + + @JsonIgnore + public DeliveryReportType getDeliveryReport() { + return deliveryReport.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue deliveryReport() { + return deliveryReport; + } + + @JsonIgnore + public Instant getSendAt() { + return sendAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue sendAt() { + return sendAt; + } + + @JsonIgnore + public Instant getExpireAt() { + return expireAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue expireAt() { + return expireAt; + } + + @JsonIgnore + public String getCallbackUrl() { + return callbackUrl.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue callbackUrl() { + return callbackUrl; + } + + @JsonIgnore + public String getClientReference() { + return clientReference.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue clientReference() { + return clientReference; + } + + @JsonIgnore + public Boolean getFeedbackEnabled() { + return feedbackEnabled.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue feedbackEnabled() { + return feedbackEnabled; + } + + @JsonIgnore + public String getBody() { + return body.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_BODY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue body() { + return body; + } + + @JsonIgnore + public String getUdh() { + return udh.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_UDH) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue udh() { + return udh; + } + + @JsonIgnore + public Integer getFromTon() { + return fromTon.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM_TON) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue fromTon() { + return fromTon; + } + + @JsonIgnore + public Integer getFromNpi() { + return fromNpi.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM_NPI) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue fromNpi() { + return fromNpi; + } + + /** Return true if this ApiUpdateBinaryMtMessage object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + UpdateBinaryRequestImpl apiUpdateBinaryMtMessage = (UpdateBinaryRequestImpl) o; + return Objects.equals(this.from, apiUpdateBinaryMtMessage.from) + && Objects.equals(this.type, apiUpdateBinaryMtMessage.type) + && Objects.equals(this.toAdd, apiUpdateBinaryMtMessage.toAdd) + && Objects.equals(this.toRemove, apiUpdateBinaryMtMessage.toRemove) + && Objects.equals(this.deliveryReport, apiUpdateBinaryMtMessage.deliveryReport) + && Objects.equals(this.sendAt, apiUpdateBinaryMtMessage.sendAt) + && Objects.equals(this.expireAt, apiUpdateBinaryMtMessage.expireAt) + && Objects.equals(this.callbackUrl, apiUpdateBinaryMtMessage.callbackUrl) + && Objects.equals(this.clientReference, apiUpdateBinaryMtMessage.clientReference) + && Objects.equals(this.feedbackEnabled, apiUpdateBinaryMtMessage.feedbackEnabled) + && Objects.equals(this.body, apiUpdateBinaryMtMessage.body) + && Objects.equals(this.udh, apiUpdateBinaryMtMessage.udh) + && Objects.equals(this.fromTon, apiUpdateBinaryMtMessage.fromTon) + && Objects.equals(this.fromNpi, apiUpdateBinaryMtMessage.fromNpi); + } + + @Override + public int hashCode() { + return Objects.hash( + from, + type, + toAdd, + toRemove, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + body, + udh, + fromTon, + fromNpi); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class UpdateBinaryRequestImpl {\n"); + sb.append(" from: ").append(toIndentedString(from)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" toAdd: ").append(toIndentedString(toAdd)).append("\n"); + sb.append(" toRemove: ").append(toIndentedString(toRemove)).append("\n"); + sb.append(" deliveryReport: ").append(toIndentedString(deliveryReport)).append("\n"); + sb.append(" sendAt: ").append(toIndentedString(sendAt)).append("\n"); + sb.append(" expireAt: ").append(toIndentedString(expireAt)).append("\n"); + sb.append(" callbackUrl: ").append(toIndentedString(callbackUrl)).append("\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append(" feedbackEnabled: ").append(toIndentedString(feedbackEnabled)).append("\n"); + sb.append(" body: ").append(toIndentedString(body)).append("\n"); + sb.append(" udh: ").append(toIndentedString(udh)).append("\n"); + sb.append(" fromTon: ").append(toIndentedString(fromTon)).append("\n"); + sb.append(" fromNpi: ").append(toIndentedString(fromNpi)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements UpdateBinaryRequest.Builder { + OptionalValue from = OptionalValue.empty(); + OptionalValue type = OptionalValue.of(TypeEnum.MT_BINARY); + OptionalValue> toAdd = OptionalValue.empty(); + OptionalValue> toRemove = OptionalValue.empty(); + OptionalValue deliveryReport = OptionalValue.empty(); + OptionalValue sendAt = OptionalValue.empty(); + OptionalValue expireAt = OptionalValue.empty(); + OptionalValue callbackUrl = OptionalValue.empty(); + OptionalValue clientReference = OptionalValue.empty(); + OptionalValue feedbackEnabled = OptionalValue.empty(); + OptionalValue body = OptionalValue.empty(); + OptionalValue udh = OptionalValue.empty(); + OptionalValue fromTon = OptionalValue.empty(); + OptionalValue fromNpi = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_FROM) + public Builder setFrom(String from) { + this.from = OptionalValue.of(from); + return this; + } + + @JsonProperty(JSON_PROPERTY_TO_ADD) + public Builder setToAdd(List toAdd) { + this.toAdd = OptionalValue.of(toAdd); + return this; + } + + @JsonProperty(JSON_PROPERTY_TO_REMOVE) + public Builder setToRemove(List toRemove) { + this.toRemove = OptionalValue.of(toRemove); + return this; + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + public Builder setDeliveryReport(DeliveryReportType deliveryReport) { + this.deliveryReport = OptionalValue.of(deliveryReport); + return this; + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + public Builder setSendAt(Instant sendAt) { + this.sendAt = OptionalValue.of(sendAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + public Builder setExpireAt(Instant expireAt) { + this.expireAt = OptionalValue.of(expireAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + public Builder setCallbackUrl(String callbackUrl) { + this.callbackUrl = OptionalValue.of(callbackUrl); + return this; + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + public Builder setFeedbackEnabled(Boolean feedbackEnabled) { + this.feedbackEnabled = OptionalValue.of(feedbackEnabled); + return this; + } + + @JsonProperty(JSON_PROPERTY_BODY) + public Builder setBody(String body) { + this.body = OptionalValue.of(body); + return this; + } + + @JsonProperty(JSON_PROPERTY_UDH) + public Builder setUdh(String udh) { + this.udh = OptionalValue.of(udh); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM_TON) + public Builder setFromTon(Integer fromTon) { + this.fromTon = OptionalValue.of(fromTon); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM_NPI) + public Builder setFromNpi(Integer fromNpi) { + this.fromNpi = OptionalValue.of(fromNpi); + return this; + } + + public UpdateBinaryRequest build() { + return new UpdateBinaryRequestImpl( + from, + type, + toAdd, + toRemove, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + body, + udh, + fromTon, + fromNpi); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateMediaRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateMediaRequest.java new file mode 100644 index 000000000..bf48b7482 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateMediaRequest.java @@ -0,0 +1,275 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import com.sinch.sdk.domains.sms.models.v1.batches.MediaBody; +import java.time.Instant; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +/** Update media message */ +@JsonDeserialize(builder = UpdateMediaRequestImpl.Builder.class) +public interface UpdateMediaRequest extends UpdateBatchRequest { + + /** + * Sender number. Must be valid phone number, short code or alphanumeric. + * + * @return from + */ + String getFrom(); + + /** MMS */ + public class TypeEnum extends EnumDynamic { + public static final TypeEnum MT_MEDIA = new TypeEnum("mt_media"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>(TypeEnum.class, TypeEnum::new, Arrays.asList(MT_MEDIA)); + + private TypeEnum(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static TypeEnum from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(TypeEnum e) { + return ENUM_SUPPORT.valueOf(e); + } + } + + /** + * List of phone numbers and group IDs to add to the batch. + * + * @return toAdd + */ + List getToAdd(); + + /** + * List of phone numbers and group IDs to remove from the batch. + * + * @return toRemove + */ + List getToRemove(); + + /** + * Get deliveryReport + * + * @return deliveryReport + */ + DeliveryReportType getDeliveryReport(); + + /** + * If set, in the future the message will be delayed until send_at occurs. Formatted + * as ISO-8601: + * YYYY-MM-DDThh:mm:ss.SSSZ. Constraints: Must be before expire_at. If set in the past, + * messages will be sent immediately. + * + * @return sendAt + */ + Instant getSendAt(); + + /** + * If set, the system will stop trying to deliver the message at this point. Constraints: Must be + * after send_at Default: 3 days after send_at + * + * @return expireAt + */ + Instant getExpireAt(); + + /** + * Override the default callback URL for this batch. Constraints: Must be valid URL. + * + * @return callbackUrl + */ + String getCallbackUrl(); + + /** + * The client identifier of a batch message. If set, the identifier will be added in the delivery + * report/callback of this batch + * + * @return clientReference + */ + String getClientReference(); + + /** + * If set to true, then feedback + * is expected after successful delivery. + * + * @return feedbackEnabled + */ + Boolean getFeedbackEnabled(); + + /** + * Get body + * + * @return body + */ + MediaBody getBody(); + + /** + * Contains the parameters that will be used for customizing the message for each recipient. Click here to learn more about + * parameterization. + * + * @return parameters + */ + Map> getParameters(); + + /** + * Whether or not you want the media included in your message to be checked against Sinch MMS channel best practices. If set to true, your + * message will be rejected if it doesn't conform to the listed recommendations, otherwise no + * validation will be performed. + * + * @return strictValidation + */ + Boolean getStrictValidation(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new UpdateMediaRequestImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param from see getter + * @return Current builder + * @see #getFrom + */ + Builder setFrom(String from); + + /** + * see getter + * + * @param toAdd see getter + * @return Current builder + * @see #getToAdd + */ + Builder setToAdd(List toAdd); + + /** + * see getter + * + * @param toRemove see getter + * @return Current builder + * @see #getToRemove + */ + Builder setToRemove(List toRemove); + + /** + * see getter + * + * @param deliveryReport see getter + * @return Current builder + * @see #getDeliveryReport + */ + Builder setDeliveryReport(DeliveryReportType deliveryReport); + + /** + * see getter + * + * @param sendAt see getter + * @return Current builder + * @see #getSendAt + */ + Builder setSendAt(Instant sendAt); + + /** + * see getter + * + * @param expireAt see getter + * @return Current builder + * @see #getExpireAt + */ + Builder setExpireAt(Instant expireAt); + + /** + * see getter + * + * @param callbackUrl see getter + * @return Current builder + * @see #getCallbackUrl + */ + Builder setCallbackUrl(String callbackUrl); + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * see getter + * + * @param feedbackEnabled see getter + * @return Current builder + * @see #getFeedbackEnabled + */ + Builder setFeedbackEnabled(Boolean feedbackEnabled); + + /** + * see getter + * + * @param body see getter + * @return Current builder + * @see #getBody + */ + Builder setBody(MediaBody body); + + /** + * see getter + * + * @param parameters see getter + * @return Current builder + * @see #getParameters + */ + Builder setParameters(Map> parameters); + + /** + * see getter + * + * @param strictValidation see getter + * @return Current builder + * @see #getStrictValidation + */ + Builder setStrictValidation(Boolean strictValidation); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + UpdateMediaRequest build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateMediaRequestImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateMediaRequestImpl.java new file mode 100644 index 000000000..f9a2ae49a --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateMediaRequestImpl.java @@ -0,0 +1,442 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import com.sinch.sdk.domains.sms.models.v1.batches.MediaBody; +import java.time.Instant; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@JsonPropertyOrder({ + UpdateMediaRequestImpl.JSON_PROPERTY_FROM, + UpdateMediaRequestImpl.JSON_PROPERTY_TYPE, + UpdateMediaRequestImpl.JSON_PROPERTY_TO_ADD, + UpdateMediaRequestImpl.JSON_PROPERTY_TO_REMOVE, + UpdateMediaRequestImpl.JSON_PROPERTY_DELIVERY_REPORT, + UpdateMediaRequestImpl.JSON_PROPERTY_SEND_AT, + UpdateMediaRequestImpl.JSON_PROPERTY_EXPIRE_AT, + UpdateMediaRequestImpl.JSON_PROPERTY_CALLBACK_URL, + UpdateMediaRequestImpl.JSON_PROPERTY_CLIENT_REFERENCE, + UpdateMediaRequestImpl.JSON_PROPERTY_FEEDBACK_ENABLED, + UpdateMediaRequestImpl.JSON_PROPERTY_BODY, + UpdateMediaRequestImpl.JSON_PROPERTY_PARAMETERS, + UpdateMediaRequestImpl.JSON_PROPERTY_STRICT_VALIDATION +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class UpdateMediaRequestImpl implements UpdateMediaRequest, UpdateBatchRequest { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_FROM = "from"; + + private OptionalValue from; + + public static final String JSON_PROPERTY_TYPE = "type"; + + private OptionalValue type; + + public static final String JSON_PROPERTY_TO_ADD = "to_add"; + + private OptionalValue> toAdd; + + public static final String JSON_PROPERTY_TO_REMOVE = "to_remove"; + + private OptionalValue> toRemove; + + public static final String JSON_PROPERTY_DELIVERY_REPORT = "delivery_report"; + + private OptionalValue deliveryReport; + + public static final String JSON_PROPERTY_SEND_AT = "send_at"; + + private OptionalValue sendAt; + + public static final String JSON_PROPERTY_EXPIRE_AT = "expire_at"; + + private OptionalValue expireAt; + + public static final String JSON_PROPERTY_CALLBACK_URL = "callback_url"; + + private OptionalValue callbackUrl; + + public static final String JSON_PROPERTY_CLIENT_REFERENCE = "client_reference"; + + private OptionalValue clientReference; + + public static final String JSON_PROPERTY_FEEDBACK_ENABLED = "feedback_enabled"; + + private OptionalValue feedbackEnabled; + + public static final String JSON_PROPERTY_BODY = "body"; + + private OptionalValue body; + + public static final String JSON_PROPERTY_PARAMETERS = "parameters"; + + private OptionalValue>> parameters; + + public static final String JSON_PROPERTY_STRICT_VALIDATION = "strict_validation"; + + private OptionalValue strictValidation; + + public UpdateMediaRequestImpl() {} + + protected UpdateMediaRequestImpl( + OptionalValue from, + OptionalValue type, + OptionalValue> toAdd, + OptionalValue> toRemove, + OptionalValue deliveryReport, + OptionalValue sendAt, + OptionalValue expireAt, + OptionalValue callbackUrl, + OptionalValue clientReference, + OptionalValue feedbackEnabled, + OptionalValue body, + OptionalValue>> parameters, + OptionalValue strictValidation) { + this.from = from; + this.type = type; + this.toAdd = toAdd; + this.toRemove = toRemove; + this.deliveryReport = deliveryReport; + this.sendAt = sendAt; + this.expireAt = expireAt; + this.callbackUrl = callbackUrl; + this.clientReference = clientReference; + this.feedbackEnabled = feedbackEnabled; + this.body = body; + this.parameters = parameters; + this.strictValidation = strictValidation; + } + + @JsonIgnore + public String getFrom() { + return from.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue from() { + return from; + } + + @JsonIgnore + public TypeEnum getType() { + return type.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue type() { + return type; + } + + @JsonIgnore + public List getToAdd() { + return toAdd.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TO_ADD) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> toAdd() { + return toAdd; + } + + @JsonIgnore + public List getToRemove() { + return toRemove.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TO_REMOVE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> toRemove() { + return toRemove; + } + + @JsonIgnore + public DeliveryReportType getDeliveryReport() { + return deliveryReport.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue deliveryReport() { + return deliveryReport; + } + + @JsonIgnore + public Instant getSendAt() { + return sendAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue sendAt() { + return sendAt; + } + + @JsonIgnore + public Instant getExpireAt() { + return expireAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue expireAt() { + return expireAt; + } + + @JsonIgnore + public String getCallbackUrl() { + return callbackUrl.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue callbackUrl() { + return callbackUrl; + } + + @JsonIgnore + public String getClientReference() { + return clientReference.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue clientReference() { + return clientReference; + } + + @JsonIgnore + public Boolean getFeedbackEnabled() { + return feedbackEnabled.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue feedbackEnabled() { + return feedbackEnabled; + } + + @JsonIgnore + public MediaBody getBody() { + return body.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_BODY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue body() { + return body; + } + + @JsonIgnore + public Map> getParameters() { + return parameters.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_PARAMETERS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue>> parameters() { + return parameters; + } + + @JsonIgnore + public Boolean getStrictValidation() { + return strictValidation.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_STRICT_VALIDATION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue strictValidation() { + return strictValidation; + } + + /** Return true if this ApiUpdateMmsMtMessage object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + UpdateMediaRequestImpl apiUpdateMmsMtMessage = (UpdateMediaRequestImpl) o; + return Objects.equals(this.from, apiUpdateMmsMtMessage.from) + && Objects.equals(this.type, apiUpdateMmsMtMessage.type) + && Objects.equals(this.toAdd, apiUpdateMmsMtMessage.toAdd) + && Objects.equals(this.toRemove, apiUpdateMmsMtMessage.toRemove) + && Objects.equals(this.deliveryReport, apiUpdateMmsMtMessage.deliveryReport) + && Objects.equals(this.sendAt, apiUpdateMmsMtMessage.sendAt) + && Objects.equals(this.expireAt, apiUpdateMmsMtMessage.expireAt) + && Objects.equals(this.callbackUrl, apiUpdateMmsMtMessage.callbackUrl) + && Objects.equals(this.clientReference, apiUpdateMmsMtMessage.clientReference) + && Objects.equals(this.feedbackEnabled, apiUpdateMmsMtMessage.feedbackEnabled) + && Objects.equals(this.body, apiUpdateMmsMtMessage.body) + && Objects.equals(this.parameters, apiUpdateMmsMtMessage.parameters) + && Objects.equals(this.strictValidation, apiUpdateMmsMtMessage.strictValidation); + } + + @Override + public int hashCode() { + return Objects.hash( + from, + type, + toAdd, + toRemove, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + body, + parameters, + strictValidation); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class UpdateMediaRequestImpl {\n"); + sb.append(" from: ").append(toIndentedString(from)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" toAdd: ").append(toIndentedString(toAdd)).append("\n"); + sb.append(" toRemove: ").append(toIndentedString(toRemove)).append("\n"); + sb.append(" deliveryReport: ").append(toIndentedString(deliveryReport)).append("\n"); + sb.append(" sendAt: ").append(toIndentedString(sendAt)).append("\n"); + sb.append(" expireAt: ").append(toIndentedString(expireAt)).append("\n"); + sb.append(" callbackUrl: ").append(toIndentedString(callbackUrl)).append("\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append(" feedbackEnabled: ").append(toIndentedString(feedbackEnabled)).append("\n"); + sb.append(" body: ").append(toIndentedString(body)).append("\n"); + sb.append(" parameters: ").append(toIndentedString(parameters)).append("\n"); + sb.append(" strictValidation: ").append(toIndentedString(strictValidation)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements UpdateMediaRequest.Builder { + OptionalValue from = OptionalValue.empty(); + OptionalValue type = OptionalValue.of(TypeEnum.MT_MEDIA); + OptionalValue> toAdd = OptionalValue.empty(); + OptionalValue> toRemove = OptionalValue.empty(); + OptionalValue deliveryReport = OptionalValue.empty(); + OptionalValue sendAt = OptionalValue.empty(); + OptionalValue expireAt = OptionalValue.empty(); + OptionalValue callbackUrl = OptionalValue.empty(); + OptionalValue clientReference = OptionalValue.empty(); + OptionalValue feedbackEnabled = OptionalValue.empty(); + OptionalValue body = OptionalValue.empty(); + OptionalValue>> parameters = OptionalValue.empty(); + OptionalValue strictValidation = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_FROM) + public Builder setFrom(String from) { + this.from = OptionalValue.of(from); + return this; + } + + @JsonProperty(JSON_PROPERTY_TO_ADD) + public Builder setToAdd(List toAdd) { + this.toAdd = OptionalValue.of(toAdd); + return this; + } + + @JsonProperty(JSON_PROPERTY_TO_REMOVE) + public Builder setToRemove(List toRemove) { + this.toRemove = OptionalValue.of(toRemove); + return this; + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + public Builder setDeliveryReport(DeliveryReportType deliveryReport) { + this.deliveryReport = OptionalValue.of(deliveryReport); + return this; + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + public Builder setSendAt(Instant sendAt) { + this.sendAt = OptionalValue.of(sendAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + public Builder setExpireAt(Instant expireAt) { + this.expireAt = OptionalValue.of(expireAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + public Builder setCallbackUrl(String callbackUrl) { + this.callbackUrl = OptionalValue.of(callbackUrl); + return this; + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + public Builder setFeedbackEnabled(Boolean feedbackEnabled) { + this.feedbackEnabled = OptionalValue.of(feedbackEnabled); + return this; + } + + @JsonProperty(JSON_PROPERTY_BODY) + public Builder setBody(MediaBody body) { + this.body = OptionalValue.of(body); + return this; + } + + @JsonProperty(JSON_PROPERTY_PARAMETERS) + public Builder setParameters(Map> parameters) { + this.parameters = OptionalValue.of(parameters); + return this; + } + + @JsonProperty(JSON_PROPERTY_STRICT_VALIDATION) + public Builder setStrictValidation(Boolean strictValidation) { + this.strictValidation = OptionalValue.of(strictValidation); + return this; + } + + public UpdateMediaRequest build() { + return new UpdateMediaRequestImpl( + from, + type, + toAdd, + toRemove, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + body, + parameters, + strictValidation); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateTextRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateTextRequest.java new file mode 100644 index 000000000..ca8b8a76d --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateTextRequest.java @@ -0,0 +1,342 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import java.time.Instant; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +/** Update text message */ +@JsonDeserialize(builder = UpdateTextRequestImpl.Builder.class) +public interface UpdateTextRequest extends UpdateBatchRequest { + + /** + * Sender number. Must be valid phone number, short code or alphanumeric. + * + * @return from + */ + String getFrom(); + + /** Regular SMS */ + public class TypeEnum extends EnumDynamic { + public static final TypeEnum MT_TEXT = new TypeEnum("mt_text"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>(TypeEnum.class, TypeEnum::new, Arrays.asList(MT_TEXT)); + + private TypeEnum(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static TypeEnum from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(TypeEnum e) { + return ENUM_SUPPORT.valueOf(e); + } + } + + /** + * List of phone numbers and group IDs to add to the batch. + * + * @return toAdd + */ + List getToAdd(); + + /** + * List of phone numbers and group IDs to remove from the batch. + * + * @return toRemove + */ + List getToRemove(); + + /** + * Get deliveryReport + * + * @return deliveryReport + */ + DeliveryReportType getDeliveryReport(); + + /** + * If set, in the future the message will be delayed until send_at occurs. Formatted + * as ISO-8601: + * YYYY-MM-DDThh:mm:ss.SSSZ. Constraints: Must be before expire_at. If set in the past, + * messages will be sent immediately. + * + * @return sendAt + */ + Instant getSendAt(); + + /** + * If set, the system will stop trying to deliver the message at this point. Constraints: Must be + * after send_at Default: 3 days after send_at + * + * @return expireAt + */ + Instant getExpireAt(); + + /** + * Override the default callback URL for this batch. Constraints: Must be valid URL. + * + * @return callbackUrl + */ + String getCallbackUrl(); + + /** + * The client identifier of a batch message. If set, the identifier will be added in the delivery + * report/callback of this batch + * + * @return clientReference + */ + String getClientReference(); + + /** + * If set to true, then feedback + * is expected after successful delivery. + * + * @return feedbackEnabled + */ + Boolean getFeedbackEnabled(); + + /** + * Contains the parameters that will be used for customizing the message for each recipient. Click here to learn more about + * parameterization. + * + * @return parameters + */ + Map> getParameters(); + + /** + * The message content + * + * @return body + */ + String getBody(); + + /** + * The type of number for the sender number. Use to override the automatic detection. + * + *

minimum: 0 maximum: 6 + * + * @return fromTon + */ + Integer getFromTon(); + + /** + * Number Plan Indicator for the sender number. Use to override the automatic detection. + * + *

minimum: 0 maximum: 18 + * + * @return fromNpi + */ + Integer getFromNpi(); + + /** + * Message will be dispatched only if it is not split to more parts than Max Number of Message + * Parts + * + *

minimum: 1 + * + * @return maxNumberOfMessageParts + */ + Integer getMaxNumberOfMessageParts(); + + /** + * If set to true the message will be shortened when exceeding one part. + * + * @return truncateConcat + */ + Boolean getTruncateConcat(); + + /** + * Shows message on screen without user interaction while not saving the message to the inbox. + * + * @return flashMessage + */ + Boolean getFlashMessage(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new UpdateTextRequestImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param from see getter + * @return Current builder + * @see #getFrom + */ + Builder setFrom(String from); + + /** + * see getter + * + * @param toAdd see getter + * @return Current builder + * @see #getToAdd + */ + Builder setToAdd(List toAdd); + + /** + * see getter + * + * @param toRemove see getter + * @return Current builder + * @see #getToRemove + */ + Builder setToRemove(List toRemove); + + /** + * see getter + * + * @param deliveryReport see getter + * @return Current builder + * @see #getDeliveryReport + */ + Builder setDeliveryReport(DeliveryReportType deliveryReport); + + /** + * see getter + * + * @param sendAt see getter + * @return Current builder + * @see #getSendAt + */ + Builder setSendAt(Instant sendAt); + + /** + * see getter + * + * @param expireAt see getter + * @return Current builder + * @see #getExpireAt + */ + Builder setExpireAt(Instant expireAt); + + /** + * see getter + * + * @param callbackUrl see getter + * @return Current builder + * @see #getCallbackUrl + */ + Builder setCallbackUrl(String callbackUrl); + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * see getter + * + * @param feedbackEnabled see getter + * @return Current builder + * @see #getFeedbackEnabled + */ + Builder setFeedbackEnabled(Boolean feedbackEnabled); + + /** + * see getter + * + * @param parameters see getter + * @return Current builder + * @see #getParameters + */ + Builder setParameters(Map> parameters); + + /** + * see getter + * + * @param body see getter + * @return Current builder + * @see #getBody + */ + Builder setBody(String body); + + /** + * see getter + * + * @param fromTon see getter + * @return Current builder + * @see #getFromTon + */ + Builder setFromTon(Integer fromTon); + + /** + * see getter + * + * @param fromNpi see getter + * @return Current builder + * @see #getFromNpi + */ + Builder setFromNpi(Integer fromNpi); + + /** + * see getter + * + * @param maxNumberOfMessageParts see getter + * @return Current builder + * @see #getMaxNumberOfMessageParts + */ + Builder setMaxNumberOfMessageParts(Integer maxNumberOfMessageParts); + + /** + * see getter + * + * @param truncateConcat see getter + * @return Current builder + * @see #getTruncateConcat + */ + Builder setTruncateConcat(Boolean truncateConcat); + + /** + * see getter + * + * @param flashMessage see getter + * @return Current builder + * @see #getFlashMessage + */ + Builder setFlashMessage(Boolean flashMessage); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + UpdateTextRequest build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateTextRequestImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateTextRequestImpl.java new file mode 100644 index 000000000..bca9c48ec --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateTextRequestImpl.java @@ -0,0 +1,561 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import java.time.Instant; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@JsonPropertyOrder({ + UpdateTextRequestImpl.JSON_PROPERTY_FROM, + UpdateTextRequestImpl.JSON_PROPERTY_TYPE, + UpdateTextRequestImpl.JSON_PROPERTY_TO_ADD, + UpdateTextRequestImpl.JSON_PROPERTY_TO_REMOVE, + UpdateTextRequestImpl.JSON_PROPERTY_DELIVERY_REPORT, + UpdateTextRequestImpl.JSON_PROPERTY_SEND_AT, + UpdateTextRequestImpl.JSON_PROPERTY_EXPIRE_AT, + UpdateTextRequestImpl.JSON_PROPERTY_CALLBACK_URL, + UpdateTextRequestImpl.JSON_PROPERTY_CLIENT_REFERENCE, + UpdateTextRequestImpl.JSON_PROPERTY_FEEDBACK_ENABLED, + UpdateTextRequestImpl.JSON_PROPERTY_PARAMETERS, + UpdateTextRequestImpl.JSON_PROPERTY_BODY, + UpdateTextRequestImpl.JSON_PROPERTY_FROM_TON, + UpdateTextRequestImpl.JSON_PROPERTY_FROM_NPI, + UpdateTextRequestImpl.JSON_PROPERTY_MAX_NUMBER_OF_MESSAGE_PARTS, + UpdateTextRequestImpl.JSON_PROPERTY_TRUNCATE_CONCAT, + UpdateTextRequestImpl.JSON_PROPERTY_FLASH_MESSAGE +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class UpdateTextRequestImpl implements UpdateTextRequest, UpdateBatchRequest { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_FROM = "from"; + + private OptionalValue from; + + public static final String JSON_PROPERTY_TYPE = "type"; + + private OptionalValue type; + + public static final String JSON_PROPERTY_TO_ADD = "to_add"; + + private OptionalValue> toAdd; + + public static final String JSON_PROPERTY_TO_REMOVE = "to_remove"; + + private OptionalValue> toRemove; + + public static final String JSON_PROPERTY_DELIVERY_REPORT = "delivery_report"; + + private OptionalValue deliveryReport; + + public static final String JSON_PROPERTY_SEND_AT = "send_at"; + + private OptionalValue sendAt; + + public static final String JSON_PROPERTY_EXPIRE_AT = "expire_at"; + + private OptionalValue expireAt; + + public static final String JSON_PROPERTY_CALLBACK_URL = "callback_url"; + + private OptionalValue callbackUrl; + + public static final String JSON_PROPERTY_CLIENT_REFERENCE = "client_reference"; + + private OptionalValue clientReference; + + public static final String JSON_PROPERTY_FEEDBACK_ENABLED = "feedback_enabled"; + + private OptionalValue feedbackEnabled; + + public static final String JSON_PROPERTY_PARAMETERS = "parameters"; + + private OptionalValue>> parameters; + + public static final String JSON_PROPERTY_BODY = "body"; + + private OptionalValue body; + + public static final String JSON_PROPERTY_FROM_TON = "from_ton"; + + private OptionalValue fromTon; + + public static final String JSON_PROPERTY_FROM_NPI = "from_npi"; + + private OptionalValue fromNpi; + + public static final String JSON_PROPERTY_MAX_NUMBER_OF_MESSAGE_PARTS = + "max_number_of_message_parts"; + + private OptionalValue maxNumberOfMessageParts; + + public static final String JSON_PROPERTY_TRUNCATE_CONCAT = "truncate_concat"; + + private OptionalValue truncateConcat; + + public static final String JSON_PROPERTY_FLASH_MESSAGE = "flash_message"; + + private OptionalValue flashMessage; + + public UpdateTextRequestImpl() {} + + protected UpdateTextRequestImpl( + OptionalValue from, + OptionalValue type, + OptionalValue> toAdd, + OptionalValue> toRemove, + OptionalValue deliveryReport, + OptionalValue sendAt, + OptionalValue expireAt, + OptionalValue callbackUrl, + OptionalValue clientReference, + OptionalValue feedbackEnabled, + OptionalValue>> parameters, + OptionalValue body, + OptionalValue fromTon, + OptionalValue fromNpi, + OptionalValue maxNumberOfMessageParts, + OptionalValue truncateConcat, + OptionalValue flashMessage) { + this.from = from; + this.type = type; + this.toAdd = toAdd; + this.toRemove = toRemove; + this.deliveryReport = deliveryReport; + this.sendAt = sendAt; + this.expireAt = expireAt; + this.callbackUrl = callbackUrl; + this.clientReference = clientReference; + this.feedbackEnabled = feedbackEnabled; + this.parameters = parameters; + this.body = body; + this.fromTon = fromTon; + this.fromNpi = fromNpi; + this.maxNumberOfMessageParts = maxNumberOfMessageParts; + this.truncateConcat = truncateConcat; + this.flashMessage = flashMessage; + } + + @JsonIgnore + public String getFrom() { + return from.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue from() { + return from; + } + + @JsonIgnore + public TypeEnum getType() { + return type.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue type() { + return type; + } + + @JsonIgnore + public List getToAdd() { + return toAdd.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TO_ADD) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> toAdd() { + return toAdd; + } + + @JsonIgnore + public List getToRemove() { + return toRemove.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TO_REMOVE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> toRemove() { + return toRemove; + } + + @JsonIgnore + public DeliveryReportType getDeliveryReport() { + return deliveryReport.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue deliveryReport() { + return deliveryReport; + } + + @JsonIgnore + public Instant getSendAt() { + return sendAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue sendAt() { + return sendAt; + } + + @JsonIgnore + public Instant getExpireAt() { + return expireAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue expireAt() { + return expireAt; + } + + @JsonIgnore + public String getCallbackUrl() { + return callbackUrl.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue callbackUrl() { + return callbackUrl; + } + + @JsonIgnore + public String getClientReference() { + return clientReference.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue clientReference() { + return clientReference; + } + + @JsonIgnore + public Boolean getFeedbackEnabled() { + return feedbackEnabled.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue feedbackEnabled() { + return feedbackEnabled; + } + + @JsonIgnore + public Map> getParameters() { + return parameters.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_PARAMETERS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue>> parameters() { + return parameters; + } + + @JsonIgnore + public String getBody() { + return body.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_BODY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue body() { + return body; + } + + @JsonIgnore + public Integer getFromTon() { + return fromTon.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM_TON) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue fromTon() { + return fromTon; + } + + @JsonIgnore + public Integer getFromNpi() { + return fromNpi.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM_NPI) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue fromNpi() { + return fromNpi; + } + + @JsonIgnore + public Integer getMaxNumberOfMessageParts() { + return maxNumberOfMessageParts.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_MAX_NUMBER_OF_MESSAGE_PARTS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue maxNumberOfMessageParts() { + return maxNumberOfMessageParts; + } + + @JsonIgnore + public Boolean getTruncateConcat() { + return truncateConcat.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TRUNCATE_CONCAT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue truncateConcat() { + return truncateConcat; + } + + @JsonIgnore + public Boolean getFlashMessage() { + return flashMessage.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FLASH_MESSAGE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue flashMessage() { + return flashMessage; + } + + /** Return true if this ApiUpdateTextMtMessage object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + UpdateTextRequestImpl apiUpdateTextMtMessage = (UpdateTextRequestImpl) o; + return Objects.equals(this.from, apiUpdateTextMtMessage.from) + && Objects.equals(this.type, apiUpdateTextMtMessage.type) + && Objects.equals(this.toAdd, apiUpdateTextMtMessage.toAdd) + && Objects.equals(this.toRemove, apiUpdateTextMtMessage.toRemove) + && Objects.equals(this.deliveryReport, apiUpdateTextMtMessage.deliveryReport) + && Objects.equals(this.sendAt, apiUpdateTextMtMessage.sendAt) + && Objects.equals(this.expireAt, apiUpdateTextMtMessage.expireAt) + && Objects.equals(this.callbackUrl, apiUpdateTextMtMessage.callbackUrl) + && Objects.equals(this.clientReference, apiUpdateTextMtMessage.clientReference) + && Objects.equals(this.feedbackEnabled, apiUpdateTextMtMessage.feedbackEnabled) + && Objects.equals(this.parameters, apiUpdateTextMtMessage.parameters) + && Objects.equals(this.body, apiUpdateTextMtMessage.body) + && Objects.equals(this.fromTon, apiUpdateTextMtMessage.fromTon) + && Objects.equals(this.fromNpi, apiUpdateTextMtMessage.fromNpi) + && Objects.equals( + this.maxNumberOfMessageParts, apiUpdateTextMtMessage.maxNumberOfMessageParts) + && Objects.equals(this.truncateConcat, apiUpdateTextMtMessage.truncateConcat) + && Objects.equals(this.flashMessage, apiUpdateTextMtMessage.flashMessage); + } + + @Override + public int hashCode() { + return Objects.hash( + from, + type, + toAdd, + toRemove, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + parameters, + body, + fromTon, + fromNpi, + maxNumberOfMessageParts, + truncateConcat, + flashMessage); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class UpdateTextRequestImpl {\n"); + sb.append(" from: ").append(toIndentedString(from)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" toAdd: ").append(toIndentedString(toAdd)).append("\n"); + sb.append(" toRemove: ").append(toIndentedString(toRemove)).append("\n"); + sb.append(" deliveryReport: ").append(toIndentedString(deliveryReport)).append("\n"); + sb.append(" sendAt: ").append(toIndentedString(sendAt)).append("\n"); + sb.append(" expireAt: ").append(toIndentedString(expireAt)).append("\n"); + sb.append(" callbackUrl: ").append(toIndentedString(callbackUrl)).append("\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append(" feedbackEnabled: ").append(toIndentedString(feedbackEnabled)).append("\n"); + sb.append(" parameters: ").append(toIndentedString(parameters)).append("\n"); + sb.append(" body: ").append(toIndentedString(body)).append("\n"); + sb.append(" fromTon: ").append(toIndentedString(fromTon)).append("\n"); + sb.append(" fromNpi: ").append(toIndentedString(fromNpi)).append("\n"); + sb.append(" maxNumberOfMessageParts: ") + .append(toIndentedString(maxNumberOfMessageParts)) + .append("\n"); + sb.append(" truncateConcat: ").append(toIndentedString(truncateConcat)).append("\n"); + sb.append(" flashMessage: ").append(toIndentedString(flashMessage)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements UpdateTextRequest.Builder { + OptionalValue from = OptionalValue.empty(); + OptionalValue type = OptionalValue.of(TypeEnum.MT_TEXT); + OptionalValue> toAdd = OptionalValue.empty(); + OptionalValue> toRemove = OptionalValue.empty(); + OptionalValue deliveryReport = OptionalValue.empty(); + OptionalValue sendAt = OptionalValue.empty(); + OptionalValue expireAt = OptionalValue.empty(); + OptionalValue callbackUrl = OptionalValue.empty(); + OptionalValue clientReference = OptionalValue.empty(); + OptionalValue feedbackEnabled = OptionalValue.empty(); + OptionalValue>> parameters = OptionalValue.empty(); + OptionalValue body = OptionalValue.empty(); + OptionalValue fromTon = OptionalValue.empty(); + OptionalValue fromNpi = OptionalValue.empty(); + OptionalValue maxNumberOfMessageParts = OptionalValue.empty(); + OptionalValue truncateConcat = OptionalValue.empty(); + OptionalValue flashMessage = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_FROM) + public Builder setFrom(String from) { + this.from = OptionalValue.of(from); + return this; + } + + @JsonProperty(JSON_PROPERTY_TO_ADD) + public Builder setToAdd(List toAdd) { + this.toAdd = OptionalValue.of(toAdd); + return this; + } + + @JsonProperty(JSON_PROPERTY_TO_REMOVE) + public Builder setToRemove(List toRemove) { + this.toRemove = OptionalValue.of(toRemove); + return this; + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + public Builder setDeliveryReport(DeliveryReportType deliveryReport) { + this.deliveryReport = OptionalValue.of(deliveryReport); + return this; + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + public Builder setSendAt(Instant sendAt) { + this.sendAt = OptionalValue.of(sendAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + public Builder setExpireAt(Instant expireAt) { + this.expireAt = OptionalValue.of(expireAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + public Builder setCallbackUrl(String callbackUrl) { + this.callbackUrl = OptionalValue.of(callbackUrl); + return this; + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + public Builder setFeedbackEnabled(Boolean feedbackEnabled) { + this.feedbackEnabled = OptionalValue.of(feedbackEnabled); + return this; + } + + @JsonProperty(JSON_PROPERTY_PARAMETERS) + public Builder setParameters(Map> parameters) { + this.parameters = OptionalValue.of(parameters); + return this; + } + + @JsonProperty(JSON_PROPERTY_BODY) + public Builder setBody(String body) { + this.body = OptionalValue.of(body); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM_TON) + public Builder setFromTon(Integer fromTon) { + this.fromTon = OptionalValue.of(fromTon); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM_NPI) + public Builder setFromNpi(Integer fromNpi) { + this.fromNpi = OptionalValue.of(fromNpi); + return this; + } + + @JsonProperty(JSON_PROPERTY_MAX_NUMBER_OF_MESSAGE_PARTS) + public Builder setMaxNumberOfMessageParts(Integer maxNumberOfMessageParts) { + this.maxNumberOfMessageParts = OptionalValue.of(maxNumberOfMessageParts); + return this; + } + + @JsonProperty(JSON_PROPERTY_TRUNCATE_CONCAT) + public Builder setTruncateConcat(Boolean truncateConcat) { + this.truncateConcat = OptionalValue.of(truncateConcat); + return this; + } + + @JsonProperty(JSON_PROPERTY_FLASH_MESSAGE) + public Builder setFlashMessage(Boolean flashMessage) { + this.flashMessage = OptionalValue.of(flashMessage); + return this; + } + + public UpdateTextRequest build() { + return new UpdateTextRequestImpl( + from, + type, + toAdd, + toRemove, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + parameters, + body, + fromTon, + fromNpi, + maxNumberOfMessageParts, + truncateConcat, + flashMessage); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/BinaryResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/BinaryResponse.java new file mode 100644 index 000000000..3b0db8b77 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/BinaryResponse.java @@ -0,0 +1,354 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches.response; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import java.time.Instant; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +/** BinaryResponse */ +@JsonDeserialize(builder = BinaryResponseImpl.Builder.class) +public interface BinaryResponse extends BatchResponse { + + /** + * Unique identifier for batch. + * + * @return id + * @readOnly This field is returned by the server and cannot be modified + */ + String getId(); + + /** + * A list of phone numbers and group IDs that have received the batch. More info. + * + * @return to + */ + List getTo(); + + /** + * The sender number provided. Required if the Automatic Default Originator is not configured. + * + * @return from + */ + String getFrom(); + + /** + * Indicates whether or not the batch has been canceled. + * + * @return canceled + * @readOnly This field is returned by the server and cannot be modified + */ + Boolean getCanceled(); + + /** + * The message content provided. Base64 encoded. + * + * @return body + */ + String getBody(); + + /** + * The UDH + * header of a binary message HEX encoded. Max 140 bytes including the body. + * + * @return udh + */ + String getUdh(); + + /** + * SMS in binary + * format. + */ + public class TypeEnum extends EnumDynamic { + public static final TypeEnum MT_BINARY = new TypeEnum("mt_binary"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>(TypeEnum.class, TypeEnum::new, Arrays.asList(MT_BINARY)); + + private TypeEnum(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static TypeEnum from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(TypeEnum e) { + return ENUM_SUPPORT.valueOf(e); + } + } + + /** + * Timestamp for when batch was created. Formatted as ISO-8601. For example: + * YYYY-MM-DDThh:mm:ss.SSSZ. + * + * @return createdAt + * @readOnly This field is returned by the server and cannot be modified + */ + Instant getCreatedAt(); + + /** + * Timestamp for when batch was last updated. Formatted as ISO-8601. For example: + * YYYY-MM-DDThh:mm:ss.SSSZ. + * + * @return modifiedAt + * @readOnly This field is returned by the server and cannot be modified + */ + Instant getModifiedAt(); + + /** + * The delivery report callback option selected. Will be either none, summary + * , full, per_recipient, or per_recipient_final. + * + * @return deliveryReport + */ + DeliveryReportType getDeliveryReport(); + + /** + * If set, the date and time the message should be delivered. Formatted as ISO-8601. For example: + * YYYY-MM-DDThh:mm:ss.SSSZ. + * + * @return sendAt + */ + Instant getSendAt(); + + /** + * If set, the date and time the message will expire. Formatted as ISO-8601. For example: + * YYYY-MM-DDThh:mm:ss.SSSZ. + * + * @return expireAt + */ + Instant getExpireAt(); + + /** + * The callback URL provided in the request. + * + * @return callbackUrl + */ + String getCallbackUrl(); + + /** + * The string input to identify this batch message. If set, the identifier will be added in the + * delivery report/callback of this batch. + * + * @return clientReference + */ + String getClientReference(); + + /** + * If set to true, then feedback + * is expected after successful delivery. + * + * @return feedbackEnabled + */ + Boolean getFeedbackEnabled(); + + /** + * The type of number for the sender number. + * + *

minimum: 0 maximum: 6 + * + * @return fromTon + */ + Integer getFromTon(); + + /** + * Number Plan Indicator for the sender number. + * + *

minimum: 0 maximum: 18 + * + * @return fromNpi + */ + Integer getFromNpi(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new BinaryResponseImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param id see getter + * @return Current builder + * @see #getId + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setId(String id); + + /** + * see getter + * + * @param to see getter + * @return Current builder + * @see #getTo + */ + Builder setTo(List to); + + /** + * see getter + * + * @param from see getter + * @return Current builder + * @see #getFrom + */ + Builder setFrom(String from); + + /** + * see getter + * + * @param canceled see getter + * @return Current builder + * @see #getCanceled + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setCanceled(Boolean canceled); + + /** + * see getter + * + * @param body see getter + * @return Current builder + * @see #getBody + */ + Builder setBody(String body); + + /** + * see getter + * + * @param udh see getter + * @return Current builder + * @see #getUdh + */ + Builder setUdh(String udh); + + /** + * see getter + * + * @param createdAt see getter + * @return Current builder + * @see #getCreatedAt + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setCreatedAt(Instant createdAt); + + /** + * see getter + * + * @param modifiedAt see getter + * @return Current builder + * @see #getModifiedAt + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setModifiedAt(Instant modifiedAt); + + /** + * see getter + * + * @param deliveryReport see getter + * @return Current builder + * @see #getDeliveryReport + */ + Builder setDeliveryReport(DeliveryReportType deliveryReport); + + /** + * see getter + * + * @param sendAt see getter + * @return Current builder + * @see #getSendAt + */ + Builder setSendAt(Instant sendAt); + + /** + * see getter + * + * @param expireAt see getter + * @return Current builder + * @see #getExpireAt + */ + Builder setExpireAt(Instant expireAt); + + /** + * see getter + * + * @param callbackUrl see getter + * @return Current builder + * @see #getCallbackUrl + */ + Builder setCallbackUrl(String callbackUrl); + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * see getter + * + * @param feedbackEnabled see getter + * @return Current builder + * @see #getFeedbackEnabled + */ + Builder setFeedbackEnabled(Boolean feedbackEnabled); + + /** + * see getter + * + * @param fromTon see getter + * @return Current builder + * @see #getFromTon + */ + Builder setFromTon(Integer fromTon); + + /** + * see getter + * + * @param fromNpi see getter + * @return Current builder + * @see #getFromNpi + */ + Builder setFromNpi(Integer fromNpi); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + BinaryResponse build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/BinaryResponseImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/BinaryResponseImpl.java new file mode 100644 index 000000000..fafac3b55 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/BinaryResponseImpl.java @@ -0,0 +1,552 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.response; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import java.time.Instant; +import java.util.List; +import java.util.Objects; + +@JsonPropertyOrder({ + BinaryResponseImpl.JSON_PROPERTY_ID, + BinaryResponseImpl.JSON_PROPERTY_TO, + BinaryResponseImpl.JSON_PROPERTY_FROM, + BinaryResponseImpl.JSON_PROPERTY_CANCELED, + BinaryResponseImpl.JSON_PROPERTY_BODY, + BinaryResponseImpl.JSON_PROPERTY_UDH, + BinaryResponseImpl.JSON_PROPERTY_TYPE, + BinaryResponseImpl.JSON_PROPERTY_CREATED_AT, + BinaryResponseImpl.JSON_PROPERTY_MODIFIED_AT, + BinaryResponseImpl.JSON_PROPERTY_DELIVERY_REPORT, + BinaryResponseImpl.JSON_PROPERTY_SEND_AT, + BinaryResponseImpl.JSON_PROPERTY_EXPIRE_AT, + BinaryResponseImpl.JSON_PROPERTY_CALLBACK_URL, + BinaryResponseImpl.JSON_PROPERTY_CLIENT_REFERENCE, + BinaryResponseImpl.JSON_PROPERTY_FEEDBACK_ENABLED, + BinaryResponseImpl.JSON_PROPERTY_FROM_TON, + BinaryResponseImpl.JSON_PROPERTY_FROM_NPI +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class BinaryResponseImpl implements BinaryResponse, BatchResponse { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_ID = "id"; + + private OptionalValue id; + + public static final String JSON_PROPERTY_TO = "to"; + + private OptionalValue> to; + + public static final String JSON_PROPERTY_FROM = "from"; + + private OptionalValue from; + + public static final String JSON_PROPERTY_CANCELED = "canceled"; + + private OptionalValue canceled; + + public static final String JSON_PROPERTY_BODY = "body"; + + private OptionalValue body; + + public static final String JSON_PROPERTY_UDH = "udh"; + + private OptionalValue udh; + + public static final String JSON_PROPERTY_TYPE = "type"; + + private OptionalValue type; + + public static final String JSON_PROPERTY_CREATED_AT = "created_at"; + + private OptionalValue createdAt; + + public static final String JSON_PROPERTY_MODIFIED_AT = "modified_at"; + + private OptionalValue modifiedAt; + + public static final String JSON_PROPERTY_DELIVERY_REPORT = "delivery_report"; + + private OptionalValue deliveryReport; + + public static final String JSON_PROPERTY_SEND_AT = "send_at"; + + private OptionalValue sendAt; + + public static final String JSON_PROPERTY_EXPIRE_AT = "expire_at"; + + private OptionalValue expireAt; + + public static final String JSON_PROPERTY_CALLBACK_URL = "callback_url"; + + private OptionalValue callbackUrl; + + public static final String JSON_PROPERTY_CLIENT_REFERENCE = "client_reference"; + + private OptionalValue clientReference; + + public static final String JSON_PROPERTY_FEEDBACK_ENABLED = "feedback_enabled"; + + private OptionalValue feedbackEnabled; + + public static final String JSON_PROPERTY_FROM_TON = "from_ton"; + + private OptionalValue fromTon; + + public static final String JSON_PROPERTY_FROM_NPI = "from_npi"; + + private OptionalValue fromNpi; + + public BinaryResponseImpl() {} + + protected BinaryResponseImpl( + OptionalValue id, + OptionalValue> to, + OptionalValue from, + OptionalValue canceled, + OptionalValue body, + OptionalValue udh, + OptionalValue type, + OptionalValue createdAt, + OptionalValue modifiedAt, + OptionalValue deliveryReport, + OptionalValue sendAt, + OptionalValue expireAt, + OptionalValue callbackUrl, + OptionalValue clientReference, + OptionalValue feedbackEnabled, + OptionalValue fromTon, + OptionalValue fromNpi) { + this.id = id; + this.to = to; + this.from = from; + this.canceled = canceled; + this.body = body; + this.udh = udh; + this.type = type; + this.createdAt = createdAt; + this.modifiedAt = modifiedAt; + this.deliveryReport = deliveryReport; + this.sendAt = sendAt; + this.expireAt = expireAt; + this.callbackUrl = callbackUrl; + this.clientReference = clientReference; + this.feedbackEnabled = feedbackEnabled; + this.fromTon = fromTon; + this.fromNpi = fromNpi; + } + + @JsonIgnore + public String getId() { + return id.orElse(null); + } + + @JsonIgnore + public OptionalValue id() { + return id; + } + + @JsonIgnore + public List getTo() { + return to.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TO) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> to() { + return to; + } + + @JsonIgnore + public String getFrom() { + return from.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue from() { + return from; + } + + @JsonIgnore + public Boolean getCanceled() { + return canceled.orElse(null); + } + + @JsonIgnore + public OptionalValue canceled() { + return canceled; + } + + @JsonIgnore + public String getBody() { + return body.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_BODY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue body() { + return body; + } + + @JsonIgnore + public String getUdh() { + return udh.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_UDH) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue udh() { + return udh; + } + + @JsonIgnore + public TypeEnum getType() { + return type.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue type() { + return type; + } + + @JsonIgnore + public Instant getCreatedAt() { + return createdAt.orElse(null); + } + + @JsonIgnore + public OptionalValue createdAt() { + return createdAt; + } + + @JsonIgnore + public Instant getModifiedAt() { + return modifiedAt.orElse(null); + } + + @JsonIgnore + public OptionalValue modifiedAt() { + return modifiedAt; + } + + @JsonIgnore + public DeliveryReportType getDeliveryReport() { + return deliveryReport.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue deliveryReport() { + return deliveryReport; + } + + @JsonIgnore + public Instant getSendAt() { + return sendAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue sendAt() { + return sendAt; + } + + @JsonIgnore + public Instant getExpireAt() { + return expireAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue expireAt() { + return expireAt; + } + + @JsonIgnore + public String getCallbackUrl() { + return callbackUrl.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue callbackUrl() { + return callbackUrl; + } + + @JsonIgnore + public String getClientReference() { + return clientReference.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue clientReference() { + return clientReference; + } + + @JsonIgnore + public Boolean getFeedbackEnabled() { + return feedbackEnabled.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue feedbackEnabled() { + return feedbackEnabled; + } + + @JsonIgnore + public Integer getFromTon() { + return fromTon.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM_TON) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue fromTon() { + return fromTon; + } + + @JsonIgnore + public Integer getFromNpi() { + return fromNpi.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM_NPI) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue fromNpi() { + return fromNpi; + } + + /** Return true if this BinaryResponse object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BinaryResponseImpl binaryResponse = (BinaryResponseImpl) o; + return Objects.equals(this.id, binaryResponse.id) + && Objects.equals(this.to, binaryResponse.to) + && Objects.equals(this.from, binaryResponse.from) + && Objects.equals(this.canceled, binaryResponse.canceled) + && Objects.equals(this.body, binaryResponse.body) + && Objects.equals(this.udh, binaryResponse.udh) + && Objects.equals(this.type, binaryResponse.type) + && Objects.equals(this.createdAt, binaryResponse.createdAt) + && Objects.equals(this.modifiedAt, binaryResponse.modifiedAt) + && Objects.equals(this.deliveryReport, binaryResponse.deliveryReport) + && Objects.equals(this.sendAt, binaryResponse.sendAt) + && Objects.equals(this.expireAt, binaryResponse.expireAt) + && Objects.equals(this.callbackUrl, binaryResponse.callbackUrl) + && Objects.equals(this.clientReference, binaryResponse.clientReference) + && Objects.equals(this.feedbackEnabled, binaryResponse.feedbackEnabled) + && Objects.equals(this.fromTon, binaryResponse.fromTon) + && Objects.equals(this.fromNpi, binaryResponse.fromNpi); + } + + @Override + public int hashCode() { + return Objects.hash( + id, + to, + from, + canceled, + body, + udh, + type, + createdAt, + modifiedAt, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + fromTon, + fromNpi); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class BinaryResponseImpl {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" to: ").append(toIndentedString(to)).append("\n"); + sb.append(" from: ").append(toIndentedString(from)).append("\n"); + sb.append(" canceled: ").append(toIndentedString(canceled)).append("\n"); + sb.append(" body: ").append(toIndentedString(body)).append("\n"); + sb.append(" udh: ").append(toIndentedString(udh)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); + sb.append(" modifiedAt: ").append(toIndentedString(modifiedAt)).append("\n"); + sb.append(" deliveryReport: ").append(toIndentedString(deliveryReport)).append("\n"); + sb.append(" sendAt: ").append(toIndentedString(sendAt)).append("\n"); + sb.append(" expireAt: ").append(toIndentedString(expireAt)).append("\n"); + sb.append(" callbackUrl: ").append(toIndentedString(callbackUrl)).append("\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append(" feedbackEnabled: ").append(toIndentedString(feedbackEnabled)).append("\n"); + sb.append(" fromTon: ").append(toIndentedString(fromTon)).append("\n"); + sb.append(" fromNpi: ").append(toIndentedString(fromNpi)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements BinaryResponse.Builder { + OptionalValue id = OptionalValue.empty(); + OptionalValue> to = OptionalValue.empty(); + OptionalValue from = OptionalValue.empty(); + OptionalValue canceled = OptionalValue.empty(); + OptionalValue body = OptionalValue.empty(); + OptionalValue udh = OptionalValue.empty(); + OptionalValue type = OptionalValue.of(TypeEnum.MT_BINARY); + OptionalValue createdAt = OptionalValue.empty(); + OptionalValue modifiedAt = OptionalValue.empty(); + OptionalValue deliveryReport = OptionalValue.empty(); + OptionalValue sendAt = OptionalValue.empty(); + OptionalValue expireAt = OptionalValue.empty(); + OptionalValue callbackUrl = OptionalValue.empty(); + OptionalValue clientReference = OptionalValue.empty(); + OptionalValue feedbackEnabled = OptionalValue.empty(); + OptionalValue fromTon = OptionalValue.empty(); + OptionalValue fromNpi = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_ID) + public Builder setId(String id) { + this.id = OptionalValue.of(id); + return this; + } + + @JsonProperty(JSON_PROPERTY_TO) + public Builder setTo(List to) { + this.to = OptionalValue.of(to); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM) + public Builder setFrom(String from) { + this.from = OptionalValue.of(from); + return this; + } + + @JsonProperty(JSON_PROPERTY_CANCELED) + public Builder setCanceled(Boolean canceled) { + this.canceled = OptionalValue.of(canceled); + return this; + } + + @JsonProperty(JSON_PROPERTY_BODY) + public Builder setBody(String body) { + this.body = OptionalValue.of(body); + return this; + } + + @JsonProperty(JSON_PROPERTY_UDH) + public Builder setUdh(String udh) { + this.udh = OptionalValue.of(udh); + return this; + } + + @JsonProperty(JSON_PROPERTY_CREATED_AT) + public Builder setCreatedAt(Instant createdAt) { + this.createdAt = OptionalValue.of(createdAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_MODIFIED_AT) + public Builder setModifiedAt(Instant modifiedAt) { + this.modifiedAt = OptionalValue.of(modifiedAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + public Builder setDeliveryReport(DeliveryReportType deliveryReport) { + this.deliveryReport = OptionalValue.of(deliveryReport); + return this; + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + public Builder setSendAt(Instant sendAt) { + this.sendAt = OptionalValue.of(sendAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + public Builder setExpireAt(Instant expireAt) { + this.expireAt = OptionalValue.of(expireAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + public Builder setCallbackUrl(String callbackUrl) { + this.callbackUrl = OptionalValue.of(callbackUrl); + return this; + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + public Builder setFeedbackEnabled(Boolean feedbackEnabled) { + this.feedbackEnabled = OptionalValue.of(feedbackEnabled); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM_TON) + public Builder setFromTon(Integer fromTon) { + this.fromTon = OptionalValue.of(fromTon); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM_NPI) + public Builder setFromNpi(Integer fromNpi) { + this.fromNpi = OptionalValue.of(fromNpi); + return this; + } + + public BinaryResponse build() { + return new BinaryResponseImpl( + id, + to, + from, + canceled, + body, + udh, + type, + createdAt, + modifiedAt, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + fromTon, + fromNpi); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/DryRunPerRecipientDetails.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/DryRunPerRecipientDetails.java new file mode 100644 index 000000000..740faac60 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/DryRunPerRecipientDetails.java @@ -0,0 +1,102 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches.response; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +/** DryRunPerRecipientDetails */ +@JsonDeserialize(builder = DryRunPerRecipientDetailsImpl.Builder.class) +public interface DryRunPerRecipientDetails { + + /** + * Get recipient + * + * @return recipient + */ + String getRecipient(); + + /** + * Get numberOfParts + * + * @return numberOfParts + */ + Integer getNumberOfParts(); + + /** + * Get body + * + * @return body + */ + String getBody(); + + /** + * Get encoding + * + * @return encoding + */ + String getEncoding(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new DryRunPerRecipientDetailsImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param recipient see getter + * @return Current builder + * @see #getRecipient + */ + Builder setRecipient(String recipient); + + /** + * see getter + * + * @param numberOfParts see getter + * @return Current builder + * @see #getNumberOfParts + */ + Builder setNumberOfParts(Integer numberOfParts); + + /** + * see getter + * + * @param body see getter + * @return Current builder + * @see #getBody + */ + Builder setBody(String body); + + /** + * see getter + * + * @param encoding see getter + * @return Current builder + * @see #getEncoding + */ + Builder setEncoding(String encoding); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + DryRunPerRecipientDetails build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/DryRunPerRecipientDetailsImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/DryRunPerRecipientDetailsImpl.java new file mode 100644 index 000000000..829005398 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/DryRunPerRecipientDetailsImpl.java @@ -0,0 +1,175 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.response; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +@JsonPropertyOrder({ + DryRunPerRecipientDetailsImpl.JSON_PROPERTY_RECIPIENT, + DryRunPerRecipientDetailsImpl.JSON_PROPERTY_NUMBER_OF_PARTS, + DryRunPerRecipientDetailsImpl.JSON_PROPERTY_BODY, + DryRunPerRecipientDetailsImpl.JSON_PROPERTY_ENCODING +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class DryRunPerRecipientDetailsImpl implements DryRunPerRecipientDetails { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_RECIPIENT = "recipient"; + + private OptionalValue recipient; + + public static final String JSON_PROPERTY_NUMBER_OF_PARTS = "number_of_parts"; + + private OptionalValue numberOfParts; + + public static final String JSON_PROPERTY_BODY = "body"; + + private OptionalValue body; + + public static final String JSON_PROPERTY_ENCODING = "encoding"; + + private OptionalValue encoding; + + public DryRunPerRecipientDetailsImpl() {} + + protected DryRunPerRecipientDetailsImpl( + OptionalValue recipient, + OptionalValue numberOfParts, + OptionalValue body, + OptionalValue encoding) { + this.recipient = recipient; + this.numberOfParts = numberOfParts; + this.body = body; + this.encoding = encoding; + } + + @JsonIgnore + public String getRecipient() { + return recipient.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_RECIPIENT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue recipient() { + return recipient; + } + + @JsonIgnore + public Integer getNumberOfParts() { + return numberOfParts.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_NUMBER_OF_PARTS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue numberOfParts() { + return numberOfParts; + } + + @JsonIgnore + public String getBody() { + return body.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_BODY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue body() { + return body; + } + + @JsonIgnore + public String getEncoding() { + return encoding.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_ENCODING) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue encoding() { + return encoding; + } + + /** Return true if this DryRunResponse_per_recipient_inner object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DryRunPerRecipientDetailsImpl dryRunResponsePerRecipientInner = + (DryRunPerRecipientDetailsImpl) o; + return Objects.equals(this.recipient, dryRunResponsePerRecipientInner.recipient) + && Objects.equals(this.numberOfParts, dryRunResponsePerRecipientInner.numberOfParts) + && Objects.equals(this.body, dryRunResponsePerRecipientInner.body) + && Objects.equals(this.encoding, dryRunResponsePerRecipientInner.encoding); + } + + @Override + public int hashCode() { + return Objects.hash(recipient, numberOfParts, body, encoding); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class DryRunPerRecipientDetailsImpl {\n"); + sb.append(" recipient: ").append(toIndentedString(recipient)).append("\n"); + sb.append(" numberOfParts: ").append(toIndentedString(numberOfParts)).append("\n"); + sb.append(" body: ").append(toIndentedString(body)).append("\n"); + sb.append(" encoding: ").append(toIndentedString(encoding)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements DryRunPerRecipientDetails.Builder { + OptionalValue recipient = OptionalValue.empty(); + OptionalValue numberOfParts = OptionalValue.empty(); + OptionalValue body = OptionalValue.empty(); + OptionalValue encoding = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_RECIPIENT) + public Builder setRecipient(String recipient) { + this.recipient = OptionalValue.of(recipient); + return this; + } + + @JsonProperty(JSON_PROPERTY_NUMBER_OF_PARTS) + public Builder setNumberOfParts(Integer numberOfParts) { + this.numberOfParts = OptionalValue.of(numberOfParts); + return this; + } + + @JsonProperty(JSON_PROPERTY_BODY) + public Builder setBody(String body) { + this.body = OptionalValue.of(body); + return this; + } + + @JsonProperty(JSON_PROPERTY_ENCODING) + public Builder setEncoding(String encoding) { + this.encoding = OptionalValue.of(encoding); + return this; + } + + public DryRunPerRecipientDetails build() { + return new DryRunPerRecipientDetailsImpl(recipient, numberOfParts, body, encoding); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/DryRunResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/DryRunResponse.java new file mode 100644 index 000000000..819875e30 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/DryRunResponse.java @@ -0,0 +1,88 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches.response; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import java.util.List; + +/** DryRunResponse */ +@JsonDeserialize(builder = DryRunResponseImpl.Builder.class) +public interface DryRunResponse { + + /** + * The number of recipients in the batch + * + * @return numberOfRecipients + */ + Integer getNumberOfRecipients(); + + /** + * The total number of SMS message parts to be sent in the batch + * + * @return numberOfMessages + */ + Integer getNumberOfMessages(); + + /** + * The recipient, the number of message parts to this recipient, the body of the message, and the + * encoding type of each message + * + * @return perRecipient + */ + List getPerRecipient(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new DryRunResponseImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param numberOfRecipients see getter + * @return Current builder + * @see #getNumberOfRecipients + */ + Builder setNumberOfRecipients(Integer numberOfRecipients); + + /** + * see getter + * + * @param numberOfMessages see getter + * @return Current builder + * @see #getNumberOfMessages + */ + Builder setNumberOfMessages(Integer numberOfMessages); + + /** + * see getter + * + * @param perRecipient see getter + * @return Current builder + * @see #getPerRecipient + */ + Builder setPerRecipient(List perRecipient); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + DryRunResponse build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/DryRunResponseImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/DryRunResponseImpl.java new file mode 100644 index 000000000..eea1b201e --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/DryRunResponseImpl.java @@ -0,0 +1,148 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.response; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.util.List; +import java.util.Objects; + +@JsonPropertyOrder({ + DryRunResponseImpl.JSON_PROPERTY_NUMBER_OF_RECIPIENTS, + DryRunResponseImpl.JSON_PROPERTY_NUMBER_OF_MESSAGES, + DryRunResponseImpl.JSON_PROPERTY_PER_RECIPIENT +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class DryRunResponseImpl implements DryRunResponse { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_NUMBER_OF_RECIPIENTS = "number_of_recipients"; + + private OptionalValue numberOfRecipients; + + public static final String JSON_PROPERTY_NUMBER_OF_MESSAGES = "number_of_messages"; + + private OptionalValue numberOfMessages; + + public static final String JSON_PROPERTY_PER_RECIPIENT = "per_recipient"; + + private OptionalValue> perRecipient; + + public DryRunResponseImpl() {} + + protected DryRunResponseImpl( + OptionalValue numberOfRecipients, + OptionalValue numberOfMessages, + OptionalValue> perRecipient) { + this.numberOfRecipients = numberOfRecipients; + this.numberOfMessages = numberOfMessages; + this.perRecipient = perRecipient; + } + + @JsonIgnore + public Integer getNumberOfRecipients() { + return numberOfRecipients.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_NUMBER_OF_RECIPIENTS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue numberOfRecipients() { + return numberOfRecipients; + } + + @JsonIgnore + public Integer getNumberOfMessages() { + return numberOfMessages.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_NUMBER_OF_MESSAGES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue numberOfMessages() { + return numberOfMessages; + } + + @JsonIgnore + public List getPerRecipient() { + return perRecipient.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_PER_RECIPIENT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> perRecipient() { + return perRecipient; + } + + /** Return true if this DryRunResponse object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DryRunResponseImpl dryRunResponse = (DryRunResponseImpl) o; + return Objects.equals(this.numberOfRecipients, dryRunResponse.numberOfRecipients) + && Objects.equals(this.numberOfMessages, dryRunResponse.numberOfMessages) + && Objects.equals(this.perRecipient, dryRunResponse.perRecipient); + } + + @Override + public int hashCode() { + return Objects.hash(numberOfRecipients, numberOfMessages, perRecipient); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class DryRunResponseImpl {\n"); + sb.append(" numberOfRecipients: ").append(toIndentedString(numberOfRecipients)).append("\n"); + sb.append(" numberOfMessages: ").append(toIndentedString(numberOfMessages)).append("\n"); + sb.append(" perRecipient: ").append(toIndentedString(perRecipient)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements DryRunResponse.Builder { + OptionalValue numberOfRecipients = OptionalValue.empty(); + OptionalValue numberOfMessages = OptionalValue.empty(); + OptionalValue> perRecipient = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_NUMBER_OF_RECIPIENTS) + public Builder setNumberOfRecipients(Integer numberOfRecipients) { + this.numberOfRecipients = OptionalValue.of(numberOfRecipients); + return this; + } + + @JsonProperty(JSON_PROPERTY_NUMBER_OF_MESSAGES) + public Builder setNumberOfMessages(Integer numberOfMessages) { + this.numberOfMessages = OptionalValue.of(numberOfMessages); + return this; + } + + @JsonProperty(JSON_PROPERTY_PER_RECIPIENT) + public Builder setPerRecipient(List perRecipient) { + this.perRecipient = OptionalValue.of(perRecipient); + return this; + } + + public DryRunResponse build() { + return new DryRunResponseImpl(numberOfRecipients, numberOfMessages, perRecipient); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/ListBatchesResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/ListBatchesResponse.java new file mode 100644 index 000000000..13a9a313e --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/ListBatchesResponse.java @@ -0,0 +1,68 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches.response; + +import com.sinch.sdk.core.models.pagination.ListResponse; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.sms.api.v1.BatchesService; +import com.sinch.sdk.domains.sms.models.v1.batches.request.ListBatchesQueryParameters; +import java.util.Collection; +import java.util.NoSuchElementException; + +/** Auto paginated response for list of BatchResponse */ +public class ListBatchesResponse extends ListResponse { + + private final Page page; + private final BatchesService service; + private ListBatchesResponse nextPage; + + public ListBatchesResponse( + BatchesService service, Page page) { + this.service = service; + this.page = page; + } + + @Override + public boolean hasNextPage() { + if (null == page.getNextPageToken() || null == getContent() || getContent().isEmpty()) { + return false; + } + if (null == nextPage) { + ListBatchesQueryParameters.Builder newParameters = + ListBatchesQueryParameters.builder(page.getParameters()); + newParameters.setPage(page.getNextPageToken()); + nextPage = service.list(newParameters.build()); + } + return (null != nextPage.getContent() && !nextPage.getContent().isEmpty()); + } + + @Override + public ListBatchesResponse nextPage() { + + if (!hasNextPage()) { + throw new NoSuchElementException("Reached the last page of the API response"); + } + + ListBatchesResponse response = nextPage; + nextPage = null; + return response; + } + + @Override + public Collection getContent() { + return page.getEntities(); + } + + @Override + public String toString() { + return "ListBatchesResponse {" + "page=" + page + '}'; + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/MediaResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/MediaResponse.java new file mode 100644 index 000000000..3a2fd50f4 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/MediaResponse.java @@ -0,0 +1,331 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches.response; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import com.sinch.sdk.domains.sms.models.v1.batches.MediaBody; +import java.time.Instant; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +/** MediaResponse */ +@JsonDeserialize(builder = MediaResponseImpl.Builder.class) +public interface MediaResponse extends BatchResponse { + + /** + * Unique identifier for batch + * + * @return id + * @readOnly This field is returned by the server and cannot be modified + */ + String getId(); + + /** + * List of Phone numbers and group IDs that will receive the batch. More info + * + * @return to + */ + List getTo(); + + /** + * Sender number. Required if Automatic Default Originator not configured. + * + * @return from + */ + String getFrom(); + + /** + * Indicates if the batch has been canceled or not. + * + * @return canceled + * @readOnly This field is returned by the server and cannot be modified + */ + Boolean getCanceled(); + + /** + * Get body + * + * @return body + */ + MediaBody getBody(); + + /** + * Contains the parameters that will be used for customizing the message for each recipient. Click here to learn more about + * parameterization. + * + * @return parameters + */ + Map> getParameters(); + + /** Media message */ + public class TypeEnum extends EnumDynamic { + public static final TypeEnum MT_MEDIA = new TypeEnum("mt_media"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>(TypeEnum.class, TypeEnum::new, Arrays.asList(MT_MEDIA)); + + private TypeEnum(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static TypeEnum from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(TypeEnum e) { + return ENUM_SUPPORT.valueOf(e); + } + } + + /** + * Timestamp for when batch was created. YYYY-MM-DDThh:mm:ss.SSSZ format + * + * @return createdAt + * @readOnly This field is returned by the server and cannot be modified + */ + Instant getCreatedAt(); + + /** + * Timestamp for when batch was last updated. YYYY-MM-DDThh:mm:ss.SSSZ format + * + * @return modifiedAt + * @readOnly This field is returned by the server and cannot be modified + */ + Instant getModifiedAt(); + + /** + * Get deliveryReport + * + * @return deliveryReport + */ + DeliveryReportType getDeliveryReport(); + + /** + * If set in the future the message will be delayed until send_at occurs. Must be before + * expire_at. If set in the past messages will be sent immediately. + * YYYY-MM-DDThh:mm:ss.SSSZ format + * + * @return sendAt + */ + Instant getSendAt(); + + /** + * If set the system will stop trying to deliver the message at this point. Must be after + * send_at. Default and max is 3 days after send_at. YYYY-MM-DDThh:mm:ss.SSSZ format + * + * @return expireAt + */ + Instant getExpireAt(); + + /** + * Override the default callback URL for this batch. Must be valid URL. + * + * @return callbackUrl + */ + String getCallbackUrl(); + + /** + * The client identifier of a batch message. If set, the identifier will be added in the delivery + * report/callback of this batch + * + * @return clientReference + */ + String getClientReference(); + + /** + * If set to true then feedback + * is expected after successful delivery. + * + * @return feedbackEnabled + */ + Boolean getFeedbackEnabled(); + + /** + * Whether or not you want the media included in your message to be checked against Sinch MMS channel best practices. If set to true, your + * message will be rejected if it doesn't conform to the listed recommendations, otherwise no + * validation will be performed. + * + * @return strictValidation + */ + Boolean getStrictValidation(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new MediaResponseImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param id see getter + * @return Current builder + * @see #getId + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setId(String id); + + /** + * see getter + * + * @param to see getter + * @return Current builder + * @see #getTo + */ + Builder setTo(List to); + + /** + * see getter + * + * @param from see getter + * @return Current builder + * @see #getFrom + */ + Builder setFrom(String from); + + /** + * see getter + * + * @param canceled see getter + * @return Current builder + * @see #getCanceled + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setCanceled(Boolean canceled); + + /** + * see getter + * + * @param body see getter + * @return Current builder + * @see #getBody + */ + Builder setBody(MediaBody body); + + /** + * see getter + * + * @param parameters see getter + * @return Current builder + * @see #getParameters + */ + Builder setParameters(Map> parameters); + + /** + * see getter + * + * @param createdAt see getter + * @return Current builder + * @see #getCreatedAt + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setCreatedAt(Instant createdAt); + + /** + * see getter + * + * @param modifiedAt see getter + * @return Current builder + * @see #getModifiedAt + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setModifiedAt(Instant modifiedAt); + + /** + * see getter + * + * @param deliveryReport see getter + * @return Current builder + * @see #getDeliveryReport + */ + Builder setDeliveryReport(DeliveryReportType deliveryReport); + + /** + * see getter + * + * @param sendAt see getter + * @return Current builder + * @see #getSendAt + */ + Builder setSendAt(Instant sendAt); + + /** + * see getter + * + * @param expireAt see getter + * @return Current builder + * @see #getExpireAt + */ + Builder setExpireAt(Instant expireAt); + + /** + * see getter + * + * @param callbackUrl see getter + * @return Current builder + * @see #getCallbackUrl + */ + Builder setCallbackUrl(String callbackUrl); + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * see getter + * + * @param feedbackEnabled see getter + * @return Current builder + * @see #getFeedbackEnabled + */ + Builder setFeedbackEnabled(Boolean feedbackEnabled); + + /** + * see getter + * + * @param strictValidation see getter + * @return Current builder + * @see #getStrictValidation + */ + Builder setStrictValidation(Boolean strictValidation); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + MediaResponse build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/MediaResponseImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/MediaResponseImpl.java new file mode 100644 index 000000000..cc0d03c06 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/MediaResponseImpl.java @@ -0,0 +1,524 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.response; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import com.sinch.sdk.domains.sms.models.v1.batches.MediaBody; +import java.time.Instant; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@JsonPropertyOrder({ + MediaResponseImpl.JSON_PROPERTY_ID, + MediaResponseImpl.JSON_PROPERTY_TO, + MediaResponseImpl.JSON_PROPERTY_FROM, + MediaResponseImpl.JSON_PROPERTY_CANCELED, + MediaResponseImpl.JSON_PROPERTY_BODY, + MediaResponseImpl.JSON_PROPERTY_PARAMETERS, + MediaResponseImpl.JSON_PROPERTY_TYPE, + MediaResponseImpl.JSON_PROPERTY_CREATED_AT, + MediaResponseImpl.JSON_PROPERTY_MODIFIED_AT, + MediaResponseImpl.JSON_PROPERTY_DELIVERY_REPORT, + MediaResponseImpl.JSON_PROPERTY_SEND_AT, + MediaResponseImpl.JSON_PROPERTY_EXPIRE_AT, + MediaResponseImpl.JSON_PROPERTY_CALLBACK_URL, + MediaResponseImpl.JSON_PROPERTY_CLIENT_REFERENCE, + MediaResponseImpl.JSON_PROPERTY_FEEDBACK_ENABLED, + MediaResponseImpl.JSON_PROPERTY_STRICT_VALIDATION +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class MediaResponseImpl implements MediaResponse, BatchResponse { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_ID = "id"; + + private OptionalValue id; + + public static final String JSON_PROPERTY_TO = "to"; + + private OptionalValue> to; + + public static final String JSON_PROPERTY_FROM = "from"; + + private OptionalValue from; + + public static final String JSON_PROPERTY_CANCELED = "canceled"; + + private OptionalValue canceled; + + public static final String JSON_PROPERTY_BODY = "body"; + + private OptionalValue body; + + public static final String JSON_PROPERTY_PARAMETERS = "parameters"; + + private OptionalValue>> parameters; + + public static final String JSON_PROPERTY_TYPE = "type"; + + private OptionalValue type; + + public static final String JSON_PROPERTY_CREATED_AT = "created_at"; + + private OptionalValue createdAt; + + public static final String JSON_PROPERTY_MODIFIED_AT = "modified_at"; + + private OptionalValue modifiedAt; + + public static final String JSON_PROPERTY_DELIVERY_REPORT = "delivery_report"; + + private OptionalValue deliveryReport; + + public static final String JSON_PROPERTY_SEND_AT = "send_at"; + + private OptionalValue sendAt; + + public static final String JSON_PROPERTY_EXPIRE_AT = "expire_at"; + + private OptionalValue expireAt; + + public static final String JSON_PROPERTY_CALLBACK_URL = "callback_url"; + + private OptionalValue callbackUrl; + + public static final String JSON_PROPERTY_CLIENT_REFERENCE = "client_reference"; + + private OptionalValue clientReference; + + public static final String JSON_PROPERTY_FEEDBACK_ENABLED = "feedback_enabled"; + + private OptionalValue feedbackEnabled; + + public static final String JSON_PROPERTY_STRICT_VALIDATION = "strict_validation"; + + private OptionalValue strictValidation; + + public MediaResponseImpl() {} + + protected MediaResponseImpl( + OptionalValue id, + OptionalValue> to, + OptionalValue from, + OptionalValue canceled, + OptionalValue body, + OptionalValue>> parameters, + OptionalValue type, + OptionalValue createdAt, + OptionalValue modifiedAt, + OptionalValue deliveryReport, + OptionalValue sendAt, + OptionalValue expireAt, + OptionalValue callbackUrl, + OptionalValue clientReference, + OptionalValue feedbackEnabled, + OptionalValue strictValidation) { + this.id = id; + this.to = to; + this.from = from; + this.canceled = canceled; + this.body = body; + this.parameters = parameters; + this.type = type; + this.createdAt = createdAt; + this.modifiedAt = modifiedAt; + this.deliveryReport = deliveryReport; + this.sendAt = sendAt; + this.expireAt = expireAt; + this.callbackUrl = callbackUrl; + this.clientReference = clientReference; + this.feedbackEnabled = feedbackEnabled; + this.strictValidation = strictValidation; + } + + @JsonIgnore + public String getId() { + return id.orElse(null); + } + + @JsonIgnore + public OptionalValue id() { + return id; + } + + @JsonIgnore + public List getTo() { + return to.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TO) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> to() { + return to; + } + + @JsonIgnore + public String getFrom() { + return from.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue from() { + return from; + } + + @JsonIgnore + public Boolean getCanceled() { + return canceled.orElse(null); + } + + @JsonIgnore + public OptionalValue canceled() { + return canceled; + } + + @JsonIgnore + public MediaBody getBody() { + return body.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_BODY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue body() { + return body; + } + + @JsonIgnore + public Map> getParameters() { + return parameters.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_PARAMETERS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue>> parameters() { + return parameters; + } + + @JsonIgnore + public TypeEnum getType() { + return type.orElse(null); + } + + @JsonIgnore + public OptionalValue type() { + return type; + } + + @JsonIgnore + public Instant getCreatedAt() { + return createdAt.orElse(null); + } + + @JsonIgnore + public OptionalValue createdAt() { + return createdAt; + } + + @JsonIgnore + public Instant getModifiedAt() { + return modifiedAt.orElse(null); + } + + @JsonIgnore + public OptionalValue modifiedAt() { + return modifiedAt; + } + + @JsonIgnore + public DeliveryReportType getDeliveryReport() { + return deliveryReport.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue deliveryReport() { + return deliveryReport; + } + + @JsonIgnore + public Instant getSendAt() { + return sendAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue sendAt() { + return sendAt; + } + + @JsonIgnore + public Instant getExpireAt() { + return expireAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue expireAt() { + return expireAt; + } + + @JsonIgnore + public String getCallbackUrl() { + return callbackUrl.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue callbackUrl() { + return callbackUrl; + } + + @JsonIgnore + public String getClientReference() { + return clientReference.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue clientReference() { + return clientReference; + } + + @JsonIgnore + public Boolean getFeedbackEnabled() { + return feedbackEnabled.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue feedbackEnabled() { + return feedbackEnabled; + } + + @JsonIgnore + public Boolean getStrictValidation() { + return strictValidation.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_STRICT_VALIDATION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue strictValidation() { + return strictValidation; + } + + /** Return true if this MediaResponse object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MediaResponseImpl mediaResponse = (MediaResponseImpl) o; + return Objects.equals(this.id, mediaResponse.id) + && Objects.equals(this.to, mediaResponse.to) + && Objects.equals(this.from, mediaResponse.from) + && Objects.equals(this.canceled, mediaResponse.canceled) + && Objects.equals(this.body, mediaResponse.body) + && Objects.equals(this.parameters, mediaResponse.parameters) + && Objects.equals(this.type, mediaResponse.type) + && Objects.equals(this.createdAt, mediaResponse.createdAt) + && Objects.equals(this.modifiedAt, mediaResponse.modifiedAt) + && Objects.equals(this.deliveryReport, mediaResponse.deliveryReport) + && Objects.equals(this.sendAt, mediaResponse.sendAt) + && Objects.equals(this.expireAt, mediaResponse.expireAt) + && Objects.equals(this.callbackUrl, mediaResponse.callbackUrl) + && Objects.equals(this.clientReference, mediaResponse.clientReference) + && Objects.equals(this.feedbackEnabled, mediaResponse.feedbackEnabled) + && Objects.equals(this.strictValidation, mediaResponse.strictValidation); + } + + @Override + public int hashCode() { + return Objects.hash( + id, + to, + from, + canceled, + body, + parameters, + type, + createdAt, + modifiedAt, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + strictValidation); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class MediaResponseImpl {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" to: ").append(toIndentedString(to)).append("\n"); + sb.append(" from: ").append(toIndentedString(from)).append("\n"); + sb.append(" canceled: ").append(toIndentedString(canceled)).append("\n"); + sb.append(" body: ").append(toIndentedString(body)).append("\n"); + sb.append(" parameters: ").append(toIndentedString(parameters)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); + sb.append(" modifiedAt: ").append(toIndentedString(modifiedAt)).append("\n"); + sb.append(" deliveryReport: ").append(toIndentedString(deliveryReport)).append("\n"); + sb.append(" sendAt: ").append(toIndentedString(sendAt)).append("\n"); + sb.append(" expireAt: ").append(toIndentedString(expireAt)).append("\n"); + sb.append(" callbackUrl: ").append(toIndentedString(callbackUrl)).append("\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append(" feedbackEnabled: ").append(toIndentedString(feedbackEnabled)).append("\n"); + sb.append(" strictValidation: ").append(toIndentedString(strictValidation)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements MediaResponse.Builder { + OptionalValue id = OptionalValue.empty(); + OptionalValue> to = OptionalValue.empty(); + OptionalValue from = OptionalValue.empty(); + OptionalValue canceled = OptionalValue.empty(); + OptionalValue body = OptionalValue.empty(); + OptionalValue>> parameters = OptionalValue.empty(); + OptionalValue type = OptionalValue.of(TypeEnum.MT_MEDIA); + OptionalValue createdAt = OptionalValue.empty(); + OptionalValue modifiedAt = OptionalValue.empty(); + OptionalValue deliveryReport = OptionalValue.empty(); + OptionalValue sendAt = OptionalValue.empty(); + OptionalValue expireAt = OptionalValue.empty(); + OptionalValue callbackUrl = OptionalValue.empty(); + OptionalValue clientReference = OptionalValue.empty(); + OptionalValue feedbackEnabled = OptionalValue.empty(); + OptionalValue strictValidation = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_ID) + public Builder setId(String id) { + this.id = OptionalValue.of(id); + return this; + } + + @JsonProperty(JSON_PROPERTY_TO) + public Builder setTo(List to) { + this.to = OptionalValue.of(to); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM) + public Builder setFrom(String from) { + this.from = OptionalValue.of(from); + return this; + } + + @JsonProperty(JSON_PROPERTY_CANCELED) + public Builder setCanceled(Boolean canceled) { + this.canceled = OptionalValue.of(canceled); + return this; + } + + @JsonProperty(JSON_PROPERTY_BODY) + public Builder setBody(MediaBody body) { + this.body = OptionalValue.of(body); + return this; + } + + @JsonProperty(JSON_PROPERTY_PARAMETERS) + public Builder setParameters(Map> parameters) { + this.parameters = OptionalValue.of(parameters); + return this; + } + + @JsonProperty(JSON_PROPERTY_CREATED_AT) + public Builder setCreatedAt(Instant createdAt) { + this.createdAt = OptionalValue.of(createdAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_MODIFIED_AT) + public Builder setModifiedAt(Instant modifiedAt) { + this.modifiedAt = OptionalValue.of(modifiedAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + public Builder setDeliveryReport(DeliveryReportType deliveryReport) { + this.deliveryReport = OptionalValue.of(deliveryReport); + return this; + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + public Builder setSendAt(Instant sendAt) { + this.sendAt = OptionalValue.of(sendAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + public Builder setExpireAt(Instant expireAt) { + this.expireAt = OptionalValue.of(expireAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + public Builder setCallbackUrl(String callbackUrl) { + this.callbackUrl = OptionalValue.of(callbackUrl); + return this; + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + public Builder setFeedbackEnabled(Boolean feedbackEnabled) { + this.feedbackEnabled = OptionalValue.of(feedbackEnabled); + return this; + } + + @JsonProperty(JSON_PROPERTY_STRICT_VALIDATION) + public Builder setStrictValidation(Boolean strictValidation) { + this.strictValidation = OptionalValue.of(strictValidation); + return this; + } + + public MediaResponse build() { + return new MediaResponseImpl( + id, + to, + from, + canceled, + body, + parameters, + type, + createdAt, + modifiedAt, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + strictValidation); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/TextResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/TextResponse.java new file mode 100644 index 000000000..5cbeac7e9 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/TextResponse.java @@ -0,0 +1,406 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches.response; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import java.time.Instant; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +/** TextResponse */ +@JsonDeserialize(builder = TextResponseImpl.Builder.class) +public interface TextResponse extends BatchResponse { + + /** + * Unique identifier for batch + * + * @return id + * @readOnly This field is returned by the server and cannot be modified + */ + String getId(); + + /** + * List of Phone numbers and group IDs that will receive the batch. More info + * + * @return to + */ + List getTo(); + + /** + * Sender number. Must be valid phone number, short code or alphanumeric. Required if Automatic + * Default Originator not configured. + * + * @return from + */ + String getFrom(); + + /** + * Indicates if the batch has been canceled or not. + * + * @return canceled + * @readOnly This field is returned by the server and cannot be modified + */ + Boolean getCanceled(); + + /** + * Contains the parameters that will be used for customizing the message for each recipient. Click here to learn more about + * parameterization. + * + * @return parameters + */ + Map> getParameters(); + + /** + * The message content + * + * @return body + */ + String getBody(); + + /** Regular SMS */ + public class TypeEnum extends EnumDynamic { + public static final TypeEnum MT_TEXT = new TypeEnum("mt_text"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>(TypeEnum.class, TypeEnum::new, Arrays.asList(MT_TEXT)); + + private TypeEnum(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static TypeEnum from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(TypeEnum e) { + return ENUM_SUPPORT.valueOf(e); + } + } + + /** + * Timestamp for when batch was created. Formatted as ISO-8601:YYYY-MM-DDThh:mm:ss.SSSZ + * . + * + * @return createdAt + * @readOnly This field is returned by the server and cannot be modified + */ + Instant getCreatedAt(); + + /** + * Timestamp for when batch was last updated. Formatted as ISO-8601:YYYY-MM-DDThh:mm:ss.SSSZ + * . + * + * @return modifiedAt + * @readOnly This field is returned by the server and cannot be modified + */ + Instant getModifiedAt(); + + /** + * Get deliveryReport + * + * @return deliveryReport + */ + DeliveryReportType getDeliveryReport(); + + /** + * If set in the future, the message will be delayed until send_at occurs. Must be + * before expire_at. If set in the past, messages will be sent immediately. Formatted + * as ISO-8601: + * YYYY-MM-DDThh:mm:ss.SSSZ. + * + * @return sendAt + */ + Instant getSendAt(); + + /** + * If set, the system will stop trying to deliver the message at this point. Must be after + * send_at. Default and max is 3 days after send_at. Formatted as ISO-8601: YYYY-MM-DDThh:mm:ss.SSSZ + * . + * + * @return expireAt + */ + Instant getExpireAt(); + + /** + * Override the default callback URL for this batch. Must be valid URL. + * + * @return callbackUrl + */ + String getCallbackUrl(); + + /** + * The client identifier of a batch message. If set, the identifier will be added in the delivery + * report/callback of this batch + * + * @return clientReference + */ + String getClientReference(); + + /** + * If set to true, then feedback + * is expected after successful delivery. + * + * @return feedbackEnabled + */ + Boolean getFeedbackEnabled(); + + /** + * Shows message on screen without user interaction while not saving the message to the inbox. + * + * @return flashMessage + */ + Boolean getFlashMessage(); + + /** + * If set to true the message will be shortened when exceeding one part. + * + * @return truncateConcat + */ + Boolean getTruncateConcat(); + + /** + * Message will be dispatched only if it is not split to more parts than Max Number of Message + * Parts + * + *

minimum: 1 + * + * @return maxNumberOfMessageParts + */ + Integer getMaxNumberOfMessageParts(); + + /** + * The type of number for the sender number. Use to override the automatic detection. + * + *

minimum: 0 maximum: 6 + * + * @return fromTon + */ + Integer getFromTon(); + + /** + * Number Plan Indicator for the sender number. Use to override the automatic detection. + * + *

minimum: 0 maximum: 18 + * + * @return fromNpi + */ + Integer getFromNpi(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new TextResponseImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param id see getter + * @return Current builder + * @see #getId + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setId(String id); + + /** + * see getter + * + * @param to see getter + * @return Current builder + * @see #getTo + */ + Builder setTo(List to); + + /** + * see getter + * + * @param from see getter + * @return Current builder + * @see #getFrom + */ + Builder setFrom(String from); + + /** + * see getter + * + * @param canceled see getter + * @return Current builder + * @see #getCanceled + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setCanceled(Boolean canceled); + + /** + * see getter + * + * @param parameters see getter + * @return Current builder + * @see #getParameters + */ + Builder setParameters(Map> parameters); + + /** + * see getter + * + * @param body see getter + * @return Current builder + * @see #getBody + */ + Builder setBody(String body); + + /** + * see getter + * + * @param createdAt see getter + * @return Current builder + * @see #getCreatedAt + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setCreatedAt(Instant createdAt); + + /** + * see getter + * + * @param modifiedAt see getter + * @return Current builder + * @see #getModifiedAt + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setModifiedAt(Instant modifiedAt); + + /** + * see getter + * + * @param deliveryReport see getter + * @return Current builder + * @see #getDeliveryReport + */ + Builder setDeliveryReport(DeliveryReportType deliveryReport); + + /** + * see getter + * + * @param sendAt see getter + * @return Current builder + * @see #getSendAt + */ + Builder setSendAt(Instant sendAt); + + /** + * see getter + * + * @param expireAt see getter + * @return Current builder + * @see #getExpireAt + */ + Builder setExpireAt(Instant expireAt); + + /** + * see getter + * + * @param callbackUrl see getter + * @return Current builder + * @see #getCallbackUrl + */ + Builder setCallbackUrl(String callbackUrl); + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * see getter + * + * @param feedbackEnabled see getter + * @return Current builder + * @see #getFeedbackEnabled + */ + Builder setFeedbackEnabled(Boolean feedbackEnabled); + + /** + * see getter + * + * @param flashMessage see getter + * @return Current builder + * @see #getFlashMessage + */ + Builder setFlashMessage(Boolean flashMessage); + + /** + * see getter + * + * @param truncateConcat see getter + * @return Current builder + * @see #getTruncateConcat + */ + Builder setTruncateConcat(Boolean truncateConcat); + + /** + * see getter + * + * @param maxNumberOfMessageParts see getter + * @return Current builder + * @see #getMaxNumberOfMessageParts + */ + Builder setMaxNumberOfMessageParts(Integer maxNumberOfMessageParts); + + /** + * see getter + * + * @param fromTon see getter + * @return Current builder + * @see #getFromTon + */ + Builder setFromTon(Integer fromTon); + + /** + * see getter + * + * @param fromNpi see getter + * @return Current builder + * @see #getFromNpi + */ + Builder setFromNpi(Integer fromNpi); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + TextResponse build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/TextResponseImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/TextResponseImpl.java new file mode 100644 index 000000000..eb8a3cc9b --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/TextResponseImpl.java @@ -0,0 +1,642 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.response; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import java.time.Instant; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@JsonPropertyOrder({ + TextResponseImpl.JSON_PROPERTY_ID, + TextResponseImpl.JSON_PROPERTY_TO, + TextResponseImpl.JSON_PROPERTY_FROM, + TextResponseImpl.JSON_PROPERTY_CANCELED, + TextResponseImpl.JSON_PROPERTY_PARAMETERS, + TextResponseImpl.JSON_PROPERTY_BODY, + TextResponseImpl.JSON_PROPERTY_TYPE, + TextResponseImpl.JSON_PROPERTY_CREATED_AT, + TextResponseImpl.JSON_PROPERTY_MODIFIED_AT, + TextResponseImpl.JSON_PROPERTY_DELIVERY_REPORT, + TextResponseImpl.JSON_PROPERTY_SEND_AT, + TextResponseImpl.JSON_PROPERTY_EXPIRE_AT, + TextResponseImpl.JSON_PROPERTY_CALLBACK_URL, + TextResponseImpl.JSON_PROPERTY_CLIENT_REFERENCE, + TextResponseImpl.JSON_PROPERTY_FEEDBACK_ENABLED, + TextResponseImpl.JSON_PROPERTY_FLASH_MESSAGE, + TextResponseImpl.JSON_PROPERTY_TRUNCATE_CONCAT, + TextResponseImpl.JSON_PROPERTY_MAX_NUMBER_OF_MESSAGE_PARTS, + TextResponseImpl.JSON_PROPERTY_FROM_TON, + TextResponseImpl.JSON_PROPERTY_FROM_NPI +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class TextResponseImpl implements TextResponse, BatchResponse { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_ID = "id"; + + private OptionalValue id; + + public static final String JSON_PROPERTY_TO = "to"; + + private OptionalValue> to; + + public static final String JSON_PROPERTY_FROM = "from"; + + private OptionalValue from; + + public static final String JSON_PROPERTY_CANCELED = "canceled"; + + private OptionalValue canceled; + + public static final String JSON_PROPERTY_PARAMETERS = "parameters"; + + private OptionalValue>> parameters; + + public static final String JSON_PROPERTY_BODY = "body"; + + private OptionalValue body; + + public static final String JSON_PROPERTY_TYPE = "type"; + + private OptionalValue type; + + public static final String JSON_PROPERTY_CREATED_AT = "created_at"; + + private OptionalValue createdAt; + + public static final String JSON_PROPERTY_MODIFIED_AT = "modified_at"; + + private OptionalValue modifiedAt; + + public static final String JSON_PROPERTY_DELIVERY_REPORT = "delivery_report"; + + private OptionalValue deliveryReport; + + public static final String JSON_PROPERTY_SEND_AT = "send_at"; + + private OptionalValue sendAt; + + public static final String JSON_PROPERTY_EXPIRE_AT = "expire_at"; + + private OptionalValue expireAt; + + public static final String JSON_PROPERTY_CALLBACK_URL = "callback_url"; + + private OptionalValue callbackUrl; + + public static final String JSON_PROPERTY_CLIENT_REFERENCE = "client_reference"; + + private OptionalValue clientReference; + + public static final String JSON_PROPERTY_FEEDBACK_ENABLED = "feedback_enabled"; + + private OptionalValue feedbackEnabled; + + public static final String JSON_PROPERTY_FLASH_MESSAGE = "flash_message"; + + private OptionalValue flashMessage; + + public static final String JSON_PROPERTY_TRUNCATE_CONCAT = "truncate_concat"; + + private OptionalValue truncateConcat; + + public static final String JSON_PROPERTY_MAX_NUMBER_OF_MESSAGE_PARTS = + "max_number_of_message_parts"; + + private OptionalValue maxNumberOfMessageParts; + + public static final String JSON_PROPERTY_FROM_TON = "from_ton"; + + private OptionalValue fromTon; + + public static final String JSON_PROPERTY_FROM_NPI = "from_npi"; + + private OptionalValue fromNpi; + + public TextResponseImpl() {} + + protected TextResponseImpl( + OptionalValue id, + OptionalValue> to, + OptionalValue from, + OptionalValue canceled, + OptionalValue>> parameters, + OptionalValue body, + OptionalValue type, + OptionalValue createdAt, + OptionalValue modifiedAt, + OptionalValue deliveryReport, + OptionalValue sendAt, + OptionalValue expireAt, + OptionalValue callbackUrl, + OptionalValue clientReference, + OptionalValue feedbackEnabled, + OptionalValue flashMessage, + OptionalValue truncateConcat, + OptionalValue maxNumberOfMessageParts, + OptionalValue fromTon, + OptionalValue fromNpi) { + this.id = id; + this.to = to; + this.from = from; + this.canceled = canceled; + this.parameters = parameters; + this.body = body; + this.type = type; + this.createdAt = createdAt; + this.modifiedAt = modifiedAt; + this.deliveryReport = deliveryReport; + this.sendAt = sendAt; + this.expireAt = expireAt; + this.callbackUrl = callbackUrl; + this.clientReference = clientReference; + this.feedbackEnabled = feedbackEnabled; + this.flashMessage = flashMessage; + this.truncateConcat = truncateConcat; + this.maxNumberOfMessageParts = maxNumberOfMessageParts; + this.fromTon = fromTon; + this.fromNpi = fromNpi; + } + + @JsonIgnore + public String getId() { + return id.orElse(null); + } + + @JsonIgnore + public OptionalValue id() { + return id; + } + + @JsonIgnore + public List getTo() { + return to.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TO) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> to() { + return to; + } + + @JsonIgnore + public String getFrom() { + return from.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue from() { + return from; + } + + @JsonIgnore + public Boolean getCanceled() { + return canceled.orElse(null); + } + + @JsonIgnore + public OptionalValue canceled() { + return canceled; + } + + @JsonIgnore + public Map> getParameters() { + return parameters.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_PARAMETERS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue>> parameters() { + return parameters; + } + + @JsonIgnore + public String getBody() { + return body.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_BODY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue body() { + return body; + } + + @JsonIgnore + public TypeEnum getType() { + return type.orElse(null); + } + + @JsonIgnore + public OptionalValue type() { + return type; + } + + @JsonIgnore + public Instant getCreatedAt() { + return createdAt.orElse(null); + } + + @JsonIgnore + public OptionalValue createdAt() { + return createdAt; + } + + @JsonIgnore + public Instant getModifiedAt() { + return modifiedAt.orElse(null); + } + + @JsonIgnore + public OptionalValue modifiedAt() { + return modifiedAt; + } + + @JsonIgnore + public DeliveryReportType getDeliveryReport() { + return deliveryReport.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue deliveryReport() { + return deliveryReport; + } + + @JsonIgnore + public Instant getSendAt() { + return sendAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue sendAt() { + return sendAt; + } + + @JsonIgnore + public Instant getExpireAt() { + return expireAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue expireAt() { + return expireAt; + } + + @JsonIgnore + public String getCallbackUrl() { + return callbackUrl.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue callbackUrl() { + return callbackUrl; + } + + @JsonIgnore + public String getClientReference() { + return clientReference.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue clientReference() { + return clientReference; + } + + @JsonIgnore + public Boolean getFeedbackEnabled() { + return feedbackEnabled.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue feedbackEnabled() { + return feedbackEnabled; + } + + @JsonIgnore + public Boolean getFlashMessage() { + return flashMessage.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FLASH_MESSAGE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue flashMessage() { + return flashMessage; + } + + @JsonIgnore + public Boolean getTruncateConcat() { + return truncateConcat.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TRUNCATE_CONCAT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue truncateConcat() { + return truncateConcat; + } + + @JsonIgnore + public Integer getMaxNumberOfMessageParts() { + return maxNumberOfMessageParts.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_MAX_NUMBER_OF_MESSAGE_PARTS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue maxNumberOfMessageParts() { + return maxNumberOfMessageParts; + } + + @JsonIgnore + public Integer getFromTon() { + return fromTon.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM_TON) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue fromTon() { + return fromTon; + } + + @JsonIgnore + public Integer getFromNpi() { + return fromNpi.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM_NPI) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue fromNpi() { + return fromNpi; + } + + /** Return true if this TextResponse object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TextResponseImpl textResponse = (TextResponseImpl) o; + return Objects.equals(this.id, textResponse.id) + && Objects.equals(this.to, textResponse.to) + && Objects.equals(this.from, textResponse.from) + && Objects.equals(this.canceled, textResponse.canceled) + && Objects.equals(this.parameters, textResponse.parameters) + && Objects.equals(this.body, textResponse.body) + && Objects.equals(this.type, textResponse.type) + && Objects.equals(this.createdAt, textResponse.createdAt) + && Objects.equals(this.modifiedAt, textResponse.modifiedAt) + && Objects.equals(this.deliveryReport, textResponse.deliveryReport) + && Objects.equals(this.sendAt, textResponse.sendAt) + && Objects.equals(this.expireAt, textResponse.expireAt) + && Objects.equals(this.callbackUrl, textResponse.callbackUrl) + && Objects.equals(this.clientReference, textResponse.clientReference) + && Objects.equals(this.feedbackEnabled, textResponse.feedbackEnabled) + && Objects.equals(this.flashMessage, textResponse.flashMessage) + && Objects.equals(this.truncateConcat, textResponse.truncateConcat) + && Objects.equals(this.maxNumberOfMessageParts, textResponse.maxNumberOfMessageParts) + && Objects.equals(this.fromTon, textResponse.fromTon) + && Objects.equals(this.fromNpi, textResponse.fromNpi); + } + + @Override + public int hashCode() { + return Objects.hash( + id, + to, + from, + canceled, + parameters, + body, + type, + createdAt, + modifiedAt, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + flashMessage, + truncateConcat, + maxNumberOfMessageParts, + fromTon, + fromNpi); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TextResponseImpl {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" to: ").append(toIndentedString(to)).append("\n"); + sb.append(" from: ").append(toIndentedString(from)).append("\n"); + sb.append(" canceled: ").append(toIndentedString(canceled)).append("\n"); + sb.append(" parameters: ").append(toIndentedString(parameters)).append("\n"); + sb.append(" body: ").append(toIndentedString(body)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); + sb.append(" modifiedAt: ").append(toIndentedString(modifiedAt)).append("\n"); + sb.append(" deliveryReport: ").append(toIndentedString(deliveryReport)).append("\n"); + sb.append(" sendAt: ").append(toIndentedString(sendAt)).append("\n"); + sb.append(" expireAt: ").append(toIndentedString(expireAt)).append("\n"); + sb.append(" callbackUrl: ").append(toIndentedString(callbackUrl)).append("\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append(" feedbackEnabled: ").append(toIndentedString(feedbackEnabled)).append("\n"); + sb.append(" flashMessage: ").append(toIndentedString(flashMessage)).append("\n"); + sb.append(" truncateConcat: ").append(toIndentedString(truncateConcat)).append("\n"); + sb.append(" maxNumberOfMessageParts: ") + .append(toIndentedString(maxNumberOfMessageParts)) + .append("\n"); + sb.append(" fromTon: ").append(toIndentedString(fromTon)).append("\n"); + sb.append(" fromNpi: ").append(toIndentedString(fromNpi)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements TextResponse.Builder { + OptionalValue id = OptionalValue.empty(); + OptionalValue> to = OptionalValue.empty(); + OptionalValue from = OptionalValue.empty(); + OptionalValue canceled = OptionalValue.empty(); + OptionalValue>> parameters = OptionalValue.empty(); + OptionalValue body = OptionalValue.empty(); + OptionalValue type = OptionalValue.of(TypeEnum.MT_TEXT); + OptionalValue createdAt = OptionalValue.empty(); + OptionalValue modifiedAt = OptionalValue.empty(); + OptionalValue deliveryReport = OptionalValue.empty(); + OptionalValue sendAt = OptionalValue.empty(); + OptionalValue expireAt = OptionalValue.empty(); + OptionalValue callbackUrl = OptionalValue.empty(); + OptionalValue clientReference = OptionalValue.empty(); + OptionalValue feedbackEnabled = OptionalValue.empty(); + OptionalValue flashMessage = OptionalValue.empty(); + OptionalValue truncateConcat = OptionalValue.empty(); + OptionalValue maxNumberOfMessageParts = OptionalValue.empty(); + OptionalValue fromTon = OptionalValue.empty(); + OptionalValue fromNpi = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_ID) + public Builder setId(String id) { + this.id = OptionalValue.of(id); + return this; + } + + @JsonProperty(JSON_PROPERTY_TO) + public Builder setTo(List to) { + this.to = OptionalValue.of(to); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM) + public Builder setFrom(String from) { + this.from = OptionalValue.of(from); + return this; + } + + @JsonProperty(JSON_PROPERTY_CANCELED) + public Builder setCanceled(Boolean canceled) { + this.canceled = OptionalValue.of(canceled); + return this; + } + + @JsonProperty(JSON_PROPERTY_PARAMETERS) + public Builder setParameters(Map> parameters) { + this.parameters = OptionalValue.of(parameters); + return this; + } + + @JsonProperty(JSON_PROPERTY_BODY) + public Builder setBody(String body) { + this.body = OptionalValue.of(body); + return this; + } + + @JsonProperty(JSON_PROPERTY_CREATED_AT) + public Builder setCreatedAt(Instant createdAt) { + this.createdAt = OptionalValue.of(createdAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_MODIFIED_AT) + public Builder setModifiedAt(Instant modifiedAt) { + this.modifiedAt = OptionalValue.of(modifiedAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORT) + public Builder setDeliveryReport(DeliveryReportType deliveryReport) { + this.deliveryReport = OptionalValue.of(deliveryReport); + return this; + } + + @JsonProperty(JSON_PROPERTY_SEND_AT) + public Builder setSendAt(Instant sendAt) { + this.sendAt = OptionalValue.of(sendAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_EXPIRE_AT) + public Builder setExpireAt(Instant expireAt) { + this.expireAt = OptionalValue.of(expireAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_CALLBACK_URL) + public Builder setCallbackUrl(String callbackUrl) { + this.callbackUrl = OptionalValue.of(callbackUrl); + return this; + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + @JsonProperty(JSON_PROPERTY_FEEDBACK_ENABLED) + public Builder setFeedbackEnabled(Boolean feedbackEnabled) { + this.feedbackEnabled = OptionalValue.of(feedbackEnabled); + return this; + } + + @JsonProperty(JSON_PROPERTY_FLASH_MESSAGE) + public Builder setFlashMessage(Boolean flashMessage) { + this.flashMessage = OptionalValue.of(flashMessage); + return this; + } + + @JsonProperty(JSON_PROPERTY_TRUNCATE_CONCAT) + public Builder setTruncateConcat(Boolean truncateConcat) { + this.truncateConcat = OptionalValue.of(truncateConcat); + return this; + } + + @JsonProperty(JSON_PROPERTY_MAX_NUMBER_OF_MESSAGE_PARTS) + public Builder setMaxNumberOfMessageParts(Integer maxNumberOfMessageParts) { + this.maxNumberOfMessageParts = OptionalValue.of(maxNumberOfMessageParts); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM_TON) + public Builder setFromTon(Integer fromTon) { + this.fromTon = OptionalValue.of(fromTon); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM_NPI) + public Builder setFromNpi(Integer fromNpi) { + this.fromNpi = OptionalValue.of(fromNpi); + return this; + } + + public TextResponse build() { + return new TextResponseImpl( + id, + to, + from, + canceled, + parameters, + body, + type, + createdAt, + modifiedAt, + deliveryReport, + sendAt, + expireAt, + callbackUrl, + clientReference, + feedbackEnabled, + flashMessage, + truncateConcat, + maxNumberOfMessageParts, + fromTon, + fromNpi); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/internal/ApiBatchList.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/internal/ApiBatchList.java new file mode 100644 index 000000000..4614669ab --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/internal/ApiBatchList.java @@ -0,0 +1,104 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches.response.internal; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse; +import java.util.List; + +/** ApiBatchList */ +@JsonDeserialize(builder = ApiBatchListImpl.Builder.class) +public interface ApiBatchList { + + /** + * The total number of entries matching the given filters. + * + * @return count + */ + Long getCount(); + + /** + * The requested page. + * + * @return page + */ + Integer getPage(); + + /** + * The page of batches matching the given filters. + * + * @return items + */ + List getItems(); + + /** + * The number of entries returned in this request. + * + * @return pageSize + */ + Integer getPageSize(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new ApiBatchListImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param count see getter + * @return Current builder + * @see #getCount + */ + Builder setCount(Long count); + + /** + * see getter + * + * @param page see getter + * @return Current builder + * @see #getPage + */ + Builder setPage(Integer page); + + /** + * see getter + * + * @param items see getter + * @return Current builder + * @see #getItems + */ + Builder setItems(List items); + + /** + * see getter + * + * @param pageSize see getter + * @return Current builder + * @see #getPageSize + */ + Builder setPageSize(Integer pageSize); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + ApiBatchList build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/internal/ApiBatchListImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/internal/ApiBatchListImpl.java new file mode 100644 index 000000000..2b133dfce --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/internal/ApiBatchListImpl.java @@ -0,0 +1,176 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.response.internal; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse; +import java.util.List; +import java.util.Objects; + +@JsonPropertyOrder({ + ApiBatchListImpl.JSON_PROPERTY_COUNT, + ApiBatchListImpl.JSON_PROPERTY_PAGE, + ApiBatchListImpl.JSON_PROPERTY_BATCHES, + ApiBatchListImpl.JSON_PROPERTY_PAGE_SIZE +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class ApiBatchListImpl implements ApiBatchList { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_COUNT = "count"; + + private OptionalValue count; + + public static final String JSON_PROPERTY_PAGE = "page"; + + private OptionalValue page; + + public static final String JSON_PROPERTY_BATCHES = "batches"; + + private OptionalValue> items; + + public static final String JSON_PROPERTY_PAGE_SIZE = "page_size"; + + private OptionalValue pageSize; + + public ApiBatchListImpl() {} + + protected ApiBatchListImpl( + OptionalValue count, + OptionalValue page, + OptionalValue> items, + OptionalValue pageSize) { + this.count = count; + this.page = page; + this.items = items; + this.pageSize = pageSize; + } + + @JsonIgnore + public Long getCount() { + return count.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_COUNT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue count() { + return count; + } + + @JsonIgnore + public Integer getPage() { + return page.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_PAGE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue page() { + return page; + } + + @JsonIgnore + public List getItems() { + return items.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_BATCHES) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> items() { + return items; + } + + @JsonIgnore + public Integer getPageSize() { + return pageSize.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_PAGE_SIZE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue pageSize() { + return pageSize; + } + + /** Return true if this ApiBatchList object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ApiBatchListImpl apiBatchList = (ApiBatchListImpl) o; + return Objects.equals(this.count, apiBatchList.count) + && Objects.equals(this.page, apiBatchList.page) + && Objects.equals(this.items, apiBatchList.items) + && Objects.equals(this.pageSize, apiBatchList.pageSize); + } + + @Override + public int hashCode() { + return Objects.hash(count, page, items, pageSize); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ApiBatchListImpl {\n"); + sb.append(" count: ").append(toIndentedString(count)).append("\n"); + sb.append(" page: ").append(toIndentedString(page)).append("\n"); + sb.append(" items: ").append(toIndentedString(items)).append("\n"); + sb.append(" pageSize: ").append(toIndentedString(pageSize)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements ApiBatchList.Builder { + OptionalValue count = OptionalValue.empty(); + OptionalValue page = OptionalValue.empty(); + OptionalValue> items = OptionalValue.empty(); + OptionalValue pageSize = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_COUNT) + public Builder setCount(Long count) { + this.count = OptionalValue.of(count); + return this; + } + + @JsonProperty(JSON_PROPERTY_PAGE) + public Builder setPage(Integer page) { + this.page = OptionalValue.of(page); + return this; + } + + @JsonProperty(JSON_PROPERTY_BATCHES) + public Builder setItems(List items) { + this.items = OptionalValue.of(items); + return this; + } + + @JsonProperty(JSON_PROPERTY_PAGE_SIZE) + public Builder setPageSize(Integer pageSize) { + this.pageSize = OptionalValue.of(pageSize); + return this; + } + + public ApiBatchList build() { + return new ApiBatchListImpl(count, page, items, pageSize); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/internal/BatchResponseInternal.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/internal/BatchResponseInternal.java new file mode 100644 index 000000000..c62d5fc04 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/internal/BatchResponseInternal.java @@ -0,0 +1,16 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.batches.response.internal; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +@JsonDeserialize(using = BatchResponseInternalImpl.BatchResponseInternalImplDeserializer.class) +public interface BatchResponseInternal {} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/internal/BatchResponseInternalImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/internal/BatchResponseInternalImpl.java new file mode 100644 index 000000000..57d7e0cea --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/batches/response/internal/BatchResponseInternalImpl.java @@ -0,0 +1,402 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.response.internal; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.sinch.sdk.core.models.AbstractOpenApiSchema; +import com.sinch.sdk.core.utils.databind.JSONNavigator; +import com.sinch.sdk.domains.sms.models.v1.batches.response.BinaryResponseImpl; +import com.sinch.sdk.domains.sms.models.v1.batches.response.MediaResponseImpl; +import com.sinch.sdk.domains.sms.models.v1.batches.response.TextResponseImpl; +import java.io.IOException; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +@JsonDeserialize(using = BatchResponseInternalImpl.BatchResponseInternalImplDeserializer.class) +@JsonSerialize(using = BatchResponseInternalImpl.BatchResponseInternalImplSerializer.class) +public class BatchResponseInternalImpl extends AbstractOpenApiSchema + implements BatchResponseInternal { + private static final Logger log = Logger.getLogger(BatchResponseInternalImpl.class.getName()); + + public static final class BatchResponseInternalImplSerializer + extends StdSerializer { + private static final long serialVersionUID = 1L; + + public BatchResponseInternalImplSerializer(Class t) { + super(t); + } + + public BatchResponseInternalImplSerializer() { + this(null); + } + + @Override + public void serialize( + BatchResponseInternalImpl value, JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.getActualInstance()); + } + } + + public static final class BatchResponseInternalImplDeserializer + extends StdDeserializer { + + private static final long serialVersionUID = 1L; + + public BatchResponseInternalImplDeserializer() { + this(BatchResponseInternalImpl.class); + } + + public BatchResponseInternalImplDeserializer(Class vc) { + super(vc); + } + + @Override + public BatchResponseInternalImpl deserialize(JsonParser jp, DeserializationContext ctxt) + throws IOException, JsonProcessingException { + JsonNode tree = jp.readValueAsTree(); + Object deserialized = null; + BatchResponseInternalImpl newBatchResponseInternalImpl = new BatchResponseInternalImpl(); + Map result2 = + tree.traverse(jp.getCodec()).readValueAs(new TypeReference>() {}); + String discriminatorValue = (String) result2.get("type"); + switch (discriminatorValue) { + case "mt_binary": + deserialized = tree.traverse(jp.getCodec()).readValueAs(BinaryResponseImpl.class); + newBatchResponseInternalImpl.setActualInstance(deserialized); + return newBatchResponseInternalImpl; + case "mt_media": + deserialized = tree.traverse(jp.getCodec()).readValueAs(MediaResponseImpl.class); + newBatchResponseInternalImpl.setActualInstance(deserialized); + return newBatchResponseInternalImpl; + case "mt_text": + deserialized = tree.traverse(jp.getCodec()).readValueAs(TextResponseImpl.class); + newBatchResponseInternalImpl.setActualInstance(deserialized); + return newBatchResponseInternalImpl; + case "BinaryResponse": + deserialized = tree.traverse(jp.getCodec()).readValueAs(BinaryResponseImpl.class); + newBatchResponseInternalImpl.setActualInstance(deserialized); + return newBatchResponseInternalImpl; + case "MediaResponse": + deserialized = tree.traverse(jp.getCodec()).readValueAs(MediaResponseImpl.class); + newBatchResponseInternalImpl.setActualInstance(deserialized); + return newBatchResponseInternalImpl; + case "TextResponse": + deserialized = tree.traverse(jp.getCodec()).readValueAs(TextResponseImpl.class); + newBatchResponseInternalImpl.setActualInstance(deserialized); + return newBatchResponseInternalImpl; + default: + log.log( + Level.WARNING, + String.format( + "Failed to lookup discriminator value `%s` for BatchResponseInternalImpl." + + " Possible values: mt_binary mt_media mt_text BinaryResponse MediaResponse" + + " TextResponse", + discriminatorValue)); + } + + boolean typeCoercion = ctxt.isEnabled(MapperFeature.ALLOW_COERCION_OF_SCALARS); + int match = 0; + JsonToken token = tree.traverse(jp.getCodec()).nextToken(); + // deserialize BinaryResponseImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (BinaryResponseImpl.class.equals(Integer.class) + || BinaryResponseImpl.class.equals(Long.class) + || BinaryResponseImpl.class.equals(Float.class) + || BinaryResponseImpl.class.equals(Double.class) + || BinaryResponseImpl.class.equals(Boolean.class) + || BinaryResponseImpl.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((BinaryResponseImpl.class.equals(Integer.class) + || BinaryResponseImpl.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((BinaryResponseImpl.class.equals(Float.class) + || BinaryResponseImpl.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (BinaryResponseImpl.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (BinaryResponseImpl.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(BinaryResponseImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'BinaryResponseImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'BinaryResponseImpl'", e); + } + + // deserialize MediaResponseImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (MediaResponseImpl.class.equals(Integer.class) + || MediaResponseImpl.class.equals(Long.class) + || MediaResponseImpl.class.equals(Float.class) + || MediaResponseImpl.class.equals(Double.class) + || MediaResponseImpl.class.equals(Boolean.class) + || MediaResponseImpl.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((MediaResponseImpl.class.equals(Integer.class) + || MediaResponseImpl.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((MediaResponseImpl.class.equals(Float.class) + || MediaResponseImpl.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (MediaResponseImpl.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (MediaResponseImpl.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(MediaResponseImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'MediaResponseImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'MediaResponseImpl'", e); + } + + // deserialize TextResponseImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (TextResponseImpl.class.equals(Integer.class) + || TextResponseImpl.class.equals(Long.class) + || TextResponseImpl.class.equals(Float.class) + || TextResponseImpl.class.equals(Double.class) + || TextResponseImpl.class.equals(Boolean.class) + || TextResponseImpl.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((TextResponseImpl.class.equals(Integer.class) + || TextResponseImpl.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((TextResponseImpl.class.equals(Float.class) + || TextResponseImpl.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (TextResponseImpl.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (TextResponseImpl.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(TextResponseImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'TextResponseImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'TextResponseImpl'", e); + } + + if (match == 1) { + BatchResponseInternalImpl ret = new BatchResponseInternalImpl(); + ret.setActualInstance(deserialized); + return ret; + } + throw new IOException( + String.format( + "Failed deserialization for BatchResponseInternalImpl: %d classes match result," + + " expected 1", + match)); + } + + /** Handle deserialization of the 'null' value. */ + @Override + public BatchResponseInternalImpl getNullValue(DeserializationContext ctxt) + throws JsonMappingException { + throw new JsonMappingException(ctxt.getParser(), "BatchResponseInternalImpl cannot be null"); + } + } + + // store a list of schema names defined in oneOf + public static final Map> schemas = new HashMap<>(); + + public BatchResponseInternalImpl() { + super("oneOf", Boolean.FALSE); + } + + public BatchResponseInternalImpl(BinaryResponseImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public BatchResponseInternalImpl(MediaResponseImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public BatchResponseInternalImpl(TextResponseImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + static { + schemas.put("BinaryResponseImpl", BinaryResponseImpl.class); + schemas.put("MediaResponseImpl", MediaResponseImpl.class); + schemas.put("TextResponseImpl", TextResponseImpl.class); + JSONNavigator.registerDescendants( + BatchResponseInternalImpl.class, Collections.unmodifiableMap(schemas)); + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("mt_binary", BinaryResponseImpl.class); + mappings.put("mt_media", MediaResponseImpl.class); + mappings.put("mt_text", TextResponseImpl.class); + mappings.put("BinaryResponse", BinaryResponseImpl.class); + mappings.put("MediaResponse", MediaResponseImpl.class); + mappings.put("TextResponse", TextResponseImpl.class); + mappings.put("Batch", BatchResponseInternalImpl.class); + JSONNavigator.registerDiscriminator(BatchResponseInternalImpl.class, "type", mappings); + } + + @Override + public Map> getSchemas() { + return BatchResponseInternalImpl.schemas; + } + + /** + * Set the instance that matches the oneOf child schema, check the instance parameter is valid + * against the oneOf child schemas: BinaryResponseImpl, MediaResponseImpl, TextResponseImpl + * + *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be a + * composed schema (allOf, anyOf, oneOf). + */ + @Override + public void setActualInstance(Object instance) { + if (JSONNavigator.isInstanceOf(BinaryResponseImpl.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSONNavigator.isInstanceOf(MediaResponseImpl.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSONNavigator.isInstanceOf(TextResponseImpl.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + throw new RuntimeException( + "Invalid instance type. Must be BinaryResponseImpl, MediaResponseImpl, TextResponseImpl"); + } + + /** + * Get the actual instance, which can be the following: BinaryResponseImpl, MediaResponseImpl, + * TextResponseImpl + * + * @return The actual instance (BinaryResponseImpl, MediaResponseImpl, TextResponseImpl) + */ + @Override + public Object getActualInstance() { + return super.getActualInstance(); + } + + /** + * Get the actual instance of `BinaryResponseImpl`. If the actual instance is not + * `BinaryResponseImpl`, the ClassCastException will be thrown. + * + * @return The actual instance of `BinaryResponseImpl` + * @throws ClassCastException if the instance is not `BinaryResponseImpl` + */ + public BinaryResponseImpl getBinaryResponseImpl() throws ClassCastException { + return (BinaryResponseImpl) super.getActualInstance(); + } + + /** + * Get the actual instance of `MediaResponseImpl`. If the actual instance is not + * `MediaResponseImpl`, the ClassCastException will be thrown. + * + * @return The actual instance of `MediaResponseImpl` + * @throws ClassCastException if the instance is not `MediaResponseImpl` + */ + public MediaResponseImpl getMediaResponseImpl() throws ClassCastException { + return (MediaResponseImpl) super.getActualInstance(); + } + + /** + * Get the actual instance of `TextResponseImpl`. If the actual instance is not + * `TextResponseImpl`, the ClassCastException will be thrown. + * + * @return The actual instance of `TextResponseImpl` + * @throws ClassCastException if the instance is not `TextResponseImpl` + */ + public TextResponseImpl getTextResponseImpl() throws ClassCastException { + return (TextResponseImpl) super.getActualInstance(); + } + + public static class Deserializer + extends StdDeserializer { + + public Deserializer() { + this(null); + } + + public Deserializer( + Class vc) { + super(vc); + } + + @Override + public com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse deserialize( + JsonParser jp, DeserializationContext ctxt) throws IOException { + + Object deserialized = jp.readValueAs(BatchResponseInternalImpl.class).getActualInstance(); + if (null == deserialized) { + return null; + } + if (!(deserialized + instanceof com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse)) { + log.log(Level.SEVERE, "Input data does not match schema ", deserialized); + return null; + } + + return (com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse) deserialized; + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReportMMS.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReportMMS.java new file mode 100644 index 000000000..a1d6488b6 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReportMMS.java @@ -0,0 +1,108 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import java.util.List; + +/** BatchDeliveryReportMMS */ +@JsonDeserialize(builder = BatchDeliveryReportMMSImpl.Builder.class) +public interface BatchDeliveryReportMMS extends BatchDeliveryReport { + + /** + * The ID of the batch this delivery report belongs to. + * + * @return batchId + * @readOnly This field is returned by the server and cannot be modified + */ + String getBatchId(); + + /** + * The client identifier of the batch this delivery report belongs to, if set when submitting + * batch. + * + * @return clientReference + */ + String getClientReference(); + + /** + * Array with status objects. Only status codes with at least one recipient will be listed. + * + * @return statuses + */ + List getStatuses(); + + /** + * The total number of messages in the batch. + * + *

minimum: 0 + * + * @return totalMessageCount + */ + Integer getTotalMessageCount(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new BatchDeliveryReportMMSImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param batchId see getter + * @return Current builder + * @see #getBatchId + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setBatchId(String batchId); + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * see getter + * + * @param statuses see getter + * @return Current builder + * @see #getStatuses + */ + Builder setStatuses(List statuses); + + /** + * see getter + * + * @param totalMessageCount see getter + * @return Current builder + * @see #getTotalMessageCount + */ + Builder setTotalMessageCount(Integer totalMessageCount); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + BatchDeliveryReportMMS build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReportMMSImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReportMMSImpl.java new file mode 100644 index 000000000..1af8ece7d --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReportMMSImpl.java @@ -0,0 +1,223 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.stream.Stream; + +@JsonPropertyOrder({ + BatchDeliveryReportMMSImpl.JSON_PROPERTY_BATCH_ID, + BatchDeliveryReportMMSImpl.JSON_PROPERTY_CLIENT_REFERENCE, + BatchDeliveryReportMMSImpl.JSON_PROPERTY_STATUSES, + BatchDeliveryReportMMSImpl.JSON_PROPERTY_TOTAL_MESSAGE_COUNT, + BatchDeliveryReportMMSImpl.JSON_PROPERTY_TYPE +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class BatchDeliveryReportMMSImpl implements BatchDeliveryReportMMS, BatchDeliveryReport { + private static final long serialVersionUID = 1L; + + /** Gets or Sets type */ + public static class TypeEnum extends EnumDynamic { + public static final TypeEnum DELIVERY_REPORT_MMS = new TypeEnum("delivery_report_mms"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>(TypeEnum.class, TypeEnum::new, Arrays.asList(DELIVERY_REPORT_MMS)); + + private TypeEnum(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static TypeEnum from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(TypeEnum e) { + return ENUM_SUPPORT.valueOf(e); + } + } + + public static final String JSON_PROPERTY_BATCH_ID = "batch_id"; + + private OptionalValue batchId; + + public static final String JSON_PROPERTY_CLIENT_REFERENCE = "client_reference"; + + private OptionalValue clientReference; + + public static final String JSON_PROPERTY_STATUSES = "statuses"; + + private OptionalValue> statuses; + + public static final String JSON_PROPERTY_TOTAL_MESSAGE_COUNT = "total_message_count"; + + private OptionalValue totalMessageCount; + + public static final String JSON_PROPERTY_TYPE = "type"; + + private OptionalValue type; + + public BatchDeliveryReportMMSImpl() {} + + protected BatchDeliveryReportMMSImpl( + OptionalValue batchId, + OptionalValue clientReference, + OptionalValue> statuses, + OptionalValue totalMessageCount, + OptionalValue type) { + this.batchId = batchId; + this.clientReference = clientReference; + this.statuses = statuses; + this.totalMessageCount = totalMessageCount; + this.type = type; + } + + @JsonIgnore + public String getBatchId() { + return batchId.orElse(null); + } + + @JsonIgnore + public OptionalValue batchId() { + return batchId; + } + + @JsonIgnore + public String getClientReference() { + return clientReference.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue clientReference() { + return clientReference; + } + + @JsonIgnore + public List getStatuses() { + return statuses.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_STATUSES) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue> statuses() { + return statuses; + } + + @JsonIgnore + public Integer getTotalMessageCount() { + return totalMessageCount.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TOTAL_MESSAGE_COUNT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue totalMessageCount() { + return totalMessageCount; + } + + @JsonIgnore + public TypeEnum getType() { + return type.orElse(null); + } + + @JsonIgnore + public OptionalValue type() { + return type; + } + + /** Return true if this BatchDeliveryReportMMS object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BatchDeliveryReportMMSImpl batchDeliveryReportMMS = (BatchDeliveryReportMMSImpl) o; + return Objects.equals(this.batchId, batchDeliveryReportMMS.batchId) + && Objects.equals(this.clientReference, batchDeliveryReportMMS.clientReference) + && Objects.equals(this.statuses, batchDeliveryReportMMS.statuses) + && Objects.equals(this.totalMessageCount, batchDeliveryReportMMS.totalMessageCount) + && Objects.equals(this.type, batchDeliveryReportMMS.type); + } + + @Override + public int hashCode() { + return Objects.hash(batchId, clientReference, statuses, totalMessageCount, type); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class BatchDeliveryReportMMSImpl {\n"); + sb.append(" batchId: ").append(toIndentedString(batchId)).append("\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append(" statuses: ").append(toIndentedString(statuses)).append("\n"); + sb.append(" totalMessageCount: ").append(toIndentedString(totalMessageCount)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements BatchDeliveryReportMMS.Builder { + OptionalValue batchId = OptionalValue.empty(); + OptionalValue clientReference = OptionalValue.empty(); + OptionalValue> statuses = OptionalValue.empty(); + OptionalValue totalMessageCount = OptionalValue.empty(); + OptionalValue type = OptionalValue.of(TypeEnum.DELIVERY_REPORT_MMS); + + @JsonProperty(JSON_PROPERTY_BATCH_ID) + public Builder setBatchId(String batchId) { + this.batchId = OptionalValue.of(batchId); + return this; + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + @JsonProperty(JSON_PROPERTY_STATUSES) + public Builder setStatuses(List statuses) { + this.statuses = OptionalValue.of(statuses); + return this; + } + + @JsonProperty(JSON_PROPERTY_TOTAL_MESSAGE_COUNT) + public Builder setTotalMessageCount(Integer totalMessageCount) { + this.totalMessageCount = OptionalValue.of(totalMessageCount); + return this; + } + + public BatchDeliveryReportMMS build() { + return new BatchDeliveryReportMMSImpl( + batchId, clientReference, statuses, totalMessageCount, type); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReportSMS.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReportSMS.java new file mode 100644 index 000000000..9623ff337 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReportSMS.java @@ -0,0 +1,108 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import java.util.List; + +/** BatchDeliveryReportSMS */ +@JsonDeserialize(builder = BatchDeliveryReportSMSImpl.Builder.class) +public interface BatchDeliveryReportSMS extends BatchDeliveryReport { + + /** + * The ID of the batch this delivery report belongs to. + * + * @return batchId + * @readOnly This field is returned by the server and cannot be modified + */ + String getBatchId(); + + /** + * The client identifier of the batch this delivery report belongs to, if set when submitting + * batch. + * + * @return clientReference + */ + String getClientReference(); + + /** + * Array with status objects. Only status codes with at least one recipient will be listed. + * + * @return statuses + */ + List getStatuses(); + + /** + * The total number of messages in the batch. + * + *

minimum: 0 + * + * @return totalMessageCount + */ + Integer getTotalMessageCount(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new BatchDeliveryReportSMSImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param batchId see getter + * @return Current builder + * @see #getBatchId + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setBatchId(String batchId); + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * see getter + * + * @param statuses see getter + * @return Current builder + * @see #getStatuses + */ + Builder setStatuses(List statuses); + + /** + * see getter + * + * @param totalMessageCount see getter + * @return Current builder + * @see #getTotalMessageCount + */ + Builder setTotalMessageCount(Integer totalMessageCount); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + BatchDeliveryReportSMS build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReportSMSImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReportSMSImpl.java new file mode 100644 index 000000000..5e5350e43 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReportSMSImpl.java @@ -0,0 +1,223 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.stream.Stream; + +@JsonPropertyOrder({ + BatchDeliveryReportSMSImpl.JSON_PROPERTY_BATCH_ID, + BatchDeliveryReportSMSImpl.JSON_PROPERTY_CLIENT_REFERENCE, + BatchDeliveryReportSMSImpl.JSON_PROPERTY_STATUSES, + BatchDeliveryReportSMSImpl.JSON_PROPERTY_TOTAL_MESSAGE_COUNT, + BatchDeliveryReportSMSImpl.JSON_PROPERTY_TYPE +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class BatchDeliveryReportSMSImpl implements BatchDeliveryReportSMS, BatchDeliveryReport { + private static final long serialVersionUID = 1L; + + /** Gets or Sets type */ + public static class TypeEnum extends EnumDynamic { + public static final TypeEnum DELIVERY_REPORT_SMS = new TypeEnum("delivery_report_sms"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>(TypeEnum.class, TypeEnum::new, Arrays.asList(DELIVERY_REPORT_SMS)); + + private TypeEnum(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static TypeEnum from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(TypeEnum e) { + return ENUM_SUPPORT.valueOf(e); + } + } + + public static final String JSON_PROPERTY_BATCH_ID = "batch_id"; + + private OptionalValue batchId; + + public static final String JSON_PROPERTY_CLIENT_REFERENCE = "client_reference"; + + private OptionalValue clientReference; + + public static final String JSON_PROPERTY_STATUSES = "statuses"; + + private OptionalValue> statuses; + + public static final String JSON_PROPERTY_TOTAL_MESSAGE_COUNT = "total_message_count"; + + private OptionalValue totalMessageCount; + + public static final String JSON_PROPERTY_TYPE = "type"; + + private OptionalValue type; + + public BatchDeliveryReportSMSImpl() {} + + protected BatchDeliveryReportSMSImpl( + OptionalValue batchId, + OptionalValue clientReference, + OptionalValue> statuses, + OptionalValue totalMessageCount, + OptionalValue type) { + this.batchId = batchId; + this.clientReference = clientReference; + this.statuses = statuses; + this.totalMessageCount = totalMessageCount; + this.type = type; + } + + @JsonIgnore + public String getBatchId() { + return batchId.orElse(null); + } + + @JsonIgnore + public OptionalValue batchId() { + return batchId; + } + + @JsonIgnore + public String getClientReference() { + return clientReference.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue clientReference() { + return clientReference; + } + + @JsonIgnore + public List getStatuses() { + return statuses.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_STATUSES) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue> statuses() { + return statuses; + } + + @JsonIgnore + public Integer getTotalMessageCount() { + return totalMessageCount.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TOTAL_MESSAGE_COUNT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue totalMessageCount() { + return totalMessageCount; + } + + @JsonIgnore + public TypeEnum getType() { + return type.orElse(null); + } + + @JsonIgnore + public OptionalValue type() { + return type; + } + + /** Return true if this BatchDeliveryReportSMS object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BatchDeliveryReportSMSImpl batchDeliveryReportSMS = (BatchDeliveryReportSMSImpl) o; + return Objects.equals(this.batchId, batchDeliveryReportSMS.batchId) + && Objects.equals(this.clientReference, batchDeliveryReportSMS.clientReference) + && Objects.equals(this.statuses, batchDeliveryReportSMS.statuses) + && Objects.equals(this.totalMessageCount, batchDeliveryReportSMS.totalMessageCount) + && Objects.equals(this.type, batchDeliveryReportSMS.type); + } + + @Override + public int hashCode() { + return Objects.hash(batchId, clientReference, statuses, totalMessageCount, type); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class BatchDeliveryReportSMSImpl {\n"); + sb.append(" batchId: ").append(toIndentedString(batchId)).append("\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append(" statuses: ").append(toIndentedString(statuses)).append("\n"); + sb.append(" totalMessageCount: ").append(toIndentedString(totalMessageCount)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements BatchDeliveryReportSMS.Builder { + OptionalValue batchId = OptionalValue.empty(); + OptionalValue clientReference = OptionalValue.empty(); + OptionalValue> statuses = OptionalValue.empty(); + OptionalValue totalMessageCount = OptionalValue.empty(); + OptionalValue type = OptionalValue.of(TypeEnum.DELIVERY_REPORT_SMS); + + @JsonProperty(JSON_PROPERTY_BATCH_ID) + public Builder setBatchId(String batchId) { + this.batchId = OptionalValue.of(batchId); + return this; + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + @JsonProperty(JSON_PROPERTY_STATUSES) + public Builder setStatuses(List statuses) { + this.statuses = OptionalValue.of(statuses); + return this; + } + + @JsonProperty(JSON_PROPERTY_TOTAL_MESSAGE_COUNT) + public Builder setTotalMessageCount(Integer totalMessageCount) { + this.totalMessageCount = OptionalValue.of(totalMessageCount); + return this; + } + + public BatchDeliveryReportSMS build() { + return new BatchDeliveryReportSMSImpl( + batchId, clientReference, statuses, totalMessageCount, type); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/DeliveryReceiptErrorCode.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/DeliveryReceiptErrorCode.java new file mode 100644 index 000000000..140bcd008 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/DeliveryReceiptErrorCode.java @@ -0,0 +1,153 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import java.util.Arrays; +import java.util.stream.Stream; + +/** + * The delivery report status code provides a more detailed view of what happened with a message. + * The REST API error codes are a combination of SMPP error codes, MMS error codes and custom codes. + */ +public class DeliveryReceiptErrorCode extends EnumDynamic { + + /** + * Queued. Message is queued within REST API system and will be dispatched according to the rate + * of the account. + */ + public static final DeliveryReceiptErrorCode QUEUED = new DeliveryReceiptErrorCode(400); + + /** Dispatched. Message has been dispatched to SMSC. */ + public static final DeliveryReceiptErrorCode DISPATCHED = new DeliveryReceiptErrorCode(401); + + /** Message unroutable. SMSC rejected message. Retrying is likely to cause the same error. */ + public static final DeliveryReceiptErrorCode MESSAGE_UNROUTABLE = + new DeliveryReceiptErrorCode(402); + + /** Internal error. An unexpected error caused the message to fail. */ + public static final DeliveryReceiptErrorCode INTERNAL_ERROR = new DeliveryReceiptErrorCode(403); + + /** + * Temporary delivery. failure` Message failed because of temporary delivery failure. Message can + * be retried. + */ + public static final DeliveryReceiptErrorCode TEMPORARY_DELIVERY_FAILURE = + new DeliveryReceiptErrorCode(404); + + /** + * Unmatched Parameter. One or more parameters in the message body has no mapping for this + * recipient. See Message + * Parameterization + */ + public static final DeliveryReceiptErrorCode UNMATCHED_PARAMETER = + new DeliveryReceiptErrorCode(405); + + /** + * Internal Expiry. Message was expired before reaching SMSC. This may happen if the expiry time + * for the message was very short. + */ + public static final DeliveryReceiptErrorCode INTERNAL_EXPIRY = new DeliveryReceiptErrorCode(406); + + /** Cancelled. Message was cancelled by user before reaching SMSC. */ + public static final DeliveryReceiptErrorCode CANCELLED = new DeliveryReceiptErrorCode(407); + + /** Internal Reject. SMSC rejected the message. Retrying is likely to cause the same error. */ + public static final DeliveryReceiptErrorCode INTERNAL_REJECT = new DeliveryReceiptErrorCode(408); + + /** + * Unmatched default originator. No default originator exists/configured for this recipient when + * sending message without originator. + */ + public static final DeliveryReceiptErrorCode UNMATCHED_DEFAULT_ORIGINATOR = + new DeliveryReceiptErrorCode(410); + + /** + * Exceeded parts limit. Message failed as the number of message parts exceeds the defined max + * number of message parts. + */ + public static final DeliveryReceiptErrorCode EXCEEDED_PARTS_LIMIT = + new DeliveryReceiptErrorCode(411); + + /** + * Unprovisioned region. SMSC rejected the message. The account hasn't been provisioned for this + * region. + */ + public static final DeliveryReceiptErrorCode UNPROVISIONED_REGION = + new DeliveryReceiptErrorCode(412); + + /** Blocked. The account is blocked. Reach out to support for help. Potentially out of credits. */ + public static final DeliveryReceiptErrorCode BLOCKED = new DeliveryReceiptErrorCode(413); + + /** + * Bad Media. MMS only, the request failed due to a bad media URL. It is possible that the URL was + * unreachable, or sent a bad response. + */ + public static final DeliveryReceiptErrorCode BAD_MEDIA = new DeliveryReceiptErrorCode(414); + + /** + * Delivery report Rejected. MMS only, message reached MMSC but was rejected by MMS gateway or + * mobile network. + */ + public static final DeliveryReceiptErrorCode DELIVERY_REPORT_REJECTED = + new DeliveryReceiptErrorCode(415); + + /** Delivery report Not Supported. MMS only, message reached MMSC but it is not supported. */ + public static final DeliveryReceiptErrorCode DELIVERY_REPORT_NOT_SUPPORTED = + new DeliveryReceiptErrorCode(416); + + /** + * Delivery report Unreachable. MMS only, message reached MMSC but the destination network or the + * mobile subscriber cannot be reached. + */ + public static final DeliveryReceiptErrorCode DELIVERY_REPORT_UNREACHABLE = + new DeliveryReceiptErrorCode(417); + + /** + * Delivery report Unrecognized. MMS only, message reached MMSC but the handset of the mobile + * subscriber does not recognize the message content. + */ + public static final DeliveryReceiptErrorCode DELIVERY_REPORT_UNRECOGNIZED = + new DeliveryReceiptErrorCode(418); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>( + DeliveryReceiptErrorCode.class, + DeliveryReceiptErrorCode::new, + Arrays.asList( + QUEUED, + DISPATCHED, + MESSAGE_UNROUTABLE, + INTERNAL_ERROR, + TEMPORARY_DELIVERY_FAILURE, + UNMATCHED_PARAMETER, + INTERNAL_EXPIRY, + CANCELLED, + INTERNAL_REJECT, + UNMATCHED_DEFAULT_ORIGINATOR, + EXCEEDED_PARTS_LIMIT, + UNPROVISIONED_REGION, + BLOCKED, + BAD_MEDIA, + DELIVERY_REPORT_REJECTED, + DELIVERY_REPORT_NOT_SUPPORTED, + DELIVERY_REPORT_UNREACHABLE, + DELIVERY_REPORT_UNRECOGNIZED)); + + private DeliveryReceiptErrorCode(Integer value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static DeliveryReceiptErrorCode from(Integer value) { + return ENUM_SUPPORT.from(value); + } + + public static Integer valueOf(DeliveryReceiptErrorCode e) { + return ENUM_SUPPORT.valueOf(e); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/DeliveryStatus.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/DeliveryStatus.java new file mode 100644 index 000000000..c69aebc68 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/DeliveryStatus.java @@ -0,0 +1,81 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import java.util.Arrays; +import java.util.stream.Stream; + +/** The simplified status as described in Delivery Report Statuses. */ +public class DeliveryStatus extends EnumDynamic { + + /** + * Intermediate type. Message is queued within REST API system and will be dispatched according to + * the rate of the account. + */ + public static final DeliveryStatus QUEUED = new DeliveryStatus("Queued"); + + /** Intermediate type. Message has been dispatched and accepted for delivery by the SMSC. */ + public static final DeliveryStatus DISPATCHED = new DeliveryStatus("Dispatched"); + + /** Final type. Message was aborted before reaching the SMSC. */ + public static final DeliveryStatus ABORTED = new DeliveryStatus("Aborted"); + + /** Final type. Message was cancelled by user before reaching SMSC. */ + public static final DeliveryStatus CANCELLED = new DeliveryStatus("Cancelled"); + + /** Final type. Message failed to be delivered. */ + public static final DeliveryStatus FAILED = new DeliveryStatus("Failed"); + + /** Final type. Message has been delivered. */ + public static final DeliveryStatus DELIVERED = new DeliveryStatus("Delivered"); + + /** + * Final type. Message expired before delivery to the SMSC. This may happen if the expiry time for + * the message was very short. + */ + public static final DeliveryStatus EXPIRED = new DeliveryStatus("Expired"); + + /** Final type. Message was rejected by the SMSC. */ + public static final DeliveryStatus REJECTED = new DeliveryStatus("Rejected"); + + /** Final type. Message was deleted by the SMSC. */ + public static final DeliveryStatus DELETED = new DeliveryStatus("Deleted"); + + /** + * Final type. Message was delivered to the SMSC but no Delivery Receipt has been received or a + * Delivery Receipt that couldn't be interpreted was received. + */ + public static final DeliveryStatus UNKNOWN = new DeliveryStatus("Unknown"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>( + DeliveryStatus.class, + DeliveryStatus::new, + Arrays.asList( + QUEUED, + DISPATCHED, + ABORTED, + CANCELLED, + FAILED, + DELIVERED, + EXPIRED, + REJECTED, + DELETED, + UNKNOWN)); + + private DeliveryStatus(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static DeliveryStatus from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(DeliveryStatus e) { + return ENUM_SUPPORT.valueOf(e); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/EncodingType.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/EncodingType.java new file mode 100644 index 000000000..ab79efa65 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/EncodingType.java @@ -0,0 +1,35 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import java.util.Arrays; +import java.util.stream.Stream; + +/** Applied encoding for message. Present only if smart encoding is enabled. */ +public class EncodingType extends EnumDynamic { + + /** GSM enconding. */ + public static final EncodingType GSM = new EncodingType("GSM"); + + /** Unicode encoding. */ + public static final EncodingType UNICODE = new EncodingType("UNICODE"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>(EncodingType.class, EncodingType::new, Arrays.asList(GSM, UNICODE)); + + private EncodingType(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static EncodingType from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(EncodingType e) { + return ENUM_SUPPORT.valueOf(e); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/MessageDeliveryStatus.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/MessageDeliveryStatus.java new file mode 100644 index 000000000..0c41555db --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/MessageDeliveryStatus.java @@ -0,0 +1,108 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import java.util.Set; + +/** Array with status objects. Only status codes with at least one recipient will be listed. */ +@JsonDeserialize(builder = MessageDeliveryStatusImpl.Builder.class) +public interface MessageDeliveryStatus { + + /** + * The detailed status + * code. + * + * @return code + */ + DeliveryReceiptErrorCode getCode(); + + /** + * The number of messages that currently has this code. + * + *

minimum: 1 + * + * @return count + */ + Integer getCount(); + + /** + * Only for full report. A list of the phone number recipients which messages has + * this status code. + * + * @return recipients + */ + Set getRecipients(); + + /** + * Get status + * + * @return status + */ + DeliveryStatus getStatus(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new MessageDeliveryStatusImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param code see getter + * @return Current builder + * @see #getCode + */ + Builder setCode(DeliveryReceiptErrorCode code); + + /** + * see getter + * + * @param count see getter + * @return Current builder + * @see #getCount + */ + Builder setCount(Integer count); + + /** + * see getter + * + * @param recipients see getter + * @return Current builder + * @see #getRecipients + */ + Builder setRecipients(Set recipients); + + /** + * see getter + * + * @param status see getter + * @return Current builder + * @see #getStatus + */ + Builder setStatus(DeliveryStatus status); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + MessageDeliveryStatus build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/MessageDeliveryStatusImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/MessageDeliveryStatusImpl.java new file mode 100644 index 000000000..b2bea9108 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/MessageDeliveryStatusImpl.java @@ -0,0 +1,175 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; +import java.util.Set; + +@JsonPropertyOrder({ + MessageDeliveryStatusImpl.JSON_PROPERTY_CODE, + MessageDeliveryStatusImpl.JSON_PROPERTY_COUNT, + MessageDeliveryStatusImpl.JSON_PROPERTY_RECIPIENTS, + MessageDeliveryStatusImpl.JSON_PROPERTY_STATUS +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class MessageDeliveryStatusImpl implements MessageDeliveryStatus { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_CODE = "code"; + + private OptionalValue code; + + public static final String JSON_PROPERTY_COUNT = "count"; + + private OptionalValue count; + + public static final String JSON_PROPERTY_RECIPIENTS = "recipients"; + + private OptionalValue> recipients; + + public static final String JSON_PROPERTY_STATUS = "status"; + + private OptionalValue status; + + public MessageDeliveryStatusImpl() {} + + protected MessageDeliveryStatusImpl( + OptionalValue code, + OptionalValue count, + OptionalValue> recipients, + OptionalValue status) { + this.code = code; + this.count = count; + this.recipients = recipients; + this.status = status; + } + + @JsonIgnore + public DeliveryReceiptErrorCode getCode() { + return code.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CODE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue code() { + return code; + } + + @JsonIgnore + public Integer getCount() { + return count.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_COUNT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue count() { + return count; + } + + @JsonIgnore + public Set getRecipients() { + return recipients.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_RECIPIENTS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue> recipients() { + return recipients; + } + + @JsonIgnore + public DeliveryStatus getStatus() { + return status.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_STATUS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue status() { + return status; + } + + /** Return true if this MessageDeliveryStatus object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MessageDeliveryStatusImpl messageDeliveryStatus = (MessageDeliveryStatusImpl) o; + return Objects.equals(this.code, messageDeliveryStatus.code) + && Objects.equals(this.count, messageDeliveryStatus.count) + && Objects.equals(this.recipients, messageDeliveryStatus.recipients) + && Objects.equals(this.status, messageDeliveryStatus.status); + } + + @Override + public int hashCode() { + return Objects.hash(code, count, recipients, status); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class MessageDeliveryStatusImpl {\n"); + sb.append(" code: ").append(toIndentedString(code)).append("\n"); + sb.append(" count: ").append(toIndentedString(count)).append("\n"); + sb.append(" recipients: ").append(toIndentedString(recipients)).append("\n"); + sb.append(" status: ").append(toIndentedString(status)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements MessageDeliveryStatus.Builder { + OptionalValue code = OptionalValue.empty(); + OptionalValue count = OptionalValue.empty(); + OptionalValue> recipients = OptionalValue.empty(); + OptionalValue status = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_CODE) + public Builder setCode(DeliveryReceiptErrorCode code) { + this.code = OptionalValue.of(code); + return this; + } + + @JsonProperty(JSON_PROPERTY_COUNT) + public Builder setCount(Integer count) { + this.count = OptionalValue.of(count); + return this; + } + + @JsonProperty(JSON_PROPERTY_RECIPIENTS) + public Builder setRecipients(Set recipients) { + this.recipients = OptionalValue.of(recipients); + return this; + } + + @JsonProperty(JSON_PROPERTY_STATUS) + public Builder setStatus(DeliveryStatus status) { + this.status = OptionalValue.of(status); + return this; + } + + public MessageDeliveryStatus build() { + return new MessageDeliveryStatusImpl(code, count, recipients, status); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReportMMS.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReportMMS.java new file mode 100644 index 000000000..f37db5874 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReportMMS.java @@ -0,0 +1,227 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import java.time.Instant; + +/** RecipientDeliveryReportMMS */ +@JsonDeserialize(builder = RecipientDeliveryReportMMSImpl.Builder.class) +public interface RecipientDeliveryReportMMS extends RecipientDeliveryReport { + + /** + * The default originator used for the recipient this delivery report belongs to, if default + * originator pool configured and no originator set when submitting batch. + * + * @return appliedOriginator + */ + String getAppliedOriginator(); + + /** + * A timestamp of when the Delivery Report was created in the Sinch service. Formatted as ISO-8601: YYYY-MM-DDThh:mm:ss.SSSZ + * . + * + * @return createdAt + */ + Instant getCreatedAt(); + + /** + * The ID of the batch this delivery report belongs to + * + * @return batchId + * @readOnly This field is returned by the server and cannot be modified + */ + String getBatchId(); + + /** + * The client identifier of the batch this delivery report belongs to, if set when submitting + * batch. + * + * @return clientReference + */ + String getClientReference(); + + /** + * The detailed status + * code. + * + * @return code + */ + DeliveryReceiptErrorCode getCode(); + + /** + * Get encoding + * + * @return encoding + */ + EncodingType getEncoding(); + + /** + * The number of parts the message was split into. Present only if + * max_number_of_message_parts parameter was set. + * + * @return numberOfMessageParts + */ + Integer getNumberOfMessageParts(); + + /** + * The operator that was used for delivering the message to this recipient, if enabled on the + * account by Sinch. + * + * @return operator + */ + String getOperator(); + + /** + * A timestamp extracted from the Delivery Receipt from the originating SMSC. Formatted as ISO-8601: YYYY-MM-DDThh:mm:ss.SSSZ + * . + * + * @return operatorStatusAt + */ + Instant getOperatorStatusAt(); + + /** + * Phone number that was queried. + * + * @return recipient + */ + String getRecipient(); + + /** + * Get status + * + * @return status + */ + DeliveryStatus getStatus(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new RecipientDeliveryReportMMSImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param appliedOriginator see getter + * @return Current builder + * @see #getAppliedOriginator + */ + Builder setAppliedOriginator(String appliedOriginator); + + /** + * see getter + * + * @param createdAt see getter + * @return Current builder + * @see #getCreatedAt + */ + Builder setCreatedAt(Instant createdAt); + + /** + * see getter + * + * @param batchId see getter + * @return Current builder + * @see #getBatchId + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setBatchId(String batchId); + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * see getter + * + * @param code see getter + * @return Current builder + * @see #getCode + */ + Builder setCode(DeliveryReceiptErrorCode code); + + /** + * see getter + * + * @param encoding see getter + * @return Current builder + * @see #getEncoding + */ + Builder setEncoding(EncodingType encoding); + + /** + * see getter + * + * @param numberOfMessageParts see getter + * @return Current builder + * @see #getNumberOfMessageParts + */ + Builder setNumberOfMessageParts(Integer numberOfMessageParts); + + /** + * see getter + * + * @param operator see getter + * @return Current builder + * @see #getOperator + */ + Builder setOperator(String operator); + + /** + * see getter + * + * @param operatorStatusAt see getter + * @return Current builder + * @see #getOperatorStatusAt + */ + Builder setOperatorStatusAt(Instant operatorStatusAt); + + /** + * see getter + * + * @param recipient see getter + * @return Current builder + * @see #getRecipient + */ + Builder setRecipient(String recipient); + + /** + * see getter + * + * @param status see getter + * @return Current builder + * @see #getStatus + */ + Builder setStatus(DeliveryStatus status); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + RecipientDeliveryReportMMS build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReportMMSImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReportMMSImpl.java new file mode 100644 index 000000000..78827fc05 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReportMMSImpl.java @@ -0,0 +1,441 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import java.time.Instant; +import java.util.Arrays; +import java.util.Objects; +import java.util.stream.Stream; + +@JsonPropertyOrder({ + RecipientDeliveryReportMMSImpl.JSON_PROPERTY_APPLIED_ORIGINATOR, + RecipientDeliveryReportMMSImpl.JSON_PROPERTY_AT, + RecipientDeliveryReportMMSImpl.JSON_PROPERTY_BATCH_ID, + RecipientDeliveryReportMMSImpl.JSON_PROPERTY_CLIENT_REFERENCE, + RecipientDeliveryReportMMSImpl.JSON_PROPERTY_CODE, + RecipientDeliveryReportMMSImpl.JSON_PROPERTY_ENCODING, + RecipientDeliveryReportMMSImpl.JSON_PROPERTY_NUMBER_OF_MESSAGE_PARTS, + RecipientDeliveryReportMMSImpl.JSON_PROPERTY_OPERATOR, + RecipientDeliveryReportMMSImpl.JSON_PROPERTY_OPERATOR_STATUS_AT, + RecipientDeliveryReportMMSImpl.JSON_PROPERTY_RECIPIENT, + RecipientDeliveryReportMMSImpl.JSON_PROPERTY_STATUS, + RecipientDeliveryReportMMSImpl.JSON_PROPERTY_TYPE +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class RecipientDeliveryReportMMSImpl + implements RecipientDeliveryReportMMS, RecipientDeliveryReport { + private static final long serialVersionUID = 1L; + + /** Gets or Sets type */ + public static class TypeEnum extends EnumDynamic { + public static final TypeEnum RECIPIENT_DELIVERY_REPORT_MMS = + new TypeEnum("recipient_delivery_report_mms"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>( + TypeEnum.class, TypeEnum::new, Arrays.asList(RECIPIENT_DELIVERY_REPORT_MMS)); + + private TypeEnum(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static TypeEnum from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(TypeEnum e) { + return ENUM_SUPPORT.valueOf(e); + } + } + + public static final String JSON_PROPERTY_APPLIED_ORIGINATOR = "applied_originator"; + + private OptionalValue appliedOriginator; + + public static final String JSON_PROPERTY_AT = "at"; + + private OptionalValue createdAt; + + public static final String JSON_PROPERTY_BATCH_ID = "batch_id"; + + private OptionalValue batchId; + + public static final String JSON_PROPERTY_CLIENT_REFERENCE = "client_reference"; + + private OptionalValue clientReference; + + public static final String JSON_PROPERTY_CODE = "code"; + + private OptionalValue code; + + public static final String JSON_PROPERTY_ENCODING = "encoding"; + + private OptionalValue encoding; + + public static final String JSON_PROPERTY_NUMBER_OF_MESSAGE_PARTS = "number_of_message_parts"; + + private OptionalValue numberOfMessageParts; + + public static final String JSON_PROPERTY_OPERATOR = "operator"; + + private OptionalValue operator; + + public static final String JSON_PROPERTY_OPERATOR_STATUS_AT = "operator_status_at"; + + private OptionalValue operatorStatusAt; + + public static final String JSON_PROPERTY_RECIPIENT = "recipient"; + + private OptionalValue recipient; + + public static final String JSON_PROPERTY_STATUS = "status"; + + private OptionalValue status; + + public static final String JSON_PROPERTY_TYPE = "type"; + + private OptionalValue type; + + public RecipientDeliveryReportMMSImpl() {} + + protected RecipientDeliveryReportMMSImpl( + OptionalValue appliedOriginator, + OptionalValue createdAt, + OptionalValue batchId, + OptionalValue clientReference, + OptionalValue code, + OptionalValue encoding, + OptionalValue numberOfMessageParts, + OptionalValue operator, + OptionalValue operatorStatusAt, + OptionalValue recipient, + OptionalValue status, + OptionalValue type) { + this.appliedOriginator = appliedOriginator; + this.createdAt = createdAt; + this.batchId = batchId; + this.clientReference = clientReference; + this.code = code; + this.encoding = encoding; + this.numberOfMessageParts = numberOfMessageParts; + this.operator = operator; + this.operatorStatusAt = operatorStatusAt; + this.recipient = recipient; + this.status = status; + this.type = type; + } + + @JsonIgnore + public String getAppliedOriginator() { + return appliedOriginator.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_APPLIED_ORIGINATOR) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue appliedOriginator() { + return appliedOriginator; + } + + @JsonIgnore + public Instant getCreatedAt() { + return createdAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue createdAt() { + return createdAt; + } + + @JsonIgnore + public String getBatchId() { + return batchId.orElse(null); + } + + @JsonIgnore + public OptionalValue batchId() { + return batchId; + } + + @JsonIgnore + public String getClientReference() { + return clientReference.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue clientReference() { + return clientReference; + } + + @JsonIgnore + public DeliveryReceiptErrorCode getCode() { + return code.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CODE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue code() { + return code; + } + + @JsonIgnore + public EncodingType getEncoding() { + return encoding.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_ENCODING) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue encoding() { + return encoding; + } + + @JsonIgnore + public Integer getNumberOfMessageParts() { + return numberOfMessageParts.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_NUMBER_OF_MESSAGE_PARTS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue numberOfMessageParts() { + return numberOfMessageParts; + } + + @JsonIgnore + public String getOperator() { + return operator.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_OPERATOR) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue operator() { + return operator; + } + + @JsonIgnore + public Instant getOperatorStatusAt() { + return operatorStatusAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_OPERATOR_STATUS_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue operatorStatusAt() { + return operatorStatusAt; + } + + @JsonIgnore + public String getRecipient() { + return recipient.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_RECIPIENT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue recipient() { + return recipient; + } + + @JsonIgnore + public DeliveryStatus getStatus() { + return status.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_STATUS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue status() { + return status; + } + + @JsonIgnore + public TypeEnum getType() { + return type.orElse(null); + } + + @JsonIgnore + public OptionalValue type() { + return type; + } + + /** Return true if this RecipientDeliveryReportMMS object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RecipientDeliveryReportMMSImpl recipientDeliveryReportMMS = (RecipientDeliveryReportMMSImpl) o; + return Objects.equals(this.appliedOriginator, recipientDeliveryReportMMS.appliedOriginator) + && Objects.equals(this.createdAt, recipientDeliveryReportMMS.createdAt) + && Objects.equals(this.batchId, recipientDeliveryReportMMS.batchId) + && Objects.equals(this.clientReference, recipientDeliveryReportMMS.clientReference) + && Objects.equals(this.code, recipientDeliveryReportMMS.code) + && Objects.equals(this.encoding, recipientDeliveryReportMMS.encoding) + && Objects.equals( + this.numberOfMessageParts, recipientDeliveryReportMMS.numberOfMessageParts) + && Objects.equals(this.operator, recipientDeliveryReportMMS.operator) + && Objects.equals(this.operatorStatusAt, recipientDeliveryReportMMS.operatorStatusAt) + && Objects.equals(this.recipient, recipientDeliveryReportMMS.recipient) + && Objects.equals(this.status, recipientDeliveryReportMMS.status) + && Objects.equals(this.type, recipientDeliveryReportMMS.type); + } + + @Override + public int hashCode() { + return Objects.hash( + appliedOriginator, + createdAt, + batchId, + clientReference, + code, + encoding, + numberOfMessageParts, + operator, + operatorStatusAt, + recipient, + status, + type); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RecipientDeliveryReportMMSImpl {\n"); + sb.append(" appliedOriginator: ").append(toIndentedString(appliedOriginator)).append("\n"); + sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); + sb.append(" batchId: ").append(toIndentedString(batchId)).append("\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append(" code: ").append(toIndentedString(code)).append("\n"); + sb.append(" encoding: ").append(toIndentedString(encoding)).append("\n"); + sb.append(" numberOfMessageParts: ") + .append(toIndentedString(numberOfMessageParts)) + .append("\n"); + sb.append(" operator: ").append(toIndentedString(operator)).append("\n"); + sb.append(" operatorStatusAt: ").append(toIndentedString(operatorStatusAt)).append("\n"); + sb.append(" recipient: ").append(toIndentedString(recipient)).append("\n"); + sb.append(" status: ").append(toIndentedString(status)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements RecipientDeliveryReportMMS.Builder { + OptionalValue appliedOriginator = OptionalValue.empty(); + OptionalValue createdAt = OptionalValue.empty(); + OptionalValue batchId = OptionalValue.empty(); + OptionalValue clientReference = OptionalValue.empty(); + OptionalValue code = OptionalValue.empty(); + OptionalValue encoding = OptionalValue.empty(); + OptionalValue numberOfMessageParts = OptionalValue.empty(); + OptionalValue operator = OptionalValue.empty(); + OptionalValue operatorStatusAt = OptionalValue.empty(); + OptionalValue recipient = OptionalValue.empty(); + OptionalValue status = OptionalValue.empty(); + OptionalValue type = OptionalValue.of(TypeEnum.RECIPIENT_DELIVERY_REPORT_MMS); + + @JsonProperty(JSON_PROPERTY_APPLIED_ORIGINATOR) + public Builder setAppliedOriginator(String appliedOriginator) { + this.appliedOriginator = OptionalValue.of(appliedOriginator); + return this; + } + + @JsonProperty(JSON_PROPERTY_AT) + public Builder setCreatedAt(Instant createdAt) { + this.createdAt = OptionalValue.of(createdAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_BATCH_ID) + public Builder setBatchId(String batchId) { + this.batchId = OptionalValue.of(batchId); + return this; + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + @JsonProperty(JSON_PROPERTY_CODE) + public Builder setCode(DeliveryReceiptErrorCode code) { + this.code = OptionalValue.of(code); + return this; + } + + @JsonProperty(JSON_PROPERTY_ENCODING) + public Builder setEncoding(EncodingType encoding) { + this.encoding = OptionalValue.of(encoding); + return this; + } + + @JsonProperty(JSON_PROPERTY_NUMBER_OF_MESSAGE_PARTS) + public Builder setNumberOfMessageParts(Integer numberOfMessageParts) { + this.numberOfMessageParts = OptionalValue.of(numberOfMessageParts); + return this; + } + + @JsonProperty(JSON_PROPERTY_OPERATOR) + public Builder setOperator(String operator) { + this.operator = OptionalValue.of(operator); + return this; + } + + @JsonProperty(JSON_PROPERTY_OPERATOR_STATUS_AT) + public Builder setOperatorStatusAt(Instant operatorStatusAt) { + this.operatorStatusAt = OptionalValue.of(operatorStatusAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_RECIPIENT) + public Builder setRecipient(String recipient) { + this.recipient = OptionalValue.of(recipient); + return this; + } + + @JsonProperty(JSON_PROPERTY_STATUS) + public Builder setStatus(DeliveryStatus status) { + this.status = OptionalValue.of(status); + return this; + } + + public RecipientDeliveryReportMMS build() { + return new RecipientDeliveryReportMMSImpl( + appliedOriginator, + createdAt, + batchId, + clientReference, + code, + encoding, + numberOfMessageParts, + operator, + operatorStatusAt, + recipient, + status, + type); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReportSMS.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReportSMS.java new file mode 100644 index 000000000..0e1bd17ad --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReportSMS.java @@ -0,0 +1,227 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import java.time.Instant; + +/** RecipientDeliveryReportSMS */ +@JsonDeserialize(builder = RecipientDeliveryReportSMSImpl.Builder.class) +public interface RecipientDeliveryReportSMS extends RecipientDeliveryReport { + + /** + * The default originator used for the recipient this delivery report belongs to, if default + * originator pool configured and no originator set when submitting batch. + * + * @return appliedOriginator + */ + String getAppliedOriginator(); + + /** + * A timestamp of when the Delivery Report was created in the Sinch service. Formatted as ISO-8601: YYYY-MM-DDThh:mm:ss.SSSZ + * . + * + * @return createdAt + */ + Instant getCreatedAt(); + + /** + * The ID of the batch this delivery report belongs to + * + * @return batchId + * @readOnly This field is returned by the server and cannot be modified + */ + String getBatchId(); + + /** + * The client identifier of the batch this delivery report belongs to, if set when submitting + * batch. + * + * @return clientReference + */ + String getClientReference(); + + /** + * The detailed status + * code. + * + * @return code + */ + DeliveryReceiptErrorCode getCode(); + + /** + * Get encoding + * + * @return encoding + */ + EncodingType getEncoding(); + + /** + * The number of parts the message was split into. Present only if + * max_number_of_message_parts parameter was set. + * + * @return numberOfMessageParts + */ + Integer getNumberOfMessageParts(); + + /** + * The operator that was used for delivering the message to this recipient, if enabled on the + * account by Sinch. + * + * @return operator + */ + String getOperator(); + + /** + * A timestamp extracted from the Delivery Receipt from the originating SMSC. Formatted as ISO-8601: YYYY-MM-DDThh:mm:ss.SSSZ + * . + * + * @return operatorStatusAt + */ + Instant getOperatorStatusAt(); + + /** + * Phone number that was queried. + * + * @return recipient + */ + String getRecipient(); + + /** + * Get status + * + * @return status + */ + DeliveryStatus getStatus(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new RecipientDeliveryReportSMSImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param appliedOriginator see getter + * @return Current builder + * @see #getAppliedOriginator + */ + Builder setAppliedOriginator(String appliedOriginator); + + /** + * see getter + * + * @param createdAt see getter + * @return Current builder + * @see #getCreatedAt + */ + Builder setCreatedAt(Instant createdAt); + + /** + * see getter + * + * @param batchId see getter + * @return Current builder + * @see #getBatchId + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setBatchId(String batchId); + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * see getter + * + * @param code see getter + * @return Current builder + * @see #getCode + */ + Builder setCode(DeliveryReceiptErrorCode code); + + /** + * see getter + * + * @param encoding see getter + * @return Current builder + * @see #getEncoding + */ + Builder setEncoding(EncodingType encoding); + + /** + * see getter + * + * @param numberOfMessageParts see getter + * @return Current builder + * @see #getNumberOfMessageParts + */ + Builder setNumberOfMessageParts(Integer numberOfMessageParts); + + /** + * see getter + * + * @param operator see getter + * @return Current builder + * @see #getOperator + */ + Builder setOperator(String operator); + + /** + * see getter + * + * @param operatorStatusAt see getter + * @return Current builder + * @see #getOperatorStatusAt + */ + Builder setOperatorStatusAt(Instant operatorStatusAt); + + /** + * see getter + * + * @param recipient see getter + * @return Current builder + * @see #getRecipient + */ + Builder setRecipient(String recipient); + + /** + * see getter + * + * @param status see getter + * @return Current builder + * @see #getStatus + */ + Builder setStatus(DeliveryStatus status); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + RecipientDeliveryReportSMS build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReportSMSImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReportSMSImpl.java new file mode 100644 index 000000000..9101ab9d7 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReportSMSImpl.java @@ -0,0 +1,441 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import java.time.Instant; +import java.util.Arrays; +import java.util.Objects; +import java.util.stream.Stream; + +@JsonPropertyOrder({ + RecipientDeliveryReportSMSImpl.JSON_PROPERTY_APPLIED_ORIGINATOR, + RecipientDeliveryReportSMSImpl.JSON_PROPERTY_AT, + RecipientDeliveryReportSMSImpl.JSON_PROPERTY_BATCH_ID, + RecipientDeliveryReportSMSImpl.JSON_PROPERTY_CLIENT_REFERENCE, + RecipientDeliveryReportSMSImpl.JSON_PROPERTY_CODE, + RecipientDeliveryReportSMSImpl.JSON_PROPERTY_ENCODING, + RecipientDeliveryReportSMSImpl.JSON_PROPERTY_NUMBER_OF_MESSAGE_PARTS, + RecipientDeliveryReportSMSImpl.JSON_PROPERTY_OPERATOR, + RecipientDeliveryReportSMSImpl.JSON_PROPERTY_OPERATOR_STATUS_AT, + RecipientDeliveryReportSMSImpl.JSON_PROPERTY_RECIPIENT, + RecipientDeliveryReportSMSImpl.JSON_PROPERTY_STATUS, + RecipientDeliveryReportSMSImpl.JSON_PROPERTY_TYPE +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class RecipientDeliveryReportSMSImpl + implements RecipientDeliveryReportSMS, RecipientDeliveryReport { + private static final long serialVersionUID = 1L; + + /** Gets or Sets type */ + public static class TypeEnum extends EnumDynamic { + public static final TypeEnum RECIPIENT_DELIVERY_REPORT_SMS = + new TypeEnum("recipient_delivery_report_sms"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>( + TypeEnum.class, TypeEnum::new, Arrays.asList(RECIPIENT_DELIVERY_REPORT_SMS)); + + private TypeEnum(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static TypeEnum from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(TypeEnum e) { + return ENUM_SUPPORT.valueOf(e); + } + } + + public static final String JSON_PROPERTY_APPLIED_ORIGINATOR = "applied_originator"; + + private OptionalValue appliedOriginator; + + public static final String JSON_PROPERTY_AT = "at"; + + private OptionalValue createdAt; + + public static final String JSON_PROPERTY_BATCH_ID = "batch_id"; + + private OptionalValue batchId; + + public static final String JSON_PROPERTY_CLIENT_REFERENCE = "client_reference"; + + private OptionalValue clientReference; + + public static final String JSON_PROPERTY_CODE = "code"; + + private OptionalValue code; + + public static final String JSON_PROPERTY_ENCODING = "encoding"; + + private OptionalValue encoding; + + public static final String JSON_PROPERTY_NUMBER_OF_MESSAGE_PARTS = "number_of_message_parts"; + + private OptionalValue numberOfMessageParts; + + public static final String JSON_PROPERTY_OPERATOR = "operator"; + + private OptionalValue operator; + + public static final String JSON_PROPERTY_OPERATOR_STATUS_AT = "operator_status_at"; + + private OptionalValue operatorStatusAt; + + public static final String JSON_PROPERTY_RECIPIENT = "recipient"; + + private OptionalValue recipient; + + public static final String JSON_PROPERTY_STATUS = "status"; + + private OptionalValue status; + + public static final String JSON_PROPERTY_TYPE = "type"; + + private OptionalValue type; + + public RecipientDeliveryReportSMSImpl() {} + + protected RecipientDeliveryReportSMSImpl( + OptionalValue appliedOriginator, + OptionalValue createdAt, + OptionalValue batchId, + OptionalValue clientReference, + OptionalValue code, + OptionalValue encoding, + OptionalValue numberOfMessageParts, + OptionalValue operator, + OptionalValue operatorStatusAt, + OptionalValue recipient, + OptionalValue status, + OptionalValue type) { + this.appliedOriginator = appliedOriginator; + this.createdAt = createdAt; + this.batchId = batchId; + this.clientReference = clientReference; + this.code = code; + this.encoding = encoding; + this.numberOfMessageParts = numberOfMessageParts; + this.operator = operator; + this.operatorStatusAt = operatorStatusAt; + this.recipient = recipient; + this.status = status; + this.type = type; + } + + @JsonIgnore + public String getAppliedOriginator() { + return appliedOriginator.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_APPLIED_ORIGINATOR) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue appliedOriginator() { + return appliedOriginator; + } + + @JsonIgnore + public Instant getCreatedAt() { + return createdAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue createdAt() { + return createdAt; + } + + @JsonIgnore + public String getBatchId() { + return batchId.orElse(null); + } + + @JsonIgnore + public OptionalValue batchId() { + return batchId; + } + + @JsonIgnore + public String getClientReference() { + return clientReference.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue clientReference() { + return clientReference; + } + + @JsonIgnore + public DeliveryReceiptErrorCode getCode() { + return code.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CODE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue code() { + return code; + } + + @JsonIgnore + public EncodingType getEncoding() { + return encoding.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_ENCODING) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue encoding() { + return encoding; + } + + @JsonIgnore + public Integer getNumberOfMessageParts() { + return numberOfMessageParts.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_NUMBER_OF_MESSAGE_PARTS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue numberOfMessageParts() { + return numberOfMessageParts; + } + + @JsonIgnore + public String getOperator() { + return operator.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_OPERATOR) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue operator() { + return operator; + } + + @JsonIgnore + public Instant getOperatorStatusAt() { + return operatorStatusAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_OPERATOR_STATUS_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue operatorStatusAt() { + return operatorStatusAt; + } + + @JsonIgnore + public String getRecipient() { + return recipient.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_RECIPIENT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue recipient() { + return recipient; + } + + @JsonIgnore + public DeliveryStatus getStatus() { + return status.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_STATUS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue status() { + return status; + } + + @JsonIgnore + public TypeEnum getType() { + return type.orElse(null); + } + + @JsonIgnore + public OptionalValue type() { + return type; + } + + /** Return true if this RecipientDeliveryReportSMS object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RecipientDeliveryReportSMSImpl recipientDeliveryReportSMS = (RecipientDeliveryReportSMSImpl) o; + return Objects.equals(this.appliedOriginator, recipientDeliveryReportSMS.appliedOriginator) + && Objects.equals(this.createdAt, recipientDeliveryReportSMS.createdAt) + && Objects.equals(this.batchId, recipientDeliveryReportSMS.batchId) + && Objects.equals(this.clientReference, recipientDeliveryReportSMS.clientReference) + && Objects.equals(this.code, recipientDeliveryReportSMS.code) + && Objects.equals(this.encoding, recipientDeliveryReportSMS.encoding) + && Objects.equals( + this.numberOfMessageParts, recipientDeliveryReportSMS.numberOfMessageParts) + && Objects.equals(this.operator, recipientDeliveryReportSMS.operator) + && Objects.equals(this.operatorStatusAt, recipientDeliveryReportSMS.operatorStatusAt) + && Objects.equals(this.recipient, recipientDeliveryReportSMS.recipient) + && Objects.equals(this.status, recipientDeliveryReportSMS.status) + && Objects.equals(this.type, recipientDeliveryReportSMS.type); + } + + @Override + public int hashCode() { + return Objects.hash( + appliedOriginator, + createdAt, + batchId, + clientReference, + code, + encoding, + numberOfMessageParts, + operator, + operatorStatusAt, + recipient, + status, + type); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RecipientDeliveryReportSMSImpl {\n"); + sb.append(" appliedOriginator: ").append(toIndentedString(appliedOriginator)).append("\n"); + sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); + sb.append(" batchId: ").append(toIndentedString(batchId)).append("\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append(" code: ").append(toIndentedString(code)).append("\n"); + sb.append(" encoding: ").append(toIndentedString(encoding)).append("\n"); + sb.append(" numberOfMessageParts: ") + .append(toIndentedString(numberOfMessageParts)) + .append("\n"); + sb.append(" operator: ").append(toIndentedString(operator)).append("\n"); + sb.append(" operatorStatusAt: ").append(toIndentedString(operatorStatusAt)).append("\n"); + sb.append(" recipient: ").append(toIndentedString(recipient)).append("\n"); + sb.append(" status: ").append(toIndentedString(status)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements RecipientDeliveryReportSMS.Builder { + OptionalValue appliedOriginator = OptionalValue.empty(); + OptionalValue createdAt = OptionalValue.empty(); + OptionalValue batchId = OptionalValue.empty(); + OptionalValue clientReference = OptionalValue.empty(); + OptionalValue code = OptionalValue.empty(); + OptionalValue encoding = OptionalValue.empty(); + OptionalValue numberOfMessageParts = OptionalValue.empty(); + OptionalValue operator = OptionalValue.empty(); + OptionalValue operatorStatusAt = OptionalValue.empty(); + OptionalValue recipient = OptionalValue.empty(); + OptionalValue status = OptionalValue.empty(); + OptionalValue type = OptionalValue.of(TypeEnum.RECIPIENT_DELIVERY_REPORT_SMS); + + @JsonProperty(JSON_PROPERTY_APPLIED_ORIGINATOR) + public Builder setAppliedOriginator(String appliedOriginator) { + this.appliedOriginator = OptionalValue.of(appliedOriginator); + return this; + } + + @JsonProperty(JSON_PROPERTY_AT) + public Builder setCreatedAt(Instant createdAt) { + this.createdAt = OptionalValue.of(createdAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_BATCH_ID) + public Builder setBatchId(String batchId) { + this.batchId = OptionalValue.of(batchId); + return this; + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + @JsonProperty(JSON_PROPERTY_CODE) + public Builder setCode(DeliveryReceiptErrorCode code) { + this.code = OptionalValue.of(code); + return this; + } + + @JsonProperty(JSON_PROPERTY_ENCODING) + public Builder setEncoding(EncodingType encoding) { + this.encoding = OptionalValue.of(encoding); + return this; + } + + @JsonProperty(JSON_PROPERTY_NUMBER_OF_MESSAGE_PARTS) + public Builder setNumberOfMessageParts(Integer numberOfMessageParts) { + this.numberOfMessageParts = OptionalValue.of(numberOfMessageParts); + return this; + } + + @JsonProperty(JSON_PROPERTY_OPERATOR) + public Builder setOperator(String operator) { + this.operator = OptionalValue.of(operator); + return this; + } + + @JsonProperty(JSON_PROPERTY_OPERATOR_STATUS_AT) + public Builder setOperatorStatusAt(Instant operatorStatusAt) { + this.operatorStatusAt = OptionalValue.of(operatorStatusAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_RECIPIENT) + public Builder setRecipient(String recipient) { + this.recipient = OptionalValue.of(recipient); + return this; + } + + @JsonProperty(JSON_PROPERTY_STATUS) + public Builder setStatus(DeliveryStatus status) { + this.status = OptionalValue.of(status); + return this; + } + + public RecipientDeliveryReportSMS build() { + return new RecipientDeliveryReportSMSImpl( + appliedOriginator, + createdAt, + batchId, + clientReference, + code, + encoding, + numberOfMessageParts, + operator, + operatorStatusAt, + recipient, + status, + type); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/internal/BatchDeliveryReportOneOf.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/internal/BatchDeliveryReportOneOf.java new file mode 100644 index 000000000..026a9d49a --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/internal/BatchDeliveryReportOneOf.java @@ -0,0 +1,17 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.deliveryreports.internal; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +@JsonDeserialize( + using = BatchDeliveryReportOneOfImpl.BatchDeliveryReportOneOfImplDeserializer.class) +public interface BatchDeliveryReportOneOf {} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/internal/BatchDeliveryReportOneOfImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/internal/BatchDeliveryReportOneOfImpl.java new file mode 100644 index 000000000..2783481a5 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/internal/BatchDeliveryReportOneOfImpl.java @@ -0,0 +1,337 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports.internal; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.sinch.sdk.core.models.AbstractOpenApiSchema; +import com.sinch.sdk.core.utils.databind.JSONNavigator; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReportMMSImpl; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReportSMSImpl; +import java.io.IOException; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +@JsonDeserialize( + using = BatchDeliveryReportOneOfImpl.BatchDeliveryReportOneOfImplDeserializer.class) +@JsonSerialize(using = BatchDeliveryReportOneOfImpl.BatchDeliveryReportOneOfImplSerializer.class) +public class BatchDeliveryReportOneOfImpl extends AbstractOpenApiSchema + implements BatchDeliveryReportOneOf { + private static final Logger log = Logger.getLogger(BatchDeliveryReportOneOfImpl.class.getName()); + + public static final class BatchDeliveryReportOneOfImplSerializer + extends StdSerializer { + private static final long serialVersionUID = 1L; + + public BatchDeliveryReportOneOfImplSerializer(Class t) { + super(t); + } + + public BatchDeliveryReportOneOfImplSerializer() { + this(null); + } + + @Override + public void serialize( + BatchDeliveryReportOneOfImpl value, JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.getActualInstance()); + } + } + + public static final class BatchDeliveryReportOneOfImplDeserializer + extends StdDeserializer { + + private static final long serialVersionUID = 1L; + + public BatchDeliveryReportOneOfImplDeserializer() { + this(BatchDeliveryReportOneOfImpl.class); + } + + public BatchDeliveryReportOneOfImplDeserializer(Class vc) { + super(vc); + } + + @Override + public BatchDeliveryReportOneOfImpl deserialize(JsonParser jp, DeserializationContext ctxt) + throws IOException, JsonProcessingException { + JsonNode tree = jp.readValueAsTree(); + Object deserialized = null; + BatchDeliveryReportOneOfImpl newBatchDeliveryReportOneOfImpl = + new BatchDeliveryReportOneOfImpl(); + Map result2 = + tree.traverse(jp.getCodec()).readValueAs(new TypeReference>() {}); + String discriminatorValue = (String) result2.get("type"); + switch (discriminatorValue) { + case "delivery_report_mms": + deserialized = tree.traverse(jp.getCodec()).readValueAs(BatchDeliveryReportMMSImpl.class); + newBatchDeliveryReportOneOfImpl.setActualInstance(deserialized); + return newBatchDeliveryReportOneOfImpl; + case "delivery_report_sms": + deserialized = tree.traverse(jp.getCodec()).readValueAs(BatchDeliveryReportSMSImpl.class); + newBatchDeliveryReportOneOfImpl.setActualInstance(deserialized); + return newBatchDeliveryReportOneOfImpl; + case "BatchDeliveryReportMMS": + deserialized = tree.traverse(jp.getCodec()).readValueAs(BatchDeliveryReportMMSImpl.class); + newBatchDeliveryReportOneOfImpl.setActualInstance(deserialized); + return newBatchDeliveryReportOneOfImpl; + case "BatchDeliveryReportSMS": + deserialized = tree.traverse(jp.getCodec()).readValueAs(BatchDeliveryReportSMSImpl.class); + newBatchDeliveryReportOneOfImpl.setActualInstance(deserialized); + return newBatchDeliveryReportOneOfImpl; + default: + log.log( + Level.WARNING, + String.format( + "Failed to lookup discriminator value `%s` for BatchDeliveryReportOneOfImpl." + + " Possible values: delivery_report_mms delivery_report_sms" + + " BatchDeliveryReportMMS BatchDeliveryReportSMS", + discriminatorValue)); + } + + boolean typeCoercion = ctxt.isEnabled(MapperFeature.ALLOW_COERCION_OF_SCALARS); + int match = 0; + JsonToken token = tree.traverse(jp.getCodec()).nextToken(); + // deserialize BatchDeliveryReportMMSImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (BatchDeliveryReportMMSImpl.class.equals(Integer.class) + || BatchDeliveryReportMMSImpl.class.equals(Long.class) + || BatchDeliveryReportMMSImpl.class.equals(Float.class) + || BatchDeliveryReportMMSImpl.class.equals(Double.class) + || BatchDeliveryReportMMSImpl.class.equals(Boolean.class) + || BatchDeliveryReportMMSImpl.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((BatchDeliveryReportMMSImpl.class.equals(Integer.class) + || BatchDeliveryReportMMSImpl.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((BatchDeliveryReportMMSImpl.class.equals(Float.class) + || BatchDeliveryReportMMSImpl.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (BatchDeliveryReportMMSImpl.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (BatchDeliveryReportMMSImpl.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(BatchDeliveryReportMMSImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'BatchDeliveryReportMMSImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'BatchDeliveryReportMMSImpl'", e); + } + + // deserialize BatchDeliveryReportSMSImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (BatchDeliveryReportSMSImpl.class.equals(Integer.class) + || BatchDeliveryReportSMSImpl.class.equals(Long.class) + || BatchDeliveryReportSMSImpl.class.equals(Float.class) + || BatchDeliveryReportSMSImpl.class.equals(Double.class) + || BatchDeliveryReportSMSImpl.class.equals(Boolean.class) + || BatchDeliveryReportSMSImpl.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((BatchDeliveryReportSMSImpl.class.equals(Integer.class) + || BatchDeliveryReportSMSImpl.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((BatchDeliveryReportSMSImpl.class.equals(Float.class) + || BatchDeliveryReportSMSImpl.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (BatchDeliveryReportSMSImpl.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (BatchDeliveryReportSMSImpl.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(BatchDeliveryReportSMSImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'BatchDeliveryReportSMSImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'BatchDeliveryReportSMSImpl'", e); + } + + if (match == 1) { + BatchDeliveryReportOneOfImpl ret = new BatchDeliveryReportOneOfImpl(); + ret.setActualInstance(deserialized); + return ret; + } + throw new IOException( + String.format( + "Failed deserialization for BatchDeliveryReportOneOfImpl: %d classes match result," + + " expected 1", + match)); + } + + /** Handle deserialization of the 'null' value. */ + @Override + public BatchDeliveryReportOneOfImpl getNullValue(DeserializationContext ctxt) + throws JsonMappingException { + throw new JsonMappingException( + ctxt.getParser(), "BatchDeliveryReportOneOfImpl cannot be null"); + } + } + + // store a list of schema names defined in oneOf + public static final Map> schemas = new HashMap<>(); + + public BatchDeliveryReportOneOfImpl() { + super("oneOf", Boolean.FALSE); + } + + public BatchDeliveryReportOneOfImpl(BatchDeliveryReportMMSImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public BatchDeliveryReportOneOfImpl(BatchDeliveryReportSMSImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + static { + schemas.put("BatchDeliveryReportMMSImpl", BatchDeliveryReportMMSImpl.class); + schemas.put("BatchDeliveryReportSMSImpl", BatchDeliveryReportSMSImpl.class); + JSONNavigator.registerDescendants( + BatchDeliveryReportOneOfImpl.class, Collections.unmodifiableMap(schemas)); + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("delivery_report_mms", BatchDeliveryReportMMSImpl.class); + mappings.put("delivery_report_sms", BatchDeliveryReportSMSImpl.class); + mappings.put("BatchDeliveryReportMMS", BatchDeliveryReportMMSImpl.class); + mappings.put("BatchDeliveryReportSMS", BatchDeliveryReportSMSImpl.class); + mappings.put("BatchDeliveryReportOneOf", BatchDeliveryReportOneOfImpl.class); + JSONNavigator.registerDiscriminator(BatchDeliveryReportOneOfImpl.class, "type", mappings); + } + + @Override + public Map> getSchemas() { + return BatchDeliveryReportOneOfImpl.schemas; + } + + /** + * Set the instance that matches the oneOf child schema, check the instance parameter is valid + * against the oneOf child schemas: BatchDeliveryReportMMSImpl, BatchDeliveryReportSMSImpl + * + *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be a + * composed schema (allOf, anyOf, oneOf). + */ + @Override + public void setActualInstance(Object instance) { + if (JSONNavigator.isInstanceOf( + BatchDeliveryReportMMSImpl.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSONNavigator.isInstanceOf( + BatchDeliveryReportSMSImpl.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + throw new RuntimeException( + "Invalid instance type. Must be BatchDeliveryReportMMSImpl, BatchDeliveryReportSMSImpl"); + } + + /** + * Get the actual instance, which can be the following: BatchDeliveryReportMMSImpl, + * BatchDeliveryReportSMSImpl + * + * @return The actual instance (BatchDeliveryReportMMSImpl, BatchDeliveryReportSMSImpl) + */ + @Override + public Object getActualInstance() { + return super.getActualInstance(); + } + + /** + * Get the actual instance of `BatchDeliveryReportMMSImpl`. If the actual instance is not + * `BatchDeliveryReportMMSImpl`, the ClassCastException will be thrown. + * + * @return The actual instance of `BatchDeliveryReportMMSImpl` + * @throws ClassCastException if the instance is not `BatchDeliveryReportMMSImpl` + */ + public BatchDeliveryReportMMSImpl getBatchDeliveryReportMMSImpl() throws ClassCastException { + return (BatchDeliveryReportMMSImpl) super.getActualInstance(); + } + + /** + * Get the actual instance of `BatchDeliveryReportSMSImpl`. If the actual instance is not + * `BatchDeliveryReportSMSImpl`, the ClassCastException will be thrown. + * + * @return The actual instance of `BatchDeliveryReportSMSImpl` + * @throws ClassCastException if the instance is not `BatchDeliveryReportSMSImpl` + */ + public BatchDeliveryReportSMSImpl getBatchDeliveryReportSMSImpl() throws ClassCastException { + return (BatchDeliveryReportSMSImpl) super.getActualInstance(); + } + + public static class Deserializer + extends StdDeserializer< + com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReport> { + + public Deserializer() { + this(null); + } + + public Deserializer( + Class vc) { + super(vc); + } + + @Override + public com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReport deserialize( + JsonParser jp, DeserializationContext ctxt) throws IOException { + + Object deserialized = jp.readValueAs(BatchDeliveryReportOneOfImpl.class).getActualInstance(); + if (null == deserialized) { + return null; + } + if (!(deserialized + instanceof com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReport)) { + log.log(Level.SEVERE, "Input data does not match schema ", deserialized); + return null; + } + + return (com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReport) deserialized; + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/internal/RecipientDeliveryReportOneOf.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/internal/RecipientDeliveryReportOneOf.java new file mode 100644 index 000000000..930cc0439 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/internal/RecipientDeliveryReportOneOf.java @@ -0,0 +1,17 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.deliveryreports.internal; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +@JsonDeserialize( + using = RecipientDeliveryReportOneOfImpl.RecipientDeliveryReportOneOfImplDeserializer.class) +public interface RecipientDeliveryReportOneOf {} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/internal/RecipientDeliveryReportOneOfImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/internal/RecipientDeliveryReportOneOfImpl.java new file mode 100644 index 000000000..0f0d10b3b --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/internal/RecipientDeliveryReportOneOfImpl.java @@ -0,0 +1,353 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports.internal; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.sinch.sdk.core.models.AbstractOpenApiSchema; +import com.sinch.sdk.core.utils.databind.JSONNavigator; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReportMMSImpl; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReportSMSImpl; +import java.io.IOException; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +@JsonDeserialize( + using = RecipientDeliveryReportOneOfImpl.RecipientDeliveryReportOneOfImplDeserializer.class) +@JsonSerialize( + using = RecipientDeliveryReportOneOfImpl.RecipientDeliveryReportOneOfImplSerializer.class) +public class RecipientDeliveryReportOneOfImpl extends AbstractOpenApiSchema + implements RecipientDeliveryReportOneOf { + private static final Logger log = + Logger.getLogger(RecipientDeliveryReportOneOfImpl.class.getName()); + + public static final class RecipientDeliveryReportOneOfImplSerializer + extends StdSerializer { + private static final long serialVersionUID = 1L; + + public RecipientDeliveryReportOneOfImplSerializer(Class t) { + super(t); + } + + public RecipientDeliveryReportOneOfImplSerializer() { + this(null); + } + + @Override + public void serialize( + RecipientDeliveryReportOneOfImpl value, JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.getActualInstance()); + } + } + + public static final class RecipientDeliveryReportOneOfImplDeserializer + extends StdDeserializer { + + private static final long serialVersionUID = 1L; + + public RecipientDeliveryReportOneOfImplDeserializer() { + this(RecipientDeliveryReportOneOfImpl.class); + } + + public RecipientDeliveryReportOneOfImplDeserializer(Class vc) { + super(vc); + } + + @Override + public RecipientDeliveryReportOneOfImpl deserialize(JsonParser jp, DeserializationContext ctxt) + throws IOException, JsonProcessingException { + JsonNode tree = jp.readValueAsTree(); + Object deserialized = null; + RecipientDeliveryReportOneOfImpl newRecipientDeliveryReportOneOfImpl = + new RecipientDeliveryReportOneOfImpl(); + Map result2 = + tree.traverse(jp.getCodec()).readValueAs(new TypeReference>() {}); + String discriminatorValue = (String) result2.get("type"); + switch (discriminatorValue) { + case "recipient_delivery_report_mms": + deserialized = + tree.traverse(jp.getCodec()).readValueAs(RecipientDeliveryReportMMSImpl.class); + newRecipientDeliveryReportOneOfImpl.setActualInstance(deserialized); + return newRecipientDeliveryReportOneOfImpl; + case "recipient_delivery_report_sms": + deserialized = + tree.traverse(jp.getCodec()).readValueAs(RecipientDeliveryReportSMSImpl.class); + newRecipientDeliveryReportOneOfImpl.setActualInstance(deserialized); + return newRecipientDeliveryReportOneOfImpl; + case "RecipientDeliveryReportMMS": + deserialized = + tree.traverse(jp.getCodec()).readValueAs(RecipientDeliveryReportMMSImpl.class); + newRecipientDeliveryReportOneOfImpl.setActualInstance(deserialized); + return newRecipientDeliveryReportOneOfImpl; + case "RecipientDeliveryReportSMS": + deserialized = + tree.traverse(jp.getCodec()).readValueAs(RecipientDeliveryReportSMSImpl.class); + newRecipientDeliveryReportOneOfImpl.setActualInstance(deserialized); + return newRecipientDeliveryReportOneOfImpl; + default: + log.log( + Level.WARNING, + String.format( + "Failed to lookup discriminator value `%s` for RecipientDeliveryReportOneOfImpl." + + " Possible values: recipient_delivery_report_mms" + + " recipient_delivery_report_sms RecipientDeliveryReportMMS" + + " RecipientDeliveryReportSMS", + discriminatorValue)); + } + + boolean typeCoercion = ctxt.isEnabled(MapperFeature.ALLOW_COERCION_OF_SCALARS); + int match = 0; + JsonToken token = tree.traverse(jp.getCodec()).nextToken(); + // deserialize RecipientDeliveryReportMMSImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (RecipientDeliveryReportMMSImpl.class.equals(Integer.class) + || RecipientDeliveryReportMMSImpl.class.equals(Long.class) + || RecipientDeliveryReportMMSImpl.class.equals(Float.class) + || RecipientDeliveryReportMMSImpl.class.equals(Double.class) + || RecipientDeliveryReportMMSImpl.class.equals(Boolean.class) + || RecipientDeliveryReportMMSImpl.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((RecipientDeliveryReportMMSImpl.class.equals(Integer.class) + || RecipientDeliveryReportMMSImpl.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((RecipientDeliveryReportMMSImpl.class.equals(Float.class) + || RecipientDeliveryReportMMSImpl.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (RecipientDeliveryReportMMSImpl.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (RecipientDeliveryReportMMSImpl.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = + tree.traverse(jp.getCodec()).readValueAs(RecipientDeliveryReportMMSImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'RecipientDeliveryReportMMSImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, "Input data does not match schema 'RecipientDeliveryReportMMSImpl'", e); + } + + // deserialize RecipientDeliveryReportSMSImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (RecipientDeliveryReportSMSImpl.class.equals(Integer.class) + || RecipientDeliveryReportSMSImpl.class.equals(Long.class) + || RecipientDeliveryReportSMSImpl.class.equals(Float.class) + || RecipientDeliveryReportSMSImpl.class.equals(Double.class) + || RecipientDeliveryReportSMSImpl.class.equals(Boolean.class) + || RecipientDeliveryReportSMSImpl.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((RecipientDeliveryReportSMSImpl.class.equals(Integer.class) + || RecipientDeliveryReportSMSImpl.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((RecipientDeliveryReportSMSImpl.class.equals(Float.class) + || RecipientDeliveryReportSMSImpl.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (RecipientDeliveryReportSMSImpl.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (RecipientDeliveryReportSMSImpl.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = + tree.traverse(jp.getCodec()).readValueAs(RecipientDeliveryReportSMSImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'RecipientDeliveryReportSMSImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, "Input data does not match schema 'RecipientDeliveryReportSMSImpl'", e); + } + + if (match == 1) { + RecipientDeliveryReportOneOfImpl ret = new RecipientDeliveryReportOneOfImpl(); + ret.setActualInstance(deserialized); + return ret; + } + throw new IOException( + String.format( + "Failed deserialization for RecipientDeliveryReportOneOfImpl: %d classes match" + + " result, expected 1", + match)); + } + + /** Handle deserialization of the 'null' value. */ + @Override + public RecipientDeliveryReportOneOfImpl getNullValue(DeserializationContext ctxt) + throws JsonMappingException { + throw new JsonMappingException( + ctxt.getParser(), "RecipientDeliveryReportOneOfImpl cannot be null"); + } + } + + // store a list of schema names defined in oneOf + public static final Map> schemas = new HashMap<>(); + + public RecipientDeliveryReportOneOfImpl() { + super("oneOf", Boolean.FALSE); + } + + public RecipientDeliveryReportOneOfImpl(RecipientDeliveryReportMMSImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public RecipientDeliveryReportOneOfImpl(RecipientDeliveryReportSMSImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + static { + schemas.put("RecipientDeliveryReportMMSImpl", RecipientDeliveryReportMMSImpl.class); + schemas.put("RecipientDeliveryReportSMSImpl", RecipientDeliveryReportSMSImpl.class); + JSONNavigator.registerDescendants( + RecipientDeliveryReportOneOfImpl.class, Collections.unmodifiableMap(schemas)); + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("recipient_delivery_report_mms", RecipientDeliveryReportMMSImpl.class); + mappings.put("recipient_delivery_report_sms", RecipientDeliveryReportSMSImpl.class); + mappings.put("RecipientDeliveryReportMMS", RecipientDeliveryReportMMSImpl.class); + mappings.put("RecipientDeliveryReportSMS", RecipientDeliveryReportSMSImpl.class); + mappings.put("RecipientDeliveryReportOneOf", RecipientDeliveryReportOneOfImpl.class); + JSONNavigator.registerDiscriminator(RecipientDeliveryReportOneOfImpl.class, "type", mappings); + } + + @Override + public Map> getSchemas() { + return RecipientDeliveryReportOneOfImpl.schemas; + } + + /** + * Set the instance that matches the oneOf child schema, check the instance parameter is valid + * against the oneOf child schemas: RecipientDeliveryReportMMSImpl, RecipientDeliveryReportSMSImpl + * + *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be a + * composed schema (allOf, anyOf, oneOf). + */ + @Override + public void setActualInstance(Object instance) { + if (JSONNavigator.isInstanceOf( + RecipientDeliveryReportMMSImpl.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSONNavigator.isInstanceOf( + RecipientDeliveryReportSMSImpl.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + throw new RuntimeException( + "Invalid instance type. Must be RecipientDeliveryReportMMSImpl," + + " RecipientDeliveryReportSMSImpl"); + } + + /** + * Get the actual instance, which can be the following: RecipientDeliveryReportMMSImpl, + * RecipientDeliveryReportSMSImpl + * + * @return The actual instance (RecipientDeliveryReportMMSImpl, RecipientDeliveryReportSMSImpl) + */ + @Override + public Object getActualInstance() { + return super.getActualInstance(); + } + + /** + * Get the actual instance of `RecipientDeliveryReportMMSImpl`. If the actual instance is not + * `RecipientDeliveryReportMMSImpl`, the ClassCastException will be thrown. + * + * @return The actual instance of `RecipientDeliveryReportMMSImpl` + * @throws ClassCastException if the instance is not `RecipientDeliveryReportMMSImpl` + */ + public RecipientDeliveryReportMMSImpl getRecipientDeliveryReportMMSImpl() + throws ClassCastException { + return (RecipientDeliveryReportMMSImpl) super.getActualInstance(); + } + + /** + * Get the actual instance of `RecipientDeliveryReportSMSImpl`. If the actual instance is not + * `RecipientDeliveryReportSMSImpl`, the ClassCastException will be thrown. + * + * @return The actual instance of `RecipientDeliveryReportSMSImpl` + * @throws ClassCastException if the instance is not `RecipientDeliveryReportSMSImpl` + */ + public RecipientDeliveryReportSMSImpl getRecipientDeliveryReportSMSImpl() + throws ClassCastException { + return (RecipientDeliveryReportSMSImpl) super.getActualInstance(); + } + + public static class Deserializer + extends StdDeserializer< + com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReport> { + + public Deserializer() { + this(null); + } + + public Deserializer( + Class vc) { + super(vc); + } + + @Override + public com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReport deserialize( + JsonParser jp, DeserializationContext ctxt) throws IOException { + + Object deserialized = + jp.readValueAs(RecipientDeliveryReportOneOfImpl.class).getActualInstance(); + if (null == deserialized) { + return null; + } + if (!(deserialized + instanceof com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReport)) { + log.log(Level.SEVERE, "Input data does not match schema ", deserialized); + return null; + } + + return (com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReport) + deserialized; + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/BatchDeliveryReportQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/BatchDeliveryReportQueryParameters.java new file mode 100644 index 000000000..3186733ea --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/BatchDeliveryReportQueryParameters.java @@ -0,0 +1,97 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.deliveryreports.request; + +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryReceiptErrorCode; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryStatus; +import java.util.List; + +/** BatchDeliveryReportQueryParameters */ +public interface BatchDeliveryReportQueryParameters { + + /** + * Get type + * + * @return type + */ + OptionalValue getType(); + + /** + * Get status + * + * @return status + */ + OptionalValue> getStatus(); + + /** + * Get code + * + * @return code + */ + OptionalValue> getCode(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new BatchDeliveryReportQueryParametersImpl.Builder(); + } + + /** + * Getting builder from existing instance + * + * @return New Builder instance + */ + static Builder builder(BatchDeliveryReportQueryParameters parameters) { + return new BatchDeliveryReportQueryParametersImpl.Builder(parameters); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param type see getter + * @return Current builder + * @see #getType + */ + Builder setType(QueryReportType type); + + /** + * see getter + * + * @param status see getter + * @return Current builder + * @see #getStatus + */ + Builder setStatus(List status); + + /** + * see getter + * + * @param code see getter + * @return Current builder + * @see #getCode + */ + Builder setCode(List code); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + BatchDeliveryReportQueryParameters build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/BatchDeliveryReportQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/BatchDeliveryReportQueryParametersImpl.java new file mode 100644 index 000000000..8d7e4c835 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/BatchDeliveryReportQueryParametersImpl.java @@ -0,0 +1,115 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports.request; + +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryReceiptErrorCode; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryStatus; +import java.util.List; +import java.util.Objects; + +public class BatchDeliveryReportQueryParametersImpl implements BatchDeliveryReportQueryParameters { + + private final OptionalValue type; + private final OptionalValue> status; + private final OptionalValue> code; + + private BatchDeliveryReportQueryParametersImpl( + OptionalValue type, + OptionalValue> status, + OptionalValue> code) { + this.type = type; + this.status = status; + this.code = code; + } + + public OptionalValue getType() { + return type; + } + + public OptionalValue> getStatus() { + return status; + } + + public OptionalValue> getCode() { + return code; + } + + /** Return true if this GetDeliveryReportByBatchIdQueryParameters object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BatchDeliveryReportQueryParametersImpl getDeliveryReportByBatchIdQueryParameters = + (BatchDeliveryReportQueryParametersImpl) o; + return Objects.equals(this.type, getDeliveryReportByBatchIdQueryParameters.type) + && Objects.equals(this.status, getDeliveryReportByBatchIdQueryParameters.status) + && Objects.equals(this.code, getDeliveryReportByBatchIdQueryParameters.code); + } + + @Override + public int hashCode() { + return Objects.hash(type, status, code); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class BatchDeliveryReportQueryParametersImpl {\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" status: ").append(toIndentedString(status)).append("\n"); + sb.append(" code: ").append(toIndentedString(code)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + static class Builder implements BatchDeliveryReportQueryParameters.Builder { + OptionalValue type = OptionalValue.empty(); + OptionalValue> status = OptionalValue.empty(); + OptionalValue> code = OptionalValue.empty(); + + protected Builder() {} + + protected Builder(BatchDeliveryReportQueryParameters _parameters) { + if (null == _parameters) { + return; + } + BatchDeliveryReportQueryParametersImpl parameters = + (BatchDeliveryReportQueryParametersImpl) _parameters; + this.type = parameters.getType(); + this.status = parameters.getStatus(); + this.code = parameters.getCode(); + } + + public Builder setType(QueryReportType type) { + this.type = OptionalValue.of(type); + return this; + } + + public Builder setStatus(List status) { + this.status = OptionalValue.of(status); + return this; + } + + public Builder setCode(List code) { + this.code = OptionalValue.of(code); + return this; + } + + public BatchDeliveryReportQueryParameters build() { + return new BatchDeliveryReportQueryParametersImpl(type, status, code); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/ListDeliveryReportsQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/ListDeliveryReportsQueryParameters.java new file mode 100644 index 000000000..2f6f4f144 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/ListDeliveryReportsQueryParameters.java @@ -0,0 +1,162 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.deliveryreports.request; + +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryReceiptErrorCode; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryStatus; +import java.time.Instant; +import java.util.List; + +/** ListDeliveryReportsQueryParameters */ +public interface ListDeliveryReportsQueryParameters { + + /** + * Get page minimum: 0 + * + * @return page + */ + OptionalValue getPage(); + + /** + * Get pageSize minimum: 1 maximum: 100 + * + * @return pageSize + */ + OptionalValue getPageSize(); + + /** + * Get startDate + * + * @return startDate + */ + OptionalValue getStartDate(); + + /** + * Get endDate + * + * @return endDate + */ + OptionalValue getEndDate(); + + /** + * Get status + * + * @return status + */ + OptionalValue> getStatus(); + + /** + * Get code + * + * @return code + */ + OptionalValue> getCode(); + + /** + * Get clientReference + * + * @return clientReference + */ + OptionalValue getClientReference(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new ListDeliveryReportsQueryParametersImpl.Builder(); + } + + /** + * Getting builder from existing instance + * + * @return New Builder instance + */ + static Builder builder(ListDeliveryReportsQueryParameters parameters) { + return new ListDeliveryReportsQueryParametersImpl.Builder(parameters); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param page see getter + * @return Current builder + * @see #getPage + */ + Builder setPage(Integer page); + + /** + * see getter + * + * @param pageSize see getter + * @return Current builder + * @see #getPageSize + */ + Builder setPageSize(Integer pageSize); + + /** + * see getter + * + * @param startDate see getter + * @return Current builder + * @see #getStartDate + */ + Builder setStartDate(Instant startDate); + + /** + * see getter + * + * @param endDate see getter + * @return Current builder + * @see #getEndDate + */ + Builder setEndDate(Instant endDate); + + /** + * see getter + * + * @param status see getter + * @return Current builder + * @see #getStatus + */ + Builder setStatus(List status); + + /** + * see getter + * + * @param code see getter + * @return Current builder + * @see #getCode + */ + Builder setCode(List code); + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + ListDeliveryReportsQueryParameters build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/ListDeliveryReportsQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/ListDeliveryReportsQueryParametersImpl.java new file mode 100644 index 000000000..26bc6b5fa --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/ListDeliveryReportsQueryParametersImpl.java @@ -0,0 +1,181 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports.request; + +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryReceiptErrorCode; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryStatus; +import java.time.Instant; +import java.util.List; +import java.util.Objects; + +public class ListDeliveryReportsQueryParametersImpl implements ListDeliveryReportsQueryParameters { + + private final OptionalValue page; + private final OptionalValue pageSize; + private final OptionalValue startDate; + private final OptionalValue endDate; + private final OptionalValue> status; + private final OptionalValue> code; + private final OptionalValue clientReference; + + private ListDeliveryReportsQueryParametersImpl( + OptionalValue page, + OptionalValue pageSize, + OptionalValue startDate, + OptionalValue endDate, + OptionalValue> status, + OptionalValue> code, + OptionalValue clientReference) { + this.page = page; + this.pageSize = pageSize; + this.startDate = startDate; + this.endDate = endDate; + this.status = status; + this.code = code; + this.clientReference = clientReference; + } + + public OptionalValue getPage() { + return page; + } + + public OptionalValue getPageSize() { + return pageSize; + } + + public OptionalValue getStartDate() { + return startDate; + } + + public OptionalValue getEndDate() { + return endDate; + } + + public OptionalValue> getStatus() { + return status; + } + + public OptionalValue> getCode() { + return code; + } + + public OptionalValue getClientReference() { + return clientReference; + } + + /** Return true if this GetDeliveryReportsQueryParameters object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ListDeliveryReportsQueryParametersImpl getDeliveryReportsQueryParameters = + (ListDeliveryReportsQueryParametersImpl) o; + return Objects.equals(this.page, getDeliveryReportsQueryParameters.page) + && Objects.equals(this.pageSize, getDeliveryReportsQueryParameters.pageSize) + && Objects.equals(this.startDate, getDeliveryReportsQueryParameters.startDate) + && Objects.equals(this.endDate, getDeliveryReportsQueryParameters.endDate) + && Objects.equals(this.status, getDeliveryReportsQueryParameters.status) + && Objects.equals(this.code, getDeliveryReportsQueryParameters.code) + && Objects.equals(this.clientReference, getDeliveryReportsQueryParameters.clientReference); + } + + @Override + public int hashCode() { + return Objects.hash(page, pageSize, startDate, endDate, status, code, clientReference); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ListDeliveryReportsQueryParametersImpl {\n"); + sb.append(" page: ").append(toIndentedString(page)).append("\n"); + sb.append(" pageSize: ").append(toIndentedString(pageSize)).append("\n"); + sb.append(" startDate: ").append(toIndentedString(startDate)).append("\n"); + sb.append(" endDate: ").append(toIndentedString(endDate)).append("\n"); + sb.append(" status: ").append(toIndentedString(status)).append("\n"); + sb.append(" code: ").append(toIndentedString(code)).append("\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + static class Builder implements ListDeliveryReportsQueryParameters.Builder { + OptionalValue page = OptionalValue.empty(); + OptionalValue pageSize = OptionalValue.empty(); + OptionalValue startDate = OptionalValue.empty(); + OptionalValue endDate = OptionalValue.empty(); + OptionalValue> status = OptionalValue.empty(); + OptionalValue> code = OptionalValue.empty(); + OptionalValue clientReference = OptionalValue.empty(); + + protected Builder() {} + + protected Builder(ListDeliveryReportsQueryParameters _parameters) { + if (null == _parameters) { + return; + } + ListDeliveryReportsQueryParametersImpl parameters = + (ListDeliveryReportsQueryParametersImpl) _parameters; + this.page = parameters.getPage(); + this.pageSize = parameters.getPageSize(); + this.startDate = parameters.getStartDate(); + this.endDate = parameters.getEndDate(); + this.status = parameters.getStatus(); + this.code = parameters.getCode(); + this.clientReference = parameters.getClientReference(); + } + + public Builder setPage(Integer page) { + this.page = OptionalValue.of(page); + return this; + } + + public Builder setPageSize(Integer pageSize) { + this.pageSize = OptionalValue.of(pageSize); + return this; + } + + public Builder setStartDate(Instant startDate) { + this.startDate = OptionalValue.of(startDate); + return this; + } + + public Builder setEndDate(Instant endDate) { + this.endDate = OptionalValue.of(endDate); + return this; + } + + public Builder setStatus(List status) { + this.status = OptionalValue.of(status); + return this; + } + + public Builder setCode(List code) { + this.code = OptionalValue.of(code); + return this; + } + + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + public ListDeliveryReportsQueryParameters build() { + return new ListDeliveryReportsQueryParametersImpl( + page, pageSize, startDate, endDate, status, code, clientReference); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/QueryReportType.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/QueryReportType.java new file mode 100644 index 000000000..d61251f7a --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/request/QueryReportType.java @@ -0,0 +1,36 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports.request; + +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import java.util.Arrays; +import java.util.stream.Stream; + +/** Kind of delivery report */ +public class QueryReportType extends EnumDynamic { + + /** Will count the number of messages sent per status. */ + public static final QueryReportType SUMMARY = new QueryReportType("summary"); + + /** Report give that of a summary report but in addition, lists phone numbers. */ + public static final QueryReportType FULL = new QueryReportType("full"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>( + QueryReportType.class, QueryReportType::new, Arrays.asList(SUMMARY, FULL)); + + private QueryReportType(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static QueryReportType from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(QueryReportType e) { + return ENUM_SUPPORT.valueOf(e); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/response/ListDeliveryReportsResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/response/ListDeliveryReportsResponse.java new file mode 100644 index 000000000..cabaef578 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/response/ListDeliveryReportsResponse.java @@ -0,0 +1,70 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.deliveryreports.response; + +import com.sinch.sdk.core.models.pagination.ListResponse; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.sms.api.v1.DeliveryReportsService; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReport; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.request.ListDeliveryReportsQueryParameters; +import java.util.Collection; +import java.util.NoSuchElementException; + +/** Auto paginated response for list of RecipientDeliveryReport */ +public class ListDeliveryReportsResponse extends ListResponse { + + private final Page page; + private final DeliveryReportsService service; + private ListDeliveryReportsResponse nextPage; + + public ListDeliveryReportsResponse( + DeliveryReportsService service, + Page page) { + this.service = service; + this.page = page; + } + + @Override + public boolean hasNextPage() { + if (null == page.getNextPageToken() || null == getContent() || getContent().isEmpty()) { + return false; + } + if (null == nextPage) { + ListDeliveryReportsQueryParameters.Builder newParameters = + ListDeliveryReportsQueryParameters.builder(page.getParameters()); + newParameters.setPage(page.getNextPageToken()); + nextPage = service.list(newParameters.build()); + } + return (null != nextPage.getContent() && !nextPage.getContent().isEmpty()); + } + + @Override + public ListDeliveryReportsResponse nextPage() { + + if (!hasNextPage()) { + throw new NoSuchElementException("Reached the last page of the API response"); + } + + ListDeliveryReportsResponse response = nextPage; + nextPage = null; + return response; + } + + @Override + public Collection getContent() { + return page.getEntities(); + } + + @Override + public String toString() { + return "ListDeliveryReportsResponse {" + "page=" + page + '}'; + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/response/internal/DeliveryReportList.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/response/internal/DeliveryReportList.java new file mode 100644 index 000000000..91395a4bb --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/response/internal/DeliveryReportList.java @@ -0,0 +1,104 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.deliveryreports.response.internal; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReport; +import java.util.List; + +/** DeliveryReportList */ +@JsonDeserialize(builder = DeliveryReportListImpl.Builder.class) +public interface DeliveryReportList { + + /** + * The total number of entries matching the given filters. + * + * @return count + */ + Long getCount(); + + /** + * The requested page. + * + * @return page + */ + Integer getPage(); + + /** + * The number of entries returned in this request. + * + * @return pageSize + */ + Integer getPageSize(); + + /** + * The page of delivery reports matching the given filters. + * + * @return items + */ + List getItems(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new DeliveryReportListImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param count see getter + * @return Current builder + * @see #getCount + */ + Builder setCount(Long count); + + /** + * see getter + * + * @param page see getter + * @return Current builder + * @see #getPage + */ + Builder setPage(Integer page); + + /** + * see getter + * + * @param pageSize see getter + * @return Current builder + * @see #getPageSize + */ + Builder setPageSize(Integer pageSize); + + /** + * see getter + * + * @param items see getter + * @return Current builder + * @see #getItems + */ + Builder setItems(List items); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + DeliveryReportList build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/response/internal/DeliveryReportListImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/response/internal/DeliveryReportListImpl.java new file mode 100644 index 000000000..1dbfb3d06 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/deliveryreports/response/internal/DeliveryReportListImpl.java @@ -0,0 +1,176 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports.response.internal; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReport; +import java.util.List; +import java.util.Objects; + +@JsonPropertyOrder({ + DeliveryReportListImpl.JSON_PROPERTY_COUNT, + DeliveryReportListImpl.JSON_PROPERTY_PAGE, + DeliveryReportListImpl.JSON_PROPERTY_PAGE_SIZE, + DeliveryReportListImpl.JSON_PROPERTY_DELIVERY_REPORTS +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class DeliveryReportListImpl implements DeliveryReportList { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_COUNT = "count"; + + private OptionalValue count; + + public static final String JSON_PROPERTY_PAGE = "page"; + + private OptionalValue page; + + public static final String JSON_PROPERTY_PAGE_SIZE = "page_size"; + + private OptionalValue pageSize; + + public static final String JSON_PROPERTY_DELIVERY_REPORTS = "delivery_reports"; + + private OptionalValue> items; + + public DeliveryReportListImpl() {} + + protected DeliveryReportListImpl( + OptionalValue count, + OptionalValue page, + OptionalValue pageSize, + OptionalValue> items) { + this.count = count; + this.page = page; + this.pageSize = pageSize; + this.items = items; + } + + @JsonIgnore + public Long getCount() { + return count.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_COUNT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue count() { + return count; + } + + @JsonIgnore + public Integer getPage() { + return page.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_PAGE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue page() { + return page; + } + + @JsonIgnore + public Integer getPageSize() { + return pageSize.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_PAGE_SIZE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue pageSize() { + return pageSize; + } + + @JsonIgnore + public List getItems() { + return items.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORTS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> items() { + return items; + } + + /** Return true if this DeliveryReportList object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DeliveryReportListImpl deliveryReportList = (DeliveryReportListImpl) o; + return Objects.equals(this.count, deliveryReportList.count) + && Objects.equals(this.page, deliveryReportList.page) + && Objects.equals(this.pageSize, deliveryReportList.pageSize) + && Objects.equals(this.items, deliveryReportList.items); + } + + @Override + public int hashCode() { + return Objects.hash(count, page, pageSize, items); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class DeliveryReportListImpl {\n"); + sb.append(" count: ").append(toIndentedString(count)).append("\n"); + sb.append(" page: ").append(toIndentedString(page)).append("\n"); + sb.append(" pageSize: ").append(toIndentedString(pageSize)).append("\n"); + sb.append(" items: ").append(toIndentedString(items)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements DeliveryReportList.Builder { + OptionalValue count = OptionalValue.empty(); + OptionalValue page = OptionalValue.empty(); + OptionalValue pageSize = OptionalValue.empty(); + OptionalValue> items = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_COUNT) + public Builder setCount(Long count) { + this.count = OptionalValue.of(count); + return this; + } + + @JsonProperty(JSON_PROPERTY_PAGE) + public Builder setPage(Integer page) { + this.page = OptionalValue.of(page); + return this; + } + + @JsonProperty(JSON_PROPERTY_PAGE_SIZE) + public Builder setPageSize(Integer pageSize) { + this.pageSize = OptionalValue.of(pageSize); + return this; + } + + @JsonProperty(JSON_PROPERTY_DELIVERY_REPORTS) + public Builder setItems(List items) { + this.items = OptionalValue.of(items); + return this; + } + + public DeliveryReportList build() { + return new DeliveryReportListImpl(count, page, pageSize, items); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/AddKeyword.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/AddKeyword.java new file mode 100644 index 000000000..afaf45826 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/AddKeyword.java @@ -0,0 +1,71 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.groups; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +/** Keyword to be sent in MO to add MSISDN to a group */ +@JsonDeserialize(builder = AddKeywordImpl.Builder.class) +public interface AddKeyword { + + /** + * Opt-in keyword like "JOIN" if auto_update.to is dedicated long/short number + * or unique brand keyword like "Sinch" if it is a shared short code. + * + * @return firstWord + */ + String getFirstWord(); + + /** + * Opt-in keyword like "JOIN" if auto_update.to is shared short code. + * + * @return secondWord + */ + String getSecondWord(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new AddKeywordImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param firstWord see getter + * @return Current builder + * @see #getFirstWord + */ + Builder setFirstWord(String firstWord); + + /** + * see getter + * + * @param secondWord see getter + * @return Current builder + * @see #getSecondWord + */ + Builder setSecondWord(String secondWord); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + AddKeyword build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/AddKeywordImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/AddKeywordImpl.java new file mode 100644 index 000000000..91d6fd001 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/AddKeywordImpl.java @@ -0,0 +1,118 @@ +package com.sinch.sdk.domains.sms.models.v1.groups; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +@JsonPropertyOrder({ + AddKeywordImpl.JSON_PROPERTY_FIRST_WORD, + AddKeywordImpl.JSON_PROPERTY_SECOND_WORD +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class AddKeywordImpl implements AddKeyword { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_FIRST_WORD = "first_word"; + + private OptionalValue firstWord; + + public static final String JSON_PROPERTY_SECOND_WORD = "second_word"; + + private OptionalValue secondWord; + + public AddKeywordImpl() {} + + protected AddKeywordImpl(OptionalValue firstWord, OptionalValue secondWord) { + this.firstWord = firstWord; + this.secondWord = secondWord; + } + + @JsonIgnore + public String getFirstWord() { + return firstWord.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FIRST_WORD) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue firstWord() { + return firstWord; + } + + @JsonIgnore + public String getSecondWord() { + return secondWord.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_SECOND_WORD) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue secondWord() { + return secondWord; + } + + /** Return true if this addKeyword object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AddKeywordImpl addKeyword = (AddKeywordImpl) o; + return Objects.equals(this.firstWord, addKeyword.firstWord) + && Objects.equals(this.secondWord, addKeyword.secondWord); + } + + @Override + public int hashCode() { + return Objects.hash(firstWord, secondWord); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class AddKeywordImpl {\n"); + sb.append(" firstWord: ").append(toIndentedString(firstWord)).append("\n"); + sb.append(" secondWord: ").append(toIndentedString(secondWord)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements AddKeyword.Builder { + OptionalValue firstWord = OptionalValue.empty(); + OptionalValue secondWord = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_FIRST_WORD) + public Builder setFirstWord(String firstWord) { + this.firstWord = OptionalValue.of(firstWord); + return this; + } + + @JsonProperty(JSON_PROPERTY_SECOND_WORD) + public Builder setSecondWord(String secondWord) { + this.secondWord = OptionalValue.of(secondWord); + return this; + } + + public AddKeyword build() { + return new AddKeywordImpl(firstWord, secondWord); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/Group.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/Group.java new file mode 100644 index 000000000..76b870925 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/Group.java @@ -0,0 +1,162 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.groups; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import java.time.Instant; +import java.util.Set; + +/** Group */ +@JsonDeserialize(builder = GroupImpl.Builder.class) +public interface Group { + + /** + * The ID used to reference this group. + * + * @return id + * @readOnly This field is returned by the server and cannot be modified + */ + String getId(); + + /** + * Name of group if set. + * + * @return name + */ + String getName(); + + /** + * The number of members currently in the group. + * + * @return size + * @readOnly This field is returned by the server and cannot be modified + */ + Integer getSize(); + + /** + * Timestamp for group creation. Format: YYYY-MM-DDThh:mm:ss.SSSZ + * + * @return createdAt + * @readOnly This field is returned by the server and cannot be modified + */ + Instant getCreatedAt(); + + /** + * Timestamp for when the group was last updated. Format: YYYY-MM-DDThh:mm:ss.SSSZ + * + * @return modifiedAt + * @readOnly This field is returned by the server and cannot be modified + */ + Instant getModifiedAt(); + + /** + * Get autoUpdate + * + * @return autoUpdate + */ + GroupAutoUpdate getAutoUpdate(); + + /** + * Phone numbers MSIDNs of + * child group will be included in this group. If present then this group will be auto populated. + * Constraints: Elements must be group IDs. + * + * @return childGroups + */ + Set getChildGroups(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new GroupImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param id see getter + * @return Current builder + * @see #getId + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setId(String id); + + /** + * see getter + * + * @param name see getter + * @return Current builder + * @see #getName + */ + Builder setName(String name); + + /** + * see getter + * + * @param size see getter + * @return Current builder + * @see #getSize + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setSize(Integer size); + + /** + * see getter + * + * @param createdAt see getter + * @return Current builder + * @see #getCreatedAt + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setCreatedAt(Instant createdAt); + + /** + * see getter + * + * @param modifiedAt see getter + * @return Current builder + * @see #getModifiedAt + * @readOnly This field is returned by the server and cannot be modified + */ + Builder setModifiedAt(Instant modifiedAt); + + /** + * see getter + * + * @param autoUpdate see getter + * @return Current builder + * @see #getAutoUpdate + */ + Builder setAutoUpdate(GroupAutoUpdate autoUpdate); + + /** + * see getter + * + * @param childGroups see getter + * @return Current builder + * @see #getChildGroups + */ + Builder setChildGroups(Set childGroups); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + Group build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/GroupAutoUpdate.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/GroupAutoUpdate.java new file mode 100644 index 000000000..71ee0052d --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/GroupAutoUpdate.java @@ -0,0 +1,89 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.groups; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +/** GroupAutoUpdate */ +@JsonDeserialize(builder = GroupAutoUpdateImpl.Builder.class) +public interface GroupAutoUpdate { + + /** + * Short code or long number addressed in MO. + * Constraints: Must be valid phone number or short code which has been provisioned by + * your account manager. + * + * @return to + */ + String getTo(); + + /** + * Get add + * + * @return add + */ + AddKeyword getAdd(); + + /** + * Get remove + * + * @return remove + */ + RemoveKeyword getRemove(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new GroupAutoUpdateImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param to see getter + * @return Current builder + * @see #getTo + */ + Builder setTo(String to); + + /** + * see getter + * + * @param add see getter + * @return Current builder + * @see #getAdd + */ + Builder setAdd(AddKeyword add); + + /** + * see getter + * + * @param remove see getter + * @return Current builder + * @see #getRemove + */ + Builder setRemove(RemoveKeyword remove); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + GroupAutoUpdate build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/GroupAutoUpdateImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/GroupAutoUpdateImpl.java new file mode 100644 index 000000000..acc2ec116 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/GroupAutoUpdateImpl.java @@ -0,0 +1,147 @@ +package com.sinch.sdk.domains.sms.models.v1.groups; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +@JsonPropertyOrder({ + GroupAutoUpdateImpl.JSON_PROPERTY_TO, + GroupAutoUpdateImpl.JSON_PROPERTY_ADD, + GroupAutoUpdateImpl.JSON_PROPERTY_REMOVE +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class GroupAutoUpdateImpl implements GroupAutoUpdate { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_TO = "to"; + + private OptionalValue to; + + public static final String JSON_PROPERTY_ADD = "add"; + + private OptionalValue add; + + public static final String JSON_PROPERTY_REMOVE = "remove"; + + private OptionalValue remove; + + public GroupAutoUpdateImpl() {} + + protected GroupAutoUpdateImpl( + OptionalValue to, + OptionalValue add, + OptionalValue remove) { + this.to = to; + this.add = add; + this.remove = remove; + } + + @JsonIgnore + public String getTo() { + return to.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TO) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue to() { + return to; + } + + @JsonIgnore + public AddKeyword getAdd() { + return add.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_ADD) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue add() { + return add; + } + + @JsonIgnore + public RemoveKeyword getRemove() { + return remove.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_REMOVE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue remove() { + return remove; + } + + /** Return true if this ApiGroupAutoUpdate object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GroupAutoUpdateImpl apiGroupAutoUpdate = (GroupAutoUpdateImpl) o; + return Objects.equals(this.to, apiGroupAutoUpdate.to) + && Objects.equals(this.add, apiGroupAutoUpdate.add) + && Objects.equals(this.remove, apiGroupAutoUpdate.remove); + } + + @Override + public int hashCode() { + return Objects.hash(to, add, remove); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class GroupAutoUpdateImpl {\n"); + sb.append(" to: ").append(toIndentedString(to)).append("\n"); + sb.append(" add: ").append(toIndentedString(add)).append("\n"); + sb.append(" remove: ").append(toIndentedString(remove)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements GroupAutoUpdate.Builder { + OptionalValue to = OptionalValue.empty(); + OptionalValue add = OptionalValue.empty(); + OptionalValue remove = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_TO) + public Builder setTo(String to) { + this.to = OptionalValue.of(to); + return this; + } + + @JsonProperty(JSON_PROPERTY_ADD) + public Builder setAdd(AddKeyword add) { + this.add = OptionalValue.of(add); + return this; + } + + @JsonProperty(JSON_PROPERTY_REMOVE) + public Builder setRemove(RemoveKeyword remove) { + this.remove = OptionalValue.of(remove); + return this; + } + + public GroupAutoUpdate build() { + return new GroupAutoUpdateImpl(to, add, remove); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/GroupImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/GroupImpl.java new file mode 100644 index 000000000..6e7724c47 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/GroupImpl.java @@ -0,0 +1,253 @@ +package com.sinch.sdk.domains.sms.models.v1.groups; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.time.Instant; +import java.util.Objects; +import java.util.Set; + +@JsonPropertyOrder({ + GroupImpl.JSON_PROPERTY_ID, + GroupImpl.JSON_PROPERTY_NAME, + GroupImpl.JSON_PROPERTY_SIZE, + GroupImpl.JSON_PROPERTY_CREATED_AT, + GroupImpl.JSON_PROPERTY_MODIFIED_AT, + GroupImpl.JSON_PROPERTY_AUTO_UPDATE, + GroupImpl.JSON_PROPERTY_CHILD_GROUPS +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class GroupImpl implements Group { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_ID = "id"; + + private OptionalValue id; + + public static final String JSON_PROPERTY_NAME = "name"; + + private OptionalValue name; + + public static final String JSON_PROPERTY_SIZE = "size"; + + private OptionalValue size; + + public static final String JSON_PROPERTY_CREATED_AT = "created_at"; + + private OptionalValue createdAt; + + public static final String JSON_PROPERTY_MODIFIED_AT = "modified_at"; + + private OptionalValue modifiedAt; + + public static final String JSON_PROPERTY_AUTO_UPDATE = "auto_update"; + + private OptionalValue autoUpdate; + + public static final String JSON_PROPERTY_CHILD_GROUPS = "child_groups"; + + private OptionalValue> childGroups; + + public GroupImpl() {} + + protected GroupImpl( + OptionalValue id, + OptionalValue name, + OptionalValue size, + OptionalValue createdAt, + OptionalValue modifiedAt, + OptionalValue autoUpdate, + OptionalValue> childGroups) { + this.id = id; + this.name = name; + this.size = size; + this.createdAt = createdAt; + this.modifiedAt = modifiedAt; + this.autoUpdate = autoUpdate; + this.childGroups = childGroups; + } + + @JsonIgnore + public String getId() { + return id.orElse(null); + } + + @JsonIgnore + public OptionalValue id() { + return id; + } + + @JsonIgnore + public String getName() { + return name.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue name() { + return name; + } + + @JsonIgnore + public Integer getSize() { + return size.orElse(null); + } + + @JsonIgnore + public OptionalValue size() { + return size; + } + + @JsonIgnore + public Instant getCreatedAt() { + return createdAt.orElse(null); + } + + @JsonIgnore + public OptionalValue createdAt() { + return createdAt; + } + + @JsonIgnore + public Instant getModifiedAt() { + return modifiedAt.orElse(null); + } + + @JsonIgnore + public OptionalValue modifiedAt() { + return modifiedAt; + } + + @JsonIgnore + public GroupAutoUpdate getAutoUpdate() { + return autoUpdate.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_AUTO_UPDATE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue autoUpdate() { + return autoUpdate; + } + + @JsonIgnore + public Set getChildGroups() { + return childGroups.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CHILD_GROUPS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> childGroups() { + return childGroups; + } + + /** Return true if this ApiGroup object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GroupImpl apiGroup = (GroupImpl) o; + return Objects.equals(this.id, apiGroup.id) + && Objects.equals(this.name, apiGroup.name) + && Objects.equals(this.size, apiGroup.size) + && Objects.equals(this.createdAt, apiGroup.createdAt) + && Objects.equals(this.modifiedAt, apiGroup.modifiedAt) + && Objects.equals(this.autoUpdate, apiGroup.autoUpdate) + && Objects.equals(this.childGroups, apiGroup.childGroups); + } + + @Override + public int hashCode() { + return Objects.hash(id, name, size, createdAt, modifiedAt, autoUpdate, childGroups); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class GroupImpl {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" size: ").append(toIndentedString(size)).append("\n"); + sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); + sb.append(" modifiedAt: ").append(toIndentedString(modifiedAt)).append("\n"); + sb.append(" autoUpdate: ").append(toIndentedString(autoUpdate)).append("\n"); + sb.append(" childGroups: ").append(toIndentedString(childGroups)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements Group.Builder { + OptionalValue id = OptionalValue.empty(); + OptionalValue name = OptionalValue.empty(); + OptionalValue size = OptionalValue.empty(); + OptionalValue createdAt = OptionalValue.empty(); + OptionalValue modifiedAt = OptionalValue.empty(); + OptionalValue autoUpdate = OptionalValue.empty(); + OptionalValue> childGroups = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_ID) + public Builder setId(String id) { + this.id = OptionalValue.of(id); + return this; + } + + @JsonProperty(JSON_PROPERTY_NAME) + public Builder setName(String name) { + this.name = OptionalValue.of(name); + return this; + } + + @JsonProperty(JSON_PROPERTY_SIZE) + public Builder setSize(Integer size) { + this.size = OptionalValue.of(size); + return this; + } + + @JsonProperty(JSON_PROPERTY_CREATED_AT) + public Builder setCreatedAt(Instant createdAt) { + this.createdAt = OptionalValue.of(createdAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_MODIFIED_AT) + public Builder setModifiedAt(Instant modifiedAt) { + this.modifiedAt = OptionalValue.of(modifiedAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_AUTO_UPDATE) + public Builder setAutoUpdate(GroupAutoUpdate autoUpdate) { + this.autoUpdate = OptionalValue.of(autoUpdate); + return this; + } + + @JsonProperty(JSON_PROPERTY_CHILD_GROUPS) + public Builder setChildGroups(Set childGroups) { + this.childGroups = OptionalValue.of(childGroups); + return this; + } + + public Group build() { + return new GroupImpl(id, name, size, createdAt, modifiedAt, autoUpdate, childGroups); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/RemoveKeyword.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/RemoveKeyword.java new file mode 100644 index 000000000..a7e526205 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/RemoveKeyword.java @@ -0,0 +1,71 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.groups; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +/** Keyword to be sent in MO to remove MSISDN to a group */ +@JsonDeserialize(builder = RemoveKeywordImpl.Builder.class) +public interface RemoveKeyword { + + /** + * Opt-out keyword like "LEAVE" if auto_update.to is dedicated long/short + * number or unique brand keyword like "Sinch" if it is a shared short code. + * + * @return firstWord + */ + String getFirstWord(); + + /** + * Opt-out keyword like "LEAVE" if auto_update.to is shared short code. + * + * @return secondWord + */ + String getSecondWord(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new RemoveKeywordImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param firstWord see getter + * @return Current builder + * @see #getFirstWord + */ + Builder setFirstWord(String firstWord); + + /** + * see getter + * + * @param secondWord see getter + * @return Current builder + * @see #getSecondWord + */ + Builder setSecondWord(String secondWord); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + RemoveKeyword build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/RemoveKeywordImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/RemoveKeywordImpl.java new file mode 100644 index 000000000..0d6eac795 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/RemoveKeywordImpl.java @@ -0,0 +1,118 @@ +package com.sinch.sdk.domains.sms.models.v1.groups; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +@JsonPropertyOrder({ + RemoveKeywordImpl.JSON_PROPERTY_FIRST_WORD, + RemoveKeywordImpl.JSON_PROPERTY_SECOND_WORD +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class RemoveKeywordImpl implements RemoveKeyword { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_FIRST_WORD = "first_word"; + + private OptionalValue firstWord; + + public static final String JSON_PROPERTY_SECOND_WORD = "second_word"; + + private OptionalValue secondWord; + + public RemoveKeywordImpl() {} + + protected RemoveKeywordImpl(OptionalValue firstWord, OptionalValue secondWord) { + this.firstWord = firstWord; + this.secondWord = secondWord; + } + + @JsonIgnore + public String getFirstWord() { + return firstWord.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FIRST_WORD) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue firstWord() { + return firstWord; + } + + @JsonIgnore + public String getSecondWord() { + return secondWord.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_SECOND_WORD) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue secondWord() { + return secondWord; + } + + /** Return true if this removeKeyword object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RemoveKeywordImpl removeKeyword = (RemoveKeywordImpl) o; + return Objects.equals(this.firstWord, removeKeyword.firstWord) + && Objects.equals(this.secondWord, removeKeyword.secondWord); + } + + @Override + public int hashCode() { + return Objects.hash(firstWord, secondWord); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RemoveKeywordImpl {\n"); + sb.append(" firstWord: ").append(toIndentedString(firstWord)).append("\n"); + sb.append(" secondWord: ").append(toIndentedString(secondWord)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements RemoveKeyword.Builder { + OptionalValue firstWord = OptionalValue.empty(); + OptionalValue secondWord = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_FIRST_WORD) + public Builder setFirstWord(String firstWord) { + this.firstWord = OptionalValue.of(firstWord); + return this; + } + + @JsonProperty(JSON_PROPERTY_SECOND_WORD) + public Builder setSecondWord(String secondWord) { + this.secondWord = OptionalValue.of(secondWord); + return this; + } + + public RemoveKeyword build() { + return new RemoveKeywordImpl(firstWord, secondWord); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupRequest.java new file mode 100644 index 000000000..080b68c6a --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupRequest.java @@ -0,0 +1,141 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.groups.request; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.domains.sms.models.v1.groups.GroupAutoUpdate; +import java.time.Instant; +import java.util.Set; + +/** GroupRequest */ +@JsonDeserialize(builder = GroupRequestImpl.Builder.class) +public interface GroupRequest { + + /** + * The ID used to reference this group. + * + * @return id + * @readOnly This field is returned by the server and cannot be modified + */ + String getId(); + + /** + * Name of group if set. + * + * @return name + */ + String getName(); + + /** + * The number of members currently in the group. + * + * @return size + * @readOnly This field is returned by the server and cannot be modified + */ + Integer getSize(); + + /** + * Timestamp for group creation. Format: YYYY-MM-DDThh:mm:ss.SSSZ + * + * @return createdAt + * @readOnly This field is returned by the server and cannot be modified + */ + Instant getCreatedAt(); + + /** + * Timestamp for when the group was last updated. Format: YYYY-MM-DDThh:mm:ss.SSSZ + * + * @return modifiedAt + * @readOnly This field is returned by the server and cannot be modified + */ + Instant getModifiedAt(); + + /** + * Get autoUpdate + * + * @return autoUpdate + */ + GroupAutoUpdate getAutoUpdate(); + + /** + * Phone numbers MSIDNs of + * child group will be included in this group. If present then this group will be auto populated. + * Constraints: Elements must be group IDs. + * + * @return childGroups + */ + Set getChildGroups(); + + /** + * Initial list of phone numbers in E.164 format MSISDNs for the group. + * + * @return members + */ + Set getMembers(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new GroupRequestImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param name see getter + * @return Current builder + * @see #getName + */ + Builder setName(String name); + + /** + * see getter + * + * @param autoUpdate see getter + * @return Current builder + * @see #getAutoUpdate + */ + Builder setAutoUpdate(GroupAutoUpdate autoUpdate); + + /** + * see getter + * + * @param childGroups see getter + * @return Current builder + * @see #getChildGroups + */ + Builder setChildGroups(Set childGroups); + + /** + * see getter + * + * @param members see getter + * @return Current builder + * @see #getMembers + */ + Builder setMembers(Set members); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + GroupRequest build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupRequestImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupRequestImpl.java new file mode 100644 index 000000000..380a412ba --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupRequestImpl.java @@ -0,0 +1,282 @@ +package com.sinch.sdk.domains.sms.models.v1.groups.request; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.groups.GroupAutoUpdate; +import java.time.Instant; +import java.util.Objects; +import java.util.Set; + +@JsonPropertyOrder({ + GroupRequestImpl.JSON_PROPERTY_ID, + GroupRequestImpl.JSON_PROPERTY_NAME, + GroupRequestImpl.JSON_PROPERTY_SIZE, + GroupRequestImpl.JSON_PROPERTY_CREATED_AT, + GroupRequestImpl.JSON_PROPERTY_MODIFIED_AT, + GroupRequestImpl.JSON_PROPERTY_AUTO_UPDATE, + GroupRequestImpl.JSON_PROPERTY_CHILD_GROUPS, + GroupRequestImpl.JSON_PROPERTY_MEMBERS +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class GroupRequestImpl implements GroupRequest { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_ID = "id"; + + private OptionalValue id; + + public static final String JSON_PROPERTY_NAME = "name"; + + private OptionalValue name; + + public static final String JSON_PROPERTY_SIZE = "size"; + + private OptionalValue size; + + public static final String JSON_PROPERTY_CREATED_AT = "created_at"; + + private OptionalValue createdAt; + + public static final String JSON_PROPERTY_MODIFIED_AT = "modified_at"; + + private OptionalValue modifiedAt; + + public static final String JSON_PROPERTY_AUTO_UPDATE = "auto_update"; + + private OptionalValue autoUpdate; + + public static final String JSON_PROPERTY_CHILD_GROUPS = "child_groups"; + + private OptionalValue> childGroups; + + public static final String JSON_PROPERTY_MEMBERS = "members"; + + private OptionalValue> members; + + public GroupRequestImpl() {} + + protected GroupRequestImpl( + OptionalValue id, + OptionalValue name, + OptionalValue size, + OptionalValue createdAt, + OptionalValue modifiedAt, + OptionalValue autoUpdate, + OptionalValue> childGroups, + OptionalValue> members) { + this.id = id; + this.name = name; + this.size = size; + this.createdAt = createdAt; + this.modifiedAt = modifiedAt; + this.autoUpdate = autoUpdate; + this.childGroups = childGroups; + this.members = members; + } + + @JsonIgnore + public String getId() { + return id.orElse(null); + } + + @JsonIgnore + public OptionalValue id() { + return id; + } + + @JsonIgnore + public String getName() { + return name.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue name() { + return name; + } + + @JsonIgnore + public Integer getSize() { + return size.orElse(null); + } + + @JsonIgnore + public OptionalValue size() { + return size; + } + + @JsonIgnore + public Instant getCreatedAt() { + return createdAt.orElse(null); + } + + @JsonIgnore + public OptionalValue createdAt() { + return createdAt; + } + + @JsonIgnore + public Instant getModifiedAt() { + return modifiedAt.orElse(null); + } + + @JsonIgnore + public OptionalValue modifiedAt() { + return modifiedAt; + } + + @JsonIgnore + public GroupAutoUpdate getAutoUpdate() { + return autoUpdate.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_AUTO_UPDATE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue autoUpdate() { + return autoUpdate; + } + + @JsonIgnore + public Set getChildGroups() { + return childGroups.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CHILD_GROUPS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> childGroups() { + return childGroups; + } + + @JsonIgnore + public Set getMembers() { + return members.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_MEMBERS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> members() { + return members; + } + + /** Return true if this ApiGroupRequest object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GroupRequestImpl apiGroupRequest = (GroupRequestImpl) o; + return Objects.equals(this.id, apiGroupRequest.id) + && Objects.equals(this.name, apiGroupRequest.name) + && Objects.equals(this.size, apiGroupRequest.size) + && Objects.equals(this.createdAt, apiGroupRequest.createdAt) + && Objects.equals(this.modifiedAt, apiGroupRequest.modifiedAt) + && Objects.equals(this.autoUpdate, apiGroupRequest.autoUpdate) + && Objects.equals(this.childGroups, apiGroupRequest.childGroups) + && Objects.equals(this.members, apiGroupRequest.members); + } + + @Override + public int hashCode() { + return Objects.hash(id, name, size, createdAt, modifiedAt, autoUpdate, childGroups, members); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class GroupRequestImpl {\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" size: ").append(toIndentedString(size)).append("\n"); + sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); + sb.append(" modifiedAt: ").append(toIndentedString(modifiedAt)).append("\n"); + sb.append(" autoUpdate: ").append(toIndentedString(autoUpdate)).append("\n"); + sb.append(" childGroups: ").append(toIndentedString(childGroups)).append("\n"); + sb.append(" members: ").append(toIndentedString(members)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements GroupRequest.Builder { + OptionalValue id = OptionalValue.empty(); + OptionalValue name = OptionalValue.empty(); + OptionalValue size = OptionalValue.empty(); + OptionalValue createdAt = OptionalValue.empty(); + OptionalValue modifiedAt = OptionalValue.empty(); + OptionalValue autoUpdate = OptionalValue.empty(); + OptionalValue> childGroups = OptionalValue.empty(); + OptionalValue> members = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_ID) + public Builder setId(String id) { + this.id = OptionalValue.of(id); + return this; + } + + @JsonProperty(JSON_PROPERTY_NAME) + public Builder setName(String name) { + this.name = OptionalValue.of(name); + return this; + } + + @JsonProperty(JSON_PROPERTY_SIZE) + public Builder setSize(Integer size) { + this.size = OptionalValue.of(size); + return this; + } + + @JsonProperty(JSON_PROPERTY_CREATED_AT) + public Builder setCreatedAt(Instant createdAt) { + this.createdAt = OptionalValue.of(createdAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_MODIFIED_AT) + public Builder setModifiedAt(Instant modifiedAt) { + this.modifiedAt = OptionalValue.of(modifiedAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_AUTO_UPDATE) + public Builder setAutoUpdate(GroupAutoUpdate autoUpdate) { + this.autoUpdate = OptionalValue.of(autoUpdate); + return this; + } + + @JsonProperty(JSON_PROPERTY_CHILD_GROUPS) + public Builder setChildGroups(Set childGroups) { + this.childGroups = OptionalValue.of(childGroups); + return this; + } + + @JsonProperty(JSON_PROPERTY_MEMBERS) + public Builder setMembers(Set members) { + this.members = OptionalValue.of(members); + return this; + } + + public GroupRequest build() { + return new GroupRequestImpl( + id, name, size, createdAt, modifiedAt, autoUpdate, childGroups, members); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupUpdateRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupUpdateRequest.java new file mode 100644 index 000000000..2aaea8910 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupUpdateRequest.java @@ -0,0 +1,141 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.groups.request; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.domains.sms.models.v1.groups.GroupAutoUpdate; +import java.util.List; + +/** GroupUpdateRequest */ +@JsonDeserialize(builder = GroupUpdateRequestImpl.Builder.class) +public interface GroupUpdateRequest { + + /** + * Add a list of phone numbers (MSISDNs) to this group. The phone numbers are a strings within an + * array and must be in E.164 + * format. + * + * @return add + */ + List getAdd(); + + /** + * Remove a list of phone numbers (MSISDNs) to this group.The phone numbers are a strings within + * an array and must be in E.164 + * format. + * + * @return remove + */ + List getRemove(); + + /** + * The name of the group. Omitting name from the JSON body will leave the name + * unchanged. To remove an existing name set, name explicitly to the JSON value null. + * + * @return name + */ + String getName(); + + /** + * One time copy of all members from the group referenced by the group ID into this group. + * + * @return addFromGroup + */ + String getAddFromGroup(); + + /** + * Remove all members from this group that are currently in the group referenced by the group ID. + * + * @return removeFromGroup + */ + String getRemoveFromGroup(); + + /** + * Get autoUpdate + * + * @return autoUpdate + */ + GroupAutoUpdate getAutoUpdate(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new GroupUpdateRequestImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param add see getter + * @return Current builder + * @see #getAdd + */ + Builder setAdd(List add); + + /** + * see getter + * + * @param remove see getter + * @return Current builder + * @see #getRemove + */ + Builder setRemove(List remove); + + /** + * see getter + * + * @param name see getter + * @return Current builder + * @see #getName + */ + Builder setName(String name); + + /** + * see getter + * + * @param addFromGroup see getter + * @return Current builder + * @see #getAddFromGroup + */ + Builder setAddFromGroup(String addFromGroup); + + /** + * see getter + * + * @param removeFromGroup see getter + * @return Current builder + * @see #getRemoveFromGroup + */ + Builder setRemoveFromGroup(String removeFromGroup); + + /** + * see getter + * + * @param autoUpdate see getter + * @return Current builder + * @see #getAutoUpdate + */ + Builder setAutoUpdate(GroupAutoUpdate autoUpdate); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + GroupUpdateRequest build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupUpdateRequestImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupUpdateRequestImpl.java new file mode 100644 index 000000000..613c53cd0 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupUpdateRequestImpl.java @@ -0,0 +1,231 @@ +package com.sinch.sdk.domains.sms.models.v1.groups.request; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.groups.GroupAutoUpdate; +import java.util.List; +import java.util.Objects; + +@JsonPropertyOrder({ + GroupUpdateRequestImpl.JSON_PROPERTY_ADD, + GroupUpdateRequestImpl.JSON_PROPERTY_REMOVE, + GroupUpdateRequestImpl.JSON_PROPERTY_NAME, + GroupUpdateRequestImpl.JSON_PROPERTY_ADD_FROM_GROUP, + GroupUpdateRequestImpl.JSON_PROPERTY_REMOVE_FROM_GROUP, + GroupUpdateRequestImpl.JSON_PROPERTY_AUTO_UPDATE +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class GroupUpdateRequestImpl implements GroupUpdateRequest { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_ADD = "add"; + + private OptionalValue> add; + + public static final String JSON_PROPERTY_REMOVE = "remove"; + + private OptionalValue> remove; + + public static final String JSON_PROPERTY_NAME = "name"; + + private OptionalValue name; + + public static final String JSON_PROPERTY_ADD_FROM_GROUP = "add_from_group"; + + private OptionalValue addFromGroup; + + public static final String JSON_PROPERTY_REMOVE_FROM_GROUP = "remove_from_group"; + + private OptionalValue removeFromGroup; + + public static final String JSON_PROPERTY_AUTO_UPDATE = "auto_update"; + + private OptionalValue autoUpdate; + + public GroupUpdateRequestImpl() {} + + protected GroupUpdateRequestImpl( + OptionalValue> add, + OptionalValue> remove, + OptionalValue name, + OptionalValue addFromGroup, + OptionalValue removeFromGroup, + OptionalValue autoUpdate) { + this.add = add; + this.remove = remove; + this.name = name; + this.addFromGroup = addFromGroup; + this.removeFromGroup = removeFromGroup; + this.autoUpdate = autoUpdate; + } + + @JsonIgnore + public List getAdd() { + return add.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_ADD) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> add() { + return add; + } + + @JsonIgnore + public List getRemove() { + return remove.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_REMOVE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> remove() { + return remove; + } + + @JsonIgnore + public String getName() { + return name.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue name() { + return name; + } + + @JsonIgnore + public String getAddFromGroup() { + return addFromGroup.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_ADD_FROM_GROUP) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue addFromGroup() { + return addFromGroup; + } + + @JsonIgnore + public String getRemoveFromGroup() { + return removeFromGroup.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_REMOVE_FROM_GROUP) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue removeFromGroup() { + return removeFromGroup; + } + + @JsonIgnore + public GroupAutoUpdate getAutoUpdate() { + return autoUpdate.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_AUTO_UPDATE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue autoUpdate() { + return autoUpdate; + } + + /** Return true if this ApiGroupUpdate object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GroupUpdateRequestImpl apiGroupUpdate = (GroupUpdateRequestImpl) o; + return Objects.equals(this.add, apiGroupUpdate.add) + && Objects.equals(this.remove, apiGroupUpdate.remove) + && Objects.equals(this.name, apiGroupUpdate.name) + && Objects.equals(this.addFromGroup, apiGroupUpdate.addFromGroup) + && Objects.equals(this.removeFromGroup, apiGroupUpdate.removeFromGroup) + && Objects.equals(this.autoUpdate, apiGroupUpdate.autoUpdate); + } + + @Override + public int hashCode() { + return Objects.hash(add, remove, name, addFromGroup, removeFromGroup, autoUpdate); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class GroupUpdateRequestImpl {\n"); + sb.append(" add: ").append(toIndentedString(add)).append("\n"); + sb.append(" remove: ").append(toIndentedString(remove)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" addFromGroup: ").append(toIndentedString(addFromGroup)).append("\n"); + sb.append(" removeFromGroup: ").append(toIndentedString(removeFromGroup)).append("\n"); + sb.append(" autoUpdate: ").append(toIndentedString(autoUpdate)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements GroupUpdateRequest.Builder { + OptionalValue> add = OptionalValue.empty(); + OptionalValue> remove = OptionalValue.empty(); + OptionalValue name = OptionalValue.empty(); + OptionalValue addFromGroup = OptionalValue.empty(); + OptionalValue removeFromGroup = OptionalValue.empty(); + OptionalValue autoUpdate = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_ADD) + public Builder setAdd(List add) { + this.add = OptionalValue.of(add); + return this; + } + + @JsonProperty(JSON_PROPERTY_REMOVE) + public Builder setRemove(List remove) { + this.remove = OptionalValue.of(remove); + return this; + } + + @JsonProperty(JSON_PROPERTY_NAME) + public Builder setName(String name) { + this.name = OptionalValue.of(name); + return this; + } + + @JsonProperty(JSON_PROPERTY_ADD_FROM_GROUP) + public Builder setAddFromGroup(String addFromGroup) { + this.addFromGroup = OptionalValue.of(addFromGroup); + return this; + } + + @JsonProperty(JSON_PROPERTY_REMOVE_FROM_GROUP) + public Builder setRemoveFromGroup(String removeFromGroup) { + this.removeFromGroup = OptionalValue.of(removeFromGroup); + return this; + } + + @JsonProperty(JSON_PROPERTY_AUTO_UPDATE) + public Builder setAutoUpdate(GroupAutoUpdate autoUpdate) { + this.autoUpdate = OptionalValue.of(autoUpdate); + return this; + } + + public GroupUpdateRequest build() { + return new GroupUpdateRequestImpl( + add, remove, name, addFromGroup, removeFromGroup, autoUpdate); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/ListGroupsQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/ListGroupsQueryParameters.java new file mode 100644 index 000000000..b7a043fe5 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/ListGroupsQueryParameters.java @@ -0,0 +1,78 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.groups.request; + +import com.sinch.sdk.core.models.OptionalValue; + +/** ListGroupsQueryParameters */ +public interface ListGroupsQueryParameters { + + /** + * Get page minimum: 0 + * + * @return page + */ + OptionalValue getPage(); + + /** + * Get pageSize minimum: 0 maximum: 100 + * + * @return pageSize + */ + OptionalValue getPageSize(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new ListGroupsQueryParametersImpl.Builder(); + } + + /** + * Getting builder from existing instance + * + * @return New Builder instance + */ + static Builder builder(ListGroupsQueryParameters parameters) { + return new ListGroupsQueryParametersImpl.Builder(parameters); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param page see getter + * @return Current builder + * @see #getPage + */ + Builder setPage(Integer page); + + /** + * see getter + * + * @param pageSize see getter + * @return Current builder + * @see #getPageSize + */ + Builder setPageSize(Integer pageSize); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + ListGroupsQueryParameters build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/ListGroupsQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/ListGroupsQueryParametersImpl.java new file mode 100644 index 000000000..be0e02afd --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/request/ListGroupsQueryParametersImpl.java @@ -0,0 +1,93 @@ +package com.sinch.sdk.domains.sms.models.v1.groups.request; + +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +public class ListGroupsQueryParametersImpl implements ListGroupsQueryParameters { + + private final OptionalValue page; + private final OptionalValue pageSize; + + private ListGroupsQueryParametersImpl( + OptionalValue page, OptionalValue pageSize) { + this.page = page; + this.pageSize = pageSize; + } + + public OptionalValue getPage() { + return page; + } + + public OptionalValue getPageSize() { + return pageSize; + } + + /** Return true if this ListGroupsQueryParameters object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ListGroupsQueryParametersImpl listGroupsQueryParameters = (ListGroupsQueryParametersImpl) o; + return Objects.equals(this.page, listGroupsQueryParameters.page) + && Objects.equals(this.pageSize, listGroupsQueryParameters.pageSize); + } + + @Override + public int hashCode() { + return Objects.hash(page, pageSize); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ListGroupsQueryParametersImpl {\n"); + sb.append(" page: ").append(toIndentedString(page)).append("\n"); + sb.append(" pageSize: ").append(toIndentedString(pageSize)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + static class Builder implements ListGroupsQueryParameters.Builder { + OptionalValue page = OptionalValue.empty(); + OptionalValue pageSize = OptionalValue.empty(); + + protected Builder() {} + + protected Builder(ListGroupsQueryParameters _parameters) { + if (null == _parameters) { + return; + } + ListGroupsQueryParametersImpl parameters = (ListGroupsQueryParametersImpl) _parameters; + this.page = parameters.getPage(); + this.pageSize = parameters.getPageSize(); + } + + public Builder setPage(Integer page) { + this.page = OptionalValue.of(page); + return this; + } + + public Builder setPageSize(Integer pageSize) { + this.pageSize = OptionalValue.of(pageSize); + return this; + } + + public ListGroupsQueryParameters build() { + return new ListGroupsQueryParametersImpl(page, pageSize); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/response/ListGroupsResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/response/ListGroupsResponse.java new file mode 100644 index 000000000..79e5dad9c --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/response/ListGroupsResponse.java @@ -0,0 +1,69 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.groups.response; + +import com.sinch.sdk.core.models.pagination.ListResponse; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import com.sinch.sdk.domains.sms.models.v1.groups.Group; +import com.sinch.sdk.domains.sms.models.v1.groups.request.ListGroupsQueryParameters; +import java.util.Collection; +import java.util.NoSuchElementException; + +/** Auto paginated response for list of Group */ +public class ListGroupsResponse extends ListResponse { + + private final Page page; + private final GroupsService service; + private ListGroupsResponse nextPage; + + public ListGroupsResponse( + GroupsService service, Page page) { + this.service = service; + this.page = page; + } + + @Override + public boolean hasNextPage() { + if (null == page.getNextPageToken() || null == getContent() || getContent().isEmpty()) { + return false; + } + if (null == nextPage) { + ListGroupsQueryParameters.Builder newParameters = + ListGroupsQueryParameters.builder(page.getParameters()); + newParameters.setPage(page.getNextPageToken()); + nextPage = service.list(newParameters.build()); + } + return (null != nextPage.getContent() && !nextPage.getContent().isEmpty()); + } + + @Override + public ListGroupsResponse nextPage() { + + if (!hasNextPage()) { + throw new NoSuchElementException("Reached the last page of the API response"); + } + + ListGroupsResponse response = nextPage; + nextPage = null; + return response; + } + + @Override + public Collection getContent() { + return page.getEntities(); + } + + @Override + public String toString() { + return "ListGroupsResponse {" + "page=" + page + '}'; + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/response/internal/ApiGroupList.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/response/internal/ApiGroupList.java new file mode 100644 index 000000000..ffec32daa --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/response/internal/ApiGroupList.java @@ -0,0 +1,104 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.groups.response.internal; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.domains.sms.models.v1.groups.Group; +import java.util.List; + +/** ApiGroupList */ +@JsonDeserialize(builder = ApiGroupListImpl.Builder.class) +public interface ApiGroupList { + + /** + * The requested page. + * + * @return page + */ + Integer getPage(); + + /** + * The number of groups returned in this request + * + * @return pageSize + */ + Integer getPageSize(); + + /** + * The total number of groups. + * + * @return count + */ + Integer getCount(); + + /** + * Get items + * + * @return items + */ + List getItems(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new ApiGroupListImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param page see getter + * @return Current builder + * @see #getPage + */ + Builder setPage(Integer page); + + /** + * see getter + * + * @param pageSize see getter + * @return Current builder + * @see #getPageSize + */ + Builder setPageSize(Integer pageSize); + + /** + * see getter + * + * @param count see getter + * @return Current builder + * @see #getCount + */ + Builder setCount(Integer count); + + /** + * see getter + * + * @param items see getter + * @return Current builder + * @see #getItems + */ + Builder setItems(List items); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + ApiGroupList build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/response/internal/ApiGroupListImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/response/internal/ApiGroupListImpl.java new file mode 100644 index 000000000..59559c616 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/groups/response/internal/ApiGroupListImpl.java @@ -0,0 +1,176 @@ +package com.sinch.sdk.domains.sms.models.v1.groups.response.internal; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.groups.Group; +import java.util.List; +import java.util.Objects; + +@JsonPropertyOrder({ + ApiGroupListImpl.JSON_PROPERTY_PAGE, + ApiGroupListImpl.JSON_PROPERTY_PAGE_SIZE, + ApiGroupListImpl.JSON_PROPERTY_COUNT, + ApiGroupListImpl.JSON_PROPERTY_GROUPS +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class ApiGroupListImpl implements ApiGroupList { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_PAGE = "page"; + + private OptionalValue page; + + public static final String JSON_PROPERTY_PAGE_SIZE = "page_size"; + + private OptionalValue pageSize; + + public static final String JSON_PROPERTY_COUNT = "count"; + + private OptionalValue count; + + public static final String JSON_PROPERTY_GROUPS = "groups"; + + private OptionalValue> items; + + public ApiGroupListImpl() {} + + protected ApiGroupListImpl( + OptionalValue page, + OptionalValue pageSize, + OptionalValue count, + OptionalValue> items) { + this.page = page; + this.pageSize = pageSize; + this.count = count; + this.items = items; + } + + @JsonIgnore + public Integer getPage() { + return page.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_PAGE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue page() { + return page; + } + + @JsonIgnore + public Integer getPageSize() { + return pageSize.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_PAGE_SIZE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue pageSize() { + return pageSize; + } + + @JsonIgnore + public Integer getCount() { + return count.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_COUNT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue count() { + return count; + } + + @JsonIgnore + public List getItems() { + return items.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_GROUPS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> items() { + return items; + } + + /** Return true if this ApiGroupList object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ApiGroupListImpl apiGroupList = (ApiGroupListImpl) o; + return Objects.equals(this.page, apiGroupList.page) + && Objects.equals(this.pageSize, apiGroupList.pageSize) + && Objects.equals(this.count, apiGroupList.count) + && Objects.equals(this.items, apiGroupList.items); + } + + @Override + public int hashCode() { + return Objects.hash(page, pageSize, count, items); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ApiGroupListImpl {\n"); + sb.append(" page: ").append(toIndentedString(page)).append("\n"); + sb.append(" pageSize: ").append(toIndentedString(pageSize)).append("\n"); + sb.append(" count: ").append(toIndentedString(count)).append("\n"); + sb.append(" items: ").append(toIndentedString(items)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements ApiGroupList.Builder { + OptionalValue page = OptionalValue.empty(); + OptionalValue pageSize = OptionalValue.empty(); + OptionalValue count = OptionalValue.empty(); + OptionalValue> items = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_PAGE) + public Builder setPage(Integer page) { + this.page = OptionalValue.of(page); + return this; + } + + @JsonProperty(JSON_PROPERTY_PAGE_SIZE) + public Builder setPageSize(Integer pageSize) { + this.pageSize = OptionalValue.of(pageSize); + return this; + } + + @JsonProperty(JSON_PROPERTY_COUNT) + public Builder setCount(Integer count) { + this.count = OptionalValue.of(count); + return this; + } + + @JsonProperty(JSON_PROPERTY_GROUPS) + public Builder setItems(List items) { + this.items = OptionalValue.of(items); + return this; + } + + public ApiGroupList build() { + return new ApiGroupListImpl(page, pageSize, count, items); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/BinaryMessage.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/BinaryMessage.java new file mode 100644 index 000000000..79f588b59 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/BinaryMessage.java @@ -0,0 +1,223 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.inbounds; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import java.time.Instant; +import java.util.Arrays; +import java.util.stream.Stream; + +/** Binary MO */ +@JsonDeserialize(builder = BinaryMessageImpl.Builder.class) +public interface BinaryMessage extends InboundMessage { + + /** + * If this inbound message is in response to a previously sent message that contained a client + * reference, then this field contains that client reference. Utilizing this feature + * requires additional setup on your account. Contact your account manager to enable this + * feature. + * + * @return clientReference + */ + String getClientReference(); + + /** + * The phone number that sent the message. More info + * + * @return from + */ + String getFrom(); + + /** + * The ID of this inbound message. + * + * @return id + */ + String getId(); + + /** + * The MCC/MNC of the sender's operator if known. + * + * @return operatorId + */ + String getOperatorId(); + + /** + * When the system received the message. Formatted as ISO-8601: YYYY-MM-DDThh:mm:ss.SSSZ + * . + * + * @return receivedAt + */ + Instant getReceivedAt(); + + /** + * When the message left the originating device. Only available if provided by operator. Formatted + * as ISO-8601: + * YYYY-MM-DDThh:mm:ss.SSSZ. + * + * @return sentAt + */ + Instant getSentAt(); + + /** + * The Sinch phone number or short code to which the message was sent. + * + * @return to + */ + String getTo(); + + /** + * SMS in binary + * format. + */ + public class TypeEnum extends EnumDynamic { + public static final TypeEnum MO_BINARY = new TypeEnum("mo_binary"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>(TypeEnum.class, TypeEnum::new, Arrays.asList(MO_BINARY)); + + private TypeEnum(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static TypeEnum from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(TypeEnum e) { + return ENUM_SUPPORT.valueOf(e); + } + } + + /** + * The message content Base64 encoded. Max 140 bytes together with udh. + * + * @return body + */ + String getBody(); + + /** + * The UDH header of a binary message HEX encoded. Max 140 bytes together with body. + * + * @return udh + */ + String getUdh(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new BinaryMessageImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * see getter + * + * @param from see getter + * @return Current builder + * @see #getFrom + */ + Builder setFrom(String from); + + /** + * see getter + * + * @param id see getter + * @return Current builder + * @see #getId + */ + Builder setId(String id); + + /** + * see getter + * + * @param operatorId see getter + * @return Current builder + * @see #getOperatorId + */ + Builder setOperatorId(String operatorId); + + /** + * see getter + * + * @param receivedAt see getter + * @return Current builder + * @see #getReceivedAt + */ + Builder setReceivedAt(Instant receivedAt); + + /** + * see getter + * + * @param sentAt see getter + * @return Current builder + * @see #getSentAt + */ + Builder setSentAt(Instant sentAt); + + /** + * see getter + * + * @param to see getter + * @return Current builder + * @see #getTo + */ + Builder setTo(String to); + + /** + * see getter + * + * @param body see getter + * @return Current builder + * @see #getBody + */ + Builder setBody(String body); + + /** + * see getter + * + * @param udh see getter + * @return Current builder + * @see #getUdh + */ + Builder setUdh(String udh); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + BinaryMessage build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/BinaryMessageImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/BinaryMessageImpl.java new file mode 100644 index 000000000..f94b3ed6c --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/BinaryMessageImpl.java @@ -0,0 +1,332 @@ +package com.sinch.sdk.domains.sms.models.v1.inbounds; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.time.Instant; +import java.util.Objects; + +@JsonPropertyOrder({ + BinaryMessageImpl.JSON_PROPERTY_CLIENT_REFERENCE, + BinaryMessageImpl.JSON_PROPERTY_FROM, + BinaryMessageImpl.JSON_PROPERTY_ID, + BinaryMessageImpl.JSON_PROPERTY_OPERATOR_ID, + BinaryMessageImpl.JSON_PROPERTY_RECEIVED_AT, + BinaryMessageImpl.JSON_PROPERTY_SENT_AT, + BinaryMessageImpl.JSON_PROPERTY_TO, + BinaryMessageImpl.JSON_PROPERTY_TYPE, + BinaryMessageImpl.JSON_PROPERTY_BODY, + BinaryMessageImpl.JSON_PROPERTY_UDH +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class BinaryMessageImpl implements BinaryMessage, InboundMessage { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_CLIENT_REFERENCE = "client_reference"; + + private OptionalValue clientReference; + + public static final String JSON_PROPERTY_FROM = "from"; + + private OptionalValue from; + + public static final String JSON_PROPERTY_ID = "id"; + + private OptionalValue id; + + public static final String JSON_PROPERTY_OPERATOR_ID = "operator_id"; + + private OptionalValue operatorId; + + public static final String JSON_PROPERTY_RECEIVED_AT = "received_at"; + + private OptionalValue receivedAt; + + public static final String JSON_PROPERTY_SENT_AT = "sent_at"; + + private OptionalValue sentAt; + + public static final String JSON_PROPERTY_TO = "to"; + + private OptionalValue to; + + public static final String JSON_PROPERTY_TYPE = "type"; + + private OptionalValue type; + + public static final String JSON_PROPERTY_BODY = "body"; + + private OptionalValue body; + + public static final String JSON_PROPERTY_UDH = "udh"; + + private OptionalValue udh; + + public BinaryMessageImpl() {} + + protected BinaryMessageImpl( + OptionalValue clientReference, + OptionalValue from, + OptionalValue id, + OptionalValue operatorId, + OptionalValue receivedAt, + OptionalValue sentAt, + OptionalValue to, + OptionalValue type, + OptionalValue body, + OptionalValue udh) { + this.clientReference = clientReference; + this.from = from; + this.id = id; + this.operatorId = operatorId; + this.receivedAt = receivedAt; + this.sentAt = sentAt; + this.to = to; + this.type = type; + this.body = body; + this.udh = udh; + } + + @JsonIgnore + public String getClientReference() { + return clientReference.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue clientReference() { + return clientReference; + } + + @JsonIgnore + public String getFrom() { + return from.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue from() { + return from; + } + + @JsonIgnore + public String getId() { + return id.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue id() { + return id; + } + + @JsonIgnore + public String getOperatorId() { + return operatorId.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_OPERATOR_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue operatorId() { + return operatorId; + } + + @JsonIgnore + public Instant getReceivedAt() { + return receivedAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_RECEIVED_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue receivedAt() { + return receivedAt; + } + + @JsonIgnore + public Instant getSentAt() { + return sentAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_SENT_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue sentAt() { + return sentAt; + } + + @JsonIgnore + public String getTo() { + return to.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TO) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue to() { + return to; + } + + @JsonIgnore + public TypeEnum getType() { + return type.orElse(null); + } + + @JsonIgnore + public OptionalValue type() { + return type; + } + + @JsonIgnore + public String getBody() { + return body.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_BODY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue body() { + return body; + } + + @JsonIgnore + public String getUdh() { + return udh.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_UDH) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue udh() { + return udh; + } + + /** Return true if this MOBinary object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BinaryMessageImpl moBinary = (BinaryMessageImpl) o; + return Objects.equals(this.clientReference, moBinary.clientReference) + && Objects.equals(this.from, moBinary.from) + && Objects.equals(this.id, moBinary.id) + && Objects.equals(this.operatorId, moBinary.operatorId) + && Objects.equals(this.receivedAt, moBinary.receivedAt) + && Objects.equals(this.sentAt, moBinary.sentAt) + && Objects.equals(this.to, moBinary.to) + && Objects.equals(this.type, moBinary.type) + && Objects.equals(this.body, moBinary.body) + && Objects.equals(this.udh, moBinary.udh); + } + + @Override + public int hashCode() { + return Objects.hash( + clientReference, from, id, operatorId, receivedAt, sentAt, to, type, body, udh); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class BinaryMessageImpl {\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append(" from: ").append(toIndentedString(from)).append("\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" operatorId: ").append(toIndentedString(operatorId)).append("\n"); + sb.append(" receivedAt: ").append(toIndentedString(receivedAt)).append("\n"); + sb.append(" sentAt: ").append(toIndentedString(sentAt)).append("\n"); + sb.append(" to: ").append(toIndentedString(to)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" body: ").append(toIndentedString(body)).append("\n"); + sb.append(" udh: ").append(toIndentedString(udh)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements BinaryMessage.Builder { + OptionalValue clientReference = OptionalValue.empty(); + OptionalValue from = OptionalValue.empty(); + OptionalValue id = OptionalValue.empty(); + OptionalValue operatorId = OptionalValue.empty(); + OptionalValue receivedAt = OptionalValue.empty(); + OptionalValue sentAt = OptionalValue.empty(); + OptionalValue to = OptionalValue.empty(); + OptionalValue type = OptionalValue.of(TypeEnum.MO_BINARY); + OptionalValue body = OptionalValue.empty(); + OptionalValue udh = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM) + public Builder setFrom(String from) { + this.from = OptionalValue.of(from); + return this; + } + + @JsonProperty(JSON_PROPERTY_ID) + public Builder setId(String id) { + this.id = OptionalValue.of(id); + return this; + } + + @JsonProperty(JSON_PROPERTY_OPERATOR_ID) + public Builder setOperatorId(String operatorId) { + this.operatorId = OptionalValue.of(operatorId); + return this; + } + + @JsonProperty(JSON_PROPERTY_RECEIVED_AT) + public Builder setReceivedAt(Instant receivedAt) { + this.receivedAt = OptionalValue.of(receivedAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_SENT_AT) + public Builder setSentAt(Instant sentAt) { + this.sentAt = OptionalValue.of(sentAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_TO) + public Builder setTo(String to) { + this.to = OptionalValue.of(to); + return this; + } + + @JsonProperty(JSON_PROPERTY_BODY) + public Builder setBody(String body) { + this.body = OptionalValue.of(body); + return this; + } + + @JsonProperty(JSON_PROPERTY_UDH) + public Builder setUdh(String udh) { + this.udh = OptionalValue.of(udh); + return this; + } + + public BinaryMessage build() { + return new BinaryMessageImpl( + clientReference, from, id, operatorId, receivedAt, sentAt, to, type, body, udh); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessage.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessage.java new file mode 100644 index 000000000..414f682ae --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessage.java @@ -0,0 +1,204 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.inbounds; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import java.time.Instant; +import java.util.Arrays; +import java.util.stream.Stream; + +/** Media MO */ +@JsonDeserialize(builder = MediaMessageImpl.Builder.class) +public interface MediaMessage extends InboundMessage { + + /** + * If this inbound message is in response to a previously sent message that contained a client + * reference, then this field contains that client reference. Utilizing this feature + * requires additional setup on your account. Contact your account manager to enable this + * feature. + * + * @return clientReference + */ + String getClientReference(); + + /** + * The phone number that sent the message. More info + * + * @return from + */ + String getFrom(); + + /** + * The ID of this inbound message. + * + * @return id + */ + String getId(); + + /** + * The MCC/MNC of the sender's operator if known. + * + * @return operatorId + */ + String getOperatorId(); + + /** + * When the system received the message. Formatted as ISO-8601: YYYY-MM-DDThh:mm:ss.SSSZ + * . + * + * @return receivedAt + */ + Instant getReceivedAt(); + + /** + * When the message left the originating device. Only available if provided by operator. Formatted + * as ISO-8601: + * YYYY-MM-DDThh:mm:ss.SSSZ. + * + * @return sentAt + */ + Instant getSentAt(); + + /** + * The Sinch phone number or short code to which the message was sent. + * + * @return to + */ + String getTo(); + + /** MMS */ + public class TypeEnum extends EnumDynamic { + public static final TypeEnum MO_MEDIA = new TypeEnum("mo_media"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>(TypeEnum.class, TypeEnum::new, Arrays.asList(MO_MEDIA)); + + private TypeEnum(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static TypeEnum from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(TypeEnum e) { + return ENUM_SUPPORT.valueOf(e); + } + } + + /** + * Get body + * + * @return body + */ + MediaMessageBody getBody(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new MediaMessageImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * see getter + * + * @param from see getter + * @return Current builder + * @see #getFrom + */ + Builder setFrom(String from); + + /** + * see getter + * + * @param id see getter + * @return Current builder + * @see #getId + */ + Builder setId(String id); + + /** + * see getter + * + * @param operatorId see getter + * @return Current builder + * @see #getOperatorId + */ + Builder setOperatorId(String operatorId); + + /** + * see getter + * + * @param receivedAt see getter + * @return Current builder + * @see #getReceivedAt + */ + Builder setReceivedAt(Instant receivedAt); + + /** + * see getter + * + * @param sentAt see getter + * @return Current builder + * @see #getSentAt + */ + Builder setSentAt(Instant sentAt); + + /** + * see getter + * + * @param to see getter + * @return Current builder + * @see #getTo + */ + Builder setTo(String to); + + /** + * see getter + * + * @param body see getter + * @return Current builder + * @see #getBody + */ + Builder setBody(MediaMessageBody body); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + MediaMessage build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessageBody.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessageBody.java new file mode 100644 index 000000000..479c20abc --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessageBody.java @@ -0,0 +1,87 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.inbounds; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import java.util.List; + +/** The message content, including a URL to the media filters. */ +@JsonDeserialize(builder = MediaMessageBodyImpl.Builder.class) +public interface MediaMessageBody { + + /** + * The subject of the MMS media message. + * + * @return subject + */ + String getSubject(); + + /** + * The text message content of the MMS media message. + * + * @return message + */ + String getMessage(); + + /** + * Get media + * + * @return media + */ + List getMedia(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new MediaMessageBodyImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param subject see getter + * @return Current builder + * @see #getSubject + */ + Builder setSubject(String subject); + + /** + * see getter + * + * @param message see getter + * @return Current builder + * @see #getMessage + */ + Builder setMessage(String message); + + /** + * see getter + * + * @param media see getter + * @return Current builder + * @see #getMedia + */ + Builder setMedia(List media); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + MediaMessageBody build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessageBodyDetails.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessageBodyDetails.java new file mode 100644 index 000000000..b24970676 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessageBodyDetails.java @@ -0,0 +1,102 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.inbounds; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +/** MediaMessageBodyDetails */ +@JsonDeserialize(builder = MediaMessageBodyDetailsImpl.Builder.class) +public interface MediaMessageBodyDetails { + + /** + * URL to the media file + * + * @return url + */ + String getUrl(); + + /** + * The type of media file included in the message + * + * @return contentType + */ + String getContentType(); + + /** + * The status of the media upload + * + * @return status + */ + String getStatus(); + + /** + * Get code + * + * @return code + */ + Integer getCode(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new MediaMessageBodyDetailsImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param url see getter + * @return Current builder + * @see #getUrl + */ + Builder setUrl(String url); + + /** + * see getter + * + * @param contentType see getter + * @return Current builder + * @see #getContentType + */ + Builder setContentType(String contentType); + + /** + * see getter + * + * @param status see getter + * @return Current builder + * @see #getStatus + */ + Builder setStatus(String status); + + /** + * see getter + * + * @param code see getter + * @return Current builder + * @see #getCode + */ + Builder setCode(Integer code); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + MediaMessageBodyDetails build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessageBodyDetailsImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessageBodyDetailsImpl.java new file mode 100644 index 000000000..dc54be22b --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessageBodyDetailsImpl.java @@ -0,0 +1,174 @@ +package com.sinch.sdk.domains.sms.models.v1.inbounds; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +@JsonPropertyOrder({ + MediaMessageBodyDetailsImpl.JSON_PROPERTY_URL, + MediaMessageBodyDetailsImpl.JSON_PROPERTY_CONTENT_TYPE, + MediaMessageBodyDetailsImpl.JSON_PROPERTY_STATUS, + MediaMessageBodyDetailsImpl.JSON_PROPERTY_CODE +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class MediaMessageBodyDetailsImpl implements MediaMessageBodyDetails { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_URL = "url"; + + private OptionalValue url; + + public static final String JSON_PROPERTY_CONTENT_TYPE = "contentType"; + + private OptionalValue contentType; + + public static final String JSON_PROPERTY_STATUS = "status"; + + private OptionalValue status; + + public static final String JSON_PROPERTY_CODE = "code"; + + private OptionalValue code; + + public MediaMessageBodyDetailsImpl() {} + + protected MediaMessageBodyDetailsImpl( + OptionalValue url, + OptionalValue contentType, + OptionalValue status, + OptionalValue code) { + this.url = url; + this.contentType = contentType; + this.status = status; + this.code = code; + } + + @JsonIgnore + public String getUrl() { + return url.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_URL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue url() { + return url; + } + + @JsonIgnore + public String getContentType() { + return contentType.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CONTENT_TYPE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue contentType() { + return contentType; + } + + @JsonIgnore + public String getStatus() { + return status.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_STATUS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue status() { + return status; + } + + @JsonIgnore + public Integer getCode() { + return code.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CODE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue code() { + return code; + } + + /** Return true if this MOMediaBody_media_inner object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MediaMessageBodyDetailsImpl moMediaBodyMediaInner = (MediaMessageBodyDetailsImpl) o; + return Objects.equals(this.url, moMediaBodyMediaInner.url) + && Objects.equals(this.contentType, moMediaBodyMediaInner.contentType) + && Objects.equals(this.status, moMediaBodyMediaInner.status) + && Objects.equals(this.code, moMediaBodyMediaInner.code); + } + + @Override + public int hashCode() { + return Objects.hash(url, contentType, status, code); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class MediaMessageBodyDetailsImpl {\n"); + sb.append(" url: ").append(toIndentedString(url)).append("\n"); + sb.append(" contentType: ").append(toIndentedString(contentType)).append("\n"); + sb.append(" status: ").append(toIndentedString(status)).append("\n"); + sb.append(" code: ").append(toIndentedString(code)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements MediaMessageBodyDetails.Builder { + OptionalValue url = OptionalValue.empty(); + OptionalValue contentType = OptionalValue.empty(); + OptionalValue status = OptionalValue.empty(); + OptionalValue code = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_URL) + public Builder setUrl(String url) { + this.url = OptionalValue.of(url); + return this; + } + + @JsonProperty(JSON_PROPERTY_CONTENT_TYPE) + public Builder setContentType(String contentType) { + this.contentType = OptionalValue.of(contentType); + return this; + } + + @JsonProperty(JSON_PROPERTY_STATUS) + public Builder setStatus(String status) { + this.status = OptionalValue.of(status); + return this; + } + + @JsonProperty(JSON_PROPERTY_CODE) + public Builder setCode(Integer code) { + this.code = OptionalValue.of(code); + return this; + } + + public MediaMessageBodyDetails build() { + return new MediaMessageBodyDetailsImpl(url, contentType, status, code); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessageBodyImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessageBodyImpl.java new file mode 100644 index 000000000..6fd480549 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessageBodyImpl.java @@ -0,0 +1,148 @@ +package com.sinch.sdk.domains.sms.models.v1.inbounds; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.util.List; +import java.util.Objects; + +@JsonPropertyOrder({ + MediaMessageBodyImpl.JSON_PROPERTY_SUBJECT, + MediaMessageBodyImpl.JSON_PROPERTY_MESSAGE, + MediaMessageBodyImpl.JSON_PROPERTY_MEDIA +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class MediaMessageBodyImpl implements MediaMessageBody { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_SUBJECT = "subject"; + + private OptionalValue subject; + + public static final String JSON_PROPERTY_MESSAGE = "message"; + + private OptionalValue message; + + public static final String JSON_PROPERTY_MEDIA = "media"; + + private OptionalValue> media; + + public MediaMessageBodyImpl() {} + + protected MediaMessageBodyImpl( + OptionalValue subject, + OptionalValue message, + OptionalValue> media) { + this.subject = subject; + this.message = message; + this.media = media; + } + + @JsonIgnore + public String getSubject() { + return subject.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_SUBJECT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue subject() { + return subject; + } + + @JsonIgnore + public String getMessage() { + return message.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_MESSAGE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue message() { + return message; + } + + @JsonIgnore + public List getMedia() { + return media.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_MEDIA) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> media() { + return media; + } + + /** Return true if this MOMediaBody object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MediaMessageBodyImpl moMediaBody = (MediaMessageBodyImpl) o; + return Objects.equals(this.subject, moMediaBody.subject) + && Objects.equals(this.message, moMediaBody.message) + && Objects.equals(this.media, moMediaBody.media); + } + + @Override + public int hashCode() { + return Objects.hash(subject, message, media); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class MediaMessageBodyImpl {\n"); + sb.append(" subject: ").append(toIndentedString(subject)).append("\n"); + sb.append(" message: ").append(toIndentedString(message)).append("\n"); + sb.append(" media: ").append(toIndentedString(media)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements MediaMessageBody.Builder { + OptionalValue subject = OptionalValue.empty(); + OptionalValue message = OptionalValue.empty(); + OptionalValue> media = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_SUBJECT) + public Builder setSubject(String subject) { + this.subject = OptionalValue.of(subject); + return this; + } + + @JsonProperty(JSON_PROPERTY_MESSAGE) + public Builder setMessage(String message) { + this.message = OptionalValue.of(message); + return this; + } + + @JsonProperty(JSON_PROPERTY_MEDIA) + public Builder setMedia(List media) { + this.media = OptionalValue.of(media); + return this; + } + + public MediaMessageBody build() { + return new MediaMessageBodyImpl(subject, message, media); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessageImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessageImpl.java new file mode 100644 index 000000000..dd536688b --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/MediaMessageImpl.java @@ -0,0 +1,304 @@ +package com.sinch.sdk.domains.sms.models.v1.inbounds; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.time.Instant; +import java.util.Objects; + +@JsonPropertyOrder({ + MediaMessageImpl.JSON_PROPERTY_CLIENT_REFERENCE, + MediaMessageImpl.JSON_PROPERTY_FROM, + MediaMessageImpl.JSON_PROPERTY_ID, + MediaMessageImpl.JSON_PROPERTY_OPERATOR_ID, + MediaMessageImpl.JSON_PROPERTY_RECEIVED_AT, + MediaMessageImpl.JSON_PROPERTY_SENT_AT, + MediaMessageImpl.JSON_PROPERTY_TO, + MediaMessageImpl.JSON_PROPERTY_TYPE, + MediaMessageImpl.JSON_PROPERTY_BODY +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class MediaMessageImpl implements MediaMessage, InboundMessage { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_CLIENT_REFERENCE = "client_reference"; + + private OptionalValue clientReference; + + public static final String JSON_PROPERTY_FROM = "from"; + + private OptionalValue from; + + public static final String JSON_PROPERTY_ID = "id"; + + private OptionalValue id; + + public static final String JSON_PROPERTY_OPERATOR_ID = "operator_id"; + + private OptionalValue operatorId; + + public static final String JSON_PROPERTY_RECEIVED_AT = "received_at"; + + private OptionalValue receivedAt; + + public static final String JSON_PROPERTY_SENT_AT = "sent_at"; + + private OptionalValue sentAt; + + public static final String JSON_PROPERTY_TO = "to"; + + private OptionalValue to; + + public static final String JSON_PROPERTY_TYPE = "type"; + + private OptionalValue type; + + public static final String JSON_PROPERTY_BODY = "body"; + + private OptionalValue body; + + public MediaMessageImpl() {} + + protected MediaMessageImpl( + OptionalValue clientReference, + OptionalValue from, + OptionalValue id, + OptionalValue operatorId, + OptionalValue receivedAt, + OptionalValue sentAt, + OptionalValue to, + OptionalValue type, + OptionalValue body) { + this.clientReference = clientReference; + this.from = from; + this.id = id; + this.operatorId = operatorId; + this.receivedAt = receivedAt; + this.sentAt = sentAt; + this.to = to; + this.type = type; + this.body = body; + } + + @JsonIgnore + public String getClientReference() { + return clientReference.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue clientReference() { + return clientReference; + } + + @JsonIgnore + public String getFrom() { + return from.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue from() { + return from; + } + + @JsonIgnore + public String getId() { + return id.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue id() { + return id; + } + + @JsonIgnore + public String getOperatorId() { + return operatorId.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_OPERATOR_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue operatorId() { + return operatorId; + } + + @JsonIgnore + public Instant getReceivedAt() { + return receivedAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_RECEIVED_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue receivedAt() { + return receivedAt; + } + + @JsonIgnore + public Instant getSentAt() { + return sentAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_SENT_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue sentAt() { + return sentAt; + } + + @JsonIgnore + public String getTo() { + return to.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TO) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue to() { + return to; + } + + @JsonIgnore + public TypeEnum getType() { + return type.orElse(null); + } + + @JsonIgnore + public OptionalValue type() { + return type; + } + + @JsonIgnore + public MediaMessageBody getBody() { + return body.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_BODY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue body() { + return body; + } + + /** Return true if this MOMedia object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MediaMessageImpl moMedia = (MediaMessageImpl) o; + return Objects.equals(this.clientReference, moMedia.clientReference) + && Objects.equals(this.from, moMedia.from) + && Objects.equals(this.id, moMedia.id) + && Objects.equals(this.operatorId, moMedia.operatorId) + && Objects.equals(this.receivedAt, moMedia.receivedAt) + && Objects.equals(this.sentAt, moMedia.sentAt) + && Objects.equals(this.to, moMedia.to) + && Objects.equals(this.type, moMedia.type) + && Objects.equals(this.body, moMedia.body); + } + + @Override + public int hashCode() { + return Objects.hash(clientReference, from, id, operatorId, receivedAt, sentAt, to, type, body); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class MediaMessageImpl {\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append(" from: ").append(toIndentedString(from)).append("\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" operatorId: ").append(toIndentedString(operatorId)).append("\n"); + sb.append(" receivedAt: ").append(toIndentedString(receivedAt)).append("\n"); + sb.append(" sentAt: ").append(toIndentedString(sentAt)).append("\n"); + sb.append(" to: ").append(toIndentedString(to)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" body: ").append(toIndentedString(body)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements MediaMessage.Builder { + OptionalValue clientReference = OptionalValue.empty(); + OptionalValue from = OptionalValue.empty(); + OptionalValue id = OptionalValue.empty(); + OptionalValue operatorId = OptionalValue.empty(); + OptionalValue receivedAt = OptionalValue.empty(); + OptionalValue sentAt = OptionalValue.empty(); + OptionalValue to = OptionalValue.empty(); + OptionalValue type = OptionalValue.of(TypeEnum.MO_MEDIA); + OptionalValue body = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM) + public Builder setFrom(String from) { + this.from = OptionalValue.of(from); + return this; + } + + @JsonProperty(JSON_PROPERTY_ID) + public Builder setId(String id) { + this.id = OptionalValue.of(id); + return this; + } + + @JsonProperty(JSON_PROPERTY_OPERATOR_ID) + public Builder setOperatorId(String operatorId) { + this.operatorId = OptionalValue.of(operatorId); + return this; + } + + @JsonProperty(JSON_PROPERTY_RECEIVED_AT) + public Builder setReceivedAt(Instant receivedAt) { + this.receivedAt = OptionalValue.of(receivedAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_SENT_AT) + public Builder setSentAt(Instant sentAt) { + this.sentAt = OptionalValue.of(sentAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_TO) + public Builder setTo(String to) { + this.to = OptionalValue.of(to); + return this; + } + + @JsonProperty(JSON_PROPERTY_BODY) + public Builder setBody(MediaMessageBody body) { + this.body = OptionalValue.of(body); + return this; + } + + public MediaMessage build() { + return new MediaMessageImpl( + clientReference, from, id, operatorId, receivedAt, sentAt, to, type, body); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/TextMessage.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/TextMessage.java new file mode 100644 index 000000000..7511ae725 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/TextMessage.java @@ -0,0 +1,204 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.inbounds; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import java.time.Instant; +import java.util.Arrays; +import java.util.stream.Stream; + +/** Text MO */ +@JsonDeserialize(builder = TextMessageImpl.Builder.class) +public interface TextMessage extends InboundMessage { + + /** + * If this inbound message is in response to a previously sent message that contained a client + * reference, then this field contains that client reference. Utilizing this feature + * requires additional setup on your account. Contact your account manager to enable this + * feature. + * + * @return clientReference + */ + String getClientReference(); + + /** + * The phone number that sent the message. More info + * + * @return from + */ + String getFrom(); + + /** + * The ID of this inbound message. + * + * @return id + */ + String getId(); + + /** + * The MCC/MNC of the sender's operator if known. + * + * @return operatorId + */ + String getOperatorId(); + + /** + * When the system received the message. Formatted as ISO-8601: YYYY-MM-DDThh:mm:ss.SSSZ + * . + * + * @return receivedAt + */ + Instant getReceivedAt(); + + /** + * When the message left the originating device. Only available if provided by operator. Formatted + * as ISO-8601: + * YYYY-MM-DDThh:mm:ss.SSSZ. + * + * @return sentAt + */ + Instant getSentAt(); + + /** + * The Sinch phone number or short code to which the message was sent. + * + * @return to + */ + String getTo(); + + /** Regular SMS */ + public class TypeEnum extends EnumDynamic { + public static final TypeEnum MO_TEXT = new TypeEnum("mo_text"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>(TypeEnum.class, TypeEnum::new, Arrays.asList(MO_TEXT)); + + private TypeEnum(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static TypeEnum from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(TypeEnum e) { + return ENUM_SUPPORT.valueOf(e); + } + } + + /** + * Get body + * + * @return body + */ + String getBody(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new TextMessageImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * see getter + * + * @param from see getter + * @return Current builder + * @see #getFrom + */ + Builder setFrom(String from); + + /** + * see getter + * + * @param id see getter + * @return Current builder + * @see #getId + */ + Builder setId(String id); + + /** + * see getter + * + * @param operatorId see getter + * @return Current builder + * @see #getOperatorId + */ + Builder setOperatorId(String operatorId); + + /** + * see getter + * + * @param receivedAt see getter + * @return Current builder + * @see #getReceivedAt + */ + Builder setReceivedAt(Instant receivedAt); + + /** + * see getter + * + * @param sentAt see getter + * @return Current builder + * @see #getSentAt + */ + Builder setSentAt(Instant sentAt); + + /** + * see getter + * + * @param to see getter + * @return Current builder + * @see #getTo + */ + Builder setTo(String to); + + /** + * see getter + * + * @param body see getter + * @return Current builder + * @see #getBody + */ + Builder setBody(String body); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + TextMessage build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/TextMessageImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/TextMessageImpl.java new file mode 100644 index 000000000..79f0612b2 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/TextMessageImpl.java @@ -0,0 +1,304 @@ +package com.sinch.sdk.domains.sms.models.v1.inbounds; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.time.Instant; +import java.util.Objects; + +@JsonPropertyOrder({ + TextMessageImpl.JSON_PROPERTY_CLIENT_REFERENCE, + TextMessageImpl.JSON_PROPERTY_FROM, + TextMessageImpl.JSON_PROPERTY_ID, + TextMessageImpl.JSON_PROPERTY_OPERATOR_ID, + TextMessageImpl.JSON_PROPERTY_RECEIVED_AT, + TextMessageImpl.JSON_PROPERTY_SENT_AT, + TextMessageImpl.JSON_PROPERTY_TO, + TextMessageImpl.JSON_PROPERTY_TYPE, + TextMessageImpl.JSON_PROPERTY_BODY +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class TextMessageImpl implements TextMessage, InboundMessage { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_CLIENT_REFERENCE = "client_reference"; + + private OptionalValue clientReference; + + public static final String JSON_PROPERTY_FROM = "from"; + + private OptionalValue from; + + public static final String JSON_PROPERTY_ID = "id"; + + private OptionalValue id; + + public static final String JSON_PROPERTY_OPERATOR_ID = "operator_id"; + + private OptionalValue operatorId; + + public static final String JSON_PROPERTY_RECEIVED_AT = "received_at"; + + private OptionalValue receivedAt; + + public static final String JSON_PROPERTY_SENT_AT = "sent_at"; + + private OptionalValue sentAt; + + public static final String JSON_PROPERTY_TO = "to"; + + private OptionalValue to; + + public static final String JSON_PROPERTY_TYPE = "type"; + + private OptionalValue type; + + public static final String JSON_PROPERTY_BODY = "body"; + + private OptionalValue body; + + public TextMessageImpl() {} + + protected TextMessageImpl( + OptionalValue clientReference, + OptionalValue from, + OptionalValue id, + OptionalValue operatorId, + OptionalValue receivedAt, + OptionalValue sentAt, + OptionalValue to, + OptionalValue type, + OptionalValue body) { + this.clientReference = clientReference; + this.from = from; + this.id = id; + this.operatorId = operatorId; + this.receivedAt = receivedAt; + this.sentAt = sentAt; + this.to = to; + this.type = type; + this.body = body; + } + + @JsonIgnore + public String getClientReference() { + return clientReference.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue clientReference() { + return clientReference; + } + + @JsonIgnore + public String getFrom() { + return from.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_FROM) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue from() { + return from; + } + + @JsonIgnore + public String getId() { + return id.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue id() { + return id; + } + + @JsonIgnore + public String getOperatorId() { + return operatorId.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_OPERATOR_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue operatorId() { + return operatorId; + } + + @JsonIgnore + public Instant getReceivedAt() { + return receivedAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_RECEIVED_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue receivedAt() { + return receivedAt; + } + + @JsonIgnore + public Instant getSentAt() { + return sentAt.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_SENT_AT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue sentAt() { + return sentAt; + } + + @JsonIgnore + public String getTo() { + return to.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TO) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue to() { + return to; + } + + @JsonIgnore + public TypeEnum getType() { + return type.orElse(null); + } + + @JsonIgnore + public OptionalValue type() { + return type; + } + + @JsonIgnore + public String getBody() { + return body.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_BODY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue body() { + return body; + } + + /** Return true if this MOText object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TextMessageImpl moText = (TextMessageImpl) o; + return Objects.equals(this.clientReference, moText.clientReference) + && Objects.equals(this.from, moText.from) + && Objects.equals(this.id, moText.id) + && Objects.equals(this.operatorId, moText.operatorId) + && Objects.equals(this.receivedAt, moText.receivedAt) + && Objects.equals(this.sentAt, moText.sentAt) + && Objects.equals(this.to, moText.to) + && Objects.equals(this.type, moText.type) + && Objects.equals(this.body, moText.body); + } + + @Override + public int hashCode() { + return Objects.hash(clientReference, from, id, operatorId, receivedAt, sentAt, to, type, body); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TextMessageImpl {\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append(" from: ").append(toIndentedString(from)).append("\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" operatorId: ").append(toIndentedString(operatorId)).append("\n"); + sb.append(" receivedAt: ").append(toIndentedString(receivedAt)).append("\n"); + sb.append(" sentAt: ").append(toIndentedString(sentAt)).append("\n"); + sb.append(" to: ").append(toIndentedString(to)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" body: ").append(toIndentedString(body)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements TextMessage.Builder { + OptionalValue clientReference = OptionalValue.empty(); + OptionalValue from = OptionalValue.empty(); + OptionalValue id = OptionalValue.empty(); + OptionalValue operatorId = OptionalValue.empty(); + OptionalValue receivedAt = OptionalValue.empty(); + OptionalValue sentAt = OptionalValue.empty(); + OptionalValue to = OptionalValue.empty(); + OptionalValue type = OptionalValue.of(TypeEnum.MO_TEXT); + OptionalValue body = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_CLIENT_REFERENCE) + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + @JsonProperty(JSON_PROPERTY_FROM) + public Builder setFrom(String from) { + this.from = OptionalValue.of(from); + return this; + } + + @JsonProperty(JSON_PROPERTY_ID) + public Builder setId(String id) { + this.id = OptionalValue.of(id); + return this; + } + + @JsonProperty(JSON_PROPERTY_OPERATOR_ID) + public Builder setOperatorId(String operatorId) { + this.operatorId = OptionalValue.of(operatorId); + return this; + } + + @JsonProperty(JSON_PROPERTY_RECEIVED_AT) + public Builder setReceivedAt(Instant receivedAt) { + this.receivedAt = OptionalValue.of(receivedAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_SENT_AT) + public Builder setSentAt(Instant sentAt) { + this.sentAt = OptionalValue.of(sentAt); + return this; + } + + @JsonProperty(JSON_PROPERTY_TO) + public Builder setTo(String to) { + this.to = OptionalValue.of(to); + return this; + } + + @JsonProperty(JSON_PROPERTY_BODY) + public Builder setBody(String body) { + this.body = OptionalValue.of(body); + return this; + } + + public TextMessage build() { + return new TextMessageImpl( + clientReference, from, id, operatorId, receivedAt, sentAt, to, type, body); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/request/ListInboundMessagesQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/request/ListInboundMessagesQueryParameters.java new file mode 100644 index 000000000..dd6021cf4 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/request/ListInboundMessagesQueryParameters.java @@ -0,0 +1,144 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.inbounds.request; + +import com.sinch.sdk.core.models.OptionalValue; +import java.time.Instant; +import java.util.Collection; + +/** ListInboundMessagesQueryParameters */ +public interface ListInboundMessagesQueryParameters { + + /** + * Get page minimum: 0 + * + * @return page + */ + OptionalValue getPage(); + + /** + * Get pageSize maximum: 100 + * + * @return pageSize + */ + OptionalValue getPageSize(); + + /** + * Get to + * + * @return to + */ + OptionalValue> getTo(); + + /** + * Get startDate + * + * @return startDate + */ + OptionalValue getStartDate(); + + /** + * Get endDate + * + * @return endDate + */ + OptionalValue getEndDate(); + + /** + * Get clientReference + * + * @return clientReference + */ + OptionalValue getClientReference(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new ListInboundMessagesQueryParametersImpl.Builder(); + } + + /** + * Getting builder from existing instance + * + * @return New Builder instance + */ + static Builder builder(ListInboundMessagesQueryParameters parameters) { + return new ListInboundMessagesQueryParametersImpl.Builder(parameters); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param page see getter + * @return Current builder + * @see #getPage + */ + Builder setPage(Integer page); + + /** + * see getter + * + * @param pageSize see getter + * @return Current builder + * @see #getPageSize + */ + Builder setPageSize(Integer pageSize); + + /** + * see getter + * + * @param to see getter + * @return Current builder + * @see #getTo + */ + Builder setTo(Collection to); + + /** + * see getter + * + * @param startDate see getter + * @return Current builder + * @see #getStartDate + */ + Builder setStartDate(Instant startDate); + + /** + * see getter + * + * @param endDate see getter + * @return Current builder + * @see #getEndDate + */ + Builder setEndDate(Instant endDate); + + /** + * see getter + * + * @param clientReference see getter + * @return Current builder + * @see #getClientReference + */ + Builder setClientReference(String clientReference); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + ListInboundMessagesQueryParameters build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/request/ListInboundMessagesQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/request/ListInboundMessagesQueryParametersImpl.java new file mode 100644 index 000000000..8c1fb3d40 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/request/ListInboundMessagesQueryParametersImpl.java @@ -0,0 +1,163 @@ +package com.sinch.sdk.domains.sms.models.v1.inbounds.request; + +import com.sinch.sdk.core.models.OptionalValue; +import java.time.Instant; +import java.util.Collection; +import java.util.Objects; + +public class ListInboundMessagesQueryParametersImpl implements ListInboundMessagesQueryParameters { + + private final OptionalValue page; + private final OptionalValue pageSize; + private final OptionalValue> to; + private final OptionalValue startDate; + private final OptionalValue endDate; + private final OptionalValue clientReference; + + private ListInboundMessagesQueryParametersImpl( + OptionalValue page, + OptionalValue pageSize, + OptionalValue> to, + OptionalValue startDate, + OptionalValue endDate, + OptionalValue clientReference) { + this.page = page; + this.pageSize = pageSize; + this.to = to; + this.startDate = startDate; + this.endDate = endDate; + this.clientReference = clientReference; + } + + public OptionalValue getPage() { + return page; + } + + public OptionalValue getPageSize() { + return pageSize; + } + + public OptionalValue> getTo() { + return to; + } + + public OptionalValue getStartDate() { + return startDate; + } + + public OptionalValue getEndDate() { + return endDate; + } + + public OptionalValue getClientReference() { + return clientReference; + } + + /** Return true if this ListInboundMessagesQueryParameters object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ListInboundMessagesQueryParametersImpl listInboundMessagesQueryParameters = + (ListInboundMessagesQueryParametersImpl) o; + return Objects.equals(this.page, listInboundMessagesQueryParameters.page) + && Objects.equals(this.pageSize, listInboundMessagesQueryParameters.pageSize) + && Objects.equals(this.to, listInboundMessagesQueryParameters.to) + && Objects.equals(this.startDate, listInboundMessagesQueryParameters.startDate) + && Objects.equals(this.endDate, listInboundMessagesQueryParameters.endDate) + && Objects.equals(this.clientReference, listInboundMessagesQueryParameters.clientReference); + } + + @Override + public int hashCode() { + return Objects.hash(page, pageSize, to, startDate, endDate, clientReference); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ListInboundMessagesQueryParametersImpl {\n"); + sb.append(" page: ").append(toIndentedString(page)).append("\n"); + sb.append(" pageSize: ").append(toIndentedString(pageSize)).append("\n"); + sb.append(" to: ").append(toIndentedString(to)).append("\n"); + sb.append(" startDate: ").append(toIndentedString(startDate)).append("\n"); + sb.append(" endDate: ").append(toIndentedString(endDate)).append("\n"); + sb.append(" clientReference: ").append(toIndentedString(clientReference)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + static class Builder implements ListInboundMessagesQueryParameters.Builder { + OptionalValue page = OptionalValue.empty(); + OptionalValue pageSize = OptionalValue.empty(); + OptionalValue> to = OptionalValue.empty(); + OptionalValue startDate = OptionalValue.empty(); + OptionalValue endDate = OptionalValue.empty(); + OptionalValue clientReference = OptionalValue.empty(); + + protected Builder() {} + + protected Builder(ListInboundMessagesQueryParameters _parameters) { + if (null == _parameters) { + return; + } + ListInboundMessagesQueryParametersImpl parameters = + (ListInboundMessagesQueryParametersImpl) _parameters; + this.page = parameters.getPage(); + this.pageSize = parameters.getPageSize(); + this.to = parameters.getTo(); + this.startDate = parameters.getStartDate(); + this.endDate = parameters.getEndDate(); + this.clientReference = parameters.getClientReference(); + } + + public Builder setPage(Integer page) { + this.page = OptionalValue.of(page); + return this; + } + + public Builder setPageSize(Integer pageSize) { + this.pageSize = OptionalValue.of(pageSize); + return this; + } + + public Builder setTo(Collection to) { + this.to = OptionalValue.of(to); + return this; + } + + public Builder setStartDate(Instant startDate) { + this.startDate = OptionalValue.of(startDate); + return this; + } + + public Builder setEndDate(Instant endDate) { + this.endDate = OptionalValue.of(endDate); + return this; + } + + public Builder setClientReference(String clientReference) { + this.clientReference = OptionalValue.of(clientReference); + return this; + } + + public ListInboundMessagesQueryParameters build() { + return new ListInboundMessagesQueryParametersImpl( + page, pageSize, to, startDate, endDate, clientReference); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/ListInboundsResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/ListInboundsResponse.java new file mode 100644 index 000000000..d51315551 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/ListInboundsResponse.java @@ -0,0 +1,70 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.inbounds.response; + +import com.sinch.sdk.core.models.pagination.ListResponse; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.sms.api.v1.InboundsService; +import com.sinch.sdk.domains.sms.models.v1.inbounds.InboundMessage; +import com.sinch.sdk.domains.sms.models.v1.inbounds.request.ListInboundMessagesQueryParameters; +import java.util.Collection; +import java.util.NoSuchElementException; + +/** Auto paginated response for list of InboundMessage */ +public class ListInboundsResponse extends ListResponse { + + private final Page page; + private final InboundsService service; + private ListInboundsResponse nextPage; + + public ListInboundsResponse( + InboundsService service, + Page page) { + this.service = service; + this.page = page; + } + + @Override + public boolean hasNextPage() { + if (null == page.getNextPageToken() || null == getContent() || getContent().isEmpty()) { + return false; + } + if (null == nextPage) { + ListInboundMessagesQueryParameters.Builder newParameters = + ListInboundMessagesQueryParameters.builder(page.getParameters()); + newParameters.setPage(page.getNextPageToken()); + nextPage = service.list(newParameters.build()); + } + return (null != nextPage.getContent() && !nextPage.getContent().isEmpty()); + } + + @Override + public ListInboundsResponse nextPage() { + + if (!hasNextPage()) { + throw new NoSuchElementException("Reached the last page of the API response"); + } + + ListInboundsResponse response = nextPage; + nextPage = null; + return response; + } + + @Override + public Collection getContent() { + return page.getEntities(); + } + + @Override + public String toString() { + return "ListInboundsResponse {" + "page=" + page + '}'; + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/internal/ApiInboundList.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/internal/ApiInboundList.java new file mode 100644 index 000000000..211004867 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/internal/ApiInboundList.java @@ -0,0 +1,104 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.inbounds.response.internal; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.domains.sms.models.v1.inbounds.InboundMessage; +import java.util.List; + +/** ApiInboundList */ +@JsonDeserialize(builder = ApiInboundListImpl.Builder.class) +public interface ApiInboundList { + + /** + * The total number of inbounds matching the given filters + * + * @return count + */ + Long getCount(); + + /** + * The requested page. + * + * @return page + */ + Integer getPage(); + + /** + * The page of inbounds matching the given filters. + * + * @return items + */ + List getItems(); + + /** + * The number of inbounds returned in this request. + * + * @return pageSize + */ + Integer getPageSize(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new ApiInboundListImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param count see getter + * @return Current builder + * @see #getCount + */ + Builder setCount(Long count); + + /** + * see getter + * + * @param page see getter + * @return Current builder + * @see #getPage + */ + Builder setPage(Integer page); + + /** + * see getter + * + * @param items see getter + * @return Current builder + * @see #getItems + */ + Builder setItems(List items); + + /** + * see getter + * + * @param pageSize see getter + * @return Current builder + * @see #getPageSize + */ + Builder setPageSize(Integer pageSize); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + ApiInboundList build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/internal/ApiInboundListImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/internal/ApiInboundListImpl.java new file mode 100644 index 000000000..6f5fd51a1 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/internal/ApiInboundListImpl.java @@ -0,0 +1,176 @@ +package com.sinch.sdk.domains.sms.models.v1.inbounds.response.internal; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.sms.models.v1.inbounds.InboundMessage; +import java.util.List; +import java.util.Objects; + +@JsonPropertyOrder({ + ApiInboundListImpl.JSON_PROPERTY_COUNT, + ApiInboundListImpl.JSON_PROPERTY_PAGE, + ApiInboundListImpl.JSON_PROPERTY_INBOUNDS, + ApiInboundListImpl.JSON_PROPERTY_PAGE_SIZE +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class ApiInboundListImpl implements ApiInboundList { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_COUNT = "count"; + + private OptionalValue count; + + public static final String JSON_PROPERTY_PAGE = "page"; + + private OptionalValue page; + + public static final String JSON_PROPERTY_INBOUNDS = "inbounds"; + + private OptionalValue> items; + + public static final String JSON_PROPERTY_PAGE_SIZE = "page_size"; + + private OptionalValue pageSize; + + public ApiInboundListImpl() {} + + protected ApiInboundListImpl( + OptionalValue count, + OptionalValue page, + OptionalValue> items, + OptionalValue pageSize) { + this.count = count; + this.page = page; + this.items = items; + this.pageSize = pageSize; + } + + @JsonIgnore + public Long getCount() { + return count.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_COUNT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue count() { + return count; + } + + @JsonIgnore + public Integer getPage() { + return page.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_PAGE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue page() { + return page; + } + + @JsonIgnore + public List getItems() { + return items.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_INBOUNDS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> items() { + return items; + } + + @JsonIgnore + public Integer getPageSize() { + return pageSize.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_PAGE_SIZE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue pageSize() { + return pageSize; + } + + /** Return true if this ApiInboundList object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ApiInboundListImpl apiInboundList = (ApiInboundListImpl) o; + return Objects.equals(this.count, apiInboundList.count) + && Objects.equals(this.page, apiInboundList.page) + && Objects.equals(this.items, apiInboundList.items) + && Objects.equals(this.pageSize, apiInboundList.pageSize); + } + + @Override + public int hashCode() { + return Objects.hash(count, page, items, pageSize); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ApiInboundListImpl {\n"); + sb.append(" count: ").append(toIndentedString(count)).append("\n"); + sb.append(" page: ").append(toIndentedString(page)).append("\n"); + sb.append(" items: ").append(toIndentedString(items)).append("\n"); + sb.append(" pageSize: ").append(toIndentedString(pageSize)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements ApiInboundList.Builder { + OptionalValue count = OptionalValue.empty(); + OptionalValue page = OptionalValue.empty(); + OptionalValue> items = OptionalValue.empty(); + OptionalValue pageSize = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_COUNT) + public Builder setCount(Long count) { + this.count = OptionalValue.of(count); + return this; + } + + @JsonProperty(JSON_PROPERTY_PAGE) + public Builder setPage(Integer page) { + this.page = OptionalValue.of(page); + return this; + } + + @JsonProperty(JSON_PROPERTY_INBOUNDS) + public Builder setItems(List items) { + this.items = OptionalValue.of(items); + return this; + } + + @JsonProperty(JSON_PROPERTY_PAGE_SIZE) + public Builder setPageSize(Integer pageSize) { + this.pageSize = OptionalValue.of(pageSize); + return this; + } + + public ApiInboundList build() { + return new ApiInboundListImpl(count, page, items, pageSize); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/internal/InboundInternal.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/internal/InboundInternal.java new file mode 100644 index 000000000..b4bd24d00 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/internal/InboundInternal.java @@ -0,0 +1,16 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.inbounds.response.internal; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +@JsonDeserialize(using = InboundInternalImpl.InboundInternalImplDeserializer.class) +public interface InboundInternal {} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/internal/InboundInternalImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/internal/InboundInternalImpl.java new file mode 100644 index 000000000..e1cedddc1 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/inbounds/response/internal/InboundInternalImpl.java @@ -0,0 +1,397 @@ +package com.sinch.sdk.domains.sms.models.v1.inbounds.response.internal; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.sinch.sdk.core.models.AbstractOpenApiSchema; +import com.sinch.sdk.core.utils.databind.JSONNavigator; +import com.sinch.sdk.domains.sms.models.v1.inbounds.BinaryMessageImpl; +import com.sinch.sdk.domains.sms.models.v1.inbounds.MediaMessageImpl; +import com.sinch.sdk.domains.sms.models.v1.inbounds.TextMessageImpl; +import java.io.IOException; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +@JsonDeserialize(using = InboundInternalImpl.InboundInternalImplDeserializer.class) +@JsonSerialize(using = InboundInternalImpl.InboundInternalImplSerializer.class) +public class InboundInternalImpl extends AbstractOpenApiSchema implements InboundInternal { + private static final Logger log = Logger.getLogger(InboundInternalImpl.class.getName()); + + public static final class InboundInternalImplSerializer + extends StdSerializer { + private static final long serialVersionUID = 1L; + + public InboundInternalImplSerializer(Class t) { + super(t); + } + + public InboundInternalImplSerializer() { + this(null); + } + + @Override + public void serialize( + InboundInternalImpl value, JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.getActualInstance()); + } + } + + public static final class InboundInternalImplDeserializer + extends StdDeserializer { + + private static final long serialVersionUID = 1L; + + public InboundInternalImplDeserializer() { + this(InboundInternalImpl.class); + } + + public InboundInternalImplDeserializer(Class vc) { + super(vc); + } + + @Override + public InboundInternalImpl deserialize(JsonParser jp, DeserializationContext ctxt) + throws IOException, JsonProcessingException { + JsonNode tree = jp.readValueAsTree(); + Object deserialized = null; + InboundInternalImpl newInboundInternalImpl = new InboundInternalImpl(); + Map result2 = + tree.traverse(jp.getCodec()).readValueAs(new TypeReference>() {}); + String discriminatorValue = (String) result2.get("type"); + switch (discriminatorValue) { + case "mo_binary": + deserialized = tree.traverse(jp.getCodec()).readValueAs(BinaryMessageImpl.class); + newInboundInternalImpl.setActualInstance(deserialized); + return newInboundInternalImpl; + case "mo_media": + deserialized = tree.traverse(jp.getCodec()).readValueAs(MediaMessageImpl.class); + newInboundInternalImpl.setActualInstance(deserialized); + return newInboundInternalImpl; + case "mo_text": + deserialized = tree.traverse(jp.getCodec()).readValueAs(TextMessageImpl.class); + newInboundInternalImpl.setActualInstance(deserialized); + return newInboundInternalImpl; + case "MOBinary": + deserialized = tree.traverse(jp.getCodec()).readValueAs(BinaryMessageImpl.class); + newInboundInternalImpl.setActualInstance(deserialized); + return newInboundInternalImpl; + case "MOMedia": + deserialized = tree.traverse(jp.getCodec()).readValueAs(MediaMessageImpl.class); + newInboundInternalImpl.setActualInstance(deserialized); + return newInboundInternalImpl; + case "MOText": + deserialized = tree.traverse(jp.getCodec()).readValueAs(TextMessageImpl.class); + newInboundInternalImpl.setActualInstance(deserialized); + return newInboundInternalImpl; + default: + log.log( + Level.WARNING, + String.format( + "Failed to lookup discriminator value `%s` for InboundInternalImpl. Possible" + + " values: mo_binary mo_media mo_text MOBinary MOMedia MOText", + discriminatorValue)); + } + + boolean typeCoercion = ctxt.isEnabled(MapperFeature.ALLOW_COERCION_OF_SCALARS); + int match = 0; + JsonToken token = tree.traverse(jp.getCodec()).nextToken(); + // deserialize BinaryMessageImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (BinaryMessageImpl.class.equals(Integer.class) + || BinaryMessageImpl.class.equals(Long.class) + || BinaryMessageImpl.class.equals(Float.class) + || BinaryMessageImpl.class.equals(Double.class) + || BinaryMessageImpl.class.equals(Boolean.class) + || BinaryMessageImpl.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((BinaryMessageImpl.class.equals(Integer.class) + || BinaryMessageImpl.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((BinaryMessageImpl.class.equals(Float.class) + || BinaryMessageImpl.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (BinaryMessageImpl.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (BinaryMessageImpl.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(BinaryMessageImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'BinaryMessageImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'BinaryMessageImpl'", e); + } + + // deserialize MediaMessageImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (MediaMessageImpl.class.equals(Integer.class) + || MediaMessageImpl.class.equals(Long.class) + || MediaMessageImpl.class.equals(Float.class) + || MediaMessageImpl.class.equals(Double.class) + || MediaMessageImpl.class.equals(Boolean.class) + || MediaMessageImpl.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((MediaMessageImpl.class.equals(Integer.class) + || MediaMessageImpl.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((MediaMessageImpl.class.equals(Float.class) + || MediaMessageImpl.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (MediaMessageImpl.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (MediaMessageImpl.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(MediaMessageImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'MediaMessageImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'MediaMessageImpl'", e); + } + + // deserialize TextMessageImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (TextMessageImpl.class.equals(Integer.class) + || TextMessageImpl.class.equals(Long.class) + || TextMessageImpl.class.equals(Float.class) + || TextMessageImpl.class.equals(Double.class) + || TextMessageImpl.class.equals(Boolean.class) + || TextMessageImpl.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((TextMessageImpl.class.equals(Integer.class) + || TextMessageImpl.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((TextMessageImpl.class.equals(Float.class) + || TextMessageImpl.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (TextMessageImpl.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (TextMessageImpl.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(TextMessageImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'TextMessageImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'TextMessageImpl'", e); + } + + if (match == 1) { + InboundInternalImpl ret = new InboundInternalImpl(); + ret.setActualInstance(deserialized); + return ret; + } + throw new IOException( + String.format( + "Failed deserialization for InboundInternalImpl: %d classes match result, expected 1", + match)); + } + + /** Handle deserialization of the 'null' value. */ + @Override + public InboundInternalImpl getNullValue(DeserializationContext ctxt) + throws JsonMappingException { + throw new JsonMappingException(ctxt.getParser(), "InboundInternalImpl cannot be null"); + } + } + + // store a list of schema names defined in oneOf + public static final Map> schemas = new HashMap<>(); + + public InboundInternalImpl() { + super("oneOf", Boolean.FALSE); + } + + public InboundInternalImpl(BinaryMessageImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public InboundInternalImpl(MediaMessageImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public InboundInternalImpl(TextMessageImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + static { + schemas.put("BinaryMessageImpl", BinaryMessageImpl.class); + schemas.put("MediaMessageImpl", MediaMessageImpl.class); + schemas.put("TextMessageImpl", TextMessageImpl.class); + JSONNavigator.registerDescendants( + InboundInternalImpl.class, Collections.unmodifiableMap(schemas)); + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("mo_binary", BinaryMessageImpl.class); + mappings.put("mo_media", MediaMessageImpl.class); + mappings.put("mo_text", TextMessageImpl.class); + mappings.put("MOBinary", BinaryMessageImpl.class); + mappings.put("MOMedia", MediaMessageImpl.class); + mappings.put("MOText", TextMessageImpl.class); + mappings.put("inbound", InboundInternalImpl.class); + JSONNavigator.registerDiscriminator(InboundInternalImpl.class, "type", mappings); + } + + @Override + public Map> getSchemas() { + return InboundInternalImpl.schemas; + } + + /** + * Set the instance that matches the oneOf child schema, check the instance parameter is valid + * against the oneOf child schemas: BinaryMessageImpl, MediaMessageImpl, TextMessageImpl + * + *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be a + * composed schema (allOf, anyOf, oneOf). + */ + @Override + public void setActualInstance(Object instance) { + if (JSONNavigator.isInstanceOf(BinaryMessageImpl.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSONNavigator.isInstanceOf(MediaMessageImpl.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSONNavigator.isInstanceOf(TextMessageImpl.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + throw new RuntimeException( + "Invalid instance type. Must be BinaryMessageImpl, MediaMessageImpl, TextMessageImpl"); + } + + /** + * Get the actual instance, which can be the following: BinaryMessageImpl, MediaMessageImpl, + * TextMessageImpl + * + * @return The actual instance (BinaryMessageImpl, MediaMessageImpl, TextMessageImpl) + */ + @Override + public Object getActualInstance() { + return super.getActualInstance(); + } + + /** + * Get the actual instance of `BinaryMessageImpl`. If the actual instance is not + * `BinaryMessageImpl`, the ClassCastException will be thrown. + * + * @return The actual instance of `BinaryMessageImpl` + * @throws ClassCastException if the instance is not `BinaryMessageImpl` + */ + public BinaryMessageImpl getBinaryMessageImpl() throws ClassCastException { + return (BinaryMessageImpl) super.getActualInstance(); + } + + /** + * Get the actual instance of `MediaMessageImpl`. If the actual instance is not + * `MediaMessageImpl`, the ClassCastException will be thrown. + * + * @return The actual instance of `MediaMessageImpl` + * @throws ClassCastException if the instance is not `MediaMessageImpl` + */ + public MediaMessageImpl getMediaMessageImpl() throws ClassCastException { + return (MediaMessageImpl) super.getActualInstance(); + } + + /** + * Get the actual instance of `TextMessageImpl`. If the actual instance is not `TextMessageImpl`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `TextMessageImpl` + * @throws ClassCastException if the instance is not `TextMessageImpl` + */ + public TextMessageImpl getTextMessageImpl() throws ClassCastException { + return (TextMessageImpl) super.getActualInstance(); + } + + public static class Deserializer + extends StdDeserializer { + + public Deserializer() { + this(null); + } + + public Deserializer(Class vc) { + super(vc); + } + + @Override + public com.sinch.sdk.domains.sms.models.v1.inbounds.InboundMessage deserialize( + JsonParser jp, DeserializationContext ctxt) throws IOException { + + Object deserialized = jp.readValueAs(InboundInternalImpl.class).getActualInstance(); + if (null == deserialized) { + return null; + } + if (!(deserialized instanceof com.sinch.sdk.domains.sms.models.v1.inbounds.InboundMessage)) { + log.log(Level.SEVERE, "Input data does not match schema ", deserialized); + return null; + } + + return (com.sinch.sdk.domains.sms.models.v1.inbounds.InboundMessage) deserialized; + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/webhooks/internal/WebhookEventOneOf.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/webhooks/internal/WebhookEventOneOf.java new file mode 100644 index 000000000..dbbef701f --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/webhooks/internal/WebhookEventOneOf.java @@ -0,0 +1,16 @@ +/* + * API Overview | Sinch + * + * OpenAPI document version: v1 + * Contact: Support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.sms.models.v1.webhooks.internal; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +@JsonDeserialize(using = WebhookEventOneOfImpl.WebhookEventOneOfImplDeserializer.class) +public interface WebhookEventOneOf {} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/webhooks/internal/WebhookEventOneOfImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/webhooks/internal/WebhookEventOneOfImpl.java new file mode 100644 index 000000000..ce37ce28d --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/sms/models/v1/webhooks/internal/WebhookEventOneOfImpl.java @@ -0,0 +1,718 @@ +package com.sinch.sdk.domains.sms.models.v1.webhooks.internal; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.sinch.sdk.core.models.AbstractOpenApiSchema; +import com.sinch.sdk.core.utils.databind.JSONNavigator; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReportMMSImpl; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReportSMSImpl; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReportMMSImpl; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReportSMSImpl; +import com.sinch.sdk.domains.sms.models.v1.inbounds.BinaryMessageImpl; +import com.sinch.sdk.domains.sms.models.v1.inbounds.MediaMessageImpl; +import com.sinch.sdk.domains.sms.models.v1.inbounds.TextMessageImpl; +import java.io.IOException; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +@JsonDeserialize(using = WebhookEventOneOfImpl.WebhookEventOneOfImplDeserializer.class) +@JsonSerialize(using = WebhookEventOneOfImpl.WebhookEventOneOfImplSerializer.class) +public class WebhookEventOneOfImpl extends AbstractOpenApiSchema implements WebhookEventOneOf { + private static final Logger log = Logger.getLogger(WebhookEventOneOfImpl.class.getName()); + + public static final class WebhookEventOneOfImplSerializer + extends StdSerializer { + private static final long serialVersionUID = 1L; + + public WebhookEventOneOfImplSerializer(Class t) { + super(t); + } + + public WebhookEventOneOfImplSerializer() { + this(null); + } + + @Override + public void serialize( + WebhookEventOneOfImpl value, JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.getActualInstance()); + } + } + + public static final class WebhookEventOneOfImplDeserializer + extends StdDeserializer { + + private static final long serialVersionUID = 1L; + + public WebhookEventOneOfImplDeserializer() { + this(WebhookEventOneOfImpl.class); + } + + public WebhookEventOneOfImplDeserializer(Class vc) { + super(vc); + } + + @Override + public WebhookEventOneOfImpl deserialize(JsonParser jp, DeserializationContext ctxt) + throws IOException, JsonProcessingException { + JsonNode tree = jp.readValueAsTree(); + Object deserialized = null; + WebhookEventOneOfImpl newWebhookEventOneOfImpl = new WebhookEventOneOfImpl(); + Map result2 = + tree.traverse(jp.getCodec()).readValueAs(new TypeReference>() {}); + String discriminatorValue = (String) result2.get("type"); + switch (discriminatorValue) { + case "delivery_report_mms": + deserialized = tree.traverse(jp.getCodec()).readValueAs(BatchDeliveryReportMMSImpl.class); + newWebhookEventOneOfImpl.setActualInstance(deserialized); + return newWebhookEventOneOfImpl; + case "delivery_report_sms": + deserialized = tree.traverse(jp.getCodec()).readValueAs(BatchDeliveryReportSMSImpl.class); + newWebhookEventOneOfImpl.setActualInstance(deserialized); + return newWebhookEventOneOfImpl; + case "mo_binary": + deserialized = tree.traverse(jp.getCodec()).readValueAs(BinaryMessageImpl.class); + newWebhookEventOneOfImpl.setActualInstance(deserialized); + return newWebhookEventOneOfImpl; + case "mo_media": + deserialized = tree.traverse(jp.getCodec()).readValueAs(MediaMessageImpl.class); + newWebhookEventOneOfImpl.setActualInstance(deserialized); + return newWebhookEventOneOfImpl; + case "mo_text": + deserialized = tree.traverse(jp.getCodec()).readValueAs(TextMessageImpl.class); + newWebhookEventOneOfImpl.setActualInstance(deserialized); + return newWebhookEventOneOfImpl; + case "recipient_delivery_report_mms": + deserialized = + tree.traverse(jp.getCodec()).readValueAs(RecipientDeliveryReportMMSImpl.class); + newWebhookEventOneOfImpl.setActualInstance(deserialized); + return newWebhookEventOneOfImpl; + case "recipient_delivery_report_sms": + deserialized = + tree.traverse(jp.getCodec()).readValueAs(RecipientDeliveryReportSMSImpl.class); + newWebhookEventOneOfImpl.setActualInstance(deserialized); + return newWebhookEventOneOfImpl; + case "BatchDeliveryReportMMS": + deserialized = tree.traverse(jp.getCodec()).readValueAs(BatchDeliveryReportMMSImpl.class); + newWebhookEventOneOfImpl.setActualInstance(deserialized); + return newWebhookEventOneOfImpl; + case "BatchDeliveryReportSMS": + deserialized = tree.traverse(jp.getCodec()).readValueAs(BatchDeliveryReportSMSImpl.class); + newWebhookEventOneOfImpl.setActualInstance(deserialized); + return newWebhookEventOneOfImpl; + case "MOBinary": + deserialized = tree.traverse(jp.getCodec()).readValueAs(BinaryMessageImpl.class); + newWebhookEventOneOfImpl.setActualInstance(deserialized); + return newWebhookEventOneOfImpl; + case "MOMedia": + deserialized = tree.traverse(jp.getCodec()).readValueAs(MediaMessageImpl.class); + newWebhookEventOneOfImpl.setActualInstance(deserialized); + return newWebhookEventOneOfImpl; + case "MOText": + deserialized = tree.traverse(jp.getCodec()).readValueAs(TextMessageImpl.class); + newWebhookEventOneOfImpl.setActualInstance(deserialized); + return newWebhookEventOneOfImpl; + case "RecipientDeliveryReportMMS": + deserialized = + tree.traverse(jp.getCodec()).readValueAs(RecipientDeliveryReportMMSImpl.class); + newWebhookEventOneOfImpl.setActualInstance(deserialized); + return newWebhookEventOneOfImpl; + case "RecipientDeliveryReportSMS": + deserialized = + tree.traverse(jp.getCodec()).readValueAs(RecipientDeliveryReportSMSImpl.class); + newWebhookEventOneOfImpl.setActualInstance(deserialized); + return newWebhookEventOneOfImpl; + default: + log.log( + Level.WARNING, + String.format( + "Failed to lookup discriminator value `%s` for WebhookEventOneOfImpl. Possible" + + " values: delivery_report_mms delivery_report_sms mo_binary mo_media" + + " mo_text recipient_delivery_report_mms recipient_delivery_report_sms" + + " BatchDeliveryReportMMS BatchDeliveryReportSMS MOBinary MOMedia MOText" + + " RecipientDeliveryReportMMS RecipientDeliveryReportSMS", + discriminatorValue)); + } + + boolean typeCoercion = ctxt.isEnabled(MapperFeature.ALLOW_COERCION_OF_SCALARS); + int match = 0; + JsonToken token = tree.traverse(jp.getCodec()).nextToken(); + // deserialize BatchDeliveryReportMMSImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (BatchDeliveryReportMMSImpl.class.equals(Integer.class) + || BatchDeliveryReportMMSImpl.class.equals(Long.class) + || BatchDeliveryReportMMSImpl.class.equals(Float.class) + || BatchDeliveryReportMMSImpl.class.equals(Double.class) + || BatchDeliveryReportMMSImpl.class.equals(Boolean.class) + || BatchDeliveryReportMMSImpl.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((BatchDeliveryReportMMSImpl.class.equals(Integer.class) + || BatchDeliveryReportMMSImpl.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((BatchDeliveryReportMMSImpl.class.equals(Float.class) + || BatchDeliveryReportMMSImpl.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (BatchDeliveryReportMMSImpl.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (BatchDeliveryReportMMSImpl.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(BatchDeliveryReportMMSImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'BatchDeliveryReportMMSImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'BatchDeliveryReportMMSImpl'", e); + } + + // deserialize BatchDeliveryReportSMSImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (BatchDeliveryReportSMSImpl.class.equals(Integer.class) + || BatchDeliveryReportSMSImpl.class.equals(Long.class) + || BatchDeliveryReportSMSImpl.class.equals(Float.class) + || BatchDeliveryReportSMSImpl.class.equals(Double.class) + || BatchDeliveryReportSMSImpl.class.equals(Boolean.class) + || BatchDeliveryReportSMSImpl.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((BatchDeliveryReportSMSImpl.class.equals(Integer.class) + || BatchDeliveryReportSMSImpl.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((BatchDeliveryReportSMSImpl.class.equals(Float.class) + || BatchDeliveryReportSMSImpl.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (BatchDeliveryReportSMSImpl.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (BatchDeliveryReportSMSImpl.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(BatchDeliveryReportSMSImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'BatchDeliveryReportSMSImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'BatchDeliveryReportSMSImpl'", e); + } + + // deserialize BinaryMessageImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (BinaryMessageImpl.class.equals(Integer.class) + || BinaryMessageImpl.class.equals(Long.class) + || BinaryMessageImpl.class.equals(Float.class) + || BinaryMessageImpl.class.equals(Double.class) + || BinaryMessageImpl.class.equals(Boolean.class) + || BinaryMessageImpl.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((BinaryMessageImpl.class.equals(Integer.class) + || BinaryMessageImpl.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((BinaryMessageImpl.class.equals(Float.class) + || BinaryMessageImpl.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (BinaryMessageImpl.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (BinaryMessageImpl.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(BinaryMessageImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'BinaryMessageImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'BinaryMessageImpl'", e); + } + + // deserialize MediaMessageImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (MediaMessageImpl.class.equals(Integer.class) + || MediaMessageImpl.class.equals(Long.class) + || MediaMessageImpl.class.equals(Float.class) + || MediaMessageImpl.class.equals(Double.class) + || MediaMessageImpl.class.equals(Boolean.class) + || MediaMessageImpl.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((MediaMessageImpl.class.equals(Integer.class) + || MediaMessageImpl.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((MediaMessageImpl.class.equals(Float.class) + || MediaMessageImpl.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (MediaMessageImpl.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (MediaMessageImpl.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(MediaMessageImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'MediaMessageImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'MediaMessageImpl'", e); + } + + // deserialize RecipientDeliveryReportMMSImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (RecipientDeliveryReportMMSImpl.class.equals(Integer.class) + || RecipientDeliveryReportMMSImpl.class.equals(Long.class) + || RecipientDeliveryReportMMSImpl.class.equals(Float.class) + || RecipientDeliveryReportMMSImpl.class.equals(Double.class) + || RecipientDeliveryReportMMSImpl.class.equals(Boolean.class) + || RecipientDeliveryReportMMSImpl.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((RecipientDeliveryReportMMSImpl.class.equals(Integer.class) + || RecipientDeliveryReportMMSImpl.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((RecipientDeliveryReportMMSImpl.class.equals(Float.class) + || RecipientDeliveryReportMMSImpl.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (RecipientDeliveryReportMMSImpl.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (RecipientDeliveryReportMMSImpl.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = + tree.traverse(jp.getCodec()).readValueAs(RecipientDeliveryReportMMSImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'RecipientDeliveryReportMMSImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, "Input data does not match schema 'RecipientDeliveryReportMMSImpl'", e); + } + + // deserialize RecipientDeliveryReportSMSImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (RecipientDeliveryReportSMSImpl.class.equals(Integer.class) + || RecipientDeliveryReportSMSImpl.class.equals(Long.class) + || RecipientDeliveryReportSMSImpl.class.equals(Float.class) + || RecipientDeliveryReportSMSImpl.class.equals(Double.class) + || RecipientDeliveryReportSMSImpl.class.equals(Boolean.class) + || RecipientDeliveryReportSMSImpl.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((RecipientDeliveryReportSMSImpl.class.equals(Integer.class) + || RecipientDeliveryReportSMSImpl.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((RecipientDeliveryReportSMSImpl.class.equals(Float.class) + || RecipientDeliveryReportSMSImpl.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (RecipientDeliveryReportSMSImpl.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (RecipientDeliveryReportSMSImpl.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = + tree.traverse(jp.getCodec()).readValueAs(RecipientDeliveryReportSMSImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'RecipientDeliveryReportSMSImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, "Input data does not match schema 'RecipientDeliveryReportSMSImpl'", e); + } + + // deserialize TextMessageImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (TextMessageImpl.class.equals(Integer.class) + || TextMessageImpl.class.equals(Long.class) + || TextMessageImpl.class.equals(Float.class) + || TextMessageImpl.class.equals(Double.class) + || TextMessageImpl.class.equals(Boolean.class) + || TextMessageImpl.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((TextMessageImpl.class.equals(Integer.class) + || TextMessageImpl.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((TextMessageImpl.class.equals(Float.class) + || TextMessageImpl.class.equals(Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (TextMessageImpl.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (TextMessageImpl.class.equals(String.class) && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = tree.traverse(jp.getCodec()).readValueAs(TextMessageImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log(Level.FINER, "Input data matches schema 'TextMessageImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'TextMessageImpl'", e); + } + + if (match == 1) { + WebhookEventOneOfImpl ret = new WebhookEventOneOfImpl(); + ret.setActualInstance(deserialized); + return ret; + } + throw new IOException( + String.format( + "Failed deserialization for WebhookEventOneOfImpl: %d classes match result, expected" + + " 1", + match)); + } + + /** Handle deserialization of the 'null' value. */ + @Override + public WebhookEventOneOfImpl getNullValue(DeserializationContext ctxt) + throws JsonMappingException { + throw new JsonMappingException(ctxt.getParser(), "WebhookEventOneOfImpl cannot be null"); + } + } + + // store a list of schema names defined in oneOf + public static final Map> schemas = new HashMap<>(); + + public WebhookEventOneOfImpl() { + super("oneOf", Boolean.FALSE); + } + + public WebhookEventOneOfImpl(BatchDeliveryReportMMSImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public WebhookEventOneOfImpl(BatchDeliveryReportSMSImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public WebhookEventOneOfImpl(BinaryMessageImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public WebhookEventOneOfImpl(MediaMessageImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public WebhookEventOneOfImpl(RecipientDeliveryReportMMSImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public WebhookEventOneOfImpl(RecipientDeliveryReportSMSImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public WebhookEventOneOfImpl(TextMessageImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + static { + schemas.put("BatchDeliveryReportMMSImpl", BatchDeliveryReportMMSImpl.class); + schemas.put("BatchDeliveryReportSMSImpl", BatchDeliveryReportSMSImpl.class); + schemas.put("BinaryMessageImpl", BinaryMessageImpl.class); + schemas.put("MediaMessageImpl", MediaMessageImpl.class); + schemas.put("RecipientDeliveryReportMMSImpl", RecipientDeliveryReportMMSImpl.class); + schemas.put("RecipientDeliveryReportSMSImpl", RecipientDeliveryReportSMSImpl.class); + schemas.put("TextMessageImpl", TextMessageImpl.class); + JSONNavigator.registerDescendants( + WebhookEventOneOfImpl.class, Collections.unmodifiableMap(schemas)); + // Initialize and register the discriminator mappings. + Map> mappings = new HashMap>(); + mappings.put("delivery_report_mms", BatchDeliveryReportMMSImpl.class); + mappings.put("delivery_report_sms", BatchDeliveryReportSMSImpl.class); + mappings.put("mo_binary", BinaryMessageImpl.class); + mappings.put("mo_media", MediaMessageImpl.class); + mappings.put("mo_text", TextMessageImpl.class); + mappings.put("recipient_delivery_report_mms", RecipientDeliveryReportMMSImpl.class); + mappings.put("recipient_delivery_report_sms", RecipientDeliveryReportSMSImpl.class); + mappings.put("BatchDeliveryReportMMS", BatchDeliveryReportMMSImpl.class); + mappings.put("BatchDeliveryReportSMS", BatchDeliveryReportSMSImpl.class); + mappings.put("MOBinary", BinaryMessageImpl.class); + mappings.put("MOMedia", MediaMessageImpl.class); + mappings.put("MOText", TextMessageImpl.class); + mappings.put("RecipientDeliveryReportMMS", RecipientDeliveryReportMMSImpl.class); + mappings.put("RecipientDeliveryReportSMS", RecipientDeliveryReportSMSImpl.class); + mappings.put("WebhookEventOneOf", WebhookEventOneOfImpl.class); + JSONNavigator.registerDiscriminator(WebhookEventOneOfImpl.class, "type", mappings); + } + + @Override + public Map> getSchemas() { + return WebhookEventOneOfImpl.schemas; + } + + /** + * Set the instance that matches the oneOf child schema, check the instance parameter is valid + * against the oneOf child schemas: BatchDeliveryReportMMSImpl, BatchDeliveryReportSMSImpl, + * BinaryMessageImpl, MediaMessageImpl, RecipientDeliveryReportMMSImpl, + * RecipientDeliveryReportSMSImpl, TextMessageImpl + * + *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be a + * composed schema (allOf, anyOf, oneOf). + */ + @Override + public void setActualInstance(Object instance) { + if (JSONNavigator.isInstanceOf( + BatchDeliveryReportMMSImpl.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSONNavigator.isInstanceOf( + BatchDeliveryReportSMSImpl.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSONNavigator.isInstanceOf(BinaryMessageImpl.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSONNavigator.isInstanceOf(MediaMessageImpl.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSONNavigator.isInstanceOf( + RecipientDeliveryReportMMSImpl.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSONNavigator.isInstanceOf( + RecipientDeliveryReportSMSImpl.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSONNavigator.isInstanceOf(TextMessageImpl.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + throw new RuntimeException( + "Invalid instance type. Must be BatchDeliveryReportMMSImpl, BatchDeliveryReportSMSImpl," + + " BinaryMessageImpl, MediaMessageImpl, RecipientDeliveryReportMMSImpl," + + " RecipientDeliveryReportSMSImpl, TextMessageImpl"); + } + + /** + * Get the actual instance, which can be the following: BatchDeliveryReportMMSImpl, + * BatchDeliveryReportSMSImpl, BinaryMessageImpl, MediaMessageImpl, + * RecipientDeliveryReportMMSImpl, RecipientDeliveryReportSMSImpl, TextMessageImpl + * + * @return The actual instance (BatchDeliveryReportMMSImpl, BatchDeliveryReportSMSImpl, + * BinaryMessageImpl, MediaMessageImpl, RecipientDeliveryReportMMSImpl, + * RecipientDeliveryReportSMSImpl, TextMessageImpl) + */ + @Override + public Object getActualInstance() { + return super.getActualInstance(); + } + + /** + * Get the actual instance of `BatchDeliveryReportMMSImpl`. If the actual instance is not + * `BatchDeliveryReportMMSImpl`, the ClassCastException will be thrown. + * + * @return The actual instance of `BatchDeliveryReportMMSImpl` + * @throws ClassCastException if the instance is not `BatchDeliveryReportMMSImpl` + */ + public BatchDeliveryReportMMSImpl getBatchDeliveryReportMMSImpl() throws ClassCastException { + return (BatchDeliveryReportMMSImpl) super.getActualInstance(); + } + + /** + * Get the actual instance of `BatchDeliveryReportSMSImpl`. If the actual instance is not + * `BatchDeliveryReportSMSImpl`, the ClassCastException will be thrown. + * + * @return The actual instance of `BatchDeliveryReportSMSImpl` + * @throws ClassCastException if the instance is not `BatchDeliveryReportSMSImpl` + */ + public BatchDeliveryReportSMSImpl getBatchDeliveryReportSMSImpl() throws ClassCastException { + return (BatchDeliveryReportSMSImpl) super.getActualInstance(); + } + + /** + * Get the actual instance of `BinaryMessageImpl`. If the actual instance is not + * `BinaryMessageImpl`, the ClassCastException will be thrown. + * + * @return The actual instance of `BinaryMessageImpl` + * @throws ClassCastException if the instance is not `BinaryMessageImpl` + */ + public BinaryMessageImpl getBinaryMessageImpl() throws ClassCastException { + return (BinaryMessageImpl) super.getActualInstance(); + } + + /** + * Get the actual instance of `MediaMessageImpl`. If the actual instance is not + * `MediaMessageImpl`, the ClassCastException will be thrown. + * + * @return The actual instance of `MediaMessageImpl` + * @throws ClassCastException if the instance is not `MediaMessageImpl` + */ + public MediaMessageImpl getMediaMessageImpl() throws ClassCastException { + return (MediaMessageImpl) super.getActualInstance(); + } + + /** + * Get the actual instance of `RecipientDeliveryReportMMSImpl`. If the actual instance is not + * `RecipientDeliveryReportMMSImpl`, the ClassCastException will be thrown. + * + * @return The actual instance of `RecipientDeliveryReportMMSImpl` + * @throws ClassCastException if the instance is not `RecipientDeliveryReportMMSImpl` + */ + public RecipientDeliveryReportMMSImpl getRecipientDeliveryReportMMSImpl() + throws ClassCastException { + return (RecipientDeliveryReportMMSImpl) super.getActualInstance(); + } + + /** + * Get the actual instance of `RecipientDeliveryReportSMSImpl`. If the actual instance is not + * `RecipientDeliveryReportSMSImpl`, the ClassCastException will be thrown. + * + * @return The actual instance of `RecipientDeliveryReportSMSImpl` + * @throws ClassCastException if the instance is not `RecipientDeliveryReportSMSImpl` + */ + public RecipientDeliveryReportSMSImpl getRecipientDeliveryReportSMSImpl() + throws ClassCastException { + return (RecipientDeliveryReportSMSImpl) super.getActualInstance(); + } + + /** + * Get the actual instance of `TextMessageImpl`. If the actual instance is not `TextMessageImpl`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `TextMessageImpl` + * @throws ClassCastException if the instance is not `TextMessageImpl` + */ + public TextMessageImpl getTextMessageImpl() throws ClassCastException { + return (TextMessageImpl) super.getActualInstance(); + } + + public static class Deserializer + extends StdDeserializer { + + public Deserializer() { + this(null); + } + + public Deserializer(Class vc) { + super(vc); + } + + @Override + public com.sinch.sdk.domains.sms.models.v1.webhooks.SmsEvent deserialize( + JsonParser jp, DeserializationContext ctxt) throws IOException { + + Object deserialized = jp.readValueAs(WebhookEventOneOfImpl.class).getActualInstance(); + if (null == deserialized) { + return null; + } + if (!(deserialized instanceof com.sinch.sdk.domains.sms.models.v1.webhooks.SmsEvent)) { + log.log(Level.SEVERE, "Input data does not match schema ", deserialized); + return null; + } + + return (com.sinch.sdk.domains.sms.models.v1.webhooks.SmsEvent) deserialized; + } + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/ChannelSpecificMessageDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/ChannelSpecificMessageDtoTest.java new file mode 100644 index 000000000..af671bec3 --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/ChannelSpecificMessageDtoTest.java @@ -0,0 +1,26 @@ +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific; + +import com.adelean.inject.resources.junit.jupiter.GivenTextResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.conversation.api.v1.adapters.ConversationBaseTest; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.whatsapp.flows.FlowChannelSpecificMessageDtoTest; +import org.junit.jupiter.api.Test; + +@TestWithResources +public class ChannelSpecificMessageDtoTest extends ConversationBaseTest { + + @GivenTextResource( + "/domains/conversation/v1/messages/types/channelspecific/ChannelSpecificMessageFlowsDto.json") + static String jsonChannelSpecificMessageFlowsDto; + + @Test + void deserializeChannelSpecificMessageFlowsDto() throws JsonProcessingException { + Object deserialized = + objectMapper.readValue(jsonChannelSpecificMessageFlowsDto, ChannelSpecificMessage.class); + + TestHelpers.recursiveEquals( + deserialized, FlowChannelSpecificMessageDtoTest.flowChannelSpecificMessageHeaderDocument); + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/message/MessageSubmitEventDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/message/MessageSubmitEventDtoTest.java index 9c7c83051..40c1f004e 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/message/MessageSubmitEventDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/message/MessageSubmitEventDtoTest.java @@ -21,7 +21,7 @@ public class MessageSubmitEventDtoTest extends ConversationBaseTest { MessageSubmitEvent messageSubmitEventDto; @GivenTextResource("domains/conversation/v1/webhooks/events/message/MessageSubmitEventDto.json") - String jsonMessageInboundEventDto; + String jsonMessageSubmitEventDto; public static MessageSubmitEvent expectedMessageInboundEvent = MessageSubmitEvent.builder() @@ -46,7 +46,7 @@ public class MessageSubmitEventDtoTest extends ConversationBaseTest { @Test void serialize() throws JsonProcessingException, JSONException { String serializedString = objectMapper.writeValueAsString(expectedMessageInboundEvent); - JSONAssert.assertEquals(jsonMessageInboundEventDto, serializedString, true); + JSONAssert.assertEquals(jsonMessageSubmitEventDto, serializedString, true); } @Test diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/BinaryResponseDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/BinaryResponseDtoTest.java index b5d08594f..404545cf2 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/BinaryResponseDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/BinaryResponseDtoTest.java @@ -14,10 +14,10 @@ @TestWithResources class BinaryResponseDtoTest extends BaseTest { - @GivenJsonResource("/domains/sms/v1/BinaryResponseDto.json") + @GivenJsonResource("/domains/sms/v1/batches/response/BinaryResponseDto.json") BinaryResponseDto loadedDto; - @GivenTextResource("/domains/sms/v1/BinaryResponseDto.json") + @GivenTextResource("/domains/sms/v1/batches/response/BinaryResponseDto.json") String jsonStringDto; BinaryResponseDto dto = diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/DeliveryReportBatchDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/DeliveryReportBatchDtoTest.java index 8966cfeec..fb2a8863d 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/DeliveryReportBatchDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/DeliveryReportBatchDtoTest.java @@ -10,10 +10,10 @@ @TestWithResources public class DeliveryReportBatchDtoTest extends BaseTest { - @GivenJsonResource("/domains/sms/v1/DeliveryReportBatchSMSDto.json") + @GivenJsonResource("/domains/sms/v1/deliveryreports/BatchDeliveryReportSMSDto.json") DeliveryReportDto deliveryReportBatchSMSDto; - @GivenJsonResource("/domains/sms/v1/DeliveryReportBatchMMSDto.json") + @GivenJsonResource("/domains/sms/v1/deliveryreports/BatchDeliveryReportMMSDto.json") DeliveryReportDto deliveryReportBatchMMSDto; public static DeliveryReportDto deliveryReportBatchSMS = @@ -26,7 +26,8 @@ public class DeliveryReportBatchDtoTest extends BaseTest { .count(1) .addRecipientsItem("44231235674") .status("Delivered"))) - .totalMessageCount(1); + .totalMessageCount(1) + .clientReference("a client reference"); public static DeliveryReportDto deliveryReportBatchMMS = new DeliveryReportDto("01FC66621XXXXX119Z8PMV1QPQ") @@ -38,7 +39,8 @@ public class DeliveryReportBatchDtoTest extends BaseTest { .count(1) .addRecipientsItem("44231235674") .status("Delivered"))) - .totalMessageCount(1); + .totalMessageCount(1) + .clientReference("a client reference"); @Test void deserializeDeliveryReportBatchSMS() { diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/DeliveryReportRecipientDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/DeliveryReportRecipientDtoTest.java index 690b26ce1..c83f8e41a 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/DeliveryReportRecipientDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/DeliveryReportRecipientDtoTest.java @@ -10,10 +10,10 @@ @TestWithResources public class DeliveryReportRecipientDtoTest extends BaseTest { - @GivenJsonResource("/domains/sms/v1/DeliveryReportRecipientSMSDto.json") + @GivenJsonResource("/domains/sms/v1/deliveryreports/RecipientDeliveryReportSMSDto.json") RecipientDeliveryReportDto deliveryReportRecipientSMSDto; - @GivenJsonResource("/domains/sms/v1/DeliveryReportRecipientMMSDto.json") + @GivenJsonResource("/domains/sms/v1/deliveryreports/RecipientDeliveryReportMMSDto.json") RecipientDeliveryReportDto deliveryReportRecipientMMSDto; public static RecipientDeliveryReportDto deliveryReportRecipientSMS = diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/DryRunResponseDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/DryRunResponseDtoTest.java index 5150bad2f..c17327964 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/DryRunResponseDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/DryRunResponseDtoTest.java @@ -14,10 +14,10 @@ @TestWithResources class DryRunResponseDtoTest extends BaseTest { - @GivenJsonResource("/domains/sms/v1/DryRunResponseDto.json") + @GivenJsonResource("/domains/sms/v1/batches/response/DryRunResponseDto.json") DryRun200ResponseDto loadedDto; - @GivenTextResource("/domains/sms/v1/DryRunResponseDto.json") + @GivenTextResource("/domains/sms/v1/batches/response/DryRunResponseDto.json") String jsonStringDto; DryRun200ResponseDto dto = diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/GroupResponseDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/GroupResponseDtoTest.java index a5dcb61d8..84a2f4510 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/GroupResponseDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/GroupResponseDtoTest.java @@ -12,7 +12,7 @@ @TestWithResources class GroupResponseDtoTest extends BaseTest { - @GivenJsonResource("/domains/sms/v1/GroupResponseDto.json") + @GivenJsonResource("/domains/sms/v1/groups/GroupDto.json") CreateGroupResponseDto createGroupResponseDto; Integer size = 2; @@ -28,7 +28,10 @@ class GroupResponseDtoTest extends BaseTest { .autoUpdate( new GroupAutoUpdateDto() .to("15551231234") - .add(new AddKeywordDto().firstWord("Add 1st keyword")) + .add( + new AddKeywordDto() + .firstWord("Add 1st keyword") + .secondWord("Add 2nd keyword")) .remove( new RemoveKeywordDto() .firstWord("remove 1st keyword") diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/InboundDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/InboundDtoTest.java index 8e36a4b93..5829d054b 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/InboundDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/InboundDtoTest.java @@ -10,10 +10,10 @@ @TestWithResources class InboundDtoTest extends BaseTest { - @GivenJsonResource("/domains/sms/v1/MOBinaryDto.json") + @GivenJsonResource("/domains/sms/v1/inbounds/InboundBinaryDto.json") InboundDto loadedBinaryMessage; - @GivenJsonResource("/domains/sms/v1/MOTextDto.json") + @GivenJsonResource("/domains/sms/v1/inbounds/InboundTextDto.json") InboundDto loadedTextMessage; MOBinaryDto binaryDTO = diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/MOBinaryDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/MOBinaryDtoTest.java index 97791df9f..80b24fb3c 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/MOBinaryDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/MOBinaryDtoTest.java @@ -14,10 +14,10 @@ @TestWithResources public class MOBinaryDtoTest extends BaseTest { - @GivenJsonResource("/domains/sms/v1/MOBinaryDto.json") + @GivenJsonResource("/domains/sms/v1/inbounds/InboundBinaryDto.json") MOBinaryDto loadedDto; - @GivenTextResource("/domains/sms/v1/MOBinaryDto.json") + @GivenTextResource("/domains/sms/v1/inbounds/InboundBinaryDto.json") String jsonStringDto; public static MOBinaryDto dto = diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/MOTextDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/MOTextDtoTest.java index 066aa97a2..94bc2ae8a 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/MOTextDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/MOTextDtoTest.java @@ -14,10 +14,10 @@ @TestWithResources public class MOTextDtoTest extends BaseTest { - @GivenJsonResource("/domains/sms/v1/MOTextDto.json") + @GivenJsonResource("/domains/sms/v1/inbounds/InboundTextDto.json") MOTextDto loadedDto; - @GivenTextResource("/domains/sms/v1/MOTextDto.json") + @GivenTextResource("/domains/sms/v1/inbounds/InboundTextDto.json") String jsonStringDto; public static MOTextDto dto = diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/MediaResponseDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/MediaResponseDtoTest.java index 83af2afdd..57bf262d8 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/MediaResponseDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/MediaResponseDtoTest.java @@ -1,9 +1,7 @@ package com.sinch.sdk.domains.sms.models.dto.v1; import com.adelean.inject.resources.junit.jupiter.GivenJsonResource; -import com.adelean.inject.resources.junit.jupiter.GivenTextResource; import com.adelean.inject.resources.junit.jupiter.TestWithResources; -import com.fasterxml.jackson.core.JsonProcessingException; import com.sinch.sdk.BaseTest; import java.time.OffsetDateTime; import java.util.AbstractMap; @@ -12,19 +10,14 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import org.assertj.core.api.Assertions; -import org.json.JSONException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.skyscreamer.jsonassert.JSONAssert; @TestWithResources class MediaResponseDtoTest extends BaseTest { - @GivenJsonResource("/domains/sms/v1/MediaResponseDto.json") + @GivenJsonResource("/domains/sms/v1/batches/response/MediaResponseDto.json") MediaResponseDto loadedDto; - @GivenTextResource("/domains/sms/v1/MediaResponseDto.json") - String jsonStringDto; - ParameterObjDto parameterObjDto = new ParameterObjDto(); MediaResponseDto mediaDTO = @@ -56,14 +49,6 @@ void deserialize() { Assertions.assertThat(loadedDto).usingRecursiveComparison().isEqualTo(mediaDTO); } - @Test - void serialize() throws JsonProcessingException, JSONException { - - String serializedString = objectMapper.writeValueAsString(mediaDTO); - - JSONAssert.assertEquals(jsonStringDto, serializedString, true); - } - @BeforeEach void setUp() { parameterObjDto.put( diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/SendSMSRequestDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/SendSMSRequestDtoTest.java index a1507cefa..d9caae8a5 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/SendSMSRequestDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/SendSMSRequestDtoTest.java @@ -16,13 +16,13 @@ @TestWithResources class SendSMSRequestDtoTest extends BaseTest { - @GivenTextResource("/domains/sms/v1/SendSMSBinaryRequestDto.json") + @GivenTextResource("/domains/sms/v1/BinaryRequestDto.json") String jsonRequestBinaryDto; - @GivenTextResource("/domains/sms/v1/SendSMSTextRequestDto.json") + @GivenTextResource("/domains/sms/v1/batches/request/TextRequestDto.json") String jsonRequestTextDto; - @GivenTextResource("/domains/sms/v1/SendSMSMediaRequestDto.json") + @GivenTextResource("/domains/sms/v1/MediaRequestDto.json") String jsonRequestMediaDto; @Test diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/SendSMSResponseDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/SendSMSResponseDtoTest.java index 63284a7df..949037f15 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/SendSMSResponseDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/SendSMSResponseDtoTest.java @@ -17,13 +17,13 @@ @TestWithResources class SendSMSResponseDtoTest extends BaseTest { - @GivenJsonResource("/domains/sms/v1/BinaryResponseDto.json") + @GivenJsonResource("/domains/sms/v1/batches/response/BinaryResponseDto.json") SendSMS201ResponseDto loadedBinary; - @GivenJsonResource("/domains/sms/v1/TextResponseDto.json") + @GivenJsonResource("/domains/sms/v1/batches/response/TextResponseDto.json") SendSMS201ResponseDto loadedText; - @GivenJsonResource("/domains/sms/v1/MediaResponseDto.json") + @GivenJsonResource("/domains/sms/v1/batches/response/MediaResponseDto.json") SendSMS201ResponseDto loadedMedia; ParameterObjDto parameterObjDto = new ParameterObjDto(); diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/TextResponseDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/TextResponseDtoTest.java index 2f14db82f..debea95fa 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/TextResponseDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/dto/v1/TextResponseDtoTest.java @@ -19,10 +19,10 @@ @TestWithResources class TextResponseDtoTest extends BaseTest { - @GivenJsonResource("/domains/sms/v1/TextResponseDto.json") + @GivenJsonResource("/domains/sms/v1/batches/response/TextResponseDto.json") TextResponseDto loadedDto; - @GivenTextResource("/domains/sms/v1/TextResponseDto.json") + @GivenTextResource("/domains/sms/v1/batches/response/TextResponseDto.json") String jsonStringDto; ParameterObjDto parameterObjDto = new ParameterObjDto(); diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/MediaBodyDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/MediaBodyDtoTest.java new file mode 100644 index 000000000..de3daff13 --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/MediaBodyDtoTest.java @@ -0,0 +1,41 @@ +package com.sinch.sdk.domains.sms.models.v1.batches; + +import com.adelean.inject.resources.junit.jupiter.GivenJsonResource; +import com.adelean.inject.resources.junit.jupiter.GivenTextResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.sinch.sdk.BaseTest; +import com.sinch.sdk.core.TestHelpers; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.skyscreamer.jsonassert.JSONAssert; + +@TestWithResources +public class MediaBodyDtoTest extends BaseTest { + @GivenTextResource("/domains/sms/v1/batches/MediaBodyDto.json") + String jsonMediaBodyDto; + + @GivenJsonResource("/domains/sms/v1/batches/MediaBodyDto.json") + MediaBody loadedMediaBodyDto; + + public static final MediaBody mediaBodyDto = + MediaBody.builder() + .setSubject("subject field") + .setUrl("https://en.wikipedia.org/wiki/Sinch_(company)#/media/File:Sinch_LockUp_RGB.png") + .setMessage("Hi ${name} ({an identifier}) ! How are you?") + .build(); + + @Test + void serialize() throws JsonProcessingException, JSONException { + + String serializedString = objectMapper.writeValueAsString(mediaBodyDto); + + JSONAssert.assertEquals(jsonMediaBodyDto, serializedString, true); + } + + @Test + void deserialize() { + + TestHelpers.recursiveEquals(loadedMediaBodyDto, mediaBodyDto); + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/request/SendDeliveryFeedbackRequestDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/request/SendDeliveryFeedbackRequestDtoTest.java new file mode 100644 index 000000000..67f4ba8b3 --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/request/SendDeliveryFeedbackRequestDtoTest.java @@ -0,0 +1,29 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.adelean.inject.resources.junit.jupiter.GivenTextResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.sinch.sdk.BaseTest; +import java.util.Arrays; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.skyscreamer.jsonassert.JSONAssert; + +@TestWithResources +class SendDeliveryFeedbackRequestDtoTest extends BaseTest { + @GivenTextResource("/domains/sms/v1/batches/request/SendDeliveryFeedbackRequestDto.json") + String jsonSendDeliveryFeedbackRequestDto; + + @Test + void sendDeliveryFeedbackRequestRequestDto() throws JsonProcessingException, JSONException { + + SendDeliveryFeedbackRequest requestDTO = + SendDeliveryFeedbackRequest.builder() + .setRecipients(Arrays.asList("+15551231234", "+15987365412")) + .build(); + + String serializedString = objectMapper.writeValueAsString(requestDTO); + + JSONAssert.assertEquals(jsonSendDeliveryFeedbackRequestDto, serializedString, true); + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/request/SendRequestDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/request/SendRequestDtoTest.java new file mode 100644 index 000000000..a614f0693 --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/request/SendRequestDtoTest.java @@ -0,0 +1,141 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.adelean.inject.resources.junit.jupiter.GivenTextResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.sinch.sdk.BaseTest; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import com.sinch.sdk.domains.sms.models.v1.batches.MediaBodyDtoTest; +import java.time.Instant; +import java.util.AbstractMap; +import java.util.Arrays; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.skyscreamer.jsonassert.JSONAssert; + +@TestWithResources +class SendRequestDtoTest extends BaseTest { + @GivenTextResource("/domains/sms/v1/batches/request/BinaryRequestDto.json") + String jsonRequestBinaryDto; + + @GivenTextResource("/domains/sms/v1/batches/request/TextRequestDto.json") + String jsonRequestTextDto; + + @GivenTextResource("/domains/sms/v1/batches/request/MediaRequestDto.json") + String jsonRequestMediaDto; + + @Test + void serializeBinaryRequestDto() throws JsonProcessingException, JSONException { + + BinaryRequest binaryRequestDTO = + BinaryRequest.builder() + .setTo(Arrays.asList("+15551231234", "+15551256344")) + .setBody("Hi ${name} ({an identifier}) ! How are you?") + .setUdh("foo udh") + .setFrom("+15551231234") + .setDeliveryReport(DeliveryReportType.NONE) + .setSendAt(Instant.parse("2019-08-24T14:19:22Z")) + .setExpireAt(Instant.parse("2019-08-24T14:21:22Z")) + .setCallbackUrl("callback url") + .setClientReference("myReference") + .setFeedbackEnabled(false) + .setFromTon(6) + .setFromNpi(18) + .build(); + + String serializedString = objectMapper.writeValueAsString(binaryRequestDTO); + + JSONAssert.assertEquals(jsonRequestBinaryDto, serializedString, true); + } + + @Test + void serializeTextRequestDto() throws JsonProcessingException, JSONException { + + Map anIdentifierParameters = + Stream.of( + new AbstractMap.SimpleEntry<>("15551231234", "an identifier value for 15551231234"), + new AbstractMap.SimpleEntry<>("15551256344", "an identifier value for 15551256344")) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + Map nameParameters = + Stream.of( + new AbstractMap.SimpleEntry<>("15551231234", "name value for 15551231234"), + new AbstractMap.SimpleEntry<>("15551256344", "name value for 15551256344"), + new AbstractMap.SimpleEntry<>("default", "default value")) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + Map> parameters = + Stream.of( + new AbstractMap.SimpleEntry<>("name", nameParameters), + new AbstractMap.SimpleEntry<>("an identifier", anIdentifierParameters)) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + TextRequest textRequestDTO = + TextRequest.builder() + .setTo(Arrays.asList("+15551231234", "+15551256344")) + .setBody("Hi ${name} ({an identifier}) ! How are you?") + .setFrom("+15551231234") + .setDeliveryReport(DeliveryReportType.NONE) + .setSendAt(Instant.parse("2019-08-24T14:19:22Z")) + .setExpireAt(Instant.parse("2019-08-24T14:21:22Z")) + .setCallbackUrl("callback url") + .setClientReference("myReference") + .setFeedbackEnabled(false) + .setFlashMessage(true) + .setTruncateConcat(true) + .setMaxNumberOfMessageParts(1) + .setFromTon(6) + .setFromNpi(18) + .setParameters(parameters) + .build(); + + String serializedString = objectMapper.writeValueAsString(textRequestDTO); + + JSONAssert.assertEquals(jsonRequestTextDto, serializedString, true); + } + + @Test + void serializeMediaRequestDto() throws JsonProcessingException, JSONException { + + Map anIdentifierParameters = + Stream.of( + new AbstractMap.SimpleEntry<>("15551231234", "an identifier value for 15551231234"), + new AbstractMap.SimpleEntry<>("15551256344", "an identifier value for 15551256344")) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + Map nameParameters = + Stream.of( + new AbstractMap.SimpleEntry<>("15551231234", "name value for 15551231234"), + new AbstractMap.SimpleEntry<>("15551256344", "name value for 15551256344"), + new AbstractMap.SimpleEntry<>("default", "default value")) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + Map> parameters = + Stream.of( + new AbstractMap.SimpleEntry<>("name", nameParameters), + new AbstractMap.SimpleEntry<>("an identifier", anIdentifierParameters)) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + MediaRequest mediaRequestDTO = + MediaRequest.builder() + .setTo(Arrays.asList("+15551231234", "+15551256344")) + .setBody(MediaBodyDtoTest.mediaBodyDto) + .setFrom("+15551231234") + .setDeliveryReport(DeliveryReportType.SUMMARY) + .setSendAt(Instant.parse("2019-08-24T14:16:22Z")) + .setExpireAt(Instant.parse("2019-08-24T14:17:22Z")) + .setCallbackUrl("callback url") + .setClientReference("client reference") + .setFeedbackEnabled(false) + .setStrictValidation(true) + .setParameters(parameters) + .build(); + + String serializedString = objectMapper.writeValueAsString(mediaRequestDTO); + + JSONAssert.assertEquals(jsonRequestMediaDto, serializedString, true); + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateRequestDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateRequestDtoTest.java new file mode 100644 index 000000000..71c3be634 --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/request/UpdateRequestDtoTest.java @@ -0,0 +1,130 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.request; + +import com.adelean.inject.resources.junit.jupiter.GivenTextResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.sinch.sdk.BaseTest; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import com.sinch.sdk.domains.sms.models.v1.batches.MediaBody; +import java.time.Instant; +import java.util.AbstractMap; +import java.util.Arrays; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.skyscreamer.jsonassert.JSONAssert; + +@TestWithResources +class UpdateRequestDtoTest extends BaseTest { + @GivenTextResource("/domains/sms/v1/batches/request/UpdateBinaryRequestDto.json") + String jsonRequestBinaryDto; + + @GivenTextResource("/domains/sms/v1/batches/request/UpdateTextRequestDto.json") + String jsonRequestTextDto; + + @GivenTextResource("/domains/sms/v1/batches/request/UpdateMediaRequestDto.json") + String jsonRequestMediaDto; + + Map anIdentifierParameters = + Stream.of( + new AbstractMap.SimpleEntry<>("15551231234", "an identifier value for 15551231234"), + new AbstractMap.SimpleEntry<>("15551256344", "an identifier value for 15551256344")) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + Map nameParameters = + Stream.of( + new AbstractMap.SimpleEntry<>("15551231234", "name value for 15551231234"), + new AbstractMap.SimpleEntry<>("15551256344", "name value for 15551256344"), + new AbstractMap.SimpleEntry<>("default", "default value")) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + Map> parameters = + Stream.of( + new AbstractMap.SimpleEntry<>("name", nameParameters), + new AbstractMap.SimpleEntry<>("an identifier", anIdentifierParameters)) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + @Test + void serializeBinaryRequestDto() throws JsonProcessingException, JSONException { + + UpdateBinaryRequest binaryRequestDTO = + UpdateBinaryRequest.builder() + .setFrom("+15551231234") + .setToAdd(Arrays.asList("+15551231234", "+15987365412")) + .setToRemove(Arrays.asList("+0123456789", "+9876543210")) + .setDeliveryReport(DeliveryReportType.FULL) + .setSendAt(Instant.parse("2019-08-24T14:19:22Z")) + .setExpireAt(Instant.parse("2019-08-24T14:21:22Z")) + .setCallbackUrl("callback url") + .setClientReference("a client reference") + .setFeedbackEnabled(true) + .setBody("Hi ${name} ({an identifier}) ! How are you?") + .setUdh("foo udh") + .setFromTon(3) + .setFromNpi(10) + .build(); + + String serializedString = objectMapper.writeValueAsString(binaryRequestDTO); + + JSONAssert.assertEquals(jsonRequestBinaryDto, serializedString, true); + } + + @Test + void serializeTextRequestDto() throws JsonProcessingException, JSONException { + + UpdateTextRequest textRequestDTO = + UpdateTextRequest.builder() + .setFrom("+15551231234") + .setToAdd(Arrays.asList("+15551231234", "+15551256344")) + .setToRemove(Arrays.asList("+0123456789", "+9876543210")) + .setDeliveryReport(DeliveryReportType.NONE) + .setSendAt(Instant.parse("2019-08-24T14:19:22Z")) + .setExpireAt(Instant.parse("2019-08-24T14:21:22Z")) + .setCallbackUrl("callback url") + .setClientReference("a client reference") + .setFeedbackEnabled(true) + .setParameters(parameters) + .setBody("Hi ${name} ({an identifier}) ! How are you?") + .setFromTon(3) + .setFromNpi(15) + .setMaxNumberOfMessageParts(4) + .setTruncateConcat(true) + .setFlashMessage(false) + .build(); + + String serializedString = objectMapper.writeValueAsString(textRequestDTO); + + JSONAssert.assertEquals(jsonRequestTextDto, serializedString, true); + } + + @Test + void serializeMediaRequestDto() throws JsonProcessingException, JSONException { + + UpdateMediaRequest mediaRequestDTO = + UpdateMediaRequest.builder() + .setFrom("+15551231234") + .setToAdd(Arrays.asList("+15551231234", "+15987365412")) + .setToRemove(Arrays.asList("+0123456789", "+9876543210")) + .setDeliveryReport(DeliveryReportType.SUMMARY) + .setSendAt(Instant.parse("2019-08-24T14:16:22Z")) + .setExpireAt(Instant.parse("2019-08-24T14:17:22Z")) + .setCallbackUrl("callback url") + .setClientReference("a client reference") + .setFeedbackEnabled(true) + .setBody( + MediaBody.builder() + .setUrl( + "https://en.wikipedia.org/wiki/Sinch_(company)#/media/File:Sinch_LockUp_RGB.png") + .setMessage("Hi ${name} ({an identifier}) ! How are you?") + .build()) + .setParameters(parameters) + .setStrictValidation(true) + .build(); + + String serializedString = objectMapper.writeValueAsString(mediaRequestDTO); + + JSONAssert.assertEquals(jsonRequestMediaDto, serializedString, true); + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/response/DryRunResponseDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/response/DryRunResponseDtoTest.java new file mode 100644 index 000000000..ae46b43bd --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/response/DryRunResponseDtoTest.java @@ -0,0 +1,35 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.response; + +import com.adelean.inject.resources.junit.jupiter.GivenJsonResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.sinch.sdk.BaseTest; +import com.sinch.sdk.core.TestHelpers; +import java.util.Collections; +import org.junit.jupiter.api.Test; + +@TestWithResources +class DryRunResponseDtoTest extends BaseTest { + + @GivenJsonResource("/domains/sms/v1/batches/response/DryRunResponseDto.json") + DryRunResponse loadedDto; + + DryRunResponse dto = + DryRunResponse.builder() + .setNumberOfRecipients(123) + .setNumberOfMessages(456) + .setPerRecipient( + Collections.singletonList( + DryRunPerRecipientDetails.builder() + .setRecipient("recipient string") + .setNumberOfParts(1) + .setBody("body string") + .setEncoding("encoding string") + .build())) + .build(); + + @Test + void deserialize() { + + TestHelpers.recursiveEquals(loadedDto, dto); + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/response/SendResponseDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/response/SendResponseDtoTest.java new file mode 100644 index 000000000..c40474adc --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/batches/response/SendResponseDtoTest.java @@ -0,0 +1,125 @@ +package com.sinch.sdk.domains.sms.models.v1.batches.response; + +import com.adelean.inject.resources.junit.jupiter.GivenJsonResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.sinch.sdk.BaseTest; +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import com.sinch.sdk.domains.sms.models.v1.batches.MediaBodyDtoTest; +import java.time.Instant; +import java.util.AbstractMap; +import java.util.Arrays; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.junit.jupiter.api.Test; + +@TestWithResources +class SendResponseDtoTest extends BaseTest { + @GivenJsonResource("/domains/sms/v1/batches/response/BinaryResponseDto.json") + BatchResponse loadedBinaryDto; + + @GivenJsonResource("/domains/sms/v1/batches/response/TextResponseDto.json") + BatchResponse loadedTextDto; + + @GivenJsonResource("/domains/sms/v1/batches/response/MediaResponseDto.json") + BatchResponse loadedMediaDto; + + BinaryResponse binaryResponseDto = + BinaryResponse.builder() + .setBody("Hi ${name} ({an identifier}) ! How are you?") + .setCallbackUrl("callback url") + .setClientReference("myReference") + .setDeliveryReport(DeliveryReportType.NONE) + .setExpireAt(Instant.parse("2019-08-24T14:21:22Z")) + .setFeedbackEnabled(false) + .setFrom("+15551231234") + .setFromTon(6) + .setFromNpi(18) + .setSendAt(Instant.parse("2019-08-24T14:19:22Z")) + .setTo(Arrays.asList("+15551231234", "+15551256344")) + .setUdh("foo udh") + .setCanceled(false) + .setCreatedAt(Instant.parse("2019-08-24T14:15:22Z")) + .setModifiedAt(Instant.parse("2019-08-24T14:17:22Z")) + .setId("01FC66621XXXXX119Z8PMV1QPQ") + .build(); + + Map anIdentifierParameters = + Stream.of( + new AbstractMap.SimpleEntry<>("15551231234", "an identifier value for 15551231234"), + new AbstractMap.SimpleEntry<>("15551256344", "an identifier value for 15551256344")) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + Map nameParameters = + Stream.of( + new AbstractMap.SimpleEntry<>("15551231234", "name value for 15551231234"), + new AbstractMap.SimpleEntry<>("15551256344", "name value for 15551256344"), + new AbstractMap.SimpleEntry<>("default", "default value")) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + Map> parameters = + Stream.of( + new AbstractMap.SimpleEntry<>("name", nameParameters), + new AbstractMap.SimpleEntry<>("an identifier", anIdentifierParameters)) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + TextResponse textResponseDto = + TextResponse.builder() + .setId("01FC66621XXXXX119Z8PMV1QPQ") + .setCreatedAt(Instant.parse("2019-08-24T14:15:22Z")) + .setCanceled(false) + .setModifiedAt(Instant.parse("2019-08-24T14:17:22Z")) + .setBody("Hi ${name} ({an identifier}) ! How are you?") + .setCallbackUrl("callback url") + .setClientReference("myReference") + .setDeliveryReport(DeliveryReportType.NONE) + .setExpireAt(Instant.parse("2019-08-24T14:21:22Z")) + .setFeedbackEnabled(false) + .setFlashMessage(true) + .setFrom("+15551231234") + .setFromTon(6) + .setFromNpi(18) + .setMaxNumberOfMessageParts(1) + .setParameters(parameters) + .setSendAt(Instant.parse("2019-08-24T14:19:22Z")) + .setTo(Arrays.asList("+15551231234", "+15551256344")) + .setTruncateConcat(true) + .build(); + + MediaResponse mediaResponseDto = + MediaResponse.builder() + .setId("01FC66621XXXXX119Z8PMV1QPQ") + .setCanceled(false) + .setCreatedAt(Instant.parse("2019-08-24T14:14:22Z")) + .setModifiedAt(Instant.parse("2019-08-24T14:15:22Z")) + .setBody(MediaBodyDtoTest.mediaBodyDto) + .setCallbackUrl("callback url") + .setClientReference("client reference") + .setDeliveryReport(DeliveryReportType.SUMMARY) + .setExpireAt(Instant.parse("2019-08-24T14:17:22Z")) + .setFeedbackEnabled(false) + .setFrom("+15551231234") + .setParameters(parameters) + .setSendAt(Instant.parse("2019-08-24T14:16:22Z")) + .setTo(Arrays.asList("+15551231234", "+15551256344")) + .setStrictValidation(true) + .build(); + + @Test + void deserializeBinary() { + + TestHelpers.recursiveEquals(loadedBinaryDto, binaryResponseDto); + } + + @Test + void deserializeText() { + + TestHelpers.recursiveEquals(loadedTextDto, textResponseDto); + } + + @Test + void deserializeMedia() { + + TestHelpers.recursiveEquals(loadedMediaDto, mediaResponseDto); + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReportDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReportDtoTest.java new file mode 100644 index 000000000..ff88f67bd --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/deliveryreports/BatchDeliveryReportDtoTest.java @@ -0,0 +1,58 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.adelean.inject.resources.junit.jupiter.GivenJsonResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.sinch.sdk.BaseTest; +import com.sinch.sdk.core.TestHelpers; +import java.util.Collections; +import org.junit.jupiter.api.Test; + +@TestWithResources +public class BatchDeliveryReportDtoTest extends BaseTest { + + @GivenJsonResource("/domains/sms/v1/deliveryreports/BatchDeliveryReportSMSDto.json") + BatchDeliveryReport deliveryReportBatchSMSDto; + + @GivenJsonResource("/domains/sms/v1/deliveryreports/BatchDeliveryReportMMSDto.json") + BatchDeliveryReport deliveryReportBatchMMSDto; + + public static BatchDeliveryReportSMS deliveryReportBatchSMS = + BatchDeliveryReportSMS.builder() + .setBatchId("01FC66621XXXXX119Z8PMV1QPQ") + .setStatuses( + Collections.singletonList( + MessageDeliveryStatus.builder() + .setCode(DeliveryReceiptErrorCode.from(0)) + .setCount(1) + .setRecipients(Collections.singleton("44231235674")) + .setStatus(DeliveryStatus.DELIVERED) + .build())) + .setTotalMessageCount(1) + .setClientReference("a client reference") + .build(); + + public static BatchDeliveryReportMMS deliveryReportBatchMMS = + BatchDeliveryReportMMS.builder() + .setBatchId("01FC66621XXXXX119Z8PMV1QPQ") + .setStatuses( + Collections.singletonList( + MessageDeliveryStatus.builder() + .setCode(DeliveryReceiptErrorCode.from(0)) + .setCount(1) + .setRecipients(Collections.singleton("44231235674")) + .setStatus(DeliveryStatus.DELIVERED) + .build())) + .setTotalMessageCount(1) + .setClientReference("a client reference") + .build(); + + @Test + void deserializeBatchDeliveryReportSMS() { + TestHelpers.recursiveEquals(deliveryReportBatchSMS, deliveryReportBatchSMSDto); + } + + @Test + void deserializeBatchDeliveryReportMMS() { + TestHelpers.recursiveEquals(deliveryReportBatchMMS, deliveryReportBatchMMSDto); + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReportDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReportDtoTest.java new file mode 100644 index 000000000..75a2ab47c --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/deliveryreports/RecipientDeliveryReportDtoTest.java @@ -0,0 +1,58 @@ +package com.sinch.sdk.domains.sms.models.v1.deliveryreports; + +import com.adelean.inject.resources.junit.jupiter.GivenJsonResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.sinch.sdk.BaseTest; +import com.sinch.sdk.core.TestHelpers; +import java.time.Instant; +import org.junit.jupiter.api.Test; + +@TestWithResources +public class RecipientDeliveryReportDtoTest extends BaseTest { + + @GivenJsonResource("/domains/sms/v1/deliveryreports/RecipientDeliveryReportSMSDto.json") + RecipientDeliveryReport RecipientDeliveryReportSMSDto; + + @GivenJsonResource("/domains/sms/v1/deliveryreports/RecipientDeliveryReportMMSDto.json") + RecipientDeliveryReport RecipientDeliveryReportMMSDto; + + public static RecipientDeliveryReportSMS deliveryReportRecipientSMS = + RecipientDeliveryReportSMS.builder() + .setBatchId("01FC66621XXXXX119Z8PMV1QPQ") + .setClientReference("client reference") + .setCreatedAt(Instant.parse("2022-08-30T08:16:08.930Z")) + .setCode(DeliveryReceiptErrorCode.DISPATCHED) + .setRecipient("+44231235674") + .setStatus(DeliveryStatus.DISPATCHED) + .setAppliedOriginator("applied originator") + .setEncoding(EncodingType.from("encoding")) + .setNumberOfMessageParts(123) + .setOperator("operator") + .setOperatorStatusAt(Instant.parse("2022-08-30T08:16:08.150Z")) + .build(); + + public static RecipientDeliveryReportMMS deliveryReportRecipientMMS = + RecipientDeliveryReportMMS.builder() + .setBatchId("01FC66621XXXXX119Z8PMV1QPQ") + .setClientReference("client reference") + .setCreatedAt(Instant.parse("2022-08-30T08:16:08.930Z")) + .setCode(DeliveryReceiptErrorCode.DISPATCHED) + .setRecipient("+44231235674") + .setStatus(DeliveryStatus.DISPATCHED) + .setAppliedOriginator("applied originator") + .setEncoding(EncodingType.from("encoding")) + .setNumberOfMessageParts(123) + .setOperator("operator") + .setOperatorStatusAt(Instant.parse("2022-08-30T08:16:08.150Z")) + .build(); + + @Test + void deserializeDeliveryReportRecipientSMS() { + TestHelpers.recursiveEquals(deliveryReportRecipientSMS, RecipientDeliveryReportSMSDto); + } + + @Test + void deserializeDeliveryReportRecipientMMS() { + TestHelpers.recursiveEquals(deliveryReportRecipientMMS, RecipientDeliveryReportMMSDto); + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/groups/GroupDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/groups/GroupDtoTest.java new file mode 100644 index 000000000..8e6803f17 --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/groups/GroupDtoTest.java @@ -0,0 +1,49 @@ +package com.sinch.sdk.domains.sms.models.v1.groups; + +import com.adelean.inject.resources.junit.jupiter.GivenJsonResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.sinch.sdk.BaseTest; +import com.sinch.sdk.core.TestHelpers; +import java.time.Instant; +import java.util.Arrays; +import java.util.HashSet; +import org.junit.jupiter.api.Test; + +@TestWithResources +public class GroupDtoTest extends BaseTest { + + @GivenJsonResource("/domains/sms/v1/groups/GroupDto.json") + Group groupResponseDto; + + public static Group groupResponse = + Group.builder() + .setSize(2) + .setCreatedAt(Instant.parse("2019-08-24T14:15:22Z")) + .setModifiedAt(Instant.parse("2019-08-24T14:15:44Z")) + .setId("01FC66621XXXXX119Z8PMV1QPU") + .setName("My new customers") + .setAutoUpdate( + GroupAutoUpdate.builder() + .setTo("15551231234") + .setAdd( + AddKeyword.builder() + .setFirstWord("Add 1st keyword") + .setSecondWord("Add 2nd keyword") + .build()) + .setRemove( + RemoveKeyword.builder() + .setFirstWord("remove 1st keyword") + .setSecondWord("remove 2nd keyword") + .build()) + .build()) + .setChildGroups( + new HashSet<>( + Arrays.asList("01FC66621XXXXX119Z8PMV1AHY", "01FC66621XXXXX119Z8PMV1A00"))) + .build(); + + @Test + void deserializeGroup() { + + TestHelpers.recursiveEquals(groupResponseDto, groupResponse); + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupRequestDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupRequestDtoTest.java new file mode 100644 index 000000000..c5c25cf62 --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupRequestDtoTest.java @@ -0,0 +1,52 @@ +package com.sinch.sdk.domains.sms.models.v1.groups.request; + +import com.adelean.inject.resources.junit.jupiter.GivenTextResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.sinch.sdk.BaseTest; +import com.sinch.sdk.domains.sms.models.v1.groups.AddKeyword; +import com.sinch.sdk.domains.sms.models.v1.groups.GroupAutoUpdate; +import com.sinch.sdk.domains.sms.models.v1.groups.RemoveKeyword; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.skyscreamer.jsonassert.JSONAssert; + +@TestWithResources +class GroupRequestDtoTest extends BaseTest { + @GivenTextResource("/domains/sms/v1/groups/request/GroupRequestDto.json") + String jsonGroupRequestDto; + + @Test + void serialize() throws JsonProcessingException, JSONException { + + GroupRequest requestDTO = + GroupRequest.builder() + .setName("My new customers") + .setAutoUpdate( + GroupAutoUpdate.builder() + .setTo("15551231234") + .setAdd( + AddKeyword.builder() + .setFirstWord("Add 1st keyword") + .setSecondWord("Add 2nd keyword") + .build()) + .setRemove( + RemoveKeyword.builder() + .setFirstWord("remove 1st keyword") + .setSecondWord("remove 2nd keyword") + .build()) + .build()) + .setMembers(Collections.singleton("+15551231234")) + .setChildGroups( + new HashSet<>( + Arrays.asList("01FC66621XXXXX119Z8PMV1AHY", "01FC66621XXXXX119Z8PMV1A00"))) + .build(); + + String serializedString = objectMapper.writeValueAsString(requestDTO); + + JSONAssert.assertEquals(jsonGroupRequestDto, serializedString, true); + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupUpdateRequestDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupUpdateRequestDtoTest.java new file mode 100644 index 000000000..e07b5c891 --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/groups/request/GroupUpdateRequestDtoTest.java @@ -0,0 +1,35 @@ +package com.sinch.sdk.domains.sms.models.v1.groups.request; + +import com.adelean.inject.resources.junit.jupiter.GivenTextResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.sinch.sdk.BaseTest; +import com.sinch.sdk.domains.sms.models.v1.groups.GroupDtoTest; +import java.util.Arrays; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.skyscreamer.jsonassert.JSONAssert; + +@TestWithResources +public class GroupUpdateRequestDtoTest extends BaseTest { + @GivenTextResource("/domains/sms/v1/groups/request/GroupUpdateRequestDto.json") + String jsonGroupUpdateRequestDto; + + public static GroupUpdateRequest requestDTO = + GroupUpdateRequest.builder() + .setName("My new customers") + .setAdd(Arrays.asList("+12345674890")) + .setRemove(Arrays.asList("+0987654321", "+3456789123")) + .setAddFromGroup("01FC66621XXXXX119Z8PMV1AHY") + .setRemoveFromGroup("01FC66621XXXXX119Z8PMV1A00") + .setAutoUpdate(GroupDtoTest.groupResponse.getAutoUpdate()) + .build(); + + @Test + void serialize() throws JsonProcessingException, JSONException { + + String serializedString = objectMapper.writeValueAsString(requestDTO); + + JSONAssert.assertEquals(jsonGroupUpdateRequestDto, serializedString, true); + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/inbounds/InboundMessageDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/inbounds/InboundMessageDtoTest.java new file mode 100644 index 000000000..3289c512d --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/inbounds/InboundMessageDtoTest.java @@ -0,0 +1,89 @@ +package com.sinch.sdk.domains.sms.models.v1.inbounds; + +import com.adelean.inject.resources.junit.jupiter.GivenJsonResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.sinch.sdk.BaseTest; +import com.sinch.sdk.core.TestHelpers; +import java.time.Instant; +import java.util.Arrays; +import org.junit.jupiter.api.Test; + +@TestWithResources +public class InboundMessageDtoTest extends BaseTest { + + @GivenJsonResource("/domains/sms/v1/inbounds/InboundBinaryDto.json") + InboundMessage loadedBinaryMessage; + + @GivenJsonResource("/domains/sms/v1/inbounds/InboundTextDto.json") + InboundMessage loadedTextMessage; + + @GivenJsonResource("/domains/sms/v1/inbounds/InboundMediaDto.json") + InboundMessage loadedMediaMessage; + + public static BinaryMessage binaryDTO = + BinaryMessage.builder() + .setClientReference("a client reference") + .setFrom("+11203494390") + .setId("01FC66621XXXXX119Z8PMV1QPA") + .setOperatorId("35000") + .setReceivedAt(Instant.parse("2019-08-24T14:17:22Z")) + .setSentAt(Instant.parse("2019-08-24T14:15:22Z")) + .setTo("11203453453") + .setBody("a body") + .setUdh("foo udh") + .build(); + + public static TextMessage textDTO = + TextMessage.builder() + .setClientReference("a client reference") + .setFrom("+11203494390") + .setId("01FC66621XXXXX119Z8PMV1QPA") + .setOperatorId("35000") + .setReceivedAt(Instant.parse("2019-08-24T14:17:22Z")) + .setSentAt(Instant.parse("2019-08-24T14:15:22Z")) + .setTo("11203453453") + .setBody("a body") + .build(); + + public static MediaMessage mediaDTO = + MediaMessage.builder() + .setClientReference("a client reference") + .setFrom("+11203494390") + .setId("01FC66621XXXXX119Z8PMV1QPA") + .setOperatorId("35000") + .setReceivedAt(Instant.parse("2019-08-24T14:17:22Z")) + .setSentAt(Instant.parse("2019-08-24T14:15:22Z")) + .setTo("11203453453") + .setBody( + MediaMessageBody.builder() + .setMessage("my message") + .setSubject("mmy subject") + .setMedia( + Arrays.asList( + MediaMessageBodyDetails.builder() + .setCode(1234) + .setContentType("content/type") + .setStatus("a status") + .setUrl("https://foo.url") + .build())) + .build()) + .build(); + + @Test + void deserializeBinaryMessage() { + + TestHelpers.recursiveEquals(binaryDTO, loadedBinaryMessage); + } + + @Test + void deserializeTextMessage() { + + TestHelpers.recursiveEquals(textDTO, loadedTextMessage); + } + + @Test + void deserializeMediaMessage() { + + TestHelpers.recursiveEquals(mediaDTO, loadedMediaMessage); + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/webhooks/WebhookEventDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/webhooks/WebhookEventDtoTest.java new file mode 100644 index 000000000..9450e2f18 --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/sms/models/v1/webhooks/WebhookEventDtoTest.java @@ -0,0 +1,79 @@ +package com.sinch.sdk.domains.sms.models.v1.webhooks; + +import com.adelean.inject.resources.junit.jupiter.GivenJsonResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.sinch.sdk.BaseTest; +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReportDtoTest; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReportDtoTest; +import com.sinch.sdk.domains.sms.models.v1.inbounds.InboundMessageDtoTest; +import org.junit.jupiter.api.Test; + +@TestWithResources +public class WebhookEventDtoTest extends BaseTest { + + @GivenJsonResource("/domains/sms/v1/inbounds/InboundBinaryDto.json") + SmsEvent loadedInboundBinaryEvent; + + @GivenJsonResource("/domains/sms/v1/inbounds/InboundTextDto.json") + SmsEvent loadedInboundTextEvent; + + @GivenJsonResource("/domains/sms/v1/inbounds/InboundMediaDto.json") + SmsEvent loadedInboundMediaEvent; + + @GivenJsonResource("/domains/sms/v1/deliveryreports/BatchDeliveryReportSMSDto.json") + SmsEvent loadedBatchDeliveryReportSMSEvent; + + @GivenJsonResource("/domains/sms/v1/deliveryreports/BatchDeliveryReportMMSDto.json") + SmsEvent loadedBatchDeliveryReportMMSEvent; + + @GivenJsonResource("/domains/sms/v1/deliveryreports/RecipientDeliveryReportSMSDto.json") + SmsEvent loadedRecipientDeliveryReportSMSEvent; + + @GivenJsonResource("/domains/sms/v1/deliveryreports/RecipientDeliveryReportMMSDto.json") + SmsEvent loadedRecipientDeliveryReportMMSEvent; + + @Test + void deserializeBinaryMessage() { + + TestHelpers.recursiveEquals(InboundMessageDtoTest.binaryDTO, loadedInboundBinaryEvent); + } + + @Test + void deserializeTextMessage() { + + TestHelpers.recursiveEquals(InboundMessageDtoTest.textDTO, loadedInboundTextEvent); + } + + @Test + void deserializeMediaMessage() { + + TestHelpers.recursiveEquals(InboundMessageDtoTest.mediaDTO, loadedInboundMediaEvent); + } + + @Test + void deserializeBatchDeliveryReportSMS() { + TestHelpers.recursiveEquals( + BatchDeliveryReportDtoTest.deliveryReportBatchSMS, loadedBatchDeliveryReportSMSEvent); + } + + @Test + void deserializeBatchDeliveryReportMMS() { + TestHelpers.recursiveEquals( + BatchDeliveryReportDtoTest.deliveryReportBatchMMS, loadedBatchDeliveryReportMMSEvent); + } + + @Test + void deserializeDeliveryReportRecipientSMS() { + TestHelpers.recursiveEquals( + RecipientDeliveryReportDtoTest.deliveryReportRecipientSMS, + loadedRecipientDeliveryReportSMSEvent); + } + + @Test + void deserializeDeliveryReportRecipientMMS() { + TestHelpers.recursiveEquals( + RecipientDeliveryReportDtoTest.deliveryReportRecipientMMS, + loadedRecipientDeliveryReportMMSEvent); + } +} diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/conversations/request/InjectAppMessageRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/conversations/request/InjectAppMessageRequestDto.json index 458a4affc..7260c95eb 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/conversations/request/InjectAppMessageRequestDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/conversations/request/InjectAppMessageRequestDto.json @@ -50,27 +50,30 @@ }, "channel_specific_message": { "MESSENGER": { - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_id": "1", - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_cta": "Book!", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_price": 100, - "product_description": "description", - "product_name": "name" + "message_type": "FLOWS", + "message": { + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_id": "1", + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_cta": "Book!", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_price": 100, + "product_description": "description", + "product_name": "name" + } } } } @@ -94,4 +97,3 @@ "processing_mode": "CONVERSATION", "metadata": "metdata value" } -} \ No newline at end of file diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageCardDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageCardDto.json index d4723cabb..85b484940 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageCardDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageCardDto.json @@ -87,27 +87,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageCarouselDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageCarouselDto.json index ca93bbd54..66a0da940 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageCarouselDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageCarouselDto.json @@ -125,27 +125,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageChoiceDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageChoiceDto.json index e3243c3c8..e7475d334 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageChoiceDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageChoiceDto.json @@ -85,27 +85,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageContactInfoDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageContactInfoDto.json index d3fc0f62f..f0ccf7004 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageContactInfoDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageContactInfoDto.json @@ -90,27 +90,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageListDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageListDto.json index 4b021c13f..4f6cf1382 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageListDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageListDto.json @@ -76,27 +76,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageLocationDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageLocationDto.json index ec26b3ce3..fa541d285 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageLocationDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageLocationDto.json @@ -54,27 +54,30 @@ }, "channel_specific_message": { "MESSENGER": { - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_id": "1", - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_cta": "Book!", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_price": 100, - "product_description": "description", - "product_name": "name" + "message_type": "FLOWS", + "message": { + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_id": "1", + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_cta": "Book!", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_price": 100, + "product_description": "description", + "product_name": "name" + } } } } @@ -84,4 +87,4 @@ "type": "BOT", "picture_url": "picture_url value" } -} \ No newline at end of file +} diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageMediaDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageMediaDto.json index 0dee3bf31..0e05cf111 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageMediaDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageMediaDto.json @@ -52,27 +52,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageTemplateDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageTemplateDto.json index 36955f068..2794e5d54 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageTemplateDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageTemplateDto.json @@ -64,27 +64,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageTextDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageTextDto.json index 4ac288588..41dc6bbc7 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageTextDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/AppMessageTextDto.json @@ -49,27 +49,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/ConversationMessageAppTextRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/ConversationMessageAppTextRequestDto.json index ab38eebdf..34ed421ad 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/ConversationMessageAppTextRequestDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/ConversationMessageAppTextRequestDto.json @@ -62,27 +62,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/ConversationMessageAppTextResponseDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/ConversationMessageAppTextResponseDto.json index 315d05ef4..f84fb9514 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/ConversationMessageAppTextResponseDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/ConversationMessageAppTextResponseDto.json @@ -64,27 +64,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendCardMessageRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendCardMessageRequestDto.json index afa49059c..595c3eef9 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendCardMessageRequestDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendCardMessageRequestDto.json @@ -92,27 +92,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendCarouselMessageRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendCarouselMessageRequestDto.json index 722255ac5..51be6daa9 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendCarouselMessageRequestDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendCarouselMessageRequestDto.json @@ -129,27 +129,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendChoiceMessageRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendChoiceMessageRequestDto.json index 1d6ce54ed..d91178214 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendChoiceMessageRequestDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendChoiceMessageRequestDto.json @@ -89,27 +89,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendContactInfoMessageRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendContactInfoMessageRequestDto.json index b766c0997..21b42ab85 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendContactInfoMessageRequestDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendContactInfoMessageRequestDto.json @@ -94,27 +94,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendListMessageRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendListMessageRequestDto.json index 460085b75..4e75019f3 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendListMessageRequestDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendListMessageRequestDto.json @@ -80,27 +80,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendLocationMessageRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendLocationMessageRequestDto.json index 37f91e641..e41a8f0fd 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendLocationMessageRequestDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendLocationMessageRequestDto.json @@ -59,27 +59,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendMediaMessageRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendMediaMessageRequestDto.json index d6aa6657a..97ef388a2 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendMediaMessageRequestDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendMediaMessageRequestDto.json @@ -57,27 +57,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendTemplateMessageRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendTemplateMessageRequestDto.json index 600d66b5f..c7c2608c9 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendTemplateMessageRequestDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendTemplateMessageRequestDto.json @@ -68,27 +68,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendTextMessageRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendTextMessageRequestDto.json index 26a388522..717e96c4a 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendTextMessageRequestDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/SendTextMessageRequestDto.json @@ -54,27 +54,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/types/channelspecific/ChannelSpecificMessageFlowsDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/types/channelspecific/ChannelSpecificMessageFlowsDto.json new file mode 100644 index 000000000..000eedbdd --- /dev/null +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/types/channelspecific/ChannelSpecificMessageFlowsDto.json @@ -0,0 +1,30 @@ +{ + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "document", + "document": { + "link": "a document URL link" + } + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } + } + } +} diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/transcoding/request/TranscodeMessageRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/transcoding/request/TranscodeMessageRequestDto.json index 6bc7bda84..ea422df4c 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/transcoding/request/TranscodeMessageRequestDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/transcoding/request/TranscodeMessageRequestDto.json @@ -56,27 +56,30 @@ }, "channel_specific_message": { "MESSENGER": { - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_id": "1", - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_cta": "Book!", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_price": 100, - "product_description": "description", - "product_name": "name" + "message_type": "FLOWS", + "message": { + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_id": "1", + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_cta": "Book!", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_price": 100, + "product_description": "description", + "product_name": "name" + } } } } diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/webhooks/events/message/MessageSubmitEventDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/webhooks/events/message/MessageSubmitEventDto.json index c1f6071ae..142f090c6 100644 --- a/openapi-contracts/src/test/resources/domains/conversation/v1/webhooks/events/message/MessageSubmitEventDto.json +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/webhooks/events/message/MessageSubmitEventDto.json @@ -65,27 +65,30 @@ }, "channel_specific_message": { "MESSENGER": { - "flow_id": "1", - "flow_cta": "Book!", - "header": { - "type": "text", - "text": "text header value" - }, - "body": { - "text": "Flow message body" - }, - "footer": { - "text": "Flow message footer" - }, - "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", - "flow_mode": "draft", - "flow_action": "navigate", - "flow_action_payload": { - "screen": "", - "data": { - "product_name": "name", - "product_description": "description", - "product_price": 100 + "message_type": "FLOWS", + "message": { + "flow_id": "1", + "flow_cta": "Book!", + "header": { + "type": "text", + "text": "text header value" + }, + "body": { + "text": "Flow message body" + }, + "footer": { + "text": "Flow message footer" + }, + "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", + "flow_mode": "draft", + "flow_action": "navigate", + "flow_action_payload": { + "screen": "", + "data": { + "product_name": "name", + "product_description": "description", + "product_price": 100 + } } } } diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/SendSMSBinaryRequestDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/BinaryRequestDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/SendSMSBinaryRequestDto.json rename to openapi-contracts/src/test/resources/domains/sms/v1/BinaryRequestDto.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/GroupCreateRequestParametersDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/CreateGroupRequestDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/GroupCreateRequestParametersDto.json rename to openapi-contracts/src/test/resources/domains/sms/v1/CreateGroupRequestDto.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/SendSMSMediaRequestDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/MediaRequestDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/SendSMSMediaRequestDto.json rename to openapi-contracts/src/test/resources/domains/sms/v1/MediaRequestDto.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/GroupReplaceRequestParametersDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/ReplaceGroupRequestDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/GroupReplaceRequestParametersDto.json rename to openapi-contracts/src/test/resources/domains/sms/v1/ReplaceGroupRequestDto.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/batches/MediaBodyDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/batches/MediaBodyDto.json new file mode 100644 index 000000000..22a59e621 --- /dev/null +++ b/openapi-contracts/src/test/resources/domains/sms/v1/batches/MediaBodyDto.json @@ -0,0 +1,5 @@ +{ + "subject": "subject field", + "message": "Hi ${name} ({an identifier}) ! How are you?", + "url": "https://en.wikipedia.org/wiki/Sinch_(company)#/media/File:Sinch_LockUp_RGB.png" +} diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/BinaryRequestDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/BinaryRequestDto.json new file mode 100644 index 000000000..caf327e09 --- /dev/null +++ b/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/BinaryRequestDto.json @@ -0,0 +1,18 @@ +{ + "to": [ + "+15551231234", + "+15551256344" + ], + "from": "+15551231234", + "body": "Hi ${name} ({an identifier}) ! How are you?", + "type": "mt_binary", + "delivery_report": "none", + "send_at": "2019-08-24T14:19:22Z", + "expire_at": "2019-08-24T14:21:22Z", + "callback_url": "callback url", + "client_reference": "myReference", + "feedback_enabled": false, + "from_ton": 6, + "from_npi": 18, + "udh": "foo udh" +} diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/MediaRequestDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/MediaRequestDto.json new file mode 100644 index 000000000..d48fc1e55 --- /dev/null +++ b/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/MediaRequestDto.json @@ -0,0 +1,31 @@ +{ + "to": [ + "+15551231234", + "+15551256344" + ], + "from": "+15551231234", + "body": { + "message": "Hi ${name} ({an identifier}) ! How are you?", + "url": "https://en.wikipedia.org/wiki/Sinch_(company)#/media/File:Sinch_LockUp_RGB.png", + "subject": "subject field" + }, + "parameters": { + "name": { + "15551231234": "name value for 15551231234", + "15551256344": "name value for 15551256344", + "default": "default value" + }, + "an identifier": { + "15551231234": "an identifier value for 15551231234", + "15551256344": "an identifier value for 15551256344" + } + }, + "type": "mt_media", + "delivery_report": "summary", + "send_at": "2019-08-24T14:16:22Z", + "expire_at": "2019-08-24T14:17:22Z", + "callback_url": "callback url", + "client_reference": "client reference", + "feedback_enabled": false, + "strict_validation": true +} diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/SendDeliveryFeedbackRequestDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/SendDeliveryFeedbackRequestDto.json new file mode 100644 index 000000000..cbbdfceb5 --- /dev/null +++ b/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/SendDeliveryFeedbackRequestDto.json @@ -0,0 +1,6 @@ +{ + "recipients": [ + "+15551231234", + "+15987365412" + ] +} diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/SendSMSTextRequestDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/TextRequestDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/SendSMSTextRequestDto.json rename to openapi-contracts/src/test/resources/domains/sms/v1/batches/request/TextRequestDto.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/UpdateBinaryRequestDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/UpdateBinaryRequestDto.json new file mode 100644 index 000000000..222756713 --- /dev/null +++ b/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/UpdateBinaryRequestDto.json @@ -0,0 +1,22 @@ +{ + "to_add": [ + "+15551231234", + "+15987365412" + ], + "to_remove": [ + "+0123456789", + "+9876543210" + ], + "from": "+15551231234", + "type": "mt_binary", + "delivery_report": "full", + "send_at": "2019-08-24T14:19:22Z", + "expire_at": "2019-08-24T14:21:22Z", + "callback_url": "callback url", + "client_reference": "a client reference", + "feedback_enabled": true, + "body": "Hi ${name} ({an identifier}) ! How are you?", + "udh": "foo udh", + "from_ton": 3, + "from_npi": 10 +} diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/UpdateMediaRequestDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/UpdateMediaRequestDto.json new file mode 100644 index 000000000..97595c06d --- /dev/null +++ b/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/UpdateMediaRequestDto.json @@ -0,0 +1,34 @@ +{ + "to_add": [ + "+15551231234", + "+15987365412" + ], + "to_remove": [ + "+0123456789", + "+9876543210" + ], + "from": "+15551231234", + "body": { + "message": "Hi ${name} ({an identifier}) ! How are you?", + "url": "https://en.wikipedia.org/wiki/Sinch_(company)#/media/File:Sinch_LockUp_RGB.png" + }, + "parameters": { + "name": { + "15551231234": "name value for 15551231234", + "15551256344": "name value for 15551256344", + "default": "default value" + }, + "an identifier": { + "15551231234": "an identifier value for 15551231234", + "15551256344": "an identifier value for 15551256344" + } + }, + "type": "mt_media", + "delivery_report": "summary", + "send_at": "2019-08-24T14:16:22Z", + "expire_at": "2019-08-24T14:17:22Z", + "callback_url": "callback url", + "client_reference": "a client reference", + "feedback_enabled": true, + "strict_validation": true +} diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/UpdateTextRequestDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/UpdateTextRequestDto.json new file mode 100644 index 000000000..4576d17c7 --- /dev/null +++ b/openapi-contracts/src/test/resources/domains/sms/v1/batches/request/UpdateTextRequestDto.json @@ -0,0 +1,35 @@ +{ + "to_add": [ + "+15551231234", + "+15551256344" + ], + "to_remove": [ + "+0123456789", + "+9876543210" + ], + "from": "+15551231234", + "body": "Hi ${name} ({an identifier}) ! How are you?", + "type": "mt_text", + "delivery_report": "none", + "send_at": "2019-08-24T14:19:22Z", + "expire_at": "2019-08-24T14:21:22Z", + "callback_url": "callback url", + "client_reference": "a client reference", + "feedback_enabled": true, + "from_ton": 3, + "from_npi": 15, + "flash_message": false, + "max_number_of_message_parts": 4, + "truncate_concat": true, + "parameters": { + "name": { + "15551231234": "name value for 15551231234", + "15551256344": "name value for 15551256344", + "default": "default value" + }, + "an identifier": { + "15551231234": "an identifier value for 15551231234", + "15551256344": "an identifier value for 15551256344" + } + } +} diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/BinaryResponseDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/batches/response/BinaryResponseDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/BinaryResponseDto.json rename to openapi-contracts/src/test/resources/domains/sms/v1/batches/response/BinaryResponseDto.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/DryRunResponseDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/batches/response/DryRunResponseDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/DryRunResponseDto.json rename to openapi-contracts/src/test/resources/domains/sms/v1/batches/response/DryRunResponseDto.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/ListBatchesResponseDtoPage0.json b/openapi-contracts/src/test/resources/domains/sms/v1/batches/response/ListBatchesResponseDtoPage0.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/ListBatchesResponseDtoPage0.json rename to openapi-contracts/src/test/resources/domains/sms/v1/batches/response/ListBatchesResponseDtoPage0.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/ListBatchesResponseDtoPage1.json b/openapi-contracts/src/test/resources/domains/sms/v1/batches/response/ListBatchesResponseDtoPage1.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/ListBatchesResponseDtoPage1.json rename to openapi-contracts/src/test/resources/domains/sms/v1/batches/response/ListBatchesResponseDtoPage1.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/ListBatchesResponseDtoPage2.json b/openapi-contracts/src/test/resources/domains/sms/v1/batches/response/ListBatchesResponseDtoPage2.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/ListBatchesResponseDtoPage2.json rename to openapi-contracts/src/test/resources/domains/sms/v1/batches/response/ListBatchesResponseDtoPage2.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/MediaResponseDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/batches/response/MediaResponseDto.json similarity index 94% rename from openapi-contracts/src/test/resources/domains/sms/v1/MediaResponseDto.json rename to openapi-contracts/src/test/resources/domains/sms/v1/batches/response/MediaResponseDto.json index 91949c129..7c1143b41 100644 --- a/openapi-contracts/src/test/resources/domains/sms/v1/MediaResponseDto.json +++ b/openapi-contracts/src/test/resources/domains/sms/v1/batches/response/MediaResponseDto.json @@ -8,7 +8,8 @@ "canceled": false, "body": { "message": "Hi ${name} ({an identifier}) ! How are you?", - "url": "https://en.wikipedia.org/wiki/Sinch_(company)#/media/File:Sinch_LockUp_RGB.png" + "url": "https://en.wikipedia.org/wiki/Sinch_(company)#/media/File:Sinch_LockUp_RGB.png", + "subject": "subject field" }, "parameters": { "name": { diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/TextResponseDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/batches/response/TextResponseDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/TextResponseDto.json rename to openapi-contracts/src/test/resources/domains/sms/v1/batches/response/TextResponseDto.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/DeliveryReportBatchMMSDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/deliveryreports/BatchDeliveryReportMMSDto.json similarity index 76% rename from openapi-contracts/src/test/resources/domains/sms/v1/DeliveryReportBatchMMSDto.json rename to openapi-contracts/src/test/resources/domains/sms/v1/deliveryreports/BatchDeliveryReportMMSDto.json index a1bf13389..361260b4b 100644 --- a/openapi-contracts/src/test/resources/domains/sms/v1/DeliveryReportBatchMMSDto.json +++ b/openapi-contracts/src/test/resources/domains/sms/v1/deliveryreports/BatchDeliveryReportMMSDto.json @@ -11,5 +11,6 @@ "status": "Delivered" } ], - "total_message_count": 1 + "total_message_count": 1, + "client_reference": "a client reference" } \ No newline at end of file diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/DeliveryReportBatchSMSDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/deliveryreports/BatchDeliveryReportSMSDto.json similarity index 76% rename from openapi-contracts/src/test/resources/domains/sms/v1/DeliveryReportBatchSMSDto.json rename to openapi-contracts/src/test/resources/domains/sms/v1/deliveryreports/BatchDeliveryReportSMSDto.json index f35d84e42..8162a5391 100644 --- a/openapi-contracts/src/test/resources/domains/sms/v1/DeliveryReportBatchSMSDto.json +++ b/openapi-contracts/src/test/resources/domains/sms/v1/deliveryreports/BatchDeliveryReportSMSDto.json @@ -11,5 +11,6 @@ "status": "Delivered" } ], - "total_message_count": 1 + "total_message_count": 1, + "client_reference": "a client reference" } \ No newline at end of file diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/DeliveryReportRecipientMMSDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/deliveryreports/RecipientDeliveryReportMMSDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/DeliveryReportRecipientMMSDto.json rename to openapi-contracts/src/test/resources/domains/sms/v1/deliveryreports/RecipientDeliveryReportMMSDto.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/DeliveryReportRecipientSMSDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/deliveryreports/RecipientDeliveryReportSMSDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/DeliveryReportRecipientSMSDto.json rename to openapi-contracts/src/test/resources/domains/sms/v1/deliveryreports/RecipientDeliveryReportSMSDto.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/ListDeliveryReportResponseDtoPage0.json b/openapi-contracts/src/test/resources/domains/sms/v1/deliveryreports/response/ListDeliveryReportResponseDtoPage0.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/ListDeliveryReportResponseDtoPage0.json rename to openapi-contracts/src/test/resources/domains/sms/v1/deliveryreports/response/ListDeliveryReportResponseDtoPage0.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/ListDeliveryReportResponseDtoPage1.json b/openapi-contracts/src/test/resources/domains/sms/v1/deliveryreports/response/ListDeliveryReportResponseDtoPage1.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/ListDeliveryReportResponseDtoPage1.json rename to openapi-contracts/src/test/resources/domains/sms/v1/deliveryreports/response/ListDeliveryReportResponseDtoPage1.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/ListDeliveryReportResponseDtoPage2.json b/openapi-contracts/src/test/resources/domains/sms/v1/deliveryreports/response/ListDeliveryReportResponseDtoPage2.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/ListDeliveryReportResponseDtoPage2.json rename to openapi-contracts/src/test/resources/domains/sms/v1/deliveryreports/response/ListDeliveryReportResponseDtoPage2.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/GroupResponseDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/groups/GroupDto.json similarity index 84% rename from openapi-contracts/src/test/resources/domains/sms/v1/GroupResponseDto.json rename to openapi-contracts/src/test/resources/domains/sms/v1/groups/GroupDto.json index ffa0a0ea1..34561e6fb 100644 --- a/openapi-contracts/src/test/resources/domains/sms/v1/GroupResponseDto.json +++ b/openapi-contracts/src/test/resources/domains/sms/v1/groups/GroupDto.json @@ -11,7 +11,8 @@ "auto_update": { "to": 15551231234, "add": { - "first_word": "Add 1st keyword" + "first_word": "Add 1st keyword", + "second_word": "Add 2nd keyword" }, "remove":{ "first_word": "remove 1st keyword", diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/GroupUpdateRequestParametersDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/groups/request/GroupRequestDto.json similarity index 55% rename from openapi-contracts/src/test/resources/domains/sms/v1/GroupUpdateRequestParametersDto.json rename to openapi-contracts/src/test/resources/domains/sms/v1/groups/request/GroupRequestDto.json index de0b878be..d54362892 100644 --- a/openapi-contracts/src/test/resources/domains/sms/v1/GroupUpdateRequestParametersDto.json +++ b/openapi-contracts/src/test/resources/domains/sms/v1/groups/request/GroupRequestDto.json @@ -1,22 +1,19 @@ { "name": "My new customers", - "add": [ - "foo" - ], - "remove": [ + "child_groups": [ "01FC66621XXXXX119Z8PMV1AHY", "01FC66621XXXXX119Z8PMV1A00" ], - "add_from_group": "add from group string", - "remove_from_group": "remove from group string", "auto_update": { - "to": 15551231234, + "to": "15551231234", "add": { - "first_word": "Add 1st keyword" + "first_word": "Add 1st keyword", + "second_word": "Add 2nd keyword" }, "remove": { "first_word": "remove 1st keyword", "second_word": "remove 2nd keyword" } - } + }, + "members": [ "+15551231234" ] } diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/groups/request/GroupUpdateRequestDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/groups/request/GroupUpdateRequestDto.json new file mode 100644 index 000000000..660d0da3d --- /dev/null +++ b/openapi-contracts/src/test/resources/domains/sms/v1/groups/request/GroupUpdateRequestDto.json @@ -0,0 +1,23 @@ +{ + "name": "My new customers", + "add": [ + "+12345674890" + ], + "remove": [ + "+0987654321", + "+3456789123" + ], + "add_from_group": "01FC66621XXXXX119Z8PMV1AHY", + "remove_from_group": "01FC66621XXXXX119Z8PMV1A00", + "auto_update": { + "to": "15551231234", + "add": { + "first_word": "Add 1st keyword", + "second_word": "Add 2nd keyword" + }, + "remove": { + "first_word": "remove 1st keyword", + "second_word": "remove 2nd keyword" + } + } +} diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/GroupsListResponseDtoPage0.json b/openapi-contracts/src/test/resources/domains/sms/v1/groups/response/ListGroupsResponseDtoPage0.json similarity index 79% rename from openapi-contracts/src/test/resources/domains/sms/v1/GroupsListResponseDtoPage0.json rename to openapi-contracts/src/test/resources/domains/sms/v1/groups/response/ListGroupsResponseDtoPage0.json index a3944d6e5..af9592d88 100644 --- a/openapi-contracts/src/test/resources/domains/sms/v1/GroupsListResponseDtoPage0.json +++ b/openapi-contracts/src/test/resources/domains/sms/v1/groups/response/ListGroupsResponseDtoPage0.json @@ -16,11 +16,11 @@ "auto_update": { "to": 15551231234, "add": { - "first_word": "Add 1st keyword" + "first_word": "1stKeyword" }, "remove": { - "first_word": "remove 1st keyword", - "second_word": "remove 2nd keyword" + "first_word": "1stKeyword", + "second_word": "2ndKeyword" } } }, diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/GroupsListResponseDtoPage1.json b/openapi-contracts/src/test/resources/domains/sms/v1/groups/response/ListGroupsResponseDtoPage1.json similarity index 78% rename from openapi-contracts/src/test/resources/domains/sms/v1/GroupsListResponseDtoPage1.json rename to openapi-contracts/src/test/resources/domains/sms/v1/groups/response/ListGroupsResponseDtoPage1.json index 73a385add..dab354187 100644 --- a/openapi-contracts/src/test/resources/domains/sms/v1/GroupsListResponseDtoPage1.json +++ b/openapi-contracts/src/test/resources/domains/sms/v1/groups/response/ListGroupsResponseDtoPage1.json @@ -16,11 +16,11 @@ "auto_update": { "to": 15551231234, "add": { - "first_word": "Add 1st keyword" + "first_word": "1stKeyword" }, "remove": { - "first_word": "remove 1st keyword", - "second_word": "remove 2nd keyword" + "first_word": "1stKeyword", + "second_word": "2ndKeyword" } } } diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/GroupsListResponseDtoPage2.json b/openapi-contracts/src/test/resources/domains/sms/v1/groups/response/ListGroupsResponseDtoPage2.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/GroupsListResponseDtoPage2.json rename to openapi-contracts/src/test/resources/domains/sms/v1/groups/response/ListGroupsResponseDtoPage2.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/MOBinaryDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/inbounds/InboundBinaryDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/MOBinaryDto.json rename to openapi-contracts/src/test/resources/domains/sms/v1/inbounds/InboundBinaryDto.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/inbounds/InboundMediaDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/inbounds/InboundMediaDto.json new file mode 100644 index 000000000..36459ad86 --- /dev/null +++ b/openapi-contracts/src/test/resources/domains/sms/v1/inbounds/InboundMediaDto.json @@ -0,0 +1,22 @@ +{ + "body": { + "subject": "mmy subject", + "message": "my message", + "media": [ + { + "url": "https://foo.url", + "contentType": "content/type", + "status": "a status", + "code": 1234 + } + ] + }, + "client_reference": "a client reference", + "from": "+11203494390", + "id": "01FC66621XXXXX119Z8PMV1QPA", + "operator_id": "35000", + "received_at": "2019-08-24T14:17:22Z", + "sent_at": "2019-08-24T14:15:22Z", + "to": "11203453453", + "type": "mo_media" +} diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/MOTextDto.json b/openapi-contracts/src/test/resources/domains/sms/v1/inbounds/InboundTextDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/MOTextDto.json rename to openapi-contracts/src/test/resources/domains/sms/v1/inbounds/InboundTextDto.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/InboundsListResponseDtoPage0.json b/openapi-contracts/src/test/resources/domains/sms/v1/inbounds/response/internal/InboundsListResponseDtoPage0.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/InboundsListResponseDtoPage0.json rename to openapi-contracts/src/test/resources/domains/sms/v1/inbounds/response/internal/InboundsListResponseDtoPage0.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/InboundsListResponseDtoPage1.json b/openapi-contracts/src/test/resources/domains/sms/v1/inbounds/response/internal/InboundsListResponseDtoPage1.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/InboundsListResponseDtoPage1.json rename to openapi-contracts/src/test/resources/domains/sms/v1/inbounds/response/internal/InboundsListResponseDtoPage1.json diff --git a/openapi-contracts/src/test/resources/domains/sms/v1/InboundsListResponseDtoPage2.json b/openapi-contracts/src/test/resources/domains/sms/v1/inbounds/response/internal/InboundsListResponseDtoPage2.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/sms/v1/InboundsListResponseDtoPage2.json rename to openapi-contracts/src/test/resources/domains/sms/v1/inbounds/response/internal/InboundsListResponseDtoPage2.json diff --git a/pom.xml b/pom.xml index b783b0c11..8bbfc4b19 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,7 @@ UTF-8 - 2.15.2 + 2.18.2 5.2.1 @@ -126,8 +126,8 @@ com.sinch.sdk.auth*; com.sinch.sdk.core.http; com.sinch.sdk.core.http.*; - com.sinch.sdk.core.databind: - com.sinch.sdk.core.databind.**; + com.sinch.sdk.core.databind; + com.sinch.sdk.core.databind.*; com.sinch.sdk.core.utils.databind; com.sinch.sdk.http; com.sinch.sdk.pagination.Page*; @@ -198,7 +198,7 @@ Sinch Client - com.sinch.sdk* + com.sinch.sdk:com.sinch.sdk.models Core package @@ -216,19 +216,22 @@ Numbers com.sinch.sdk.domains.numbers* + SMS - com.sinch.sdk.domains.sms* + com.sinch.sdk.domains.sms.models.v1*:com.sinch.sdk.domains.sms.api.v1* Verification - com.sinch.sdk.domains.verification.models.v1*:com.sinch.sdk.domains.verification.api.v1* + com.sinch.sdk.domains.verification:com.sinch.sdk.domains.verification.models.v1*:com.sinch.sdk.domains.verification.api.v1* Voice com.sinch.sdk.domains.voice* + + @@ -332,6 +335,8 @@ com.sinch.sdk.e2e.domains.mailgun.v1.MailgunIT com.sinch.sdk.e2e.domains.conversation.ConversationIT + com.sinch.sdk.e2e.domains.sms.v0.SmsIT + com.sinch.sdk.e2e.domains.sms.v1.SmsIT com.sinch.sdk.e2e.domains.voice.v0.VoiceIT com.sinch.sdk.e2e.domains.voice.v1.VoiceIT @@ -423,8 +428,8 @@ - com.fasterxml.jackson.jaxrs - jackson-jaxrs-json-provider + com.fasterxml.jackson.jakarta.rs + jackson-jakarta-rs-json-provider ${jackson.version} diff --git a/sample-app/src/main/java/com/sinch/sample/BaseApplication.java b/sample-app/src/main/java/com/sinch/sample/BaseApplication.java index 99b80e722..e8dbae60b 100644 --- a/sample-app/src/main/java/com/sinch/sample/BaseApplication.java +++ b/sample-app/src/main/java/com/sinch/sample/BaseApplication.java @@ -12,6 +12,8 @@ public abstract class BaseApplication { private static final String BATCH_ID_KEY = "BATCH_ID"; + private static final String SMS_GROUP_ID_KEY = "SMS_GROUP_ID"; + public static final String PHONE_NUMBER_KEY = "PHONE_NUMBER"; private static final String VIRTUAL_PHONE_NUMBER_KEY = "VIRTUAL_PHONE_NUMBER"; public static final String CONFERENCE_ID_KEY = "CONFERENCE_ID"; @@ -41,6 +43,7 @@ public abstract class BaseApplication { protected String phoneNumber; protected String virtualPhoneNumber; protected String batchId; + protected String smsGroupId; protected String conferenceId; protected String callId; protected String verificationId; @@ -77,6 +80,7 @@ protected BaseApplication() throws IOException { virtualPhoneNumber = getConfigValue(VIRTUAL_PHONE_NUMBER_KEY); batchId = getConfigValue(BATCH_ID_KEY); + smsGroupId = getConfigValue(SMS_GROUP_ID_KEY); conferenceId = getConfigValue(CONFERENCE_ID_KEY); callId = getConfigValue(CALL_ID_KEY); diff --git a/sample-app/src/main/java/com/sinch/sample/sms/batches/Send.java b/sample-app/src/main/java/com/sinch/sample/sms/batches/Send.java index d8f8aa072..a5d4d82f1 100644 --- a/sample-app/src/main/java/com/sinch/sample/sms/batches/Send.java +++ b/sample-app/src/main/java/com/sinch/sample/sms/batches/Send.java @@ -1,10 +1,13 @@ package com.sinch.sample.sms.batches; import com.sinch.sample.BaseApplication; +import com.sinch.sdk.core.utils.Pair; import com.sinch.sdk.domains.sms.models.BatchText; import com.sinch.sdk.domains.sms.models.DeliveryReportType; +import com.sinch.sdk.domains.sms.models.Parameters; import com.sinch.sdk.domains.sms.models.requests.SendSmsBatchTextRequest; import java.io.IOException; +import java.util.Arrays; import java.util.Collections; import java.util.logging.Logger; @@ -29,9 +32,16 @@ public void run() { SendSmsBatchTextRequest.Builder builder = SendSmsBatchTextRequest.builder() .setTo(Collections.singletonList(phoneNumber)) - .setBody("the body") + .setBody("the body ${code}") .setClientReference("a client reference") .setFrom("+33123456789") + .setParameters( + new Parameters( + Arrays.asList( + new Parameters.Entry("name", new Pair<>("+12017777777", "John"), "there"), + new Parameters.Entry("name", new Pair<>("+12018888888", "Paul")), + new Parameters.Entry( + "code", new Pair<>(phoneNumber, "HALLOWEEN20 \uD83C\uDF83"))))) .setDeliveryReport(DeliveryReportType.FULL); // Overload default dashboard webhooks URL if defined diff --git a/sample-app/src/main/java/com/sinch/sample/sms/groups/ListMembers.java b/sample-app/src/main/java/com/sinch/sample/sms/groups/ListMembers.java index 33b00f2cd..ce50c3d88 100644 --- a/sample-app/src/main/java/com/sinch/sample/sms/groups/ListMembers.java +++ b/sample-app/src/main/java/com/sinch/sample/sms/groups/ListMembers.java @@ -22,11 +22,9 @@ public static void main(String[] args) { public void run() { - String groupId = "01HF714PHPH9SQ2BNWSCY2068R"; + LOGGER.info("List members for groupId: " + smsGroupId); - LOGGER.info("List members for groupId: " + groupId); - - Collection response = client.sms().groups().listMembers(groupId); + Collection response = client.sms().groups().listMembers(smsGroupId); response.iterator().forEachRemaining(LOGGER::info); } diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/Cancel.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/Cancel.java new file mode 100644 index 000000000..2b7893439 --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/Cancel.java @@ -0,0 +1,32 @@ +package com.sinch.sample.sms.v1.batches; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.BatchesService; +import com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse; +import java.io.IOException; +import java.util.logging.Logger; + +public class Cancel extends BaseApplication { + private static final Logger LOGGER = Logger.getLogger(Cancel.class.getName()); + + public Cancel() throws IOException {} + + public static void main(String[] args) { + try { + new Cancel().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + BatchesService service = client.sms().v1().batches(); + + LOGGER.info("Cancelling batch: " + batchId); + BatchResponse value = service.cancel(batchId); + + LOGGER.info("Response: " + value); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/Get.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/Get.java new file mode 100644 index 000000000..273a98e6e --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/Get.java @@ -0,0 +1,32 @@ +package com.sinch.sample.sms.v1.batches; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.BatchesService; +import com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse; +import java.io.IOException; +import java.util.logging.Logger; + +public class Get extends BaseApplication { + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public Get() throws IOException {} + + public static void main(String[] args) { + try { + new Get().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + BatchesService service = client.sms().v1().batches(); + LOGGER.info("Get for :" + batchId); + + BatchResponse value = service.get(batchId); + + LOGGER.info("Response :" + value); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/List.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/List.java new file mode 100644 index 000000000..132f66fc3 --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/List.java @@ -0,0 +1,44 @@ +package com.sinch.sample.sms.v1.batches; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.BatchesService; +import com.sinch.sdk.domains.sms.models.v1.batches.request.ListBatchesQueryParameters; +import java.io.IOException; +import java.time.Instant; +import java.time.Period; +import java.util.logging.Logger; + +public class List extends BaseApplication { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public List() throws IOException {} + + public static void main(String[] args) { + try { + new List().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + BatchesService service = client.sms().v1().batches(); + LOGGER.info("List batches"); + + LOGGER.info("Response:"); + service + .list( + ListBatchesQueryParameters.builder() + // .setFrom(phoneNumber) + // .setPage(15) + .setPageSize(2) + // .setClientReference("a client reference") + .setStartDate(Instant.now().minus(Period.ofWeeks(3))) + .build()) + .iterator() + .forEachRemaining(f -> LOGGER.info(f.toString())); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/Replace.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/Replace.java new file mode 100644 index 000000000..8e64af257 --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/Replace.java @@ -0,0 +1,42 @@ +package com.sinch.sample.sms.v1.batches; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.BatchesService; +import com.sinch.sdk.domains.sms.models.v1.batches.request.TextRequest; +import com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse; +import java.io.IOException; +import java.util.Collections; +import java.util.logging.Logger; + +public class Replace extends BaseApplication { + private static final Logger LOGGER = Logger.getLogger(Replace.class.getName()); + + public Replace() throws IOException {} + + public static void main(String[] args) { + try { + new Replace().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + BatchesService service = client.sms().v1().batches(); + + LOGGER.info("Replace batch" + batchId); + BatchResponse value = + service.replace( + batchId, + TextRequest.builder() + .setTo(Collections.singletonList("+33745149803")) + .setBody("the body") + .setClientReference("a client reference") + .setFrom("+33123456789") + .build()); + + LOGGER.info("Response: " + value); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/Send.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/Send.java new file mode 100644 index 000000000..118003a03 --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/Send.java @@ -0,0 +1,69 @@ +package com.sinch.sample.sms.v1.batches; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.BatchesService; +import com.sinch.sdk.domains.sms.models.v1.batches.DeliveryReportType; +import com.sinch.sdk.domains.sms.models.v1.batches.request.TextRequest; +import com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse; +import java.io.IOException; +import java.util.AbstractMap; +import java.util.Collections; +import java.util.Map; +import java.util.logging.Logger; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class Send extends BaseApplication { + private static final Logger LOGGER = Logger.getLogger(Send.class.getName()); + + public Send() throws IOException {} + + public static void main(String[] args) { + try { + new Send().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + BatchesService service = client.sms().v1().batches(); + + LOGGER.info("Send Text to " + phoneNumber); + + Map nameParameters = + Stream.of( + new AbstractMap.SimpleEntry<>(phoneNumber, "John"), + new AbstractMap.SimpleEntry<>("+12018888888", "Doe")) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + Map codeParameters = + Stream.of(new AbstractMap.SimpleEntry<>(phoneNumber, "HALLOWEEN20 \uD83C\uDF83")) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + Map> parameters = + Stream.of( + new AbstractMap.SimpleEntry<>("name", nameParameters), + new AbstractMap.SimpleEntry<>("code", codeParameters)) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + TextRequest.Builder builder = + TextRequest.builder() + .setTo(Collections.singletonList(phoneNumber)) + .setBody("Hello ${name}, this your code: ${code}") + .setClientReference("a client reference") + .setFrom("+33123456789") + .setParameters(parameters) + .setFeedbackEnabled(true) + .setDeliveryReport(DeliveryReportType.PER_RECIPIENT_FINAL); + + // Overload default dashboard webhooks URL if defined + webhooksSmsPath.ifPresent(builder::setCallbackUrl); + + BatchResponse value = service.send(builder.build()); + + LOGGER.info("Response: " + value); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/SendDeliveryFeedback.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/SendDeliveryFeedback.java new file mode 100644 index 000000000..b1b8ad002 --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/SendDeliveryFeedback.java @@ -0,0 +1,36 @@ +package com.sinch.sample.sms.v1.batches; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.BatchesService; +import com.sinch.sdk.domains.sms.models.v1.batches.request.SendDeliveryFeedbackRequest; +import java.io.IOException; +import java.util.Arrays; +import java.util.logging.Logger; + +public class SendDeliveryFeedback extends BaseApplication { + + private static final Logger LOGGER = Logger.getLogger(SendDeliveryFeedback.class.getName()); + + public SendDeliveryFeedback() throws IOException {} + + public static void main(String[] args) { + try { + new SendDeliveryFeedback().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + BatchesService service = client.sms().v1().batches(); + + LOGGER.info("Send Delivery Feedback for batch ID:" + batchId); + + SendDeliveryFeedbackRequest request = + SendDeliveryFeedbackRequest.builder().setRecipients(Arrays.asList(phoneNumber)).build(); + service.sendDeliveryFeedback(batchId, request); + LOGGER.info("Done"); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/Update.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/Update.java new file mode 100644 index 000000000..8344eaea1 --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/Update.java @@ -0,0 +1,44 @@ +package com.sinch.sample.sms.v1.batches; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.BatchesService; +import com.sinch.sdk.domains.sms.models.v1.batches.request.UpdateTextRequest; +import com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse; +import java.io.IOException; +import java.util.Collections; +import java.util.logging.Logger; + +public class Update extends BaseApplication { + private static final Logger LOGGER = Logger.getLogger(Update.class.getName()); + + public Update() throws IOException {} + + public static void main(String[] args) { + try { + new Update().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + BatchesService service = client.sms().v1().batches(); + + LOGGER.info("Updating batch: " + batchId); + + UpdateTextRequest.Builder builder = + UpdateTextRequest.builder() + .setToRemove(Collections.singletonList("+33745149803")) + .setToAdd(Collections.singletonList("+33745149803")) + .setBody("the body updated") + .setFrom("+33123456789"); + + webhooksSmsPath.ifPresent(builder::setCallbackUrl); + + BatchResponse value = service.update(batchId, builder.build()); + + LOGGER.info("Response: " + value); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/dryRun.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/dryRun.java new file mode 100644 index 000000000..7a529a33d --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/batches/dryRun.java @@ -0,0 +1,45 @@ +package com.sinch.sample.sms.v1.batches; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.BatchesService; +import com.sinch.sdk.domains.sms.models.v1.batches.request.DryRunQueryParameters; +import com.sinch.sdk.domains.sms.models.v1.batches.request.TextRequest; +import com.sinch.sdk.domains.sms.models.v1.batches.response.DryRunResponse; +import java.io.IOException; +import java.util.Collections; +import java.util.logging.Logger; + +public class dryRun extends BaseApplication { + + private static final Logger LOGGER = Logger.getLogger(dryRun.class.getName()); + + public dryRun() throws IOException {} + + public static void main(String[] args) { + try { + new dryRun().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + BatchesService service = client.sms().v1().batches(); + LOGGER.info("DryRun Request"); + + DryRunQueryParameters queryParameters = + DryRunQueryParameters.builder().setPerRecipient(true).setNumberOfRecipients(3).build(); + + DryRunResponse value = + service.dryRun( + queryParameters, + TextRequest.builder() + .setTo(Collections.singletonList(phoneNumber)) + .setBody("the body") + .build()); + + LOGGER.info("Response: " + value); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/deliveryReports/Get.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/deliveryReports/Get.java new file mode 100644 index 000000000..dbfe3ba8c --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/deliveryReports/Get.java @@ -0,0 +1,33 @@ +package com.sinch.sample.sms.v1.deliveryReports; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.DeliveryReportsService; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReport; +import java.io.IOException; +import java.util.logging.Logger; + +public class Get extends BaseApplication { + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public Get() throws IOException {} + + public static void main(String[] args) { + try { + new Get().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + DeliveryReportsService service = client.sms().v1().deliveryReports(); + + LOGGER.info("Get for :" + batchId); + + BatchDeliveryReport response = service.get(batchId); + + LOGGER.info("Response :" + response); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/deliveryReports/GetForNumber.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/deliveryReports/GetForNumber.java new file mode 100644 index 000000000..700f565ac --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/deliveryReports/GetForNumber.java @@ -0,0 +1,33 @@ +package com.sinch.sample.sms.v1.deliveryReports; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.DeliveryReportsService; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReport; +import java.io.IOException; +import java.util.logging.Logger; + +public class GetForNumber extends BaseApplication { + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public GetForNumber() throws IOException {} + + public static void main(String[] args) { + try { + new GetForNumber().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + DeliveryReportsService service = client.sms().v1().deliveryReports(); + + LOGGER.info("Get for: " + phoneNumber); + + RecipientDeliveryReport response = service.getForNumber(batchId, phoneNumber); + + LOGGER.info("Response :" + response); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/deliveryReports/List.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/deliveryReports/List.java new file mode 100644 index 000000000..0cd7577a6 --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/deliveryReports/List.java @@ -0,0 +1,45 @@ +package com.sinch.sample.sms.v1.deliveryReports; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.DeliveryReportsService; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryReceiptErrorCode; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryStatus; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.request.ListDeliveryReportsQueryParameters; +import java.io.IOException; +import java.util.Arrays; +import java.util.logging.Logger; + +public class List extends BaseApplication { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public List() throws IOException {} + + public static void main(String[] args) { + try { + new List().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + DeliveryReportsService service = client.sms().v1().deliveryReports(); + + LOGGER.info("List Delivery Reports"); + + LOGGER.info("Response:"); + service + .list( + ListDeliveryReportsQueryParameters.builder() + .setStatus(Arrays.asList(DeliveryStatus.CANCELLED, DeliveryStatus.FAILED)) + .setCode( + Arrays.asList( + DeliveryReceiptErrorCode.from(0), DeliveryReceiptErrorCode.DISPATCHED)) + .build()) + .iterator() + .forEachRemaining(f -> LOGGER.info(f.toString())); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/Create.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/Create.java new file mode 100644 index 000000000..d3e8f75dc --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/Create.java @@ -0,0 +1,34 @@ +package com.sinch.sample.sms.v1.groups; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import com.sinch.sdk.domains.sms.models.v1.groups.Group; +import com.sinch.sdk.domains.sms.models.v1.groups.request.GroupRequest; +import java.io.IOException; +import java.util.logging.Logger; + +public class Create extends BaseApplication { + private static final Logger LOGGER = Logger.getLogger(Create.class.getName()); + + public Create() throws IOException {} + + public static void main(String[] args) { + try { + new Create().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + GroupsService service = client.sms().v1().groups(); + + LOGGER.info("Creating group"); + + Group response = service.create(GroupRequest.builder().setName("Group name").build()); + + LOGGER.info("Response: " + response); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/Delete.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/Delete.java new file mode 100644 index 000000000..f783056a3 --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/Delete.java @@ -0,0 +1,33 @@ +package com.sinch.sample.sms.v1.groups; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import java.io.IOException; +import java.util.logging.Logger; + +public class Delete extends BaseApplication { + + private static final Logger LOGGER = Logger.getLogger(Delete.class.getName()); + + public Delete() throws IOException {} + + public static void main(String[] args) { + try { + new Delete().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + GroupsService service = client.sms().v1().groups(); + + LOGGER.info("Deleting group: " + smsGroupId); + + service.delete(smsGroupId); + + LOGGER.info("Done"); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/Get.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/Get.java new file mode 100644 index 000000000..3c778b2e6 --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/Get.java @@ -0,0 +1,33 @@ +package com.sinch.sample.sms.v1.groups; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import com.sinch.sdk.domains.sms.models.v1.groups.Group; +import java.io.IOException; +import java.util.logging.Logger; + +public class Get extends BaseApplication { + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public Get() throws IOException {} + + public static void main(String[] args) { + try { + new Get().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + GroupsService service = client.sms().v1().groups(); + + LOGGER.info("Get for: " + smsGroupId); + + Group response = service.get(smsGroupId); + + LOGGER.info("Response: " + response); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/List.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/List.java new file mode 100644 index 000000000..698e5288b --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/List.java @@ -0,0 +1,34 @@ +package com.sinch.sample.sms.v1.groups; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import com.sinch.sdk.domains.sms.models.v1.groups.response.ListGroupsResponse; +import java.io.IOException; +import java.util.logging.Logger; + +public class List extends BaseApplication { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public List() throws IOException {} + + public static void main(String[] args) { + try { + new List().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + GroupsService service = client.sms().v1().groups(); + + LOGGER.info("List groups"); + + ListGroupsResponse response = service.list(); + + response.iterator().forEachRemaining(f -> LOGGER.info(f.toString())); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/ListMembers.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/ListMembers.java new file mode 100644 index 000000000..2b858520d --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/ListMembers.java @@ -0,0 +1,34 @@ +package com.sinch.sample.sms.v1.groups; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import java.io.IOException; +import java.util.Collection; +import java.util.logging.Logger; + +public class ListMembers extends BaseApplication { + + private static final Logger LOGGER = Logger.getLogger(ListMembers.class.getName()); + + public ListMembers() throws IOException {} + + public static void main(String[] args) { + try { + new ListMembers().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + GroupsService service = client.sms().v1().groups(); + + LOGGER.info("List members for groupId: " + smsGroupId); + + Collection response = service.listMembers(smsGroupId); + + response.iterator().forEachRemaining(LOGGER::info); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/Replace.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/Replace.java new file mode 100644 index 000000000..454ba6ad3 --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/Replace.java @@ -0,0 +1,43 @@ +package com.sinch.sample.sms.v1.groups; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import com.sinch.sdk.domains.sms.models.v1.groups.Group; +import com.sinch.sdk.domains.sms.models.v1.groups.request.GroupRequest; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.logging.Logger; + +public class Replace extends BaseApplication { + + private static final Logger LOGGER = Logger.getLogger(Replace.class.getName()); + + public Replace() throws IOException {} + + public static void main(String[] args) { + try { + new Replace().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + GroupsService service = client.sms().v1().groups(); + + GroupRequest parameters = + GroupRequest.builder() + .setName("foo") + .setMembers(new HashSet<>(Arrays.asList("+3312345678", "+3312345679"))) + .build(); + + LOGGER.info("Replace group: " + smsGroupId + " with: " + parameters); + + Group response = service.replace(smsGroupId, parameters); + + LOGGER.info("Response :" + response); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/Update.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/Update.java new file mode 100644 index 000000000..4de6faeb4 --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/groups/Update.java @@ -0,0 +1,37 @@ +package com.sinch.sample.sms.v1.groups; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import com.sinch.sdk.domains.sms.models.v1.groups.Group; +import com.sinch.sdk.domains.sms.models.v1.groups.request.GroupUpdateRequest; +import java.io.IOException; +import java.util.logging.Logger; + +public class Update extends BaseApplication { + + private static final Logger LOGGER = Logger.getLogger(Update.class.getName()); + + public Update() throws IOException {} + + public static void main(String[] args) { + try { + new Update().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + GroupsService service = client.sms().v1().groups(); + + GroupUpdateRequest parameters = GroupUpdateRequest.builder().setName("new name").build(); + + LOGGER.info("Update group: " + smsGroupId + " with: " + parameters); + + Group response = service.update(smsGroupId, parameters); + + LOGGER.info("Response: " + response); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/inbounds/Get.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/inbounds/Get.java new file mode 100644 index 000000000..ad35bd616 --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/inbounds/Get.java @@ -0,0 +1,35 @@ +package com.sinch.sample.sms.v1.inbounds; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.InboundsService; +import com.sinch.sdk.domains.sms.models.v1.inbounds.InboundMessage; +import java.io.IOException; +import java.util.logging.Logger; + +public class Get extends BaseApplication { + private static final Logger LOGGER = + Logger.getLogger(com.sinch.sample.sms.deliveryReports.Get.class.getName()); + + public Get() throws IOException {} + + public static void main(String[] args) { + try { + new Get().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + InboundsService service = client.sms().v1().inbounds(); + + String inboundId = "01JFFMTMJ1AY6TAYEPDR4CYG3S"; + LOGGER.info("Get for: " + inboundId); + + InboundMessage response = service.get(inboundId); + + LOGGER.info("Response :" + response); + } +} diff --git a/sample-app/src/main/java/com/sinch/sample/sms/v1/inbounds/List.java b/sample-app/src/main/java/com/sinch/sample/sms/v1/inbounds/List.java new file mode 100644 index 000000000..267b48f43 --- /dev/null +++ b/sample-app/src/main/java/com/sinch/sample/sms/v1/inbounds/List.java @@ -0,0 +1,41 @@ +package com.sinch.sample.sms.v1.inbounds; + +import com.sinch.sample.BaseApplication; +import com.sinch.sdk.domains.sms.api.v1.InboundsService; +import com.sinch.sdk.domains.sms.models.v1.inbounds.request.ListInboundMessagesQueryParameters; +import java.io.IOException; +import java.time.Instant; +import java.time.Period; +import java.util.logging.Logger; + +public class List extends BaseApplication { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public List() throws IOException {} + + public static void main(String[] args) { + try { + new List().run(); + } catch (Exception e) { + LOGGER.severe(e.getMessage()); + e.printStackTrace(); + } + } + + public void run() { + + InboundsService service = client.sms().v1().inbounds(); + + LOGGER.info("List inbounds"); + + ListInboundMessagesQueryParameters queryParameters = + ListInboundMessagesQueryParameters.builder() + .setPageSize(1) + .setStartDate(Instant.now().minus(Period.ofWeeks(3))) + .build(); + + LOGGER.info("Response:"); + service.list(queryParameters).iterator().forEachRemaining(f -> LOGGER.info(f.toString())); + } +}