diff --git a/MIGRATION-GUIDE.md b/MIGRATION-GUIDE.md index 8cb941a04..fc24cc663 100644 --- a/MIGRATION-GUIDE.md +++ b/MIGRATION-GUIDE.md @@ -9,8 +9,16 @@ This guide lists all removed classes and interfaces from V1 and how to migrate t ### [`Conversation`](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/package-summary.html) - Removed support of `SINCH_CHAT` channel. -- [channelspecific.whatsapp.payment.OrderDetailsPayment](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/latest/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/whatsapp/payment/OrderDetailsPayment.html) is now processing `OderDetailsSettings` interface for payment settings to support `boleto` and `payment_link` payment methods. -- Conversation Template V1 is deprecated. Use Conversation Template V2 instead. +- [channelspecific.whatsapp.payment.OrderDetailsPayment](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/latest/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/whatsapp/payment/OrderDetailsPayment.html) is now processing `OderDetailsSettings` interface for payment settings to support `boleto` and `payment_link` payment methods. +- APIs returning a list are supporting common naming: `QueyParameters` models for filtering, sorting, and pagination onto requests and `ListResponse` models for responses. +- New APIs supporting auto-pagination for list responses: + - apps.list() + - webhooks.list(). + - templates.list(). + - templates.listTranslations(). +- Templates: + - Conversation `Template V1` is removed. Use Conversation`Template V2` instead. + - Conversation Templates models moved from `com.sinch.sdk.domains.conversation.models.templates` package to `com.sinch.sdk.domains.conversation.templates.models`. #### Replacement models | Old const | New const | @@ -19,10 +27,50 @@ This guide lists all removed classes and interfaces from V1 and how to migrate t | ComposingEvent.EMPTY | [ComposingEvent.COMPOSING_EVENT](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/events/types/ComposingEvent.html) | | ConversationDeletedEvent.EMPTY | [ConversationDeletedEvent.CONVERSATION_DELETED_EVENT](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/events/types/ComposingEvent.html) | -| Old class | New class | -|--------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| models.v1.messages.types.card.CardMessageMedia | [com.sinch.sdk.domains.conversation.models.v1.messages.types.media.MediaMessage](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/messages/types/media/MediaMessage.html) | +| Old class | New class | +|-------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| messages.types.card.CardMessageMedia | [messages.types.media.MediaMessage](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/messages/types/media/MediaMessage.html) | +| contact.request.IdentityConflictsListRequest | [contacts.request.ContactListIdentityConflictsQueryParameters](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactListIdentityConflictsQueryParameters.html) | +| contact.request.ContactListRequest | [contacts.request.ContactsListQueryParameters](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactsListQueryParameters.html) | +| contact.response.ContactsListResponse | [contacts.response.ContactsListResponse](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/contacts/response/ContactsListResponse.html) | +| conversation.request.ConversationsListRequest | [conversations.request.ConversationsListQueryParameters](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListQueryParameters.html) | +| conversation.request.ConversationsListRecentRequest | [conversations.request.ConversationsListQueryParameters](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/conversations/request/RecentConversationsListQueryParameters.html) | +| conversation.response.ConversationsListRecentResponse | [conversations.response.RecentConversationsListResponse](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/conversations/response/RecentConversationsListResponse.html) | +| events.request.EventsListRequest | [events.request.EventsListQueryParameters](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/events/request/EventsListQueryParameters.html) | +| messages.request.MessagesListRequest | [messages.request.MessagesListQueryParameters](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListQueryParameters.html) | + +#### Replacement Services +| Old package | New package | +|--------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| conversation.api.v1.AppService | [conversation.api.v1.AppsService](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/api/v1/AppsService.html) | +| conversation.api.v1.ContactService | [conversation.api.v1.ContactsService](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/api/v1/ContactsService.html) | +| conversation.api.v1.Conversation | [conversation.api.v1.ConversationsService](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/api/v1/ConversationsService.html) | +| conversation.api.v1.EventService | [conversation.api.v1.EventsService](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/api/v1/EventsService.html) | +| conversation.api.v1.WebHooksService | [conversation.api.v1.WebhooksService](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/api/v1/WebhookssService.html) | + +#### Replacement packages +| Old package | New package | +|--------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| conversation.models.v1.app | [conversation.models.v1.apps](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/apps/package-summary.html) | +| conversation.models.v1.contact | [conversation.models.v1.contacts](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/contacts/package-summary.html) | +| conversation.models.v1.conversation | [conversation.api.v1.conversations](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/conversations/package-summary.html) | +| conversation.models.v1.event | [conversation.api.v1.events](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/events/package-summary.html) | +| conversation.api.templates.v2.TemplatesServiceV2 | [conversation.templates.api.v2.TemplatesV2Service](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/templates/api/v2/TemplatesV2Service/package-summary.html) | +#### Replacement APIs + +| Old interface | New Equivalent | +|------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ContactsService.getChannelProfileByChannelIdentity() | Returned class is changed from `String` to [GetChannelProfileResponse](openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/GetChannelProfileResponse.java) | +| ContactsService.getChannelProfileByContactId() | Returned class is changed from `String` to [GetChannelProfileResponse](openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/GetChannelProfileResponse.java) | +| AppsService.list(...) | Returned class is changed from `Collection` to `AppsListResponse` | +| MessagesService.get(...) | Is accepting now a `MessagesGetQueryParameeters` object for request parameters instead of individual parameters. | +| MessagesService.delete(...) | Is accepting now a `MessagesDeleteQueryParameeters` object for request parameters instead of individual parameters. | +| MessagesService.update(...) | Is accepting now a `MessagesUpdateQueryParameeters` object for request parameters instead of individual parameters. | +| WebhooksService.create(...) | Request parameter type is changed from `Webhook` to [CreateWebhookRequest](openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/request/CreateWebhookRequest.java) | +| WebhooksService.list(...) | Returned class is changed from `Collection` to `WebhooksListResponse` | +| TemplatesServiceV2.list(...) | Returned class is changed from `Collection` to `TemplatesV2ListResponse` | +| TemplatesServiceV2.listTranslations(...) | Returned class is changed from `Collection` to `TranslationV2ListResponse` | ### [`Numbers`](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/numbers/package-summary.html) #### Replacement models @@ -72,10 +120,10 @@ This guide lists all removed classes and interfaces from V1 and how to migrate t | models.requests.RentVoiceConfigurationRequestParameters | [com.sinch.sdk.domains.numbers.models.v1.VoiceConfiguration](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/numbers/models/v1/VoiceConfiguration.html) | ##### Regions -| Old class | New class | -|---------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| models.requests.AvailableRegionListAllRequestParameters | [com.sinch.sdk.domains.numbers.models.v1.regions.request.AvailableRegionsListQueryParameters](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/numbers/models/v1/regions/request/AvailableRegionsListQueryParameters.html) | -| models.responses.AvailableRegionListResponse | [com.sinch.sdk.domains.numbers.models.v1.regions.response.AvailableRegionsListResponse](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/numbers/models/v1/regions/response/AvailableRegionsListResponse.html) | +| Old class | New class | +|---------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| models.requests.AvailableRegionListAllRequestParameters | [com.sinch.sdk.domains.numbers.models.v1.regions.request.AvailableRegionsListQueryParameters](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/numbers/models/v1/regions/request/AvailableRegionsListQueryParameters.html) | +| models.responses.AvailableRegionListResponse | [com.sinch.sdk.domains.numbers.models.v1.regions.response.AvailableRegionsListResponse](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/numbers/models/v1/regions/response/AvailableRegionsListResponse.html) | ##### Callbacks configuration | Old class | New class | @@ -195,11 +243,11 @@ Use the new versioned API under `sms().v1()` to get access to [SMSService](https #### Replacement models -| Old const | New const | -|---------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| SvamlActionContinue.DEFAULT | [SvamlActionContinue.SVAML_ACTION_CONTINUE](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/voice/models/v1/svaml/action/SvamlActionContinue.html) | -| SvamlActionHangup.DEFAULT | [SvamlActionHangup.SVAML_ACTION_HANGUP](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/voice/models/v1/svaml/action/SvamlActionHangup.html) | -| SvamlInstructionAnswer.DEFAULT | [SvamlInstructionAnswer.SVAML_INSTRUCTION_ANSWER](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/voice/models/v1/svaml/action/SvamlInstructionAnswer.html) | +| Old const | New const | +|---------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| SvamlActionContinue.DEFAULT | [SvamlActionContinue.SVAML_ACTION_CONTINUE](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/voice/models/v1/svaml/action/SvamlActionContinue.html) | +| SvamlActionHangup.DEFAULT | [SvamlActionHangup.SVAML_ACTION_HANGUP](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/voice/models/v1/svaml/action/SvamlActionHangup.html) | +| SvamlInstructionAnswer.DEFAULT | [SvamlInstructionAnswer.SVAML_INSTRUCTION_ANSWER](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/voice/models/v1/svaml/action/SvamlInstructionAnswer.html) | | SvamlInstructionStopRecording.DEFAULT | [SvamlInstructionStopRecording.SVAML_INSTRUCTION_STOP_RECORDING](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/voice/models/v1/svaml/action/SvamlInstructionStopRecording.html) | diff --git a/client/src/main/com/sinch/sdk/domains/conversation/ConversationService.java b/client/src/main/com/sinch/sdk/domains/conversation/ConversationService.java index 85c3297ea..aa8740cfd 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/ConversationService.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/ConversationService.java @@ -1,6 +1,6 @@ package com.sinch.sdk.domains.conversation; -import com.sinch.sdk.domains.conversation.api.templates.TemplatesService; +import com.sinch.sdk.domains.conversation.templates.api.TemplatesService; /** * Conversation Service diff --git a/client/src/main/com/sinch/sdk/domains/conversation/adapters/ConversationService.java b/client/src/main/com/sinch/sdk/domains/conversation/adapters/ConversationService.java index 860338e73..c7fdc53e8 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/adapters/ConversationService.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/adapters/ConversationService.java @@ -2,7 +2,7 @@ import com.sinch.sdk.core.http.HttpClient; import com.sinch.sdk.core.models.ServerConfiguration; -import com.sinch.sdk.domains.conversation.api.templates.adapters.TemplatesService; +import com.sinch.sdk.domains.conversation.templates.api.adapters.TemplatesService; import com.sinch.sdk.models.ConversationContext; import com.sinch.sdk.models.UnifiedCredentials; import java.util.function.Supplier; @@ -34,6 +34,7 @@ public com.sinch.sdk.domains.conversation.api.v1.ConversationService v1() { new com.sinch.sdk.domains.conversation.api.v1.adapters.ConversationService( credentials, context, oAuthServer, httpClientSupplier); } + return this.conversationV1; } diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/TemplatesService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/templates/TemplatesService.java deleted file mode 100644 index c4bf1f169..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/TemplatesService.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.templates; - -import com.sinch.sdk.domains.conversation.api.templates.v1.TemplatesServiceV1; -import com.sinch.sdk.domains.conversation.api.templates.v2.TemplatesServiceV2; - -/** - * Service for working with Conversation templates - * - * @see online - * documentation - * @since 1.3 - */ -public interface TemplatesService { - - /** - * Service for working with templates V1 - * - * @return Templates V1 service - * @since 1.3 - * @deprecated Use {@link #v2()} instead. - */ - TemplatesServiceV1 v1(); - - /** - * Service for working with templates V2 - * - * @return Templates V2 service - * @since 1.3 - */ - TemplatesServiceV2 v2(); -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/adapters/v1/TemplatesServiceV1.java b/client/src/main/com/sinch/sdk/domains/conversation/api/templates/adapters/v1/TemplatesServiceV1.java deleted file mode 100644 index 33b10b0fd..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/adapters/v1/TemplatesServiceV1.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.templates.adapters.v1; - -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.domains.conversation.templates.api.internal.V1Api; -import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateV1; -import com.sinch.sdk.models.ConversationContext; -import java.util.Collection; -import java.util.Map; - -public class TemplatesServiceV1 - implements com.sinch.sdk.domains.conversation.api.templates.v1.TemplatesServiceV1 { - - private final String uriUUID; - private final V1Api api; - - public TemplatesServiceV1( - String uriUUID, - ConversationContext context, - HttpClient httpClient, - Map authManagers) { - this.uriUUID = uriUUID; - this.api = - new V1Api( - httpClient, - context.getTemplateManagementServer(), - authManagers, - HttpMapper.getInstance()); - } - - protected V1Api getApi() { - return this.api; - } - - public Collection list() { - return getApi().templatesListTemplates(uriUUID).getTemplates(); - } - - public TemplateV1 create(TemplateV1 template) { - return getApi().templatesCreateTemplate(uriUUID, template); - } - - public TemplateV1 get(String templateId) { - return getApi().templatesGetTemplate(uriUUID, templateId); - } - - public void delete(String templateId) { - getApi().templatesDeleteTemplate(uriUUID, templateId); - } - - public TemplateV1 update(String templateId, TemplateV1 template) { - return getApi().templatesUpdateTemplate(uriUUID, templateId, template, null); - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/adapters/v2/TemplatesServiceV2.java b/client/src/main/com/sinch/sdk/domains/conversation/api/templates/adapters/v2/TemplatesServiceV2.java deleted file mode 100644 index 9f958ac33..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/adapters/v2/TemplatesServiceV2.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.templates.adapters.v2; - -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.domains.conversation.templates.api.internal.V2Api; -import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslation; -import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2; -import com.sinch.sdk.domains.conversation.templates.models.v2.internal.V2ListTranslationsResponseInternal; -import com.sinch.sdk.domains.conversation.templates.models.v2.request.TranslationListRequest; -import com.sinch.sdk.models.ConversationContext; -import java.util.Collection; -import java.util.Collections; -import java.util.Map; -import java.util.stream.Collectors; - -public class TemplatesServiceV2 - implements com.sinch.sdk.domains.conversation.api.templates.v2.TemplatesServiceV2 { - - private final String uriUUID; - private final V2Api api; - - public TemplatesServiceV2( - String uriUUID, - ConversationContext context, - HttpClient httpClient, - Map authManagers) { - this.uriUUID = uriUUID; - this.api = - new V2Api( - httpClient, - context.getTemplateManagementServer(), - authManagers, - HttpMapper.getInstance()); - } - - protected V2Api getApi() { - return this.api; - } - - public Collection list() { - return getApi().templatesV2ListTemplates(uriUUID).getTemplates(); - } - - public Collection listTranslations( - String templateId, TranslationListRequest request) { - - if (null == request) { - request = TranslationListRequest.builder().build(); - } - String languageCode = request.getLanguageCode().orElse(null); - String translationVersion = request.getTranslationVersion().orElse(null); - - V2ListTranslationsResponseInternal response = - getApi().templatesV2ListTranslations(uriUUID, templateId, languageCode, translationVersion); - if (null == response || null == response.getTranslations()) { - return Collections.emptyList(); - } - return response.getTranslations().stream() - .map(TemplateTranslation::from) - .collect(Collectors.toList()); - } - - public TemplateV2 create(TemplateV2 template) { - return getApi().templatesV2CreateTemplate(uriUUID, template); - } - - public TemplateV2 get(String templateId) { - return getApi().templatesV2GetTemplate(uriUUID, templateId); - } - - public void delete(String templateId) { - getApi().templatesV2DeleteTemplate(uriUUID, templateId); - } - - public TemplateV2 update(String templateId, TemplateV2 template) { - return getApi().templatesV2UpdateTemplate(uriUUID, templateId, template); - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/v1/TemplatesServiceV1.java b/client/src/main/com/sinch/sdk/domains/conversation/api/templates/v1/TemplatesServiceV1.java deleted file mode 100644 index ac10545dd..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/v1/TemplatesServiceV1.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.templates.v1; - -import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateV1; -import java.util.Collection; - -/** - * Templates V1 - * - *

Version 1 endpoints for managing message templates. - * - *

Currently maintained for existing users. - * - *

Version 2 is recommended. - * - * @see online - * documentation - * @since 1.3 - * @deprecated Use {@link com.sinch.sdk.domains.conversation.api.templates.v2.TemplatesServiceV2} - * instead. - */ -public interface TemplatesServiceV1 { - - /** - * List all templates belonging to a project ID. - * - * @return List of templates - * @since 1.3 - */ - Collection list(); - - /** - * Creates a template - * - * @param template Information for creation - * @return Created template - * @since 1.3 - */ - TemplateV1 create(TemplateV1 template); - - /*** - * Get a template - * @param templateId The ID of the template to fetch. - * @return The template information - * @since 1.3 - */ - TemplateV1 get(String templateId); - - /*** - * Delete a template - * @param templateId The ID of the template to delete. - * @since 1.3 - */ - void delete(String templateId); - - /** - * Updates a template - * - * @param template Information to be updated - * @return Updated template - * @since 1.3 - */ - TemplateV1 update(String templateId, TemplateV1 template); -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/v1/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/api/templates/v1/package-info.java deleted file mode 100644 index d5f6d1136..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/v1/package-info.java +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Conversation API interface for templates V1 management - * - * @see Conversation - * Templates V1 - * @since 1.3 - * @deprecated Use {@link com.sinch.sdk.domains.conversation.api.templates.v2} instead. - */ -package com.sinch.sdk.domains.conversation.api.templates.v1; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/v2/TemplatesServiceV2.java b/client/src/main/com/sinch/sdk/domains/conversation/api/templates/v2/TemplatesServiceV2.java deleted file mode 100644 index 8717f033e..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/v2/TemplatesServiceV2.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.templates.v2; - -import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslation; -import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2; -import com.sinch.sdk.domains.conversation.templates.models.v2.request.TranslationListRequest; -import java.util.Collection; - -/** - * Templates V2 - * - *

Version 2 endpoints for managing message templates. - * - *

Recommended version for all users. - * - *

Includes strongly typed translations field (allowing for message definition using - * JSON structures also used in the send message request of the Conversation API), improved - * validation, and the ability to override omni-channel templates in favor of channel-specific - * templates (where available). - * - * @see online - * documentation - * @since 1.3 - */ -public interface TemplatesServiceV2 { - - /** - * List all templates belonging to a project ID. - * - * @return List of templates - * @since 1.3 - */ - Collection list(); - - /** - * List translations for a template - * - * @param templateId The ID of the template to fetch - * @param request Parameters for request - * @return The translations list - * @since 1.3 - */ - Collection listTranslations( - String templateId, TranslationListRequest request); - - /** - * Creates a template - * - * @param template Information for creation - * @return Created template - * @since 1.3 - */ - TemplateV2 create(TemplateV2 template); - - /*** - * Get a template - * @param templateId The ID of the template to fetch. - * @return The template information - * @since 1.3 - */ - TemplateV2 get(String templateId); - - /*** - * Delete a template - * @param templateId The ID of the template to delete. - * @since 1.3 - */ - void delete(String templateId); - - /** - * Updates a template - * - * @param template Information to be updated - * @return Updated template - * @since 1.3 - */ - TemplateV2 update(String templateId, TemplateV2 template); -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/AppService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/AppService.java deleted file mode 100644 index 1089ff755..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/AppService.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1; - -import com.sinch.sdk.domains.conversation.models.v1.app.request.AppCreateRequest; -import com.sinch.sdk.domains.conversation.models.v1.app.request.AppUpdateRequest; -import com.sinch.sdk.domains.conversation.models.v1.app.response.AppResponse; -import com.sinch.sdk.models.ConversationRegion; -import java.util.Collection; - -/** - * Applications related service - * - *

Apps are created and configured through the Sinch Dashboard, are tied to the API user and come - * with a set of channel credentials for each underlying connected channel. - * - *

The app has a list of conversations between itself and different contacts which share the same - * project. - * - *

Webhooks, which the app is attached to, defines the destination for various events coming from - * the Conversation API. An app has the following configurable properties: - * - * @see https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/App/ - * @since 1.3 - */ -public interface AppService { - - /** - * List all apps - * - *

Get a list of all apps in the specified project - * - * @return List of apps related to configured region (from {@link - * com.sinch.sdk.models.Configuration.Builder#setConversationRegion(ConversationRegion)}) - * @since 1.3 - */ - Collection list(); - - /** - * Get an app - * - *

Returns a particular app as specified by the App ID. - * - * @param appId The application identifier - * @return App information details - * @since 1.3 - */ - AppResponse get(String appId); - - /** - * Delete an app - * - *

Deletes the app specified by the App ID - * - *

Note that this operation will not delete contacts (which are stored at the project level) - * nor any channel-specific resources (for example, WhatsApp Sender Identities will not be - * deleted). - * - * @param appId The application identifier - * @since 1.3 - */ - void delete(String appId); - - /** - * Create a Conversation application - * - *

You can create a new Conversation API app using the API. - * - *

You can create an app for one or more channels at once. - * - * @param parameters Creation parameters - * @return Created application - * @since 1.3 - */ - AppResponse create(AppCreateRequest parameters); - - /** - * Update a Conversation application - * - *

Updates a particular app as specified by the App ID. - * - *

Any specified field values will replace existing values. - * - *

Therefore, if you'd like to add additional configurations to an existing Conversation API - * app, ensure that you include existing values AND new values in the call.
- * For example, if you'd like to add new channel_credentials, you can get your - * existing Conversation API app, extract the existing channel_credentials list, - * append your new configuration to that list, and include the updated channel_credentials - * list in this update call. - * - * @param appId The unique ID of the app to be updated - * @param parameters Fields to be updated. Only fields filled within the parameters will be - * updated - * @return Updated application - * @since 1.3 - */ - AppResponse update(String appId, AppUpdateRequest parameters); -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/CapabilityService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/CapabilityService.java deleted file mode 100644 index 3b51613a7..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/CapabilityService.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1; - -import com.sinch.sdk.domains.conversation.models.v1.capability.request.QueryCapabilityRequest; -import com.sinch.sdk.domains.conversation.models.v1.capability.response.QueryCapabilityResponse; - -/** - * Service for working with capability - * - *

A capability query checks the options available for reaching the contact on the channels on - * which it has a channel identity. - * - *

Capability queries can only be executed for contacts that already exist in a project and app. - * For executing the request, either the contact ID or the channel recipient identities of the - * contact are required. - * - *

The request is executed asynchronously, therefore the service responds immediately. The result - * of the capability query is sent to the registered webhook for the CAPABILITY trigger. - * - * @see online - * documentation - * @since 1.3 - */ -public interface CapabilityService { - - /** - * Capability lookup - * - *

This method is asynchronous - it immediately returns the requested Capability registration. - * - *

Capability check is then delivered as a callback to registered webhooks with trigger - * CAPABILITY for every reachable channel. - * - * @param request The request parameters to lookup capability - * @return The capability response - * @since 1.3 - */ - QueryCapabilityResponse lookup(QueryCapabilityRequest request); -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/ContactService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/ContactService.java deleted file mode 100644 index 07df16e4d..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/ContactService.java +++ /dev/null @@ -1,165 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1; - -import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; -import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactCreateRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactGetChannelProfileByChannelIdentityRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactGetChannelProfileByContactIdRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactListRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.IdentityConflictsListRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.ContactListResponse; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.IdentityConflictsListResponse; - -/** - * Contact related service - * - *

A contact is a collection that groups together underlying connected channel recipient - * identities. - * - *

It's tied to a specific project and is therefore considered public to all apps sharing the - * same project. - * - *

Most contact creation and maintenance is handled by the Conversation API's automatic see contact management - * processes. - * - *

However, you can also use API calls to manually manage your contacts. - * - * @see https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/Contact - * @since 1.3 - */ -public interface ContactService { - - /** - * List Contacts - * - *

List all contacts in the project. Note that, if a WhatsApp contact is returned, the - * display_name field of that contact may be populated with the WhatsApp display name (if the name - * is already stored on the server and the display_name field has not been overwritten by the - * user). - * - * @param parameters Filtering parameters - * @return List of contacts according to search criteria - * @since 1.3 - */ - ContactListResponse list(ContactListRequest parameters); - - /** - * Get a Contact - * - *

Returns a specific contact as specified by the contact ID. Note that, if a WhatsApp contact - * is returned, the display_name field of that contact may be populated with the WhatsApp display - * name (if the name is already stored on the server and the display_name field has not been - * overwritten by the user). - * - * @param contactId Contact's Id - * @return Contact information - * @since 1.3 - */ - Contact get(String contactId); - - /** - * Create a Contact - * - *

Most Conversation API contacts are created - * automatically when a message is sent to a new recipient. You can also create a new contact - * manually using this API call. - * - * @param contact Contact information to be used for creation - * @return Contact information - * @since 1.3 - */ - Contact create(ContactCreateRequest contact); - - /** - * Delete a contact as specified by the contact ID. - * - * @param contactId Contact's Id - * @since 1.3 - */ - void delete(String contactId); - - /** - * Updates a contact as specified by the contact ID. - * - * @param contactId Contact ID to be updated - * @param contact Contact information to be updated - * @return Updated contact information - * @since 1.3 - */ - Contact update(String contactId, Contact contact); - - /** - * Merge two Contacts. - * - *

The remaining contact will contain all conversations that the removed contact did. - * - *

If both contacts had conversations within the same App, messages from the removed contact - * will be merged into corresponding active conversations in the destination contact. - * - *

Channel identities will be moved from the source contact to the destination contact only for - * channels that weren't present there before. - * - *

Moved channel identities will be placed at the bottom of the channel priority list. Optional - * fields from the source contact will be copied only if corresponding fields in the destination - * contact are empty - * - *

The contact being removed cannot be referenced after this call. - * - * @param destinationId The unique ID of the contact that should be kept when merging two - * contacts. - * @param sourceId The ID of the contact that should be removed - * @return The merged contact details - * @since 1.3 - */ - Contact mergeContact(String destinationId, String sourceId); - - /** - * Get user profile from a specific channel by contact ID. - * - *

Only supported on {@link ConversationChannel#MESSENGER MESSENGER}, {@link - * ConversationChannel#INSTAGRAM INSTAGRAM} and {@link ConversationChannel#LINE LINE} channels. - * - *

Note that, in order to retrieve a WhatsApp display name, you can use the Get a Contact or - * List Contacts operations, which will populate the display_name field of each returned contact - * with the WhatsApp display name (if the name is already stored on the server and the - * display_name field has not been overwritten by the user). - * - * @param parameters The ID of the contact to be used to check profile information - * @return The profile name - * @since 1.3 - */ - String getChannelProfileByContactId(ContactGetChannelProfileByContactIdRequest parameters); - - /** - * Get user profile from a specific channel by channel identity. - * - *

Only supported on {@link ConversationChannel#MESSENGER MESSENGER}, {@link - * ConversationChannel#INSTAGRAM INSTAGRAM} and {@link ConversationChannel#LINE LINE} channels. - * - *

Note that, in order to retrieve a WhatsApp display name, you can use the Get a Contact or - * List Contacts operations, which will populate the display_name field of each returned contact - * with the WhatsApp display name (if the name is already stored on the server and the - * display_name field has not been overwritten by the user). - * - * @param parameters The identity as specified by the channel to be used to check profile - * information - * @return The profile name - * @since 1.3 - */ - String getChannelProfileByChannelIdentity( - ContactGetChannelProfileByChannelIdentityRequest parameters); - - /** - * Lists Contact Identity Conflicts Lists contact identity conflicts across supported SIM-based - * channels (SMS, MMS, RCS). Use this to identify contact records sharing the same identity (e.g., - * phone number), which must be resolved before enabling the Unified Contact ID feature. - * - * @param parameters Filtering parameters - * @return ListIdentityConflictsResponse - * @since 2.0 - */ - IdentityConflictsListResponse listIdentityConflicts(IdentityConflictsListRequest parameters); -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/ConversationService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/ConversationService.java index b3d995314..61335d154 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/ConversationService.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/ConversationService.java @@ -1,5 +1,7 @@ package com.sinch.sdk.domains.conversation.api.v1; +import com.sinch.sdk.domains.conversation.templates.api.TemplatesService; + /** * Conversation Service V1 * @@ -15,7 +17,7 @@ public interface ConversationService { * @return service instance for project * @since 1.3 */ - AppService app(); + AppsService apps(); /** * Contact Service instance @@ -23,7 +25,7 @@ public interface ConversationService { * @return service instance for project * @since 1.3 */ - ContactService contact(); + ContactsService contacts(); /** * Messages Service instance @@ -79,5 +81,13 @@ public interface ConversationService { * @return service instance for project * @since 1.3 */ - WebHooksService webhooks(); + WebhooksService webhooks(); + + /** + * WebHooksService Service instance + * + * @return service instance for project + * @since 2.0 + */ + TemplatesService templates(); } diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/ConversationsService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/ConversationsService.java deleted file mode 100644 index c07daade3..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/ConversationsService.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1; - -import com.sinch.sdk.domains.conversation.models.v1.conversation.Conversation; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.ConversationsListRecentRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.ConversationsListRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.CreateConversationRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.InjectEventRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.InjectMessageRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.ConversationsListRecentResponse; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.ConversationsListResponse; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.InjectEventResponse; -import com.sinch.sdk.domains.conversation.models.v1.request.MetadataUpdateStrategy; - -/** - * Service for working with the conversation log - * - * @see online - * documentation - * @since 1.3 - */ -public interface ConversationsService { - - /** - * Creates a new empty conversation. - * - *

It is generally not needed to create a conversation explicitly since sending or receiving a - * message automatically creates a new conversation if it does not already exist between the given - * app and contact. - * - *

Creating empty conversation is useful if the metadata of the conversation should be - * populated when the first message in the conversation is a contact message or the first message - * in the conversation comes out-of-band and needs to be injected with InjectMessage. - * - * @param request Conversation request for creation - * @return Created conversation - * @since 1.3 - */ - Conversation create(CreateConversationRequest request); - - /** - * Retrieves a conversation by id. A conversation has two participating entities, an app and a - * contact. - * - * @param conversationId The unique ID of the conversation. - * @return Conversation details - * @since 1.3 - */ - Conversation get(String conversationId); - - /** - * This operation lists all conversations that are associated with an app and/or a contact. - * - * @param request Request parameters - * @since 1.3 - */ - ConversationsListResponse list(ConversationsListRequest request); - - /** - * This operation lists conversations and their most recent message, ordered by when the most - * recent message was sent for that conversation. - * - * @param request Request parameters - * @since 1.3 - */ - ConversationsListRecentResponse listRecent(ConversationsListRecentRequest request); - - /** - * This operation stops the referenced conversation, if the conversation is still active. - * - *

A new conversation will be created if a new message is exchanged between the app or contact - * that was part of the stopped conversation. - * - * @param conversationId The unique ID of the conversation. - * @since 1.3 - */ - void stopActive(String conversationId); - - /** - * Deletes a conversation together with all the messages sent as part of the conversation. - * - * @param conversationId The unique ID of the conversation. - * @since 1.3 - */ - void delete(String conversationId); - - /** - * This operation updates a conversation which can, for instance, be used to update the metadata - * associated with a conversation. - * - * @param request Conversation instance with fields to be updated - * @return Update conversation - * @since 1.3 - */ - Conversation update( - String conversationId, MetadataUpdateStrategy updateStrategy, Conversation request); - - /** - * This operation injects a conversation message in to a specific conversation. - * - * @param conversationId The ID of the conversation. - * @param request Request parameters to inject message - * @since 1.3 - */ - void injectMessage(String conversationId, InjectMessageRequest request); - - /** - * This operation injects a conversation event into a specific conversation. - * - * @param conversationId The ID of the conversation. - * @param request Request parameters to inject event - * @since 1.3 - */ - InjectEventResponse injectEvent(String conversationId, InjectEventRequest request); -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/EventsService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/EventsService.java deleted file mode 100644 index b419746ac..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/EventsService.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1; - -import com.sinch.sdk.domains.conversation.models.v1.events.ConversationEvent; -import com.sinch.sdk.domains.conversation.models.v1.events.request.EventsListRequest; -import com.sinch.sdk.domains.conversation.models.v1.events.request.SendEventRequest; -import com.sinch.sdk.domains.conversation.models.v1.events.response.EventsListResponse; -import com.sinch.sdk.domains.conversation.models.v1.events.response.SendEventResponse; - -/** - * Service for working with the Events - * - * @see online - * documentation - * @since 1.3 - */ -public interface EventsService { - - /** - * Send an event - * - *

Sends an event to the referenced contact from the referenced app. - * - *

Note that this operation enqueues the event in a queue so a successful response only - * indicates that the event has been queued - * - * @param request Send event request parameters - * @return Response related to event enqueued - * @since 1.3 - */ - SendEventResponse send(SendEventRequest request); - - /** - * Get event from ID - * - * @param eventId The unique ID of the event - * @return Conversation event - * @since 1.3 - */ - ConversationEvent get(String eventId); - - /** - * Delete a specific event by its ID - * - * @param eventId The unique ID of the event - * @since 1.3 - */ - void delete(String eventId); - - /** - * List all events in a project - * - * @param request Request parameters - * @return List of events - * @since 1.3 - */ - EventsListResponse list(EventsListRequest request); -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/MessagesService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/MessagesService.java deleted file mode 100644 index b90e197ea..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/MessagesService.java +++ /dev/null @@ -1,252 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1; - -import com.sinch.sdk.domains.conversation.models.v1.messages.AppMessageBody; -import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessageUpdateRequest; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesListRequest; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.SendMessageRequest; -import com.sinch.sdk.domains.conversation.models.v1.messages.response.MessagesListResponse; -import com.sinch.sdk.domains.conversation.models.v1.messages.response.SendMessageResponse; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.card.CardMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.carousel.CarouselMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.choice.ChoiceMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo.ContactInfoMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.list.ListMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.location.LocationMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.media.MediaMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.template.TemplateMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.text.TextMessage; - -/** - * Messages related service - * - *

To start sending messages you must have a Conversation API app. The app holds information about the - * channel credentials and registered webhooks to which the API delivers callbacks such as message - * delivery receipts and contact messages. If you don't already have an app please follow the - * instructions in the getting started guide available in the Sinch Dashboard to create one. - * - * @see https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/Messages - * @since 1.3 - */ -public interface MessagesService { - - /** - * Send a message - * - *

You can send a message from a Conversation app to a contact associated with that app. If the - * recipient is not associated with an existing contact, a new contact will be created. - * - *

The message is added to the active conversation with the contact if a conversation already - * exists. If no active conversation exists a new one is started automatically. - * - *

You can find all of your IDs and authentication credentials on the Sinch Customer Dashboard. - * - * @param request Request parameters - * @return Response related to sent message - * @since 1.3 - */ - SendMessageResponse sendMessage(SendMessageRequest request); - - /** - * Send a card message - * - * @param request CardMessage request - * @return Response related to sent message - * @see #sendMessage(SendMessageRequest) - * @since 1.3 - */ - SendMessageResponse sendCardMessage(SendMessageRequest request); - - /** - * Send a carousel message - * - * @param request CarouselMessage request - * @return Response related to sent message - * @see #sendMessage(SendMessageRequest) - * @since 1.3 - */ - SendMessageResponse sendCarouselMessage(SendMessageRequest request); - - /** - * Send a choice message - * - * @param request ChoiceMessage request - * @return Response related to sent message - * @see #sendMessage(SendMessageRequest) - * @since 1.3 - */ - SendMessageResponse sendChoiceMessage(SendMessageRequest request); - - /** - * Send a contact info message - * - * @param request ContactInfoMessage request - * @return Response related to sent message - * @see #sendMessage(SendMessageRequest) - * @since 1.3 - */ - SendMessageResponse sendContactInfoMessage(SendMessageRequest request); - - /** - * Send a list message - * - * @param request ListMessage request - * @return Response related to sent message - * @see #sendMessage(SendMessageRequest) - * @since 1.3 - */ - SendMessageResponse sendListMessage(SendMessageRequest request); - - /** - * Send a location message - * - * @param request LocationMessage request - * @return Response related to sent message - * @see #sendMessage(SendMessageRequest) - * @since 1.3 - */ - SendMessageResponse sendLocationMessage(SendMessageRequest request); - - /** - * Send a media message - * - * @param request MediaMessage request - * @return Response related to sent message - * @see #sendMessage(SendMessageRequest) - * @since 1.3 - */ - SendMessageResponse sendMediaMessage(SendMessageRequest request); - - /** - * Send a template message - * - * @param request TemplateMessage request - * @return Response related to sent message - * @see #sendMessage(SendMessageRequest) - * @since 1.3 - */ - SendMessageResponse sendTemplateMessage(SendMessageRequest request); - - /** - * Send a send message request message - * - * @param request request - * @return Response related to sent message - * @see #sendMessage(SendMessageRequest) - * @since 1.3 - */ - SendMessageResponse sendTextMessage(SendMessageRequest request); - - /** - * Helper method for {@link #get(String, MessageSource)} - * - * @see #get(String, MessageSource) - * @param messageId The unique ID of the message. - * @return Conversation message - * @since 1.3 - */ - ConversationMessage get(String messageId); - - /** - * Retrieves a specific message by its ID. - * - * @param messageId The unique ID of the message. - * @param messageSource Specifies the message source for which the request will be processed. Used - * for operations on messages in Dispatch Mode. For more information, see Processing Modes - * @default CONVERSATION_SOURCE - * @return Conversation message - * @since 1.3 - */ - ConversationMessage get(String messageId, MessageSource messageSource); - - /** - * This operation lists all messages sent or received via particular {@link - * com.sinch.sdk.domains.conversation.models.v1.ProcessingMode}. - * - *

Setting the messages_source parameter to CONVERSATION_SOURCE - * allows for querying messages in CONVERSATION mode, and setting it to - * DISPATCH_SOURCE will allow for queries of messages in DISPATCH mode. - * - *

Combining multiple parameters is supported for more detailed filtering of messages, but some - * of them are not supported depending on the value specified for messages_source. - * The description for each field will inform if that field may not be supported. - * - *

The messages are ordered by their accept_time property in descending order, - * where accept_time is a timestamp of when the message was enqueued by the - * Conversation API. This means messages received most recently will be listed first. - * - * @param request Request parameters - * @return List of messages - * @since 1.3 - */ - MessagesListResponse list(MessagesListRequest request); - - /** - * Helper method for {@link #delete(String, MessageSource)} - * - * @see #delete(String, MessageSource) - * @param messageId The unique ID of the message. - * @since 1.3 - */ - void delete(String messageId); - - /** - * Delete a specific message by its ID. - * - * @apiNote Removing all messages of a conversation will not automatically delete the - * conversation. - * @param messageId The unique ID of the message. - * @param messageSource Specifies the message source for which the request will be processed. Used - * for operations on messages in Dispatch Mode. For more information, see Processing Modes - * @default CONVERSATION_SOURCE - * @since 1.3 - */ - void delete(String messageId, MessageSource messageSource); - - /** - * Helper method for {@link #update(String, MessageSource, MessageUpdateRequest)} - * - * @see #update(String, MessageSource, MessageUpdateRequest) - * @param messageId The unique ID of the message. - * @param request Request parameters to be used for updating - * @return Updated message - * @since 1.3 - */ - ConversationMessage update(String messageId, MessageUpdateRequest request); - - /** - * Update a specific message by its ID. - * - * @param messageId The unique ID of the message - * @param messageSource Specifies the message source for which the request will be processed. Used - * for operations on messages in Dispatch Mode. For more information, see Processing Modes - * @default CONVERSATION_SOURCE - * @param request Request parameters to be used for updating - * @return Updated message - * @since 1.3 - */ - ConversationMessage update( - String messageId, MessageSource messageSource, MessageUpdateRequest request); - - /** - * Specifies the message source for which the request will be processed. Used for operations on - * messages in Dispatch Mode - */ - enum MessageSource { - /** - * The default messages source. Retrieves messages sent in the default CONVERSATION - * processing mode, which associates the messages with a specific conversation and contact. - */ - CONVERSATION_SOURCE, - /** - * Retrieves messages sent in the DISPATCH processing mode. These types of messages - * are not associated with any conversation or contact. - */ - DISPATCH_SOURCE - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/ProjectSettingsService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/ProjectSettingsService.java deleted file mode 100644 index cbf1d9427..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/ProjectSettingsService.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1; - -import com.sinch.sdk.domains.conversation.models.v1.projectsettings.request.ProjectSettingsRequest; -import com.sinch.sdk.domains.conversation.models.v1.projectsettings.response.ProjectSettingsResponse; - -/** - * Project Settings related service - * - * @see https://developers.sinch.com/docs/conversation/api-reference/conversation/project-settings - * @since 2.0 - */ -public interface ProjectSettingsService { - - /** - * Create Project Settings Creates initial settings for the project. Useful for enabling features - * like Unified Contact ID. For new projects with no existing contacts, you can enable Unified - * Contact ID immediately. - * - * @param projectSettingsRequest The project settings to create. (required) - * @return ProjectSettingsResponse - */ - ProjectSettingsResponse create(ProjectSettingsRequest projectSettingsRequest); - - /** Delete Project Settings Deletes all project-level settings for the specified project. */ - void delete(); - - /** - * Get Project Settings Retrieves the current settings for the specified project, including - * contact management options such as Unified Contact ID. - * - * @return ProjectSettingsResponse - */ - ProjectSettingsResponse get(); - - /** - * Update Project Settings Updates project settings (e.g. enabling/disabling Unified Contact ID). - * For existing projects, you must resolve all identity conflicts before enabling Unified Contact - * ID. - * - * @param projectSettingsRequest The project settings to update. (required) - * @return ProjectSettingsResponse - */ - ProjectSettingsResponse update(ProjectSettingsRequest projectSettingsRequest); -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/TranscodingService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/TranscodingService.java deleted file mode 100644 index ca52e36bd..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/TranscodingService.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1; - -import com.sinch.sdk.domains.conversation.models.v1.transcoding.request.TranscodeMessageRequest; -import com.sinch.sdk.domains.conversation.models.v1.transcoding.response.TranscodeMessageResponse; - -/** - * Service for working with transcoding - * - * @see online - * documentation - * @since 1.3 - */ -public interface TranscodingService { - - /** - * Transcodes the message from the Conversation API format to the channel-specific formats for the - * requested channels. - * - *

No message is sent to the contact. - * - * @param request The message to be transcoded, and the app and channels for which the message is - * to be transcoded - * @return Transcoded message - * @since 1.3 - */ - TranscodeMessageResponse transcodeMessage(TranscodeMessageRequest request); -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/WebHooksService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/WebHooksService.java deleted file mode 100644 index b42dc165f..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/WebHooksService.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1; - -import com.sinch.sdk.core.exceptions.ApiMappingException; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.ConversationWebhookEvent; -import java.util.Collection; -import java.util.Map; - -/** - * Webhooks service - * - *

The Conversation API delivers contact messages, delivery receipts for app messages and various - * notifications through callbacks. - * - *

see online - * documentation - * - * @since 1.3 - */ -public interface WebHooksService { - - /** - * The Sinch Platform can initiate callback requests to a URL you define (Callback URL) on request - * and result events. All callback requests are signed and the signature is included in the - * Authorization header of the request - * - *

By using following function, you can ensure authentication according to received payload - * from your backend - * - * @param secret Secret token to be used to validate received request. See App's webhook configuration onto dashboard - * @param headers Received headers - * @param jsonPayload Received payload - * @return Is authentication is validated (true) or not (false) - *

see online - * documentation - * @since 1.3 - */ - boolean validateAuthenticationHeader( - String secret, Map headers, String jsonPayload); - - /** - * This function can be called to deserialize received payload onto callback onto proper java - * verification event class - * - * @param jsonPayload Received payload to be deserialized - * @return The verification event instance class - *

see triggered - * events - * @since 1.3 - */ - ConversationWebhookEvent parseEvent(String jsonPayload) throws ApiMappingException; - - /** - * List all webhooks for a given app as specified by the App ID. - * - * @param appId The unique ID of the app - * @return List of defined webhooks - * @since 1.3 - */ - Collection list(String appId); - - /** - * Get a webhook as specified by the webhook ID. - * - * @param webhookId The unique ID of the webhook. - * @return Webhook definition - * @since 1.3 - */ - Webhook get(String webhookId); - - /** - * Creates a webhook for receiving callbacks on specific triggers - * - * @param webhook Webhook parameter for creation - * @return Created webhook - * @since 1.3 - */ - Webhook create(Webhook webhook); - - /** - * Updates an existing webhook as specified by the webhook ID. - * - * @param webhookId The unique ID of the webhook. - * @param webhook Webhook parameter for creation - * @return Created webhook - * @since 1.3 - */ - Webhook update(String webhookId, Webhook webhook); - - /** - * Deletes a webhook as specified by the webhook ID - * - * @param webhookId The unique ID of the webhook. - * @since 1.3 - */ - void delete(String webhookId); -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/AppService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/AppService.java deleted file mode 100644 index cbd5354b7..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/AppService.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1.adapters; - -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.HttpMapper; -import com.sinch.sdk.domains.conversation.api.v1.internal.AppApi; -import com.sinch.sdk.domains.conversation.models.v1.app.request.AppCreateRequest; -import com.sinch.sdk.domains.conversation.models.v1.app.request.AppUpdateRequest; -import com.sinch.sdk.domains.conversation.models.v1.app.response.AppResponse; -import com.sinch.sdk.models.ConversationContext; -import java.util.Collection; -import java.util.Map; - -public class AppService implements com.sinch.sdk.domains.conversation.api.v1.AppService { - - private final String uriUUID; - private final AppApi api; - - public AppService( - String uriUUID, - ConversationContext context, - HttpClient httpClient, - Map authManagers) { - this.uriUUID = uriUUID; - this.api = new AppApi(httpClient, context.getServer(), authManagers, HttpMapper.getInstance()); - } - - protected AppApi getApi() { - return this.api; - } - - public Collection list() throws ApiException { - return getApi().appListApps(uriUUID).getApps(); - } - - public AppResponse get(String appId) { - return getApi().appGetApp(uriUUID, appId); - } - - public void delete(String appId) { - getApi().appDeleteApp(uriUUID, appId); - } - - public AppResponse create(AppCreateRequest parameters) { - - return getApi().appCreateApp(uriUUID, parameters); - } - - public AppResponse update(String appId, AppUpdateRequest parameters) { - return getApi().appUpdateApp(uriUUID, appId, parameters, null); - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/CapabilityService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/CapabilityService.java deleted file mode 100644 index c11b99dec..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/CapabilityService.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1.adapters; - -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.domains.conversation.api.v1.internal.CapabilityApi; -import com.sinch.sdk.domains.conversation.models.v1.capability.request.QueryCapabilityRequest; -import com.sinch.sdk.domains.conversation.models.v1.capability.response.QueryCapabilityResponse; -import com.sinch.sdk.models.ConversationContext; -import java.util.Map; - -public class CapabilityService - implements com.sinch.sdk.domains.conversation.api.v1.CapabilityService { - - private final String uriUUID; - private final CapabilityApi api; - - public CapabilityService( - String uriUUID, - ConversationContext context, - HttpClient httpClient, - Map authManagers) { - this.uriUUID = uriUUID; - this.api = - new CapabilityApi(httpClient, context.getServer(), authManagers, HttpMapper.getInstance()); - } - - protected CapabilityApi getApi() { - return this.api; - } - - public QueryCapabilityResponse lookup(QueryCapabilityRequest request) { - return getApi().capabilityQueryCapability(uriUUID, request); - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ContactService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ContactService.java deleted file mode 100644 index f6d1ef98d..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ContactService.java +++ /dev/null @@ -1,147 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1.adapters; - -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.HttpMapper; -import com.sinch.sdk.core.models.pagination.Page; -import com.sinch.sdk.core.models.pagination.TokenPageNavigator; -import com.sinch.sdk.core.utils.Pair; -import com.sinch.sdk.domains.conversation.api.v1.internal.ContactApi; -import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; -import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactCreateRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactGetChannelProfileByChannelIdentityRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactGetChannelProfileByContactIdRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactListRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.GetChannelProfileRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.IdentityConflictsListRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.MergeContactRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.ContactListResponse; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.IdentityConflicts; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.IdentityConflictsListResponse; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.ListContactsResponse; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.ListIdentityConflictsResponse; -import com.sinch.sdk.models.ConversationContext; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -public class ContactService implements com.sinch.sdk.domains.conversation.api.v1.ContactService { - - private final String uriUUID; - private final ContactApi api; - private final Collection supportedChannelForGetProfile = - Arrays.asList( - ConversationChannel.INSTAGRAM, ConversationChannel.MESSENGER, ConversationChannel.LINE); - - public ContactService( - String uriUUID, - ConversationContext context, - HttpClient httpClient, - Map authManagers) { - this.uriUUID = uriUUID; - this.api = - new ContactApi(httpClient, context.getServer(), authManagers, HttpMapper.getInstance()); - } - - protected ContactApi getApi() { - return this.api; - } - - public ContactListResponse list(ContactListRequest client) throws ApiException { - - // guard against null value to start with a default request parameters set - if (null == client) { - client = ContactListRequest.builder(null).build(); - } - - String externalId = client.getExternalId().orElse(null); - ConversationChannel channel = client.getChannel().orElse(null); - String identity = client.getIdentity().orElse(null); - - Integer pageSize = client.getPageSize().orElse(null); - String pageToken = client.getPageToken().orElse(null); - - ListContactsResponse response = - getApi().contactListContacts(uriUUID, pageSize, pageToken, externalId, channel, identity); - - String nextPageToken = response.getNextPageToken(); - List list = response.getContacts(); - Collection pageContent = null != list ? list : Collections.emptyList(); - Pair, TokenPageNavigator> content = - new Pair<>(pageContent, TokenPageNavigator.valueOf(nextPageToken)); - return new ContactListResponse(this, new Page<>(client, content.getLeft(), content.getRight())); - } - - public Contact get(String contactId) { - return getApi().contactGetContact(uriUUID, contactId); - } - - public Contact create(ContactCreateRequest client) { - return getApi().contactCreateContact(uriUUID, client); - } - - public void delete(String contactId) { - - getApi().contactDeleteContact(uriUUID, contactId); - } - - public Contact update(String contactId, Contact client) { - - return getApi().contactUpdateContact(uriUUID, contactId, client, null); - } - - public Contact mergeContact(String destinationId, String sourceId) { - return getApi() - .contactMergeContact( - uriUUID, destinationId, MergeContactRequest.builder().setSourceId(sourceId).build()); - } - - public String getChannelProfileByContactId(ContactGetChannelProfileByContactIdRequest client) { - - checkGetChannelProfileChannelType(client); - return getApi().contactGetChannelProfile(uriUUID, client).getProfileName(); - } - - public String getChannelProfileByChannelIdentity( - ContactGetChannelProfileByChannelIdentityRequest client) { - - checkGetChannelProfileChannelType(client); - return getApi().contactGetChannelProfile(uriUUID, client).getProfileName(); - } - - private void checkGetChannelProfileChannelType(GetChannelProfileRequest client) { - - if (null != client && !supportedChannelForGetProfile.contains(client.getChannel())) { - throw new IllegalArgumentException( - String.format( - "Invalid channel value '%s'. Channel has to be in list '%s'", - client.getChannel(), supportedChannelForGetProfile)); - } - } - - public IdentityConflictsListResponse listIdentityConflicts(IdentityConflictsListRequest client) { - - // guard against null value to start with a default request parameters set - if (null == client) { - client = IdentityConflictsListRequest.builder(null).build(); - } - - Integer pageSize = client.getPageSize().orElse(null); - String pageToken = client.getPageToken().orElse(null); - - ListIdentityConflictsResponse response = - getApi().listIdentityConflicts(uriUUID, pageSize, pageToken); - - String nextPageToken = response.getNextPageToken(); - List list = response.getConflicts(); - Collection pageContent = null != list ? list : Collections.emptyList(); - Pair, TokenPageNavigator> content = - new Pair<>(pageContent, TokenPageNavigator.valueOf(nextPageToken)); - return new IdentityConflictsListResponse( - this, new Page<>(client, content.getLeft(), content.getRight())); - } -} 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 2ed902e58..4b9cb4670 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,13 +1,21 @@ 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; 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.conversation.api.templates.adapters.TemplatesService; -import com.sinch.sdk.domains.conversation.api.v1.WebHooksService; +import com.sinch.sdk.domains.conversation.api.v1.AppsService; +import com.sinch.sdk.domains.conversation.api.v1.CapabilityService; +import com.sinch.sdk.domains.conversation.api.v1.ContactsService; +import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; +import com.sinch.sdk.domains.conversation.api.v1.EventsService; +import com.sinch.sdk.domains.conversation.api.v1.MessagesService; +import com.sinch.sdk.domains.conversation.api.v1.ProjectSettingsService; +import com.sinch.sdk.domains.conversation.api.v1.TranscodingService; +import com.sinch.sdk.domains.conversation.api.v1.WebhooksService; import com.sinch.sdk.domains.conversation.api.v1.adapters.credentials.LineEnterpriseCredentialsMapper; import com.sinch.sdk.domains.conversation.api.v1.adapters.events.app.AppEventMapper; import com.sinch.sdk.domains.conversation.api.v1.adapters.events.contactmessage.internal.ContactMessageEventMapper; @@ -33,9 +41,11 @@ import com.sinch.sdk.domains.conversation.models.v1.messages.types.internal.ChoiceMessageMapper; import com.sinch.sdk.domains.conversation.models.v1.messages.types.internal.ListMessageInternalMapper; import com.sinch.sdk.domains.conversation.models.v1.messages.types.template.TemplateMessageMapper; +import com.sinch.sdk.domains.conversation.templates.api.adapters.TemplatesService; import com.sinch.sdk.models.ConversationContext; import com.sinch.sdk.models.UnifiedCredentials; import java.util.AbstractMap; +import java.util.Collections; import java.util.Map; import java.util.Objects; import java.util.function.Supplier; @@ -56,15 +66,15 @@ public class ConversationService private final Supplier httpClientSupplier; private volatile Map authManagers; - private volatile AppService app; - private volatile ContactService contact; + private volatile AppsService apps; + private volatile ContactsService contacts; private volatile MessagesService messages; private volatile ConversationsService conversations; private volatile EventsService events; private volatile TranscodingService transcoding; private volatile CapabilityService capability; private volatile ProjectSettingsService projectSettings; - private volatile WebHooksService webhooks; + private volatile WebhooksService webhooks; private volatile TemplatesService templates; static { @@ -84,61 +94,100 @@ public ConversationService( this.oAuthServer = oAuthServer; } - public AppService app() { - if (null == this.app) { - instanceLazyInit(); - this.app = new AppService(uriUUID, context, httpClientSupplier.get(), authManagers); + public AppsService apps() { + if (null == this.apps) { + instanceLazyInit(true); + this.apps = + new AppsServiceImpl( + httpClientSupplier.get(), + context.getServer(), + authManagers, + HttpMapper.getInstance(), + uriUUID); } - return this.app; + return this.apps; } - public ContactService contact() { - if (null == this.contact) { - instanceLazyInit(); - this.contact = new ContactService(uriUUID, context, httpClientSupplier.get(), authManagers); + public ContactsService contacts() { + if (null == this.contacts) { + instanceLazyInit(true); + this.contacts = + new ContactsServiceImpl( + httpClientSupplier.get(), + context.getServer(), + authManagers, + HttpMapper.getInstance(), + uriUUID); } - return this.contact; + return this.contacts; } public MessagesService messages() { if (null == this.messages) { - instanceLazyInit(); - this.messages = new MessagesService(uriUUID, context, httpClientSupplier.get(), authManagers); + instanceLazyInit(true); + this.messages = + new MessagesServiceImpl( + httpClientSupplier.get(), + context.getServer(), + authManagers, + HttpMapper.getInstance(), + uriUUID); } return this.messages; } public ConversationsService conversations() { if (null == this.conversations) { - instanceLazyInit(); + instanceLazyInit(true); this.conversations = - new ConversationsService(uriUUID, context, httpClientSupplier.get(), authManagers); + new ConversationsServiceImpl( + httpClientSupplier.get(), + context.getServer(), + authManagers, + HttpMapper.getInstance(), + uriUUID); } return this.conversations; } public EventsService events() { if (null == this.events) { - instanceLazyInit(); - this.events = new EventsService(uriUUID, context, httpClientSupplier.get(), authManagers); + instanceLazyInit(true); + this.events = + new EventsServiceImpl( + httpClientSupplier.get(), + context.getServer(), + authManagers, + HttpMapper.getInstance(), + uriUUID); } return this.events; } public TranscodingService transcoding() { if (null == this.transcoding) { - instanceLazyInit(); + instanceLazyInit(true); this.transcoding = - new TranscodingService(uriUUID, context, httpClientSupplier.get(), authManagers); + new TranscodingServiceImpl( + httpClientSupplier.get(), + context.getServer(), + authManagers, + HttpMapper.getInstance(), + uriUUID); } return this.transcoding; } public CapabilityService capability() { if (null == this.capability) { - instanceLazyInit(); + instanceLazyInit(true); this.capability = - new CapabilityService(uriUUID, context, httpClientSupplier.get(), authManagers); + new CapabilityServiceImpl( + httpClientSupplier.get(), + context.getServer(), + authManagers, + HttpMapper.getInstance(), + uriUUID); } return this.capability; } @@ -150,30 +199,45 @@ public TemplatesService templates() { return this.templates; } - public WebHooksService webhooks() { + public WebhooksService webhooks() { if (null == this.webhooks) { + instanceLazyInit(false); this.webhooks = - new WebHooksAdaptorService( - uriUUID, context, this::instanceLazyInit, httpClientSupplier, () -> authManagers); + new WebhooksServiceImpl( + httpClientSupplier.get(), + context.getServer(), + authManagers, + HttpMapper.getInstance(), + uriUUID, + new HmacAuthenticationValidation()); } return this.webhooks; } public ProjectSettingsService projectSettings() { if (null == this.projectSettings) { - instanceLazyInit(); + instanceLazyInit(true); this.projectSettings = - new ProjectSettingsService(uriUUID, context, httpClientSupplier.get(), authManagers); + new ProjectSettingsServiceImpl( + httpClientSupplier.get(), + context.getServer(), + authManagers, + HttpMapper.getInstance(), + uriUUID); } return this.projectSettings; } - private void instanceLazyInit() { + private void instanceLazyInit(boolean validateRequired) { if (null != this.authManagers) { return; } synchronized (this) { if (null == this.authManagers) { + if (!validateRequired) { + this.authManagers = Collections.emptyMap(); + return; + } Objects.requireNonNull( credentials, "Conversation service requires credentials to be defined"); Objects.requireNonNull(context, "Conversation service requires context to be defined"); diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationsService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationsService.java deleted file mode 100644 index 2526fea8b..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationsService.java +++ /dev/null @@ -1,149 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1.adapters; - -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.pagination.Page; -import com.sinch.sdk.core.models.pagination.TokenPageNavigator; -import com.sinch.sdk.core.utils.Pair; -import com.sinch.sdk.domains.conversation.api.v1.internal.ConversationApi; -import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; -import com.sinch.sdk.domains.conversation.models.v1.conversation.Conversation; -import com.sinch.sdk.domains.conversation.models.v1.conversation.internal.ListConversationsResponseInternal; -import com.sinch.sdk.domains.conversation.models.v1.conversation.internal.ListConversationsResponseInternalImpl; -import com.sinch.sdk.domains.conversation.models.v1.conversation.internal.ListRecentConversationsResponseInternal; -import com.sinch.sdk.domains.conversation.models.v1.conversation.internal.ListRecentConversationsResponseInternalImpl; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.ConversationsListRecentRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.ConversationsListRecentRequest.OrderEnum; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.ConversationsListRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.CreateConversationRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.InjectEventRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.InjectMessageRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.ConversationRecentMessage; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.ConversationsListRecentResponse; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.ConversationsListResponse; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.InjectEventResponse; -import com.sinch.sdk.domains.conversation.models.v1.request.MetadataUpdateStrategy; -import com.sinch.sdk.models.ConversationContext; -import java.util.Collection; -import java.util.Collections; -import java.util.Map; - -public class ConversationsService - implements com.sinch.sdk.domains.conversation.api.v1.ConversationsService { - - private final String uriUUID; - private final ConversationApi api; - - public ConversationsService( - String uriUUID, - ConversationContext context, - HttpClient httpClient, - Map authManagers) { - this.uriUUID = uriUUID; - this.api = - new ConversationApi( - httpClient, context.getServer(), authManagers, HttpMapper.getInstance()); - } - - protected ConversationApi getApi() { - return this.api; - } - - public Conversation create(CreateConversationRequest request) { - return getApi().conversationCreateConversation(uriUUID, request); - } - - public Conversation get(String conversationId) { - return getApi().conversationGetConversation(uriUUID, conversationId); - } - - public ConversationsListResponse list(ConversationsListRequest parameters) { - - Boolean onlyActive = parameters.getOnlyActive().orElse(null); - String contactId = parameters.getContactId().orElse(null); - String appId = parameters.getAppId().orElse(null); - - Integer pageSize = parameters.getPageSize().orElse(null); - String pageToken = parameters.getPageToken().orElse(null); - ConversationChannel activeChannel = parameters.getActiveChannel().orElse(null); - - ListConversationsResponseInternal response = - getApi() - .conversationListConversations( - uriUUID, appId, contactId, onlyActive, pageSize, pageToken, activeChannel); - - return mapForPaging(parameters, response); - } - - public ConversationsListRecentResponse listRecent(ConversationsListRecentRequest parameters) { - - Boolean onlyActive = parameters.getOnlyActive().orElse(null); - String appId = parameters.getAppId().orElse(null); - - Integer pageSize = parameters.getPageSize().orElse(null); - String pageToken = parameters.getPageToken().orElse(null); - String order = parameters.getOrder().map(OrderEnum::value).orElse(null); - - ListRecentConversationsResponseInternal response = - getApi() - .conversationListRecentConversations( - uriUUID, appId, onlyActive, pageSize, pageToken, order); - - return mapForPaging(parameters, response); - } - - public void stopActive(String conversationId) { - getApi().conversationStopActiveConversation(uriUUID, conversationId); - } - - public void delete(String conversationId) { - getApi().conversationDeleteConversation(uriUUID, conversationId); - } - - public Conversation update( - String conversationId, MetadataUpdateStrategy updateStrategy, Conversation request) { - return getApi() - .conversationUpdateConversation(uriUUID, conversationId, request, null, updateStrategy); - } - - public void injectMessage(String conversationId, InjectMessageRequest request) { - getApi().conversationInjectMessage(uriUUID, conversationId, request); - } - - public InjectEventResponse injectEvent(String conversationId, InjectEventRequest request) { - return getApi().eventsInjectEvent(uriUUID, conversationId, request); - } - - private ConversationsListResponse mapForPaging( - ConversationsListRequest parameters, ListConversationsResponseInternal _dto) { - - ListConversationsResponseInternalImpl dto = (ListConversationsResponseInternalImpl) _dto; - - String nextPageToken = dto.nextPageToken().orElse(null); - Collection list = dto.conversations().orElse(Collections.emptyList()); - - Pair, TokenPageNavigator> paginated = - new Pair<>(list, new TokenPageNavigator(nextPageToken)); - - return new ConversationsListResponse( - this, new Page<>(parameters, paginated.getLeft(), paginated.getRight())); - } - - private ConversationsListRecentResponse mapForPaging( - ConversationsListRecentRequest parameters, ListRecentConversationsResponseInternal _dto) { - - ListRecentConversationsResponseInternalImpl dto = - (ListRecentConversationsResponseInternalImpl) _dto; - - String nextPageToken = dto.nextPageToken().orElse(null); - Collection list = - dto.conversations().orElse(Collections.emptyList()); - - Pair, TokenPageNavigator> paginated = - new Pair<>(list, new TokenPageNavigator(nextPageToken)); - - return new ConversationsListRecentResponse( - this, new Page<>(parameters, paginated.getLeft(), paginated.getRight())); - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/EventsService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/EventsService.java deleted file mode 100644 index f98ee5f40..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/EventsService.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1.adapters; - -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.pagination.Page; -import com.sinch.sdk.core.models.pagination.TokenPageNavigator; -import com.sinch.sdk.core.utils.Pair; -import com.sinch.sdk.domains.conversation.api.v1.internal.EventsApi; -import com.sinch.sdk.domains.conversation.models.v1.events.ConversationEvent; -import com.sinch.sdk.domains.conversation.models.v1.events.internal.ListEventsResponseInternal; -import com.sinch.sdk.domains.conversation.models.v1.events.internal.ListEventsResponseInternalImpl; -import com.sinch.sdk.domains.conversation.models.v1.events.request.EventsListRequest; -import com.sinch.sdk.domains.conversation.models.v1.events.request.SendEventRequest; -import com.sinch.sdk.domains.conversation.models.v1.events.response.EventsListResponse; -import com.sinch.sdk.domains.conversation.models.v1.events.response.SendEventResponse; -import com.sinch.sdk.models.ConversationContext; -import java.util.Collection; -import java.util.Collections; -import java.util.Map; - -public class EventsService implements com.sinch.sdk.domains.conversation.api.v1.EventsService { - - private final String uriUUID; - private final EventsApi api; - - public EventsService( - String uriUUID, - ConversationContext context, - HttpClient httpClient, - Map authManagers) { - this.uriUUID = uriUUID; - this.api = - new EventsApi(httpClient, context.getServer(), authManagers, HttpMapper.getInstance()); - } - - protected EventsApi getApi() { - return this.api; - } - - public SendEventResponse send(SendEventRequest request) { - return getApi().eventsSendEvent(uriUUID, request); - } - - public ConversationEvent get(String eventId) { - return getApi().eventsGetEvent(uriUUID, eventId); - } - - public void delete(String eventId) { - - getApi().eventsDeleteEvents(uriUUID, eventId); - } - - public EventsListResponse list(EventsListRequest request) { - - String conversationId = request.getConversationId().orElse(null); - String contactId = request.getContactId().orElse(null); - Integer pageSize = request.getPageSize().orElse(null); - String pageToken = request.getPageToken().orElse(null); - - ListEventsResponseInternal response = - getApi().eventsListEvents(uriUUID, conversationId, contactId, pageSize, pageToken); - - return mapForPaging(request, response); - } - - private EventsListResponse mapForPaging( - EventsListRequest parameters, ListEventsResponseInternal _dto) { - - ListEventsResponseInternalImpl dto = (ListEventsResponseInternalImpl) _dto; - - String nextPageToken = dto.nextPageToken().orElse(null); - Collection list = dto.events().orElse(Collections.emptyList()); - - Pair, TokenPageNavigator> paginated = - new Pair<>(list, new TokenPageNavigator(nextPageToken)); - - return new EventsListResponse( - this, new Page<>(parameters, paginated.getLeft(), paginated.getRight())); - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/MessagesService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/MessagesService.java deleted file mode 100644 index 765259a92..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/MessagesService.java +++ /dev/null @@ -1,185 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1.adapters; - -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.HttpMapper; -import com.sinch.sdk.core.models.pagination.Page; -import com.sinch.sdk.core.models.pagination.TokenPageNavigator; -import com.sinch.sdk.core.utils.Pair; -import com.sinch.sdk.domains.conversation.api.v1.adapters.messages.ConversationMessageMapper; -import com.sinch.sdk.domains.conversation.api.v1.internal.MessagesApi; -import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; -import com.sinch.sdk.domains.conversation.models.v1.internal.ConversationMessageInternal; -import com.sinch.sdk.domains.conversation.models.v1.messages.AppMessageBody; -import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.internal.ListMessagesResponseInternal; -import com.sinch.sdk.domains.conversation.models.v1.messages.internal.ListMessagesResponseInternalImpl; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.ConversationMessagesView; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessageUpdateRequest; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesListRequest; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.SendMessageRequest; -import com.sinch.sdk.domains.conversation.models.v1.messages.response.MessagesListResponse; -import com.sinch.sdk.domains.conversation.models.v1.messages.response.SendMessageResponse; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.card.CardMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.carousel.CarouselMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.choice.ChoiceMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo.ContactInfoMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.list.ListMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.location.LocationMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.media.MediaMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.template.TemplateMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.types.text.TextMessage; -import com.sinch.sdk.models.ConversationContext; -import java.time.Instant; -import java.util.Collection; -import java.util.Collections; -import java.util.Map; - -public class MessagesService implements com.sinch.sdk.domains.conversation.api.v1.MessagesService { - - private final String uriUUID; - private final MessagesApi api; - - public MessagesService( - String uriUUID, - ConversationContext context, - HttpClient httpClient, - Map authManagers) { - this.uriUUID = uriUUID; - this.api = - new MessagesApi(httpClient, context.getServer(), authManagers, HttpMapper.getInstance()); - } - - protected MessagesApi getApi() { - return this.api; - } - - public SendMessageResponse sendMessage(SendMessageRequest request) - throws ApiException { - return getApi().messagesSendMessage(uriUUID, request); - } - - public SendMessageResponse sendCardMessage(SendMessageRequest request) { - return sendMessage(request); - } - - public SendMessageResponse sendCarouselMessage(SendMessageRequest request) { - return sendMessage(request); - } - - public SendMessageResponse sendChoiceMessage(SendMessageRequest request) { - return sendMessage(request); - } - - public SendMessageResponse sendContactInfoMessage( - SendMessageRequest request) { - return sendMessage(request); - } - - public SendMessageResponse sendListMessage(SendMessageRequest request) { - return sendMessage(request); - } - - public SendMessageResponse sendLocationMessage(SendMessageRequest request) { - return sendMessage(request); - } - - public SendMessageResponse sendMediaMessage(SendMessageRequest request) { - return sendMessage(request); - } - - public SendMessageResponse sendTemplateMessage(SendMessageRequest request) { - return sendMessage(request); - } - - public SendMessageResponse sendTextMessage(SendMessageRequest request) { - return sendMessage(request); - } - - public ConversationMessage get(String messageId) { - return get(messageId, null); - } - - public ConversationMessage get(String messageId, MessageSource messageSource) { - return ConversationMessageMapper.convert( - getApi() - .messagesGetMessage( - uriUUID, messageId, null == messageSource ? null : messageSource.name())); - } - - public MessagesListResponse list(MessagesListRequest parameters) { - - String conversationId = parameters.getConversationId().orElse(null); - String contactId = parameters.getContactId().orElse(null); - String appId = parameters.getAppId().orElse(null); - String channelIdentity = parameters.getChannelIdentity().orElse(null); - Instant startTime = parameters.getStartTime().orElse(null); - Instant endTime = parameters.getEndTime().orElse(null); - Integer pageSize = parameters.getPageSize().orElse(null); - String pageToken = parameters.getPageToken().orElse(null); - ConversationMessagesView view = parameters.getView().orElse(null); - String messagesSource = parameters.getMessagesSource().map(Enum::name).orElse(null); - Boolean onlyRecipientOriginated = parameters.getOnlyRecipientOriginated().orElse(null); - ConversationChannel channel = parameters.getChannel().orElse(null); - - ListMessagesResponseInternal response = - getApi() - .messagesListMessages( - uriUUID, - conversationId, - contactId, - appId, - channelIdentity, - startTime, - endTime, - pageSize, - pageToken, - view, - messagesSource, - onlyRecipientOriginated, - channel); - - return mapForPaging(parameters, response); - } - - public void delete(String messageId) { - delete(messageId, null); - } - - public void delete(String messageId, MessageSource messageSource) { - getApi() - .messagesDeleteMessage( - uriUUID, messageId, null == messageSource ? null : messageSource.name()); - } - - public ConversationMessage update(String messageId, MessageUpdateRequest parameters) { - return update(messageId, null, parameters); - } - - public ConversationMessage update( - String messageId, MessageSource _messageSource, MessageUpdateRequest parameters) { - - String messageSource = null == _messageSource ? null : _messageSource.name(); - - ConversationMessageInternal response = - getApi().messagesUpdateMessageMetadata(uriUUID, messageId, parameters, messageSource); - - return ConversationMessageMapper.convert(response); - } - - private MessagesListResponse mapForPaging( - MessagesListRequest parameters, ListMessagesResponseInternal _dto) { - - ListMessagesResponseInternalImpl dto = (ListMessagesResponseInternalImpl) _dto; - - String nextPageToken = dto.nextPageToken().orElse(null); - Collection list = dto.messages().orElse(Collections.emptyList()); - - Pair, TokenPageNavigator> paginated = - new Pair<>(list, new TokenPageNavigator(nextPageToken)); - - return new MessagesListResponse( - this, new Page<>(parameters, paginated.getLeft(), paginated.getRight())); - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ProjectSettingsService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ProjectSettingsService.java deleted file mode 100644 index c0e3f6822..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ProjectSettingsService.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1.adapters; - -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.domains.conversation.api.v1.internal.ProjectSettingsApi; -import com.sinch.sdk.domains.conversation.models.v1.projectsettings.request.ProjectSettingsRequest; -import com.sinch.sdk.domains.conversation.models.v1.projectsettings.response.ProjectSettingsResponse; -import com.sinch.sdk.models.ConversationContext; -import java.util.Map; - -public class ProjectSettingsService - implements com.sinch.sdk.domains.conversation.api.v1.ProjectSettingsService { - - private final String uriUUID; - private final ProjectSettingsApi api; - - public ProjectSettingsService( - String uriUUID, - ConversationContext context, - HttpClient httpClient, - Map authManagers) { - this.uriUUID = uriUUID; - this.api = - new ProjectSettingsApi( - httpClient, context.getServer(), authManagers, HttpMapper.getInstance()); - } - - protected ProjectSettingsApi getApi() { - return this.api; - } - - @Override - public ProjectSettingsResponse create(ProjectSettingsRequest projectSettingsRequest) { - return getApi().create(uriUUID, projectSettingsRequest); - } - - @Override - public void delete() { - getApi().delete(uriUUID); - } - - @Override - public ProjectSettingsResponse get() { - return getApi().get(uriUUID); - } - - @Override - public ProjectSettingsResponse update(ProjectSettingsRequest projectSettingsRequest) { - return getApi().update(uriUUID, projectSettingsRequest); - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/TranscodingService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/TranscodingService.java deleted file mode 100644 index 171b430aa..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/TranscodingService.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1.adapters; - -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.domains.conversation.api.v1.internal.TranscodingApi; -import com.sinch.sdk.domains.conversation.models.v1.transcoding.request.TranscodeMessageRequest; -import com.sinch.sdk.domains.conversation.models.v1.transcoding.response.TranscodeMessageResponse; -import com.sinch.sdk.models.ConversationContext; -import java.util.Map; - -public class TranscodingService - implements com.sinch.sdk.domains.conversation.api.v1.TranscodingService { - - private final String uriUUID; - private final TranscodingApi api; - - public TranscodingService( - String uriUUID, - ConversationContext context, - HttpClient httpClient, - Map authManagers) { - this.uriUUID = uriUUID; - this.api = - new TranscodingApi(httpClient, context.getServer(), authManagers, HttpMapper.getInstance()); - } - - protected TranscodingApi getApi() { - return this.api; - } - - public TranscodeMessageResponse transcodeMessage(TranscodeMessageRequest request) { - return getApi().transcodingTranscodeMessage(uriUUID, request); - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksAdaptorService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksAdaptorService.java deleted file mode 100644 index 4b91094cd..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksAdaptorService.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1.adapters; - -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; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.ConversationWebhookEvent; -import com.sinch.sdk.models.ConversationContext; -import java.util.Collection; -import java.util.Map; -import java.util.function.Supplier; - -public class WebHooksAdaptorService - implements com.sinch.sdk.domains.conversation.api.v1.WebHooksService { - - private final Runnable instanceLazyInit; - private final Supplier> authManagersSupplier; - private final String uriUUID; - private final ConversationContext context; - private final Supplier httpClientSupplier; - private volatile WebHooksApiService apiService; - private volatile WebHooksCallbackService callbackService; - - public WebHooksAdaptorService( - String uriUUID, - ConversationContext context, - Runnable instanceLazyInit, - Supplier httpClientSupplier, - Supplier> authManagersSupplier) { - this.uriUUID = uriUUID; - this.context = context; - this.instanceLazyInit = instanceLazyInit; - this.httpClientSupplier = httpClientSupplier; - this.authManagersSupplier = authManagersSupplier; - } - - public Collection list(String appId) { - return activateApiService().list(appId); - } - - public Webhook get(String webhookId) { - return activateApiService().get(webhookId); - } - - public Webhook create(Webhook _webhook) { - return activateApiService().create(_webhook); - } - - public Webhook update(String webhookId, Webhook _webhook) { - return activateApiService().update(webhookId, _webhook); - } - - public void delete(String webhookId) { - activateApiService().delete(webhookId); - } - - WebHooksApiService activateApiService() { - - if (null == this.apiService) { - instanceLazyInit.run(); - this.apiService = - new WebHooksApiService( - uriUUID, context, httpClientSupplier.get(), authManagersSupplier.get()); - } - return getApiService(); - } - - protected WebHooksApiService getApiService() { - return this.apiService; - } - - WebHooksCallbackService activateCallbackApiService() { - - if (null == this.callbackService) { - this.callbackService = new WebHooksCallbackService(new HmacAuthenticationValidation()); - } - return callbackService; - } - - public boolean validateAuthenticationHeader( - String secret, Map headers, String jsonPayload) { - return activateCallbackApiService().validateAuthenticationHeader(secret, headers, jsonPayload); - } - - @Override - public ConversationWebhookEvent parseEvent(String jsonPayload) throws ApiMappingException { - return activateCallbackApiService().parseEvent(jsonPayload); - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksApiService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksApiService.java deleted file mode 100644 index 00fa3264e..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksApiService.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1.adapters; - -import com.sinch.sdk.core.exceptions.ApiMappingException; -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.domains.conversation.api.v1.internal.WebhooksApi; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.WebhookImpl; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.ConversationWebhookEvent; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.internal.CreateWebhookRequestInternal; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.response.ListWebhooksResponse; -import com.sinch.sdk.models.ConversationContext; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -public class WebHooksApiService - implements com.sinch.sdk.domains.conversation.api.v1.WebHooksService { - - private final String uriUUID; - private final WebhooksApi api; - - public WebHooksApiService( - String uriUUID, - ConversationContext context, - HttpClient httpClient, - Map authManagers) { - this.uriUUID = uriUUID; - this.api = - new WebhooksApi(httpClient, context.getServer(), authManagers, HttpMapper.getInstance()); - } - - protected WebhooksApi getApi() { - return this.api; - } - - public Collection list(String appId) { - - ListWebhooksResponse response = getApi().webhooksListWebhooks(uriUUID, appId); - - if (null == response) { - return Collections.emptyList(); - } - return response.getWebhooks(); - } - - public Webhook get(String webhookId) { - return getApi().webhooksGetWebhook(uriUUID, webhookId); - } - - public Webhook create(Webhook _webhook) { - - WebhookImpl webhook = (WebhookImpl) _webhook; - CreateWebhookRequestInternal.Builder builder = CreateWebhookRequestInternal.builder(); - - webhook.appId().ifPresent(builder::setAppId); - webhook.clientCredentials().ifPresent(builder::setClientCredentials); - webhook.secret().ifPresent(builder::setSecret); - webhook.target().ifPresent(builder::setTarget); - webhook.targetType().ifPresent(builder::setTargetType); - webhook.triggers().ifPresent(builder::setTriggers); - - return getApi().webhooksCreateWebhook(uriUUID, builder.build()); - } - - public Webhook update(String webhookId, Webhook _webhook) { - - List mask = new ArrayList<>(); - - WebhookImpl webhook = (WebhookImpl) _webhook; - webhook.appId().ifPresent(_unused -> mask.add(WebhookImpl.JSON_PROPERTY_APP_ID)); - webhook - .clientCredentials() - .ifPresent(_unused -> mask.add(WebhookImpl.JSON_PROPERTY_CLIENT_CREDENTIALS)); - webhook.target().ifPresent(_unused -> mask.add(WebhookImpl.JSON_PROPERTY_TARGET)); - webhook.targetType().ifPresent(_unused -> mask.add(WebhookImpl.JSON_PROPERTY_TARGET_TYPE)); - webhook.triggers().ifPresent(_unused -> mask.add(WebhookImpl.JSON_PROPERTY_TRIGGERS)); - webhook.secret().ifPresent(_unused -> mask.add(WebhookImpl.JSON_PROPERTY_SECRET)); - - return getApi().webhooksUpdateWebhook(uriUUID, webhookId, _webhook, mask); - } - - public void delete(String webhookId) { - getApi().webhooksDeleteWebhook(uriUUID, webhookId); - } - - public boolean validateAuthenticationHeader( - String secret, Map headers, String jsonPayload) { - throw new UnsupportedOperationException(); - } - - @Override - public ConversationWebhookEvent parseEvent(String jsonPayload) throws ApiMappingException { - throw new UnsupportedOperationException(); - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksCallbackService.java b/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksCallbackService.java deleted file mode 100644 index 147a65a2f..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksCallbackService.java +++ /dev/null @@ -1,58 +0,0 @@ -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.utils.databind.Mapper; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.ConversationWebhookEvent; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.internal.ConversationEventInternalImpl; -import java.util.Collection; -import java.util.Map; - -public class WebHooksCallbackService - implements com.sinch.sdk.domains.conversation.api.v1.WebHooksService { - - private final HmacAuthenticationValidation authenticationChecker; - - public WebHooksCallbackService(HmacAuthenticationValidation authenticationChecker) { - this.authenticationChecker = authenticationChecker; - } - - public Collection list(String appId) { - throw new UnsupportedOperationException(); - } - - public Webhook get(String webhookId) { - throw new UnsupportedOperationException(); - } - - public Webhook create(Webhook _webhook) { - throw new UnsupportedOperationException(); - } - - public Webhook update(String webhookId, Webhook _webhook) { - throw new UnsupportedOperationException(); - } - - public void delete(String webhookId) { - throw new UnsupportedOperationException(); - } - - public boolean validateAuthenticationHeader( - String secret, Map headers, String jsonPayload) { - - return authenticationChecker.validateAuthenticationHeader(secret, headers, jsonPayload); - } - - @Override - public ConversationWebhookEvent parseEvent(String jsonPayload) throws ApiMappingException { - try { - ConversationEventInternalImpl dto = - Mapper.getInstance().readValue(jsonPayload, ConversationEventInternalImpl.class); - return (ConversationWebhookEvent) dto.getActualInstance(); - } catch (JsonProcessingException e) { - throw new ApiMappingException(jsonPayload, e); - } - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/app/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/package-info.java similarity index 81% rename from client/src/main/com/sinch/sdk/domains/conversation/models/v1/app/package-info.java rename to client/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/package-info.java index 5a9a103b0..c2c807376 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/app/package-info.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/package-info.java @@ -1,5 +1,5 @@ /** - * Conversation models for App + * Conversation models for Apps * *

Apps are created and configured through the Sinch Dashboard, are tied to the API user and come * with a set of channel credentials for each underlying connected channel. @@ -11,4 +11,4 @@ * href="https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/App">App * @since 1.3 */ -package com.sinch.sdk.domains.conversation.models.v1.app; +package com.sinch.sdk.domains.conversation.models.v1.apps; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/app/request/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/request/package-info.java similarity index 72% rename from client/src/main/com/sinch/sdk/domains/conversation/models/v1/app/request/package-info.java rename to client/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/request/package-info.java index 3a6674316..506f51dbd 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/app/request/package-info.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/request/package-info.java @@ -5,4 +5,4 @@ * href="https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/App">App * @since 1.3 */ -package com.sinch.sdk.domains.conversation.models.v1.app.request; +package com.sinch.sdk.domains.conversation.models.v1.apps.request; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/package-info.java similarity index 72% rename from client/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/package-info.java rename to client/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/package-info.java index 0dde08579..23cde4ed5 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/package-info.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/package-info.java @@ -5,4 +5,4 @@ * href="https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/App">App * @since 1.3 */ -package com.sinch.sdk.domains.conversation.models.v1.app.response; +package com.sinch.sdk.domains.conversation.models.v1.apps.response; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ContactListRequest.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ContactListRequest.java deleted file mode 100644 index 8db817647..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ContactListRequest.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact.request; - -import com.sinch.sdk.core.models.OptionalValue; -import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; - -public class ContactListRequest { - - private final OptionalValue externalId; - private final OptionalValue channel; - private final OptionalValue identity; - private final OptionalValue pageSize; - private final OptionalValue pageToken; - - private ContactListRequest( - OptionalValue externalId, - OptionalValue channel, - OptionalValue identity, - OptionalValue pageSize, - OptionalValue pageToken) { - this.externalId = externalId; - this.channel = channel; - this.identity = identity; - this.pageSize = pageSize; - this.pageToken = pageToken; - } - - public static Builder builder() { - return new Builder(); - } - - public static Builder builder(ContactListRequest parameters) { - return new Builder(parameters); - } - - public OptionalValue getExternalId() { - return externalId; - } - - public OptionalValue getChannel() { - return channel; - } - - public OptionalValue getIdentity() { - return identity; - } - - public OptionalValue getPageSize() { - return pageSize; - } - - public OptionalValue getPageToken() { - return pageToken; - } - - public static class Builder { - - OptionalValue externalId = OptionalValue.empty(); - OptionalValue channel = OptionalValue.empty(); - OptionalValue identity = OptionalValue.empty(); - OptionalValue pageSize = OptionalValue.empty(); - OptionalValue pageToken = OptionalValue.empty(); - - private Builder() {} - - private Builder(ContactListRequest parameters) { - if (null == parameters) { - return; - } - parameters.externalId.ifPresent(this::setExternalId); - parameters.channel.ifPresent(this::setChannel); - parameters.identity.ifPresent(this::setIdentity); - parameters.pageSize.ifPresent(this::setPageSize); - parameters.pageToken.ifPresent(this::setPageToken); - } - - public Builder setExternalId(String externalId) { - this.externalId = OptionalValue.of(externalId); - return this; - } - - public Builder setChannel(ConversationChannel channel) { - this.channel = OptionalValue.of(channel); - return this; - } - - public Builder setIdentity(String identity) { - this.identity = OptionalValue.of(identity); - return this; - } - - public Builder setPageSize(Integer pageSize) { - this.pageSize = OptionalValue.of(pageSize); - return this; - } - - public Builder setPageToken(String pageToken) { - this.pageToken = OptionalValue.of(pageToken); - return this; - } - - public ContactListRequest build() { - return new ContactListRequest(externalId, channel, identity, pageSize, pageToken); - } - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/IdentityConflictsListRequest.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/IdentityConflictsListRequest.java deleted file mode 100644 index f2178b3c5..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/IdentityConflictsListRequest.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact.request; - -import com.sinch.sdk.core.models.OptionalValue; - -public class IdentityConflictsListRequest { - - private final OptionalValue pageSize; - private final OptionalValue pageToken; - - private IdentityConflictsListRequest( - OptionalValue pageSize, OptionalValue pageToken) { - this.pageSize = pageSize; - this.pageToken = pageToken; - } - - public static Builder builder() { - return new Builder(); - } - - public static Builder builder(IdentityConflictsListRequest parameters) { - return new Builder(parameters); - } - - public OptionalValue getPageSize() { - return pageSize; - } - - public OptionalValue getPageToken() { - return pageToken; - } - - public static class Builder { - - OptionalValue pageSize = OptionalValue.empty(); - OptionalValue pageToken = OptionalValue.empty(); - - private Builder() {} - - private Builder(IdentityConflictsListRequest parameters) { - if (null == parameters) { - return; - } - parameters.pageSize.ifPresent(this::setPageSize); - parameters.pageToken.ifPresent(this::setPageToken); - } - - public Builder setPageSize(Integer pageSize) { - this.pageSize = OptionalValue.of(pageSize); - return this; - } - - public Builder setPageToken(String pageToken) { - this.pageToken = OptionalValue.of(pageToken); - return this; - } - - public IdentityConflictsListRequest build() { - return new IdentityConflictsListRequest(pageSize, pageToken); - } - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/ContactListResponse.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/ContactListResponse.java deleted file mode 100644 index 9cfc82674..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/ContactListResponse.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact.response; - -import com.sinch.sdk.core.models.pagination.ListResponse; -import com.sinch.sdk.core.models.pagination.Page; -import com.sinch.sdk.core.utils.StringUtil; -import com.sinch.sdk.domains.conversation.api.v1.ContactService; -import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactListRequest; -import java.util.Collection; -import java.util.NoSuchElementException; - -/** - * Lists all contacts - * - * @since 1.0 - */ -public class ContactListResponse extends ListResponse { - - private final Page page; - private final ContactService service; - - /** - * Create paginated list response for Contacts - * - * @param service Service to be used to paginate across responses - * @param page Page content - */ - public ContactListResponse( - ContactService service, Page page) { - this.service = service; - this.page = page; - } - - /** {@inheritDoc} */ - @Override - public boolean hasNextPage() { - return (null != page.getNextPageToken() && !StringUtil.isEmpty(page.getNextPageToken())); - } - - /** {@inheritDoc} */ - @Override - public ContactListResponse nextPage() { - if (!hasNextPage()) { - throw new NoSuchElementException("Reached the last page of the API response"); - } - ContactListRequest.Builder newParameters = ContactListRequest.builder(page.getParameters()); - newParameters.setPageToken(page.getNextPageToken()); - return service.list(newParameters.build()); - } - - /** {@inheritDoc} */ - @Override - public Collection getContent() { - return page.getEntities(); - } - - @Override - public String toString() { - return "ContactListResponse{" + "page=" + page + '}'; - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/IdentityConflictsListResponse.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/IdentityConflictsListResponse.java deleted file mode 100644 index affaac42e..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/IdentityConflictsListResponse.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact.response; - -import com.sinch.sdk.core.models.pagination.ListResponse; -import com.sinch.sdk.core.models.pagination.Page; -import com.sinch.sdk.core.utils.StringUtil; -import com.sinch.sdk.domains.conversation.api.v1.ContactService; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.IdentityConflictsListRequest; -import java.util.Collection; -import java.util.NoSuchElementException; - -/** - * Lists all IdentityConflicts - * - * @since 2.0 - */ -public class IdentityConflictsListResponse extends ListResponse { - - private final Page page; - private final ContactService service; - - /** - * Create paginated list response for IdentityConflicts - * - * @param service Service to be used to paginate across responses - * @param page Page content - */ - public IdentityConflictsListResponse( - ContactService service, Page page) { - this.service = service; - this.page = page; - } - - /** {@inheritDoc} */ - @Override - public boolean hasNextPage() { - return (null != page.getNextPageToken() && !StringUtil.isEmpty(page.getNextPageToken())); - } - - /** {@inheritDoc} */ - @Override - public IdentityConflictsListResponse nextPage() { - if (!hasNextPage()) { - throw new NoSuchElementException("Reached the last page of the API response"); - } - IdentityConflictsListRequest.Builder newParameters = - IdentityConflictsListRequest.builder(page.getParameters()); - newParameters.setPageToken(page.getNextPageToken()); - return service.listIdentityConflicts(newParameters.build()); - } - - /** {@inheritDoc} */ - @Override - public Collection getContent() { - return page.getEntities(); - } - - @Override - public String toString() { - return "IdentityConflictsListResponse{" + "page=" + page + '}'; - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/package-info.java similarity index 91% rename from client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/package-info.java rename to client/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/package-info.java index db4b02355..96d91f908 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/package-info.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/package-info.java @@ -12,4 +12,4 @@ * href="https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/Capability">Capability * @since 1.3 */ -package com.sinch.sdk.domains.conversation.models.v1.contact; +package com.sinch.sdk.domains.conversation.models.v1.contacts; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ContactGetChannelProfileByChannelIdentityRequest.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactGetChannelProfileByChannelIdentityRequest.java similarity index 95% rename from client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ContactGetChannelProfileByChannelIdentityRequest.java rename to client/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactGetChannelProfileByChannelIdentityRequest.java index 20b7aaf8e..f5a4d881b 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ContactGetChannelProfileByChannelIdentityRequest.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactGetChannelProfileByChannelIdentityRequest.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact.request; +package com.sinch.sdk.domains.conversation.models.v1.contacts.request; import com.sinch.sdk.core.models.OptionalValue; import com.sinch.sdk.domains.conversation.models.v1.ChannelRecipientIdentities; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ContactGetChannelProfileByContactIdRequest.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactGetChannelProfileByContactIdRequest.java similarity index 94% rename from client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ContactGetChannelProfileByContactIdRequest.java rename to client/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactGetChannelProfileByContactIdRequest.java index 99c516db7..d1fa9a418 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ContactGetChannelProfileByContactIdRequest.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactGetChannelProfileByContactIdRequest.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact.request; +package com.sinch.sdk.domains.conversation.models.v1.contacts.request; import com.sinch.sdk.core.models.OptionalValue; import com.sinch.sdk.domains.conversation.models.v1.ContactId; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/package-info.java similarity index 72% rename from client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/package-info.java rename to client/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/package-info.java index 946c22ed6..2d3636b78 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/package-info.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/package-info.java @@ -5,4 +5,4 @@ * href="https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/Contact">Contact * @since 1.3 */ -package com.sinch.sdk.domains.conversation.models.v1.contact.request; +package com.sinch.sdk.domains.conversation.models.v1.contacts.request; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/package-info.java similarity index 72% rename from client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/package-info.java rename to client/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/package-info.java index 93b851c49..cebc3a0c4 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/package-info.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/package-info.java @@ -5,4 +5,4 @@ * href="https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/Contact">Contact * @since 1.3 */ -package com.sinch.sdk.domains.conversation.models.v1.contact.response; +package com.sinch.sdk.domains.conversation.models.v1.contacts.response; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/ConversationsListRecentResponse.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/ConversationsListRecentResponse.java deleted file mode 100644 index 308b4ce6d..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/ConversationsListRecentResponse.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.sinch.sdk.domains.conversation.models.v1.conversation.response; - -import com.sinch.sdk.core.models.pagination.ListResponse; -import com.sinch.sdk.core.models.pagination.Page; -import com.sinch.sdk.core.utils.StringUtil; -import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.ConversationsListRecentRequest; -import java.util.Collection; -import java.util.NoSuchElementException; - -/** - * Recent messages and conversation response - * - * @since 1.3 - */ -public class ConversationsListRecentResponse extends ListResponse { - - private final Page page; - private final ConversationsService service; - - public ConversationsListRecentResponse( - ConversationsService service, - Page page) { - this.service = service; - this.page = page; - } - - @Override - public boolean hasNextPage() { - return (null != page.getNextPageToken() && !StringUtil.isEmpty(page.getNextPageToken())); - } - - @Override - public ConversationsListRecentResponse nextPage() { - if (!hasNextPage()) { - throw new NoSuchElementException("Reached the last page of the API response"); - } - ConversationsListRecentRequest.Builder newParameters = - ConversationsListRecentRequest.builder(page.getParameters()); - newParameters.setPageToken(page.getNextPageToken()); - return service.listRecent(newParameters.build()); - } - - @Override - public Collection getContent() { - return page.getEntities(); - } - - @Override - public String toString() { - return "ConversationsListRecentResponse{" + "page=" + page + '}'; - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/ConversationsListResponse.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/ConversationsListResponse.java deleted file mode 100644 index ad605ceed..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/ConversationsListResponse.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.sinch.sdk.domains.conversation.models.v1.conversation.response; - -import com.sinch.sdk.core.models.pagination.ListResponse; -import com.sinch.sdk.core.models.pagination.Page; -import com.sinch.sdk.core.utils.StringUtil; -import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; -import com.sinch.sdk.domains.conversation.models.v1.conversation.Conversation; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.ConversationsListRequest; -import java.util.Collection; -import java.util.NoSuchElementException; - -/** - * Lists all conversations response - * - * @since 1.3 - */ -public class ConversationsListResponse extends ListResponse { - - private final Page page; - private final ConversationsService service; - - public ConversationsListResponse( - ConversationsService service, Page page) { - this.service = service; - this.page = page; - } - - @Override - public boolean hasNextPage() { - return (null != page.getNextPageToken() && !StringUtil.isEmpty(page.getNextPageToken())); - } - - @Override - public ConversationsListResponse nextPage() { - if (!hasNextPage()) { - throw new NoSuchElementException("Reached the last page of the API response"); - } - ConversationsListRequest.Builder newParameters = - ConversationsListRequest.builder(page.getParameters()); - newParameters.setPageToken(page.getNextPageToken()); - return service.list(newParameters.build()); - } - - @Override - public Collection getContent() { - return page.getEntities(); - } - - @Override - public String toString() { - return "ConversationsListResponse{" + "page=" + page + '}'; - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/package-info.java similarity index 98% rename from client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/package-info.java rename to client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/package-info.java index 980f5494f..a6c7b0475 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/package-info.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/package-info.java @@ -7,4 +7,4 @@ * href="https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/Conversation">Conversation * @since 1.3 */ -package com.sinch.sdk.domains.conversation.models.v1.conversation; +package com.sinch.sdk.domains.conversation.models.v1.conversations; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/ConversationsListRecentRequest.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListRecentRequest.java similarity index 99% rename from client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/ConversationsListRecentRequest.java rename to client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListRecentRequest.java index db1f1f60b..161728a7a 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/ConversationsListRecentRequest.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListRecentRequest.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.conversation.request; +package com.sinch.sdk.domains.conversation.models.v1.conversations.request; import com.sinch.sdk.core.utils.EnumDynamic; import com.sinch.sdk.core.utils.EnumSupportDynamic; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/ConversationsListRecentRequestImpl.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListRecentRequestImpl.java similarity index 99% rename from client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/ConversationsListRecentRequestImpl.java rename to client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListRecentRequestImpl.java index 8d7c9169d..5f12d7e46 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/ConversationsListRecentRequestImpl.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListRecentRequestImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.conversation.request; +package com.sinch.sdk.domains.conversation.models.v1.conversations.request; import java.util.Optional; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/ConversationsListRequest.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListRequest.java similarity index 99% rename from client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/ConversationsListRequest.java rename to client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListRequest.java index cbb3d957a..8722c75e5 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/ConversationsListRequest.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListRequest.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.conversation.request; +package com.sinch.sdk.domains.conversation.models.v1.conversations.request; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; import java.util.Optional; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/ConversationsListRequestImpl.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListRequestImpl.java similarity index 99% rename from client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/ConversationsListRequestImpl.java rename to client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListRequestImpl.java index 847e90b9a..54c0ef248 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/ConversationsListRequestImpl.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListRequestImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.conversation.request; +package com.sinch.sdk.domains.conversation.models.v1.conversations.request; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; import java.util.Optional; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectMessageRequest.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectMessageRequest.java similarity index 98% rename from client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectMessageRequest.java rename to client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectMessageRequest.java index 6e3f867e4..52febc8d8 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectMessageRequest.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectMessageRequest.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.conversation.request; +package com.sinch.sdk.domains.conversation.models.v1.conversations.request; import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessageBody; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectMessageRequestImpl.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectMessageRequestImpl.java similarity index 95% rename from client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectMessageRequestImpl.java rename to client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectMessageRequestImpl.java index 8827146a5..17e326180 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectMessageRequestImpl.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectMessageRequestImpl.java @@ -1,11 +1,10 @@ -package com.sinch.sdk.domains.conversation.models.v1.conversation.request; +package com.sinch.sdk.domains.conversation.models.v1.conversations.request; import com.fasterxml.jackson.annotation.JsonIgnore; import com.sinch.sdk.core.models.OptionalValue; import com.sinch.sdk.domains.conversation.models.v1.ChannelIdentity; import com.sinch.sdk.domains.conversation.models.v1.ConversationDirection; import com.sinch.sdk.domains.conversation.models.v1.ProcessingMode; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.InjectMessageRequestBaseImpl.Builder; import com.sinch.sdk.domains.conversation.models.v1.messages.AppMessage; import com.sinch.sdk.domains.conversation.models.v1.messages.ContactMessage; import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessageBody; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/package-info.java similarity index 95% rename from client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/package-info.java rename to client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/package-info.java index 29469b48b..cc066a32c 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/package-info.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/package-info.java @@ -5,4 +5,4 @@ * href="https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/Conversation">Conversation * @since 1.3 */ -package com.sinch.sdk.domains.conversation.models.v1.conversation.request; +package com.sinch.sdk.domains.conversation.models.v1.conversations.request; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/package-info.java similarity index 95% rename from client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/package-info.java rename to client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/package-info.java index d98c352f6..6957cacc8 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/package-info.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/package-info.java @@ -5,4 +5,4 @@ * href="https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/Conversation">Conversation * @since 1.3 */ -package com.sinch.sdk.domains.conversation.models.v1.conversation.response; +package com.sinch.sdk.domains.conversation.models.v1.conversations.response; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/events/request/EventsListRequest.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/events/request/EventsListRequest.java deleted file mode 100644 index 473a4197e..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/events/request/EventsListRequest.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.sinch.sdk.domains.conversation.models.v1.events.request; - -import java.util.Optional; - -/** - * Parameters request to list events - * - * @see online - * documentation - * @since 1.3 - */ -public interface EventsListRequest { - - /** - * Resource name (ID) of the conversation. - * - * @return conversation id - */ - Optional getConversationId(); - - /** - * Resource name (ID) of the contact. - * - *

Note that either app_id or contact_id is required in order for the - * operation to function correctly. - * - * @return contact id - */ - Optional getContactId(); - - /** - * Maximum number of events to fetch. - * - *

Defaults to 10 and the maximum is 20. - * - * @default 10 - * @return Page size - */ - Optional getPageSize(); - - /** - * Next page token previously returned if any. - * - *

When specifying this token, make sure to use the same values for the other parameters from - * the request that originated the token, otherwise the paged results may be inconsistent. - * - * @return Page token - */ - Optional getPageToken(); - - static Builder builder() { - return new EventsListRequestImpl.Builder(); - } - - static Builder builder(EventsListRequest parameters) { - return new EventsListRequestImpl.Builder(parameters); - } - - /** Dedicated Builder */ - interface Builder { - - /** - * see getter - * - * @param conversationId see getter - * @return Current builder - * @see #getConversationId() - */ - Builder setConversationId(String conversationId); - - /** - * see getter - * - * @param contactId see getter - * @return Current builder - * @see #getContactId() - */ - Builder setContactId(String contactId); - - /** - * see getter - * - * @param pageSize see getter - * @return Current builder - * @see #getPageSize() - */ - Builder setPageSize(Integer pageSize); - - /** - * see getter - * - * @param pageToken see getter - * @return Current builder - * @see #getPageToken() - */ - Builder setPageToken(String pageToken); - - EventsListRequest build(); - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/events/request/EventsListRequestImpl.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/events/request/EventsListRequestImpl.java deleted file mode 100644 index 2fd41fd3f..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/events/request/EventsListRequestImpl.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.sinch.sdk.domains.conversation.models.v1.events.request; - -import java.util.Optional; - -public class EventsListRequestImpl implements EventsListRequest { - - final String conversationId; - final String contactId; - final Integer pageSize; - final String pageToken; - - public EventsListRequestImpl( - String conversationId, String contactId, Integer pageSize, String pageToken) { - this.conversationId = conversationId; - this.contactId = contactId; - this.pageSize = pageSize; - this.pageToken = pageToken; - } - - @Override - public Optional getConversationId() { - return Optional.ofNullable(conversationId); - } - - @Override - public Optional getContactId() { - return Optional.ofNullable(contactId); - } - - @Override - public Optional getPageSize() { - return Optional.ofNullable(pageSize); - } - - @Override - public Optional getPageToken() { - return Optional.ofNullable(pageToken); - } - - public static Builder builder() { - return new Builder(); - } - - public static Builder builder(EventsListRequest parameters) { - return new Builder(parameters); - } - - public static class Builder implements EventsListRequest.Builder { - - String conversationId; - String contactId; - Integer pageSize; - String pageToken; - - Builder() {} - - Builder(EventsListRequest parameters) { - - parameters.getConversationId().ifPresent(this::setConversationId); - parameters.getContactId().ifPresent(this::setContactId); - parameters.getPageSize().ifPresent(this::setPageSize); - parameters.getPageToken().ifPresent(this::setPageToken); - } - - @Override - public Builder setConversationId(String conversationId) { - this.conversationId = conversationId; - return this; - } - - @Override - public Builder setContactId(String contactId) { - this.contactId = contactId; - return this; - } - - @Override - public Builder setPageSize(Integer pageSize) { - this.pageSize = pageSize; - return this; - } - - @Override - public Builder setPageToken(String pageToken) { - this.pageToken = pageToken; - return this; - } - - public EventsListRequest build() { - return new EventsListRequestImpl(conversationId, contactId, pageSize, pageToken); - } - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/events/response/EventsListResponse.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/events/response/EventsListResponse.java deleted file mode 100644 index 6b3c22971..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/events/response/EventsListResponse.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.sinch.sdk.domains.conversation.models.v1.events.response; - -import com.sinch.sdk.core.models.pagination.ListResponse; -import com.sinch.sdk.core.models.pagination.Page; -import com.sinch.sdk.core.utils.StringUtil; -import com.sinch.sdk.domains.conversation.api.v1.EventsService; -import com.sinch.sdk.domains.conversation.models.v1.events.ConversationEvent; -import com.sinch.sdk.domains.conversation.models.v1.events.request.EventsListRequest; -import java.util.Collection; -import java.util.NoSuchElementException; - -/** - * Lists all messages response - * - * @since 1.3 - */ -public class EventsListResponse extends ListResponse { - - private final Page page; - private final EventsService service; - - public EventsListResponse( - EventsService service, Page page) { - this.service = service; - this.page = page; - } - - @Override - public boolean hasNextPage() { - return (null != page.getNextPageToken() && !StringUtil.isEmpty(page.getNextPageToken())); - } - - @Override - public EventsListResponse nextPage() { - if (!hasNextPage()) { - throw new NoSuchElementException("Reached the last page of the API response"); - } - EventsListRequest.Builder newParameters = EventsListRequest.builder(page.getParameters()); - newParameters.setPageToken(page.getNextPageToken()); - return service.list(newParameters.build()); - } - - @Override - public Collection getContent() { - return page.getEntities(); - } - - @Override - public String toString() { - return "EventsListResponse{" + "page=" + page + '}'; - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListRequest.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListRequest.java deleted file mode 100644 index d51ebf2a9..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListRequest.java +++ /dev/null @@ -1,239 +0,0 @@ -package com.sinch.sdk.domains.conversation.models.v1.messages.request; - -import com.sinch.sdk.domains.conversation.api.v1.MessagesService.MessageSource; -import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; -import java.time.Instant; -import java.util.Optional; - -/** - * Parameters request to list messages - * - * @see online - * documentation - * @since 1.3 - */ -public interface MessagesListRequest { - - /** - * Resource name (ID) of the conversation. - * - * @return conversation id - */ - Optional getConversationId(); - - /** - * Resource name (ID) of the contact. - * - *

Note that either app_id or contact_id is required in order for the - * operation to function correctly. - * - * @return contact id - */ - Optional getContactId(); - - /** - * Id of the application. - * - *

Note that either app_id or contact_id is required in order for the - * operation to function correctly. - * - * @return application id - */ - Optional getAppId(); - - /** - * Channel identity of the contact. - * - * @return Channel identity - */ - Optional getChannelIdentity(); - - /** - * Filter messages with accept_time after this timestamp. - * - *

Must be before end_time if that is specified. - * - * @return Start time - */ - Optional getStartTime(); - - /** - * Filter messages with accept_time before this timestamp. - * - * @return End time - */ - Optional getEndTime(); - - /** - * Maximum number of messages to fetch. - * - *

Defaults to 10 and the maximum is 1000. - * - * @default 10 - * @return Page size - */ - Optional getPageSize(); - - /** - * Next page token previously returned if any. - * - *

When specifying this token, make sure to use the same values for the other parameters from - * the request that originated the token, otherwise the paged results may be inconsistent. - * - * @return Page token - */ - Optional getPageToken(); - - /** - * @return view - */ - Optional getView(); - - /** - * Specifies the message source for which the request will be processed. Used for operations on - * messages in Dispatch Mode. For more information, see Processing Modes - * - * @default CONVERSATION_SOURCE - * @return Messages sources - */ - Optional getMessagesSource(); - - /** - * If true, fetch only recipient originated messages. Available only when messages_source - * is DISPATCH_SOURCE. - * - * @return only recipient originated value - */ - Optional getOnlyRecipientOriginated(); - - /** - * Only fetch messages from the channel - * - * @return Channel to filtered on - */ - Optional getChannel(); - - static Builder builder() { - return new MessagesListRequestImpl.Builder(); - } - - static Builder builder(MessagesListRequest parameters) { - return new MessagesListRequestImpl.Builder(parameters); - } - - /** Dedicated Builder */ - interface Builder { - - /** - * see getter - * - * @param conversationId see getter - * @return Current builder - * @see #getConversationId() - */ - Builder setConversationId(String conversationId); - - /** - * see getter - * - * @param contactId see getter - * @return Current builder - * @see #getContactId() - */ - Builder setContactId(String contactId); - - /** - * see getter - * - * @param appId see getter - * @return Current builder - * @see #getAppId() - */ - Builder setAppId(String appId); - - /** - * see getter - * - * @param channelIdentity see getter - * @return Current builder - * @see #getChannelIdentity() - */ - Builder setChannelIdentity(String channelIdentity); - - /** - * see getter - * - * @param startTime see getter - * @return Current builder - * @see #setStartTime - */ - Builder setStartTime(Instant startTime); - - /** - * see getter - * - * @param endTime see getter - * @return Current builder - * @see #getEndTime() - */ - Builder setEndTime(Instant endTime); - - /** - * see getter - * - * @param pageSize see getter - * @return Current builder - * @see #getPageSize() - */ - Builder setPageSize(Integer pageSize); - - /** - * see getter - * - * @param pageToken see getter - * @return Current builder - * @see #getPageToken() - */ - Builder setPageToken(String pageToken); - - /** - * see getter - * - * @param view see getter - * @return Current builder - * @see #getView() - */ - Builder setView(ConversationMessagesView view); - - /** - * see getter - * - * @param source see getter - * @return Current builder - * @see #getMessagesSource() - */ - Builder setMessagesSource(MessageSource source); - - /** - * see getter - * - * @param onlyRecipientOriginated see getter - * @return Current builder - * @see #getOnlyRecipientOriginated() - */ - Builder setOnlyRecipientOriginated(Boolean onlyRecipientOriginated); - - /** - * see getter - * - * @param channel see getter - * @return Current builder - * @see #getChannel() - */ - Builder setChannel(ConversationChannel channel); - - MessagesListRequest build(); - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListRequestImpl.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListRequestImpl.java deleted file mode 100644 index b78d19fcb..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListRequestImpl.java +++ /dev/null @@ -1,239 +0,0 @@ -package com.sinch.sdk.domains.conversation.models.v1.messages.request; - -import com.sinch.sdk.domains.conversation.api.v1.MessagesService.MessageSource; -import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; -import java.time.Instant; -import java.util.Optional; - -public class MessagesListRequestImpl implements MessagesListRequest { - - final String conversationId; - final String contactId; - final String appId; - final String channelIdentity; - final Instant startTime; - final Instant endTime; - final Integer pageSize; - final String pageToken; - final ConversationMessagesView view; - final MessageSource messagesSource; - final Boolean onlyRecipientOriginated; - final ConversationChannel channel; - - public MessagesListRequestImpl( - String conversationId, - String contactId, - String appId, - String channelIdentity, - Instant startTime, - Instant endTime, - Integer pageSize, - String pageToken, - ConversationMessagesView view, - MessageSource messagesSource, - Boolean onlyRecipientOriginated, - ConversationChannel channel) { - this.conversationId = conversationId; - this.contactId = contactId; - this.appId = appId; - this.channelIdentity = channelIdentity; - this.startTime = startTime; - this.endTime = endTime; - this.pageSize = pageSize; - this.pageToken = pageToken; - this.view = view; - this.messagesSource = messagesSource; - this.onlyRecipientOriginated = onlyRecipientOriginated; - this.channel = channel; - } - - @Override - public Optional getConversationId() { - return Optional.ofNullable(conversationId); - } - - @Override - public Optional getContactId() { - return Optional.ofNullable(contactId); - } - - @Override - public Optional getAppId() { - return Optional.ofNullable(appId); - } - - @Override - public Optional getChannelIdentity() { - return Optional.ofNullable(channelIdentity); - } - - @Override - public Optional getStartTime() { - return Optional.ofNullable(startTime); - } - - @Override - public Optional getEndTime() { - return Optional.ofNullable(endTime); - } - - @Override - public Optional getPageSize() { - return Optional.ofNullable(pageSize); - } - - @Override - public Optional getPageToken() { - return Optional.ofNullable(pageToken); - } - - @Override - public Optional getView() { - return Optional.ofNullable(view); - } - - @Override - public Optional getMessagesSource() { - return Optional.ofNullable(messagesSource); - } - - @Override - public Optional getOnlyRecipientOriginated() { - return Optional.ofNullable(onlyRecipientOriginated); - } - - @Override - public Optional getChannel() { - return Optional.ofNullable(channel); - } - - public static Builder builder() { - return new Builder(); - } - - public static Builder builder(MessagesListRequest parameters) { - return new Builder(parameters); - } - - public static class Builder implements MessagesListRequest.Builder { - - String conversationId; - String contactId; - String appId; - String channelIdentity; - Instant startTime; - Instant endTime; - Integer pageSize; - String pageToken; - ConversationMessagesView view; - MessageSource messagesSource; - Boolean onlyRecipientOriginated; - ConversationChannel channel; - - Builder() {} - - Builder(MessagesListRequest parameters) { - - parameters.getConversationId().ifPresent(this::setConversationId); - parameters.getContactId().ifPresent(this::setContactId); - parameters.getAppId().ifPresent(this::setAppId); - parameters.getChannelIdentity().ifPresent(this::setChannelIdentity); - parameters.getStartTime().ifPresent(this::setStartTime); - parameters.getEndTime().ifPresent(this::setEndTime); - parameters.getPageSize().ifPresent(this::setPageSize); - parameters.getPageToken().ifPresent(this::setPageToken); - parameters.getView().ifPresent(this::setView); - parameters.getMessagesSource().ifPresent(this::setMessagesSource); - parameters.getOnlyRecipientOriginated().ifPresent(this::setOnlyRecipientOriginated); - parameters.getChannel().ifPresent(this::setChannel); - } - - @Override - public Builder setConversationId(String conversationId) { - this.conversationId = conversationId; - return this; - } - - @Override - public Builder setContactId(String contactId) { - this.contactId = contactId; - return this; - } - - @Override - public Builder setAppId(String appId) { - this.appId = appId; - return this; - } - - @Override - public Builder setChannelIdentity(String channelIdentity) { - this.channelIdentity = channelIdentity; - return this; - } - - @Override - public Builder setStartTime(Instant startTime) { - this.startTime = startTime; - return this; - } - - @Override - public Builder setEndTime(Instant endTime) { - this.endTime = endTime; - return this; - } - - @Override - public Builder setPageSize(Integer pageSize) { - this.pageSize = pageSize; - return this; - } - - @Override - public Builder setPageToken(String pageToken) { - this.pageToken = pageToken; - return this; - } - - @Override - public Builder setView(ConversationMessagesView view) { - this.view = view; - return this; - } - - @Override - public Builder setMessagesSource(MessageSource messagesSource) { - this.messagesSource = messagesSource; - return this; - } - - @Override - public Builder setOnlyRecipientOriginated(Boolean onlyRecipientOriginated) { - this.onlyRecipientOriginated = onlyRecipientOriginated; - return this; - } - - @Override - public Builder setChannel(ConversationChannel channel) { - this.channel = channel; - return this; - } - - public MessagesListRequest build() { - return new MessagesListRequestImpl( - conversationId, - contactId, - appId, - channelIdentity, - startTime, - endTime, - pageSize, - pageToken, - view, - messagesSource, - onlyRecipientOriginated, - channel); - } - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/response/MessagesListResponse.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/response/MessagesListResponse.java deleted file mode 100644 index 81cc23452..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/response/MessagesListResponse.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.sinch.sdk.domains.conversation.models.v1.messages.response; - -import com.sinch.sdk.core.models.pagination.ListResponse; -import com.sinch.sdk.core.models.pagination.Page; -import com.sinch.sdk.core.utils.StringUtil; -import com.sinch.sdk.domains.conversation.api.v1.MessagesService; -import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessage; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesListRequest; -import java.util.Collection; -import java.util.NoSuchElementException; - -/** - * Lists all messages response - * - * @since 1.3 - */ -public class MessagesListResponse extends ListResponse { - - private final Page page; - private final MessagesService service; - - public MessagesListResponse( - MessagesService service, Page page) { - this.service = service; - this.page = page; - } - - @Override - public boolean hasNextPage() { - return (null != page.getNextPageToken() && !StringUtil.isEmpty(page.getNextPageToken())); - } - - @Override - public MessagesListResponse nextPage() { - if (!hasNextPage()) { - throw new NoSuchElementException("Reached the last page of the API response"); - } - MessagesListRequest.Builder newParameters = MessagesListRequest.builder(page.getParameters()); - newParameters.setPageToken(page.getNextPageToken()); - return service.list(newParameters.build()); - } - - @Override - public Collection getContent() { - return page.getEntities(); - } - - @Override - public String toString() { - return "MessagesListResponse{" + "page=" + page + '}'; - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/calendar/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/calendar/package-info.java new file mode 100644 index 000000000..d48370508 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/calendar/package-info.java @@ -0,0 +1,6 @@ +/** + * Calendar message models + * + * @since 1.3 + */ +package com.sinch.sdk.domains.conversation.models.v1.messages.types.calendar; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/buttons/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/buttons/package-info.java new file mode 100644 index 000000000..515b6b254 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/buttons/package-info.java @@ -0,0 +1,6 @@ +/** + * KakaoTalk buttons specific models + * + * @since 1.3 + */ +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.kakaotalk.buttons; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/carousel/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/carousel/package-info.java new file mode 100644 index 000000000..faf91fc07 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/carousel/package-info.java @@ -0,0 +1,6 @@ +/** + * Kakaotalk Carousel message models + * + * @since 1.3 + */ +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.kakaotalk.carousel; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/commerce/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/commerce/package-info.java new file mode 100644 index 000000000..a9e0e15e1 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/commerce/package-info.java @@ -0,0 +1,6 @@ +/** + * KakaoTalk commerce specific models + * + * @since 1.3 + */ +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.kakaotalk.commerce; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/coupons/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/coupons/package-info.java new file mode 100644 index 000000000..884ced743 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/coupons/package-info.java @@ -0,0 +1,6 @@ +/** + * KakaoTalk coupons specific models + * + * @since 1.3 + */ +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.kakaotalk.coupons; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/image/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/image/package-info.java new file mode 100644 index 000000000..7d0e272e7 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/image/package-info.java @@ -0,0 +1,6 @@ +/** + * KakaoTalk image message models + * + * @since 1.3 + */ +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.kakaotalk.image; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/package-info.java new file mode 100644 index 000000000..ece0b0377 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/kakaotalk/package-info.java @@ -0,0 +1,6 @@ +/** + * KakaoTalk channel specific message models + * + * @since 1.3 + */ +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.kakaotalk; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/whatsapp/flows/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/whatsapp/flows/package-info.java index 571e4bf11..0a3aeb2a8 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/whatsapp/flows/package-info.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/whatsapp/flows/package-info.java @@ -1,5 +1,5 @@ /** - * Whatsapp Flow channel specific message message models + * Whatsapp Flow channel specific message models * * @since 1.3 */ diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/whatsapp/payment/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/whatsapp/payment/package-info.java new file mode 100644 index 000000000..3a344aad9 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/whatsapp/payment/package-info.java @@ -0,0 +1,6 @@ +/** + * WhatsApp payment message models + * + * @since 1.3 + */ +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.whatsapp.payment; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/sharelocation/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/sharelocation/package-info.java new file mode 100644 index 000000000..e0d0f0617 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/sharelocation/package-info.java @@ -0,0 +1,6 @@ +/** + * Share location message models + * + * @since 1.3 + */ +package com.sinch.sdk.domains.conversation.models.v1.messages.types.sharelocation; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/projectsettings/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/projectsettings/package-info.java new file mode 100644 index 000000000..0d2360fad --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/projectsettings/package-info.java @@ -0,0 +1,9 @@ +/** + * Conversation models for Project Settings + * + * @see Project + * Settings + * @since 1.3 + */ +package com.sinch.sdk.domains.conversation.models.v1.projectsettings; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/projectsettings/request/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/projectsettings/request/package-info.java new file mode 100644 index 000000000..f90638b74 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/projectsettings/request/package-info.java @@ -0,0 +1,9 @@ +/** + * Request models for Project Settings + * + * @see Project + * Settings + * @since 1.3 + */ +package com.sinch.sdk.domains.conversation.models.v1.projectsettings.request; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/projectsettings/response/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/projectsettings/response/package-info.java new file mode 100644 index 000000000..b040149bf --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/projectsettings/response/package-info.java @@ -0,0 +1,9 @@ +/** + * Response models for Project Settings + * + * @see Project + * Settings + * @since 1.3 + */ +package com.sinch.sdk.domains.conversation.models.v1.projectsettings.response; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/request/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/request/package-info.java new file mode 100644 index 000000000..d93d5e579 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/request/package-info.java @@ -0,0 +1,8 @@ +/** + * Webhooks request models + * + * @see Webhooks + * @since 1.3 + */ +package com.sinch.sdk.domains.conversation.models.v1.webhooks.request; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/templates/api/TemplatesService.java b/client/src/main/com/sinch/sdk/domains/conversation/templates/api/TemplatesService.java new file mode 100644 index 000000000..830c3c9f9 --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/conversation/templates/api/TemplatesService.java @@ -0,0 +1,22 @@ +package com.sinch.sdk.domains.conversation.templates.api; + +import com.sinch.sdk.domains.conversation.templates.api.v2.TemplatesV2Service; + +/** + * Service for working with Conversation templates + * + * @see online + * documentation + * @since 1.3 + */ +public interface TemplatesService { + + /** + * Service for working with templates V2 + * + * @return Templates V2 service + * @since 1.3 + */ + TemplatesV2Service v2(); +} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/adapters/TemplatesService.java b/client/src/main/com/sinch/sdk/domains/conversation/templates/api/adapters/TemplatesService.java similarity index 86% rename from client/src/main/com/sinch/sdk/domains/conversation/api/templates/adapters/TemplatesService.java rename to client/src/main/com/sinch/sdk/domains/conversation/templates/api/adapters/TemplatesService.java index 820e07e8f..2d0dc7111 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/adapters/TemplatesService.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/templates/api/adapters/TemplatesService.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.api.templates.adapters; +package com.sinch.sdk.domains.conversation.templates.api.adapters; import com.sinch.sdk.auth.adapters.OAuthManager; import com.sinch.sdk.core.http.AuthManager; @@ -6,9 +6,9 @@ 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.conversation.api.templates.adapters.v1.TemplatesServiceV1; -import com.sinch.sdk.domains.conversation.api.templates.adapters.v2.TemplatesServiceV2; import com.sinch.sdk.domains.conversation.api.v1.adapters.ConversationService; +import com.sinch.sdk.domains.conversation.templates.api.v2.TemplatesV2Service; +import com.sinch.sdk.domains.conversation.templates.api.v2.adapters.TemplatesV2ServiceImpl; import com.sinch.sdk.domains.conversation.templates.models.v2.ChannelTemplateOverrideMapper; import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslationMapper; import com.sinch.sdk.models.ConversationContext; @@ -22,7 +22,7 @@ import java.util.stream.Stream; public class TemplatesService - implements com.sinch.sdk.domains.conversation.api.templates.TemplatesService { + implements com.sinch.sdk.domains.conversation.templates.api.TemplatesService { private static final Logger LOGGER = Logger.getLogger(TemplatesService.class.getName()); private static final String SECURITY_SCHEME_KEYWORD_ = "oAuth2"; @@ -35,8 +35,7 @@ public class TemplatesService private final Supplier httpClientSupplier; private volatile Map authManagers; - private volatile TemplatesServiceV1 v1; - private volatile TemplatesServiceV2 v2; + private volatile TemplatesV2Service v2; static { LocalLazyInit.init(); @@ -55,18 +54,16 @@ public TemplatesService( this.httpClientSupplier = httpClientSupplier; } - public TemplatesServiceV1 v1() { - if (null == this.v1) { - instanceLazyInit(); - this.v1 = new TemplatesServiceV1(uriUUID, context, httpClientSupplier.get(), authManagers); - } - return this.v1; - } - - public TemplatesServiceV2 v2() { + public TemplatesV2Service v2() { if (null == this.v2) { instanceLazyInit(); - this.v2 = new TemplatesServiceV2(uriUUID, context, httpClientSupplier.get(), authManagers); + this.v2 = + new TemplatesV2ServiceImpl( + httpClientSupplier.get(), + context.getTemplateManagementServer(), + authManagers, + HttpMapper.getInstance(), + this.uriUUID); } return this.v2; } diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/templates/api/package-info.java similarity index 76% rename from client/src/main/com/sinch/sdk/domains/conversation/api/templates/package-info.java rename to client/src/main/com/sinch/sdk/domains/conversation/templates/api/package-info.java index fe4ba06a1..948304b1f 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/package-info.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/templates/api/package-info.java @@ -5,4 +5,4 @@ * Templates * @since 1.3 */ -package com.sinch.sdk.domains.conversation.api.templates; +package com.sinch.sdk.domains.conversation.templates.api; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/v2/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/templates/api/v2/package-info.java similarity index 55% rename from client/src/main/com/sinch/sdk/domains/conversation/api/templates/v2/package-info.java rename to client/src/main/com/sinch/sdk/domains/conversation/templates/api/v2/package-info.java index 9c16e3c54..f06d2bdc1 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/api/templates/v2/package-info.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/templates/api/v2/package-info.java @@ -1,8 +1,8 @@ /** * Conversation API interface for templates V2 management * - * @see Conversation - * Templates V2 + * @see Conversation + * Templates * @since 1.3 */ -package com.sinch.sdk.domains.conversation.api.templates.v2; +package com.sinch.sdk.domains.conversation.templates.api.v2; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/package-info.java deleted file mode 100644 index a85b66cc3..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/package-info.java +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Conversation models for templates V1 - * - * @see Templates - * V1 - * @since 1.3 - * @deprecated Use {@link com.sinch.sdk.domains.conversation.templates.models.v2} instead. - */ -package com.sinch.sdk.domains.conversation.templates.models.v1; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/request/TranslationListRequest.java b/client/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/request/TranslationListRequest.java deleted file mode 100644 index 1357bc47e..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/request/TranslationListRequest.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.sinch.sdk.domains.conversation.templates.models.v2.request; - -import java.util.Optional; - -/** - * Parameters request to list translation relate to a template - * - * @see online - * documentation - * @since 1.3 - */ -public interface TranslationListRequest { - - /** - * The translation's language code. - * - * @return Language code. - */ - Optional getLanguageCode(); - - /** - * The translation's version - * - * @return Translation's version - */ - Optional getTranslationVersion(); - - static Builder builder() { - return new TranslationListRequestImpl.Builder(); - } - - interface Builder { - - /** - * see getter - * - * @param languageCode see getter - * @return Current builder - * @see #getLanguageCode() () - */ - Builder setLanguageCode(String languageCode); - - /** - * see getter - * - * @param translationVersion see getter - * @return Current builder - * @see #getTranslationVersion() () - */ - Builder setTranslationVersion(String translationVersion); - - TranslationListRequest build(); - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/request/TranslationListRequestImpl.java b/client/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/request/TranslationListRequestImpl.java deleted file mode 100644 index a4a3fb55b..000000000 --- a/client/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/request/TranslationListRequestImpl.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.sinch.sdk.domains.conversation.templates.models.v2.request; - -import com.sinch.sdk.domains.conversation.templates.models.v2.request.TranslationListRequest.Builder; -import java.util.Optional; - -public class TranslationListRequestImpl implements TranslationListRequest { - - final String languageCode; - final String translationVersion; - - public TranslationListRequestImpl(String languageCode, String translationVersion) { - this.languageCode = languageCode; - this.translationVersion = translationVersion; - } - - @Override - public Optional getLanguageCode() { - return Optional.ofNullable(languageCode); - } - - @Override - public Optional getTranslationVersion() { - return Optional.ofNullable(translationVersion); - } - - public static Builder builder() { - return new Builder(); - } - - public static class Builder implements TranslationListRequest.Builder { - - String languageCode; - String translationVersion; - - Builder() {} - - @Override - public Builder setLanguageCode(String languageCode) { - this.languageCode = languageCode; - return this; - } - - @Override - public Builder setTranslationVersion(String translationVersion) { - this.translationVersion = translationVersion; - return this; - } - - public TranslationListRequest build() { - return new TranslationListRequestImpl(languageCode, translationVersion); - } - } -} diff --git a/client/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/request/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/request/package-info.java index e47f05d53..cd0e32256 100644 --- a/client/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/request/package-info.java +++ b/client/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/request/package-info.java @@ -1,6 +1,9 @@ /** - * Conversation Templates V2 request models + * Request models for templates V2 * + * @see Templates + * V2 * @since 1.3 */ package com.sinch.sdk.domains.conversation.templates.models.v2.request; diff --git a/client/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/response/package-info.java b/client/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/response/package-info.java new file mode 100644 index 000000000..cfa2114bd --- /dev/null +++ b/client/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/response/package-info.java @@ -0,0 +1,9 @@ +/** + * Response models for templates V2 + * + * @see Templates + * V2 + * @since 1.3 + */ +package com.sinch.sdk.domains.conversation.templates.models.v2.response; diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/CredentialsValidationHelper.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/CredentialsValidationHelper.java index 67bec5848..80b96cfc6 100644 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/CredentialsValidationHelper.java +++ b/client/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/CredentialsValidationHelper.java @@ -6,6 +6,7 @@ import com.sinch.sdk.core.http.HttpClient; import com.sinch.sdk.core.models.ServerConfiguration; +import com.sinch.sdk.domains.conversation.templates.api.adapters.TemplatesService; import com.sinch.sdk.models.ConversationContext; import com.sinch.sdk.models.UnifiedCredentials; import java.util.function.Consumer; diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/TemplateServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/TemplateServiceTest.java index cffaf26dd..423f3a9ea 100644 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/TemplateServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/TemplateServiceTest.java @@ -3,6 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import com.sinch.sdk.core.http.HttpClient; +import com.sinch.sdk.domains.conversation.templates.api.adapters.TemplatesService; import org.junit.jupiter.api.Test; import org.mockito.Mock; @@ -10,11 +11,6 @@ class TemplateServiceTest { @Mock HttpClient httpClient; - @Test - void checkCredentialsV1() { - CredentialsValidationHelper.checkCredentialsTemplates(() -> httpClient, TemplatesService::v1); - } - @Test void checkCredentialsV2() { CredentialsValidationHelper.checkCredentialsTemplates(() -> httpClient, TemplatesService::v2); diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/v1/TemplatesServiceV1Test.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/v1/TemplatesServiceV1Test.java deleted file mode 100644 index cdff473f0..000000000 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/v1/TemplatesServiceV1Test.java +++ /dev/null @@ -1,113 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.templates.adapters.v1; - -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import com.adelean.inject.resources.junit.jupiter.TestWithResources; -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.domains.conversation.api.templates.adapters.TemplatesBaseTest; -import com.sinch.sdk.domains.conversation.models.templates.v1.TemplateV1DtoTest; -import com.sinch.sdk.domains.conversation.models.templates.v1.internal.V1ListTemplatesResponseInternalDtoTest; -import com.sinch.sdk.domains.conversation.templates.api.internal.V1Api; -import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateV1; -import com.sinch.sdk.models.ConversationContext; -import java.util.Collection; -import java.util.Iterator; -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.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Mock; - -@TestWithResources -public class TemplatesServiceV1Test extends TemplatesBaseTest { - - @Mock ConversationContext context; - @Mock V1Api api; - @Mock HttpClient httpClient; - @Mock Map authManagers; - @Captor ArgumentCaptor uriPartIDCaptor; - @Captor ArgumentCaptor idCaptor; - - TemplatesServiceV1 service; - String uriPartID = "foovalue"; - - @BeforeEach - public void initMocks() { - service = spy(new TemplatesServiceV1(uriPartID, context, httpClient, authManagers)); - doReturn(api).when(service).getApi(); - } - - @Test - void create() throws ApiException { - - when(api.templatesCreateTemplate(eq(uriPartID), eq(TemplateV1DtoTest.expectedDto))) - .thenReturn(TemplateV1DtoTest.expectedDto); - - TemplateV1 response = service.create(TemplateV1DtoTest.expectedDto); - - TestHelpers.recursiveEquals(response, TemplateV1DtoTest.expectedDto); - } - - @Test - void get() throws ApiException { - - when(api.templatesGetTemplate(eq(uriPartID), eq(TemplateV1DtoTest.expectedDto.getId()))) - .thenReturn(TemplateV1DtoTest.expectedDto); - - TemplateV1 response = service.get(TemplateV1DtoTest.expectedDto.getId()); - - TestHelpers.recursiveEquals(response, TemplateV1DtoTest.expectedDto); - } - - @Test - void list() throws ApiException { - - when(api.templatesListTemplates(eq(uriPartID))) - .thenReturn(V1ListTemplatesResponseInternalDtoTest.expectedDto); - - Collection response = service.list(); - - Iterator iterator = response.iterator(); - Assertions.assertThat(iterator.hasNext()).isEqualTo(true); - TemplateV1 item = iterator.next(); - TestHelpers.recursiveEquals( - item, V1ListTemplatesResponseInternalDtoTest.expectedDto.getTemplates().get(0)); - Assertions.assertThat(iterator.hasNext()).isEqualTo(false); - } - - @Test - void update() throws ApiException { - - when(api.templatesUpdateTemplate( - eq(uriPartID), - eq(TemplateV1DtoTest.expectedDto.getId()), - eq(TemplateV1DtoTest.expectedDto), - eq(null))) - .thenReturn(TemplateV1DtoTest.expectedDto); - - TemplateV1 response = - service.update(TemplateV1DtoTest.expectedDto.getId(), TemplateV1DtoTest.expectedDto); - - TestHelpers.recursiveEquals(response, TemplateV1DtoTest.expectedDto); - } - - @Test - void delete() throws ApiException { - - service.delete(TemplateV1DtoTest.expectedDto.getId()); - - verify(api).templatesDeleteTemplate(uriPartIDCaptor.capture(), idCaptor.capture()); - - Assertions.assertThat(uriPartIDCaptor.getValue()).isEqualTo(uriPartID); - Assertions.assertThat(idCaptor.getValue()).isEqualTo(TemplateV1DtoTest.expectedDto.getId()); - } -} diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/v2/TemplatesServiceV2Test.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/v2/TemplatesServiceV2Test.java deleted file mode 100644 index 7c452f099..000000000 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/v2/TemplatesServiceV2Test.java +++ /dev/null @@ -1,144 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.templates.adapters.v2; - -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import com.adelean.inject.resources.junit.jupiter.TestWithResources; -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.domains.conversation.api.templates.adapters.TemplatesBaseTest; -import com.sinch.sdk.domains.conversation.models.templates.v2.TemplateV2DtoTest; -import com.sinch.sdk.domains.conversation.models.templates.v2.internal.V2ListTemplatesResponseInternalDtoTest; -import com.sinch.sdk.domains.conversation.models.templates.v2.internal.V2ListTranslationsResponseInternalDtoTest; -import com.sinch.sdk.domains.conversation.templates.api.internal.V2Api; -import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslation; -import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2; -import com.sinch.sdk.domains.conversation.templates.models.v2.request.TranslationListRequest; -import com.sinch.sdk.models.ConversationContext; -import java.util.Collection; -import java.util.Iterator; -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.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Mock; - -@TestWithResources -public class TemplatesServiceV2Test extends TemplatesBaseTest { - - @Mock ConversationContext context; - @Mock V2Api api; - @Mock HttpClient httpClient; - @Mock Map authManagers; - @Captor ArgumentCaptor uriPartIDCaptor; - @Captor ArgumentCaptor idCaptor; - - TemplatesServiceV2 service; - String uriPartID = "foovalue"; - - @BeforeEach - public void initMocks() { - service = spy(new TemplatesServiceV2(uriPartID, context, httpClient, authManagers)); - doReturn(api).when(service).getApi(); - } - - @Test - void create() throws ApiException { - - when(api.templatesV2CreateTemplate(eq(uriPartID), eq(TemplateV2DtoTest.expectedRequestDto))) - .thenReturn(TemplateV2DtoTest.expectedRequestDto); - - TemplateV2 response = service.create(TemplateV2DtoTest.expectedRequestDto); - - TestHelpers.recursiveEquals(response, TemplateV2DtoTest.expectedRequestDto); - } - - @Test - void get() throws ApiException { - - when(api.templatesV2GetTemplate( - eq(uriPartID), eq(TemplateV2DtoTest.expectedRequestDto.getId()))) - .thenReturn(TemplateV2DtoTest.expectedRequestDto); - - TemplateV2 response = service.get(TemplateV2DtoTest.expectedRequestDto.getId()); - - TestHelpers.recursiveEquals(response, TemplateV2DtoTest.expectedRequestDto); - } - - @Test - void list() throws ApiException { - - when(api.templatesV2ListTemplates(eq(uriPartID))) - .thenReturn(V2ListTemplatesResponseInternalDtoTest.expectedDto); - - Collection response = service.list(); - - Iterator iterator = response.iterator(); - Assertions.assertThat(iterator.hasNext()).isEqualTo(true); - TemplateV2 item = iterator.next(); - TestHelpers.recursiveEquals( - item, V2ListTemplatesResponseInternalDtoTest.expectedDto.getTemplates().get(0)); - Assertions.assertThat(iterator.hasNext()).isEqualTo(false); - } - - @Test - void listTranslations() throws ApiException { - - when(api.templatesV2ListTranslations( - eq(uriPartID), - eq(TemplateV2DtoTest.expectedRequestDto.getId()), - eq("language code"), - eq("translation version"))) - .thenReturn(V2ListTranslationsResponseInternalDtoTest.expectedDto); - - Collection response = - service.listTranslations( - TemplateV2DtoTest.expectedRequestDto.getId(), - TranslationListRequest.builder() - .setLanguageCode("language code") - .setTranslationVersion("translation version") - .build()); - - Iterator iterator = response.iterator(); - Assertions.assertThat(iterator.hasNext()).isEqualTo(true); - TemplateTranslation item = iterator.next(); - TestHelpers.recursiveEquals( - item, V2ListTranslationsResponseInternalDtoTest.expectedDto.getTranslations().get(0)); - Assertions.assertThat(iterator.hasNext()).isEqualTo(false); - } - - @Test - void update() throws ApiException { - - when(api.templatesV2UpdateTemplate( - eq(uriPartID), - eq(TemplateV2DtoTest.expectedRequestDto.getId()), - eq(TemplateV2DtoTest.expectedRequestDto))) - .thenReturn(TemplateV2DtoTest.expectedRequestDto); - - TemplateV2 response = - service.update( - TemplateV2DtoTest.expectedRequestDto.getId(), TemplateV2DtoTest.expectedRequestDto); - - TestHelpers.recursiveEquals(response, TemplateV2DtoTest.expectedRequestDto); - } - - @Test - void delete() throws ApiException { - - service.delete(TemplateV2DtoTest.expectedRequestDto.getId()); - - verify(api).templatesV2DeleteTemplate(uriPartIDCaptor.capture(), idCaptor.capture()); - - Assertions.assertThat(uriPartIDCaptor.getValue()).isEqualTo(uriPartID); - Assertions.assertThat(idCaptor.getValue()) - .isEqualTo(TemplateV2DtoTest.expectedRequestDto.getId()); - } -} diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/v2/TemplatesV2ServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/v2/TemplatesV2ServiceTest.java new file mode 100644 index 000000000..9e2dd1657 --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/v2/TemplatesV2ServiceTest.java @@ -0,0 +1,325 @@ +package com.sinch.sdk.domains.conversation.api.templates.adapters.v2; + +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.GivenTextResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +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.core.models.pagination.Page; +import com.sinch.sdk.domains.conversation.templates.api.adapters.TemplatesBaseTest; +import com.sinch.sdk.domains.conversation.templates.api.v2.TemplatesV2Service; +import com.sinch.sdk.domains.conversation.templates.api.v2.adapters.TemplatesV2ServiceImpl; +import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslation; +import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2; +import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2DtoTest; +import com.sinch.sdk.domains.conversation.templates.models.v2.request.ListTranslationsQueryParameters; +import com.sinch.sdk.domains.conversation.templates.models.v2.response.TemplatesV2ListResponse; +import com.sinch.sdk.domains.conversation.templates.models.v2.response.TemplatesV2ListResponseDtoTest; +import com.sinch.sdk.domains.conversation.templates.models.v2.response.TranslationsV2ListResponse; +import com.sinch.sdk.domains.conversation.templates.models.v2.response.TranslationsV2ListResponseDtoTest; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +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 TemplatesV2ServiceTest extends TemplatesBaseTest { + @Mock HttpClient httpClient; + + @Mock ServerConfiguration serverConfiguration; + @Mock Map authManagers; + + String uriPartID = "foovalue"; + static final Collection AUTH_NAMES = Arrays.asList("Basic", "oAuth2"); + + TemplatesV2Service service; + + @GivenTextResource("/domains/conversation/templates/v2/request/TemplateV2RequestDto.json") + String jsonTemplateV2RequestDto; + + @GivenTextResource("/domains/conversation/templates/v2/TemplateV2Dto.json") + String jsonTemplateV2Dto; + + @GivenTextResource("/domains/conversation/templates/v2/response/TemplatesV2ListResponseDto.json") + String jsonTemplatesV2ListResponseDto; + + @GivenTextResource( + "/domains/conversation/templates/v2/response/TranslationsV2ListResponseDto.json") + String jsonTranslationsV2ListResponseDto; + + @BeforeEach + public void initMocks() { + service = + new TemplatesV2ServiceImpl( + httpClient, serverConfiguration, authManagers, HttpMapper.getInstance(), uriPartID); + } + + @Test + void create() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format("/v2/projects/%s/templates", URLPathUtils.encodePathSegment(uriPartID)), + HttpMethod.POST, + Collections.emptyList(), + jsonTemplateV2RequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonTemplateV2Dto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + TemplateV2 response = service.create(TemplateV2DtoTest.expectedDto); + + TestHelpers.recursiveEquals(response, TemplateV2DtoTest.expectedDto); + } + + @Test + void get() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v2/projects/%s/templates/%s", + URLPathUtils.encodePathSegment(uriPartID), + URLPathUtils.encodePathSegment(TemplateV2DtoTest.expectedDto.getId())), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonTemplateV2Dto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + TemplateV2 response = service.get(TemplateV2DtoTest.expectedDto.getId()); + + TestHelpers.recursiveEquals(response, TemplateV2DtoTest.expectedDto); + } + + @Test + void list() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format("/v2/projects/%s/templates", URLPathUtils.encodePathSegment(uriPartID)), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonTemplatesV2ListResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + TemplatesV2ListResponse response = service.list(); + Iterator iterator = response.iterator(); + + TemplatesV2ListResponse expectedListResponse = + new TemplatesV2ListResponse( + new Page<>(null, TemplatesV2ListResponseDtoTest.expectedDto.getTemplates(), null)); + Iterator expectedIterator = expectedListResponse.iterator(); + + while (iterator.hasNext()) { + TemplateV2 item = iterator.next(); + TemplateV2 expectedItem = expectedIterator.next(); + TestHelpers.recursiveEquals(item, expectedItem); + } + Assertions.assertThat(expectedIterator.hasNext()).isEqualTo(false); + } + + @Test + void listTranslations() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v2/projects/%s/templates/%s/translations", + URLPathUtils.encodePathSegment(uriPartID), + URLPathUtils.encodePathSegment(TemplateV2DtoTest.expectedDto.getId())), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonTranslationsV2ListResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + TranslationsV2ListResponse response = + service.listTranslations(TemplateV2DtoTest.expectedDto.getId()); + Iterator iterator = response.iterator(); + + TranslationsV2ListResponse expectedListResponse = + new TranslationsV2ListResponse( + new Page<>( + null, TranslationsV2ListResponseDtoTest.expectedDto.getTranslations(), null)); + Iterator expectedIterator = expectedListResponse.iterator(); + + while (iterator.hasNext()) { + TemplateTranslation item = iterator.next(); + TemplateTranslation expectedItem = expectedIterator.next(); + TestHelpers.recursiveEquals(item, expectedItem); + } + Assertions.assertThat(expectedIterator.hasNext()).isEqualTo(false); + } + + @Test + void listTranslationsWithParameters() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v2/projects/%s/templates/%s/translations", + URLPathUtils.encodePathSegment(uriPartID), + URLPathUtils.encodePathSegment(TemplateV2DtoTest.expectedDto.getId())), + HttpMethod.GET, + Arrays.asList( + new URLParameter("language_code", "language code", STYLE.FORM, true), + new URLParameter("translation_version", "translation version", STYLE.FORM, true)), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonTranslationsV2ListResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + TranslationsV2ListResponse response = + service.listTranslations( + TemplateV2DtoTest.expectedDto.getId(), + ListTranslationsQueryParameters.builder() + .setLanguageCode("language code") + .setTranslationVersion("translation version") + .build()); + Iterator iterator = response.iterator(); + + TranslationsV2ListResponse expectedListResponse = + new TranslationsV2ListResponse( + new Page<>( + null, TranslationsV2ListResponseDtoTest.expectedDto.getTranslations(), null)); + Iterator expectedIterator = expectedListResponse.iterator(); + + while (iterator.hasNext()) { + TemplateTranslation item = iterator.next(); + TemplateTranslation expectedItem = expectedIterator.next(); + TestHelpers.recursiveEquals(item, expectedItem); + } + Assertions.assertThat(expectedIterator.hasNext()).isEqualTo(false); + } + + @Test + void update() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v2/projects/%s/templates/%s", + URLPathUtils.encodePathSegment(uriPartID), + URLPathUtils.encodePathSegment(TemplateV2DtoTest.expectedDto.getId())), + HttpMethod.PUT, + Collections.emptyList(), + jsonTemplateV2RequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonTemplateV2Dto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + TemplateV2 response = + service.update(TemplateV2DtoTest.expectedDto.getId(), TemplateV2DtoTest.expectedDto); + + TestHelpers.recursiveEquals(response, TemplateV2DtoTest.expectedDto); + } + + @Test + void delete() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v2/projects/%s/templates/%s", + URLPathUtils.encodePathSegment(uriPartID), + URLPathUtils.encodePathSegment(TemplateV2DtoTest.expectedDto.getId())), + HttpMethod.DELETE, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + 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(TemplateV2DtoTest.expectedDto.getId()); + } +} diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/AppServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/AppServiceTest.java deleted file mode 100644 index 28ba2b5e0..000000000 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/AppServiceTest.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1.adapters; - -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; - -import com.adelean.inject.resources.junit.jupiter.TestWithResources; -import com.sinch.sdk.BaseTest; -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.domains.conversation.api.v1.internal.AppApi; -import com.sinch.sdk.domains.conversation.models.v1.AppDtoTest; -import com.sinch.sdk.domains.conversation.models.v1.app.response.AppResponse; -import com.sinch.sdk.models.ConversationContext; -import java.util.Collection; -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 AppServiceTest extends BaseTest { - - @Mock ConversationContext context; - @Mock AppApi api; - @Mock HttpClient httpClient; - @Mock Map authManagers; - - AppService service; - String uriPartID = "foovalue"; - - @BeforeEach - public void initMocks() { - service = spy(new AppService(uriPartID, context, httpClient, authManagers)); - doReturn(api).when(service).getApi(); - } - - @Test - void list() throws ApiException { - - when(api.appListApps(eq(uriPartID))).thenReturn(AppDtoTest.expectedListAppsResponseDto); - - Collection response = service.list(); - - Assertions.assertThat(response) - .usingRecursiveComparison() - .isEqualTo(AppDtoTest.expectedListAppsResponseDto.getApps()); - } - - @Test - void get() throws ApiException { - - when(api.appGetApp(eq(uriPartID), eq(AppDtoTest.expectedAppResponseDto.getId()))) - .thenReturn(AppDtoTest.expectedAppResponseDto); - - AppResponse response = service.get(AppDtoTest.expectedAppResponseDto.getId()); - - Assertions.assertThat(response) - .usingRecursiveComparison() - .isEqualTo(AppDtoTest.expectedAppResponseDto); - } - - @Test - void create() throws ApiException { - - when(api.appCreateApp(eq(uriPartID), eq(AppDtoTest.appCreateRequestDto))) - .thenReturn(AppDtoTest.expectedAppResponseDto); - - AppResponse response = service.create(AppDtoTest.appCreateRequestDto); - - Assertions.assertThat(response) - .usingRecursiveComparison() - .isEqualTo(AppDtoTest.expectedAppResponseDto); - } - - @Test - void update() throws ApiException { - - when(api.appUpdateApp( - eq(uriPartID), - eq(AppDtoTest.expectedAppResponseDto.getId()), - eq(AppDtoTest.appUpdateRequestDto), - eq(null))) - .thenReturn(AppDtoTest.expectedAppResponseDto); - - AppResponse response = - service.update(AppDtoTest.expectedAppResponseDto.getId(), AppDtoTest.appUpdateRequestDto); - - Assertions.assertThat(response) - .usingRecursiveComparison() - .isEqualTo(AppDtoTest.expectedAppResponseDto); - } -} diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/AppsServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/AppsServiceTest.java new file mode 100644 index 000000000..10d4cd51e --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/AppsServiceTest.java @@ -0,0 +1,220 @@ +package com.sinch.sdk.domains.conversation.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.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.URLPathUtils; +import com.sinch.sdk.core.models.ServerConfiguration; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.conversation.api.v1.AppsService; +import com.sinch.sdk.domains.conversation.models.v1.apps.AppDtoTest; +import com.sinch.sdk.domains.conversation.models.v1.apps.response.AppResponse; +import com.sinch.sdk.domains.conversation.models.v1.apps.response.AppsListResponse; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +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 AppsServiceTest extends BaseTest { + + @Mock HttpClient httpClient; + @Mock ServerConfiguration serverConfiguration; + @Mock Map authManagers; + + static final String uriUUID = "foo"; + static final Collection AUTH_NAMES = Arrays.asList("Basic", "oAuth2"); + + AppsService service; + + @GivenTextResource("/domains/conversation/v1/apps/AppListResponseDto.json") + String jsonListAppsResponseDto; + + @GivenTextResource("/domains/conversation/v1/apps/AppResponseDto.json") + String jsonLoadedAppsResponseDto; + + @GivenTextResource("/domains/conversation/v1/apps/AppCreateRequestDto.json") + String jsonAppCreateRequestDto; + + @GivenTextResource("/domains/conversation/v1/apps/AppUpdateRequestDto.json") + String jsonAppUpdateRequestDto; + + @BeforeEach + public void initMocks() { + service = + new AppsServiceImpl( + httpClient, serverConfiguration, authManagers, HttpMapper.getInstance(), uriUUID); + } + + @Test + void list() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/apps", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonListAppsResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + AppsListResponse response = service.list(); + Iterator iterator = response.iterator(); + + AppsListResponse expectedAppsListResponse = + new AppsListResponse( + new Page<>(null, AppDtoTest.expectedListAppsResponseDto.getApps(), null)); + Iterator expectedIterator = expectedAppsListResponse.iterator(); + + while (iterator.hasNext()) { + AppResponse item = iterator.next(); + AppResponse expectedItem = expectedIterator.next(); + TestHelpers.recursiveEquals(item, expectedItem); + } + Assertions.assertThat(expectedIterator.hasNext()).isEqualTo(false); + } + + @Test + void get() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/apps/%s", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment(AppDtoTest.expectedAppResponseDto.getId())), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonLoadedAppsResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + AppResponse response = service.get(AppDtoTest.expectedAppResponseDto.getId()); + + TestHelpers.recursiveEquals(response, AppDtoTest.expectedAppResponseDto); + } + + @Test + void create() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/apps", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.POST, + Collections.emptyList(), + jsonAppCreateRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonLoadedAppsResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + AppResponse response = service.create(AppDtoTest.appCreateRequestDto); + + TestHelpers.recursiveEquals(response, AppDtoTest.expectedAppResponseDto); + } + + @Test + void update() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/apps/%s", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment(AppDtoTest.expectedAppResponseDto.getId())), + HttpMethod.PATCH, + Collections.emptyList(), + jsonAppUpdateRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonLoadedAppsResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + AppResponse response = + service.update(AppDtoTest.expectedAppResponseDto.getId(), AppDtoTest.appUpdateRequestDto); + + TestHelpers.recursiveEquals(response, AppDtoTest.expectedAppResponseDto); + } + + @Test + void delete() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/apps/%s", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment(AppDtoTest.expectedAppResponseDto.getId())), + HttpMethod.DELETE, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + 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(AppDtoTest.expectedAppResponseDto.getId()); + } +} diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/CapabilityServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/CapabilityServiceTest.java index f5f451ecf..0876b2763 100644 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/CapabilityServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/CapabilityServiceTest.java @@ -1,20 +1,30 @@ package com.sinch.sdk.domains.conversation.api.v1.adapters; +import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import com.adelean.inject.resources.junit.jupiter.GivenTextResource; import com.adelean.inject.resources.junit.jupiter.TestWithResources; 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.domains.conversation.api.v1.internal.CapabilityApi; +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.URLPathUtils; +import com.sinch.sdk.core.models.ServerConfiguration; +import com.sinch.sdk.domains.conversation.api.v1.CapabilityService; import com.sinch.sdk.domains.conversation.models.v1.capability.request.QueryCapabilityRequestDtoTest; import com.sinch.sdk.domains.conversation.models.v1.capability.response.QueryCapabilityResponse; import com.sinch.sdk.domains.conversation.models.v1.capability.response.QueryCapabilityResponseDtoTest; -import com.sinch.sdk.models.ConversationContext; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.Map; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -23,26 +33,51 @@ @TestWithResources public class CapabilityServiceTest extends ConversationBaseTest { - @Mock ConversationContext context; - @Mock CapabilityApi api; @Mock HttpClient httpClient; + @Mock ServerConfiguration serverConfiguration; @Mock Map authManagers; + static final String uriUUID = "foo"; + static final Collection AUTH_NAMES = Arrays.asList("Basic", "oAuth2"); + CapabilityService service; - String uriPartID = "foovalue"; + + @GivenTextResource("/domains/conversation/v1/capability/request/QueryCapabilityRequestDto.json") + static String jsonQueryCapabilityRequestDto; + + @GivenTextResource("domains/conversation/v1/capability/response/QueryCapabilityResponseDto.json") + String jsonQueryCapabilityResponseDto; @BeforeEach public void initMocks() { - service = spy(new CapabilityService(uriPartID, context, httpClient, authManagers)); - doReturn(api).when(service).getApi(); + service = + new CapabilityServiceImpl( + httpClient, serverConfiguration, authManagers, HttpMapper.getInstance(), uriUUID); } @Test void lookup() throws ApiException { - when(api.capabilityQueryCapability( - eq(uriPartID), eq(QueryCapabilityRequestDtoTest.queryCapabilityRequestDto))) - .thenReturn(QueryCapabilityResponseDtoTest.expectedQueryCapabilityResponseDto); + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/capability:query", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.POST, + Collections.emptyList(), + jsonQueryCapabilityRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonQueryCapabilityResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); QueryCapabilityResponse response = service.lookup(QueryCapabilityRequestDtoTest.queryCapabilityRequestDto); diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ContactServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ContactServiceTest.java deleted file mode 100644 index 86eaadd5b..000000000 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ContactServiceTest.java +++ /dev/null @@ -1,185 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1.adapters; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; - -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.domains.conversation.api.v1.internal.ContactApi; -import com.sinch.sdk.domains.conversation.models.v1.ChannelRecipientIdentities; -import com.sinch.sdk.domains.conversation.models.v1.ContactId; -import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; -import com.sinch.sdk.domains.conversation.models.v1.contact.ContactDtoTest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactGetChannelProfileByChannelIdentityRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactGetChannelProfileByContactIdRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.MergeContactRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.ContactListResponse; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.IdentityConflicts; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.IdentityConflictsListResponse; -import com.sinch.sdk.models.ConversationContext; -import java.util.Iterator; -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 ContactServiceTest extends BaseTest { - - @Mock ConversationContext context; - @Mock ContactApi api; - @Mock HttpClient httpClient; - @Mock Map authManagers; - - ContactService service; - String uriPartID = "foovalue"; - - @BeforeEach - public void initMocks() { - service = spy(new ContactService(uriPartID, context, httpClient, authManagers)); - doReturn(api).when(service).getApi(); - } - - @Test - void list() throws ApiException { - - when(api.contactListContacts(eq(uriPartID), eq(null), eq(null), eq(null), eq(null), eq(null))) - .thenReturn(ContactDtoTest.expectedContactListResponseDtoPage0); - - when(api.contactListContacts( - eq(uriPartID), eq(null), eq("the next page token value"), eq(null), eq(null), eq(null))) - .thenReturn(ContactDtoTest.expectedContactListResponseDtoPage1); - - ContactListResponse response = service.list(null); - - Iterator iterator = response.iterator(); - Assertions.assertThat(iterator.hasNext()).isEqualTo(true); - Contact item = iterator.next(); - TestHelpers.recursiveEquals(item, ContactDtoTest.expectedContactResponseDto); - - Assertions.assertThat(iterator.hasNext()).isEqualTo(false); - } - - @Test - void create() throws ApiException { - - when(api.contactCreateContact(eq(uriPartID), eq(ContactDtoTest.createContactRequestDto))) - .thenReturn(ContactDtoTest.expectedCreatedContactResponseDto); - - Contact response = service.create(ContactDtoTest.createContactRequestDto); - - TestHelpers.recursiveEquals(response, ContactDtoTest.expectedCreatedContactResponseDto); - } - - @Test - void get() throws ApiException { - - when(api.contactGetContact( - eq(uriPartID), eq(ContactDtoTest.expectedContactResponseDto.getId()))) - .thenReturn(ContactDtoTest.expectedContactResponseDto); - - Contact response = service.get(ContactDtoTest.expectedContactResponseDto.getId()); - - TestHelpers.recursiveEquals(response, ContactDtoTest.expectedContactResponseDto); - } - - @Test - void update() throws ApiException { - - when(api.contactUpdateContact( - eq(uriPartID), - eq(ContactDtoTest.expectedContactResponseDto.getId()), - eq(ContactDtoTest.expectedContactResponseDto), - eq(null))) - .thenReturn(ContactDtoTest.expectedContactResponseDto); - - Contact response = - service.update( - ContactDtoTest.expectedContactResponseDto.getId(), - ContactDtoTest.expectedContactResponseDto); - - TestHelpers.recursiveEquals(response, ContactDtoTest.expectedContactResponseDto); - } - - @Test - void merge() throws ApiException { - - when(api.contactMergeContact( - eq(uriPartID), - eq("foo 1"), - eq(MergeContactRequest.builder().setSourceId("foo 2").build()))) - .thenReturn(ContactDtoTest.expectedContactResponseDto); - - Contact response = service.mergeContact("foo 1", "foo 2"); - - TestHelpers.recursiveEquals(response, ContactDtoTest.expectedContactResponseDto); - } - - @Test - void channelProfileByContactId() throws ApiException { - - when(api.contactGetChannelProfile(eq(uriPartID), any())) - .thenReturn(ContactDtoTest.expectedChannelProfileResponseDto); - - ContactId contactId = - (ContactId) ContactDtoTest.contactGetChannelProfileByContactRequestDto.getRecipient(); - String response = - service.getChannelProfileByContactId( - ContactGetChannelProfileByContactIdRequest.builder() - .setChannel(ContactDtoTest.contactGetChannelProfileByContactRequestDto.getChannel()) - .setContactId(contactId.getContactId()) - .setAppId(ContactDtoTest.contactGetChannelProfileByContactRequestDto.getAppId()) - .build()); - - Assertions.assertThat(response) - .isEqualTo(ContactDtoTest.expectedChannelProfileResponseDto.getProfileName()); - } - - @Test - void channelProfileByChannelIdentity() throws ApiException { - - when(api.contactGetChannelProfile(eq(uriPartID), any())) - .thenReturn(ContactDtoTest.expectedChannelProfileResponseDto); - - ChannelRecipientIdentities channelIdentities = - (ChannelRecipientIdentities) - ContactDtoTest.contactGetChannelProfileByChannelRequestDto.getRecipient(); - String response = - service.getChannelProfileByChannelIdentity( - ContactGetChannelProfileByChannelIdentityRequest.builder() - .setChannelIdentities(channelIdentities) - .setChannel(ContactDtoTest.contactGetChannelProfileByChannelRequestDto.getChannel()) - .setAppId(ContactDtoTest.contactGetChannelProfileByChannelRequestDto.getAppId()) - .build()); - - Assertions.assertThat(response) - .isEqualTo(ContactDtoTest.expectedChannelProfileResponseDto.getProfileName()); - } - - @Test - void listIdentityConflicts() throws ApiException { - - when(api.listIdentityConflicts(eq(uriPartID), eq(null), eq(null))) - .thenReturn(ContactDtoTest.expectedListIdentityConflictsResponseDtoPage0); - - when(api.listIdentityConflicts(eq(uriPartID), eq(null), eq("the next page token value"))) - .thenReturn(ContactDtoTest.expectedListIdentityConflictsResponseDtoPage1); - - IdentityConflictsListResponse response = service.listIdentityConflicts(null); - - Iterator iterator = response.iterator(); - Assertions.assertThat(iterator.hasNext()).isEqualTo(true); - IdentityConflicts item = iterator.next(); - TestHelpers.recursiveEquals(item, ContactDtoTest.expectedIdentityConflictsDto0); - - Assertions.assertThat(iterator.hasNext()).isEqualTo(false); - } -} diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ContactsServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ContactsServiceTest.java new file mode 100644 index 000000000..7ddec8bbe --- /dev/null +++ b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ContactsServiceTest.java @@ -0,0 +1,363 @@ +package com.sinch.sdk.domains.conversation.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.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.conversation.api.v1.ContactsService; +import com.sinch.sdk.domains.conversation.models.v1.ChannelRecipientIdentities; +import com.sinch.sdk.domains.conversation.models.v1.ContactId; +import com.sinch.sdk.domains.conversation.models.v1.contacts.Contact; +import com.sinch.sdk.domains.conversation.models.v1.contacts.ContactDtoTest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactGetChannelProfileByChannelIdentityRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactGetChannelProfileByContactIdRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.response.ContactsListResponse; +import com.sinch.sdk.domains.conversation.models.v1.contacts.response.GetChannelProfileResponse; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +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 ContactsServiceTest extends BaseTest { + + @Mock HttpClient httpClient; + @Mock ServerConfiguration serverConfiguration; + @Mock Map authManagers; + + static final String uriUUID = "foo"; + static final Collection AUTH_NAMES = Arrays.asList("Basic", "oAuth2"); + + ContactsService service; + + @GivenTextResource("/domains/conversation/v1/contacts/ContactListResponseDtoPage0.json") + String jsonContactsListResponseDto1; + + @GivenTextResource("/domains/conversation/v1/contacts/ContactListResponseDtoPage1.json") + String jsonContactsListResponseDto2; + + @GivenTextResource("/domains/conversation/v1/contacts/ContactCreateRequestDto.json") + String jsonContactCreateRequestDto; + + @GivenTextResource("/domains/conversation/v1/contacts/ContactUpdateRequestDto.json") + String jsonContactUpdateRequestDto; + + @GivenTextResource("/domains/conversation/v1/contacts/ContactDto.json") + String jsonContactResponseDto; + + @GivenTextResource("/domains/conversation/v1/contacts/ContactGetChannelResponseDto.json") + String jsonContactGetChannelResponseDto; + + @BeforeEach + public void initMocks() { + service = + new ContactsServiceImpl( + httpClient, serverConfiguration, authManagers, HttpMapper.getInstance(), uriUUID); + } + + @Test + void list() throws ApiException { + + HttpRequest httpRequest1 = + new HttpRequest( + String.format("/v1/projects/%s/contacts", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpRequest httpRequest2 = + new HttpRequest( + String.format("/v1/projects/%s/contacts", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.GET, + Arrays.asList( + new URLParameter("page_token", "the next page token value", STYLE.FORM, true)), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse1 = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonContactsListResponseDto1.getBytes()); + HttpResponse httpResponse2 = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonContactsListResponseDto2.getBytes()); + + 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); + + ContactsListResponse response = service.list(); + + Iterator iterator = response.iterator(); + Assertions.assertThat(iterator.hasNext()).isEqualTo(true); + Contact item = iterator.next(); + TestHelpers.recursiveEquals(item, ContactDtoTest.expectedContactsListItemResponseDto); + + Assertions.assertThat(iterator.hasNext()).isEqualTo(false); + } + + @Test + void create() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/contacts", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.POST, + Collections.emptyList(), + jsonContactCreateRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonContactResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + Contact response = service.create(ContactDtoTest.createContactRequestDto); + + TestHelpers.recursiveEquals(response, ContactDtoTest.expectedContactResponseDto); + } + + @Test + void get() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/contacts/%s", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment( + ContactDtoTest.expectedContactsListItemResponseDto.getId())), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonContactResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + Contact response = service.get(ContactDtoTest.expectedContactsListItemResponseDto.getId()); + + TestHelpers.recursiveEquals(response, ContactDtoTest.expectedContactResponseDto); + } + + @Test + void update() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/contacts/%s", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment(ContactDtoTest.expectedContactResponseDto.getId())), + HttpMethod.PATCH, + Collections.emptyList(), + jsonContactUpdateRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonContactResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + Contact response = + service.update( + ContactDtoTest.expectedContactResponseDto.getId(), + ContactDtoTest.updateContactRequestDto); + + TestHelpers.recursiveEquals(response, ContactDtoTest.expectedContactResponseDto); + } + + @Test + void merge() throws ApiException { + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/contacts/%s:merge", + URLPathUtils.encodePathSegment(uriUUID), URLPathUtils.encodePathSegment("foo 1")), + HttpMethod.POST, + Collections.emptyList(), + HttpMapper.getInstance() + .serialize( + Collections.singletonList(HttpContentType.APPLICATION_JSON), + ContactDtoTest.mergeContactRequestDto), + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonContactResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + Contact response = service.mergeContact("foo 1", ContactDtoTest.mergeContactRequestDto); + + TestHelpers.recursiveEquals(response, ContactDtoTest.expectedContactResponseDto); + } + + @Test + void channelProfileByContactId() throws ApiException { + + ContactId contactId = + (ContactId) ContactDtoTest.contactGetChannelProfileByContactRequestDto.getRecipient(); + + ContactGetChannelProfileByContactIdRequest request = + ContactGetChannelProfileByContactIdRequest.builder() + .setChannel(ContactDtoTest.contactGetChannelProfileByContactRequestDto.getChannel()) + .setContactId(contactId.getContactId()) + .setAppId(ContactDtoTest.contactGetChannelProfileByContactRequestDto.getAppId()) + .build(); + + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/contacts:getChannelProfile", + URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.POST, + Collections.emptyList(), + HttpMapper.getInstance() + .serialize(Collections.singletonList(HttpContentType.APPLICATION_JSON), request), + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonContactGetChannelResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + GetChannelProfileResponse response = service.getChannelProfileByContactId(request); + + TestHelpers.recursiveEquals(response, ContactDtoTest.expectedChannelProfileResponseDto); + } + + @Test + void channelProfileByChannelIdentity() throws ApiException { + + ChannelRecipientIdentities channelIdentities = + (ChannelRecipientIdentities) + ContactDtoTest.contactGetChannelProfileByChannelRequestDto.getRecipient(); + + ContactGetChannelProfileByChannelIdentityRequest request = + ContactGetChannelProfileByChannelIdentityRequest.builder() + .setChannelIdentities(channelIdentities) + .setChannel(ContactDtoTest.contactGetChannelProfileByChannelRequestDto.getChannel()) + .setAppId(ContactDtoTest.contactGetChannelProfileByChannelRequestDto.getAppId()) + .build(); + + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/contacts:getChannelProfile", + URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.POST, + Collections.emptyList(), + HttpMapper.getInstance() + .serialize(Collections.singletonList(HttpContentType.APPLICATION_JSON), request), + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonContactGetChannelResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + GetChannelProfileResponse response = service.getChannelProfileByChannelIdentity(request); + + TestHelpers.recursiveEquals(response, ContactDtoTest.expectedChannelProfileResponseDto); + } + + @Test + void delete() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/contacts/%s", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment(ContactDtoTest.expectedContactResponseDto.getId())), + HttpMethod.DELETE, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + 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(ContactDtoTest.expectedContactResponseDto.getId()); + } +} diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationServiceTest.java index 5098f28d7..6d8fb6fc0 100644 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationServiceTest.java @@ -8,7 +8,7 @@ import com.sinch.sdk.LogRecorder; import com.sinch.sdk.core.http.HttpClient; import com.sinch.sdk.core.models.ServerConfiguration; -import com.sinch.sdk.domains.conversation.api.templates.adapters.TemplatesService; +import com.sinch.sdk.domains.conversation.templates.api.adapters.TemplatesService; import com.sinch.sdk.models.ConversationContext; import com.sinch.sdk.models.ConversationRegion; import com.sinch.sdk.models.UnifiedCredentials; @@ -26,7 +26,7 @@ class ConversationServiceTest { @Test void checkCredentialsApp() { - CredentialsValidationHelper.checkCredentials(() -> httpClient, ConversationService::app); + CredentialsValidationHelper.checkCredentials(() -> httpClient, ConversationService::apps); } @Test @@ -36,7 +36,7 @@ void checkCredentialsCapability() { @Test void checkCredentialsContact() { - CredentialsValidationHelper.checkCredentials(() -> httpClient, ConversationService::contact); + CredentialsValidationHelper.checkCredentials(() -> httpClient, ConversationService::contacts); } @Test @@ -55,6 +55,12 @@ void checkCredentialsMessages() { CredentialsValidationHelper.checkCredentials(() -> httpClient, ConversationService::messages); } + @Test + void checkCredentialsProjectSettings() { + CredentialsValidationHelper.checkCredentials( + () -> httpClient, ConversationService::projectSettings); + } + @Test void checkCredentialsTranscoding() { CredentialsValidationHelper.checkCredentials( @@ -88,7 +94,7 @@ void defaultRegionWarning() { .build(); ServerConfiguration server = new ServerConfiguration("https://oauth.foo.url"); - new ConversationService(credentials, context, server, () -> httpClient).app(); + new ConversationService(credentials, context, server, () -> httpClient).apps(); Optional record = logRecorder.records.stream() @@ -122,7 +128,7 @@ void regionNoWarning() { .build(); ServerConfiguration server = new ServerConfiguration("https://oauth.foo.url"); - new ConversationService(credentials, context, server, () -> httpClient).app(); + new ConversationService(credentials, context, server, () -> httpClient).apps(); Optional record = logRecorder.records.stream() diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationsServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationsServiceTest.java index 00e067784..cb26239b1 100644 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationsServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationsServiceTest.java @@ -1,93 +1,126 @@ package com.sinch.sdk.domains.conversation.api.v1.adapters; +import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; 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.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.domains.conversation.api.v1.internal.ConversationApi; +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.conversation.api.v1.ConversationsService; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; -import com.sinch.sdk.domains.conversation.models.v1.conversation.Conversation; -import com.sinch.sdk.domains.conversation.models.v1.conversation.internal.ListConversationsResponseInternal; -import com.sinch.sdk.domains.conversation.models.v1.conversation.internal.ListRecentConversationsResponseInternal; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.ConversationsListRecentRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.ConversationsListRecentRequest.OrderEnum; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.ConversationsListRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.InjectEventRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.InjectMessageRequestBase; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.ConversationRecentMessage; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.ConversationsListRecentResponse; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.ConversationsListResponse; +import com.sinch.sdk.domains.conversation.models.v1.conversations.Conversation; import com.sinch.sdk.domains.conversation.models.v1.conversations.ConversationDtoTest; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.ConversationsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.ConversationsUpdateQueryParameters; import com.sinch.sdk.domains.conversation.models.v1.conversations.request.CreateConversationRequestTest; import com.sinch.sdk.domains.conversation.models.v1.conversations.request.InjectEventDtoTest; import com.sinch.sdk.domains.conversation.models.v1.conversations.request.InjectMessageDtoTest; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.RecentConversationsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.RecentConversationsListQueryParameters.OrderEnum; +import com.sinch.sdk.domains.conversation.models.v1.conversations.response.ConversationRecentMessage; import com.sinch.sdk.domains.conversation.models.v1.conversations.response.ConversationRecentMessageDtoTest; +import com.sinch.sdk.domains.conversation.models.v1.conversations.response.ConversationsListResponse; +import com.sinch.sdk.domains.conversation.models.v1.conversations.response.RecentConversationsListResponse; import com.sinch.sdk.domains.conversation.models.v1.request.MetadataUpdateStrategy; -import com.sinch.sdk.models.ConversationContext; +import java.util.Arrays; import java.util.Collection; +import java.util.Collections; 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.ArgumentCaptor; -import org.mockito.Captor; import org.mockito.Mock; @TestWithResources public class ConversationsServiceTest extends ConversationBaseTest { - - @Mock ConversationContext context; - @Mock ConversationApi api; @Mock HttpClient httpClient; + @Mock ServerConfiguration serverConfiguration; @Mock Map authManagers; - @Captor ArgumentCaptor projectIdCaptor; - @Captor ArgumentCaptor conversationIdCaptor; - @Captor ArgumentCaptor injectMessageCaptor; - @Captor ArgumentCaptor injectEventCaptor; + + static final String uriUUID = "foo"; + static final Collection AUTH_NAMES = Arrays.asList("Basic", "oAuth2"); ConversationsService service; - String uriPartID = "foovalue"; - @BeforeEach - public void initMocks() { - service = spy(new ConversationsService(uriPartID, context, httpClient, authManagers)); - doReturn(api).when(service).getApi(); - } + @GivenTextResource( + "/domains/conversation/v1/conversations/request/CreateConversationRequestDto.json") + String jsonCreateConversationRequestDto; + + @GivenTextResource("domains/conversation/v1/conversations/ConversationRequestDto.json") + String jsonConversationRequest; - @GivenJsonResource( + @GivenTextResource("domains/conversation/v1/conversations/ConversationResponseDto.json") + String jsonConversationResponse; + + @GivenTextResource( "/domains/conversation/v1/conversations/response/ConversationsListResponse-page-0.json") - ListConversationsResponseInternal conversationsListPage0; + String conversationsListPage0; - @GivenJsonResource( + @GivenTextResource( "/domains/conversation/v1/conversations/response/ConversationsListResponse-page-1.json") - ListConversationsResponseInternal conversationsListPage1; + String conversationsListPage1; - @GivenJsonResource( + @GivenTextResource( "/domains/conversation/v1/conversations/response/ConversationsListResponse-page-2.json") - ListConversationsResponseInternal conversationsListPage2; + String conversationsListPage2; - @GivenJsonResource( + @GivenTextResource( "/domains/conversation/v1/conversations/response/ConversationsListRecentResponse-page-0.json") - ListRecentConversationsResponseInternal conversationsRecentListPage0; + String conversationsRecentListPage0; - @GivenJsonResource( + @GivenTextResource( "/domains/conversation/v1/conversations/response/ConversationsListRecentResponse-page-1.json") - ListRecentConversationsResponseInternal conversationsRecentListPage1; + String conversationsRecentListPage1; + + @GivenTextResource( + "/domains/conversation/v1/conversations/request/InjectContactMessageRequestDto.json") + static String jsonInjectContactMessageRequestDto; + + @GivenTextResource("/domains/conversation/v1/conversations/request/InjectEventRequestDto.json") + static String jsonInjectEventRequestDto; + + @BeforeEach + public void initMocks() { + service = + new ConversationsServiceImpl( + httpClient, serverConfiguration, authManagers, HttpMapper.getInstance(), uriUUID); + } @Test void create() throws ApiException { - when(api.conversationCreateConversation( - eq(uriPartID), eq(CreateConversationRequestTest.createConversationRequestDto))) - .thenReturn(ConversationDtoTest.conversationResponse); + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/conversations", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.POST, + Collections.emptyList(), + jsonCreateConversationRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonConversationResponse.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); Conversation response = service.create(CreateConversationRequestTest.createConversationRequestDto); @@ -98,9 +131,27 @@ void create() throws ApiException { @Test void get() throws ApiException { - when(api.conversationGetConversation( - eq(uriPartID), eq(ConversationDtoTest.conversationRequest.getId()))) - .thenReturn(ConversationDtoTest.conversationResponse); + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/conversations/%s", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment(ConversationDtoTest.conversationRequest.getId())), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonConversationResponse.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); Conversation response = service.get(ConversationDtoTest.conversationRequest.getId()); @@ -110,83 +161,173 @@ void get() throws ApiException { @Test void list() throws ApiException { - when(api.conversationListConversations( - eq(uriPartID), - eq("conversation app Id"), - eq("contact id"), - eq(null), - eq(1), - eq(null), - eq(ConversationChannel.MESSENGER))) - .thenReturn(conversationsListPage0); - - when(api.conversationListConversations( - eq(uriPartID), - eq("conversation app Id"), - eq("contact id"), - eq(null), - eq(1), - eq("ChowMUo1NUVOVERUSFlGQVlKMFE1WFpaSktSVhIaMDFITkIzMzY0UFdCQkcyR1paV1ZWVDNERDI="), - eq(ConversationChannel.MESSENGER))) - .thenReturn(conversationsListPage1); - - when(api.conversationListConversations( - eq(uriPartID), - eq("conversation app Id"), - eq("contact id"), - eq(null), - eq(1), - eq("ChowMUo1NUVBSk1FNDZQMlI4SFIxRjVZRjYxWhIaMDFITkIzMzY0UFdCQkcyR1paV1ZWVDNERDI="), - eq(ConversationChannel.MESSENGER))) - .thenReturn(conversationsListPage2); - ConversationsListRequest request = - ConversationsListRequest.builder() + HttpRequest httpRequest1 = + new HttpRequest( + String.format("/v1/projects/%s/conversations", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.GET, + Arrays.asList( + new URLParameter("app_id", "conversation app Id", STYLE.FORM, true), + new URLParameter("contact_id", "contact id", STYLE.FORM, true), + new URLParameter("page_size", 1, STYLE.FORM, true), + new URLParameter( + "active_channel", ConversationChannel.MESSENGER, STYLE.FORM, true)), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpRequest httpRequest2 = + new HttpRequest( + String.format("/v1/projects/%s/conversations", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.GET, + Arrays.asList( + new URLParameter("app_id", "conversation app Id", STYLE.FORM, true), + new URLParameter("contact_id", "contact id", STYLE.FORM, true), + new URLParameter("page_size", 1, STYLE.FORM, true), + new URLParameter( + "page_token", + "ChowMUo1NUVOVERUSFlGQVlKMFE1WFpaSktSVhIaMDFITkIzMzY0UFdCQkcyR1paV1ZWVDNERDI=", + STYLE.FORM, + true), + new URLParameter( + "active_channel", ConversationChannel.MESSENGER, STYLE.FORM, true)), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpRequest httpRequest3 = + new HttpRequest( + String.format("/v1/projects/%s/conversations", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.GET, + Arrays.asList( + new URLParameter("app_id", "conversation app Id", STYLE.FORM, true), + new URLParameter("contact_id", "contact id", STYLE.FORM, true), + new URLParameter("page_size", 1, STYLE.FORM, true), + new URLParameter( + "page_token", + "ChowMUo1NUVBSk1FNDZQMlI4SFIxRjVZRjYxWhIaMDFITkIzMzY0UFdCQkcyR1paV1ZWVDNERDI=", + STYLE.FORM, + true), + new URLParameter( + "active_channel", ConversationChannel.MESSENGER, STYLE.FORM, true)), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse1 = + new HttpResponse(200, null, Collections.emptyMap(), conversationsListPage0.getBytes()); + HttpResponse httpResponse2 = + new HttpResponse(200, null, Collections.emptyMap(), conversationsListPage1.getBytes()); + HttpResponse httpResponse3 = + new HttpResponse(200, null, Collections.emptyMap(), conversationsListPage2.getBytes()); + + 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); + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest3)))) + .thenReturn(httpResponse3); + + ConversationsListQueryParameters request = + ConversationsListQueryParameters.builder() .setAppId("conversation app Id") .setContactId("contact id") .setPageSize(1) .setActiveChannel(ConversationChannel.MESSENGER) .build(); - ConversationsListResponse response0 = service.list(request); - Collection content = response0.getContent(); + ConversationsListResponse response1 = service.list(request); + Collection content = response1.getContent(); Assertions.assertThat(content.size()).isEqualTo(1); TestHelpers.recursiveEquals( content.stream().findFirst().orElse(null), ConversationDtoTest.conversationResponse); - Assertions.assertThat(response0.hasNextPage()).isEqualTo(true); + Assertions.assertThat(response1.hasNextPage()).isEqualTo(true); - ConversationsListResponse response1 = response0.nextPage(); - content = response1.getContent(); + ConversationsListResponse response2 = response1.nextPage(); + content = response2.getContent(); Assertions.assertThat(content.size()).isEqualTo(1); TestHelpers.recursiveEquals( content.stream().findFirst().orElse(null), ConversationDtoTest.conversationResponse); - Assertions.assertThat(response1.hasNextPage()).isEqualTo(true); + Assertions.assertThat(response2.hasNextPage()).isEqualTo(true); - ConversationsListResponse response2 = response1.nextPage(); - content = response2.getContent(); + ConversationsListResponse response3 = response2.nextPage(); + content = response3.getContent(); Assertions.assertThat(content.size()).isEqualTo(0); - Assertions.assertThat(response2.hasNextPage()).isEqualTo(false); + Assertions.assertThat(response3.hasNextPage()).isEqualTo(false); } @Test void listRecent() throws ApiException { - when(api.conversationListRecentConversations( - eq(uriPartID), eq("conversation app Id"), eq(true), eq(1), eq(null), eq("ASC"))) - .thenReturn(conversationsRecentListPage0); - - when(api.conversationListRecentConversations( - eq(uriPartID), eq("conversation app Id"), eq(true), eq(1), eq("1"), eq("ASC"))) - .thenReturn(conversationsRecentListPage1); - - ConversationsListRecentRequest request = - ConversationsListRecentRequest.builder() + HttpRequest httpRequest1 = + new HttpRequest( + String.format( + "/v1/projects/%s/conversations:recent", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.GET, + Arrays.asList( + new URLParameter("app_id", "conversation app Id", STYLE.FORM, true), + new URLParameter("only_active", true, STYLE.FORM, true), + new URLParameter("page_size", 1, STYLE.FORM, true), + new URLParameter("order", OrderEnum.ASC, STYLE.FORM, true)), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpRequest httpRequest2 = + new HttpRequest( + String.format( + "/v1/projects/%s/conversations:recent", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.GET, + Arrays.asList( + new URLParameter("app_id", "conversation app Id", STYLE.FORM, true), + new URLParameter("only_active", true, STYLE.FORM, true), + new URLParameter("page_size", 1, STYLE.FORM, true), + new URLParameter("page_token", "1", STYLE.FORM, true), + new URLParameter("order", OrderEnum.ASC, STYLE.FORM, true)), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse1 = + new HttpResponse( + 200, null, Collections.emptyMap(), conversationsRecentListPage0.getBytes()); + HttpResponse httpResponse2 = + new HttpResponse( + 200, null, Collections.emptyMap(), conversationsRecentListPage1.getBytes()); + + 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); + + RecentConversationsListQueryParameters request = + RecentConversationsListQueryParameters.builder() .setAppId("conversation app Id") .setOnlyActive(true) .setPageSize(1) .setOrder(OrderEnum.ASC) .build(); - ConversationsListRecentResponse response0 = service.listRecent(request); + RecentConversationsListResponse response0 = service.listRecent(request); Collection content = response0.getContent(); Assertions.assertThat(content.size()).isEqualTo(1); TestHelpers.recursiveEquals( @@ -194,7 +335,7 @@ void listRecent() throws ApiException { ConversationRecentMessageDtoTest.conversationRecentMessage); Assertions.assertThat(response0.hasNextPage()).isEqualTo(true); - ConversationsListRecentResponse response1 = response0.nextPage(); + RecentConversationsListResponse response1 = response0.nextPage(); content = response1.getContent(); Assertions.assertThat(content.size()).isEqualTo(1); TestHelpers.recursiveEquals( @@ -204,46 +345,97 @@ void listRecent() throws ApiException { } @Test - void stopActive() throws ApiException { - - service.stopActive(ConversationDtoTest.conversationRequest.getId()); + void delete() throws ApiException { - verify(api) - .conversationStopActiveConversation( - projectIdCaptor.capture(), conversationIdCaptor.capture()); + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/conversations/%s", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment(ConversationDtoTest.conversationRequest.getId())), + HttpMethod.DELETE, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = new HttpResponse(200, null, Collections.emptyMap(), null); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); - Assertions.assertThat(projectIdCaptor.getValue()).isEqualTo(uriPartID); - Assertions.assertThat(conversationIdCaptor.getValue()) - .isEqualTo(ConversationDtoTest.conversationResponse.getId()); + service.delete(ConversationDtoTest.conversationRequest.getId()); } @Test - void delete() throws ApiException { - - service.delete(ConversationDtoTest.conversationRequest.getId()); + void stopActive() throws ApiException { - verify(api) - .conversationDeleteConversation(projectIdCaptor.capture(), conversationIdCaptor.capture()); + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/conversations/%s:stop", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment(ConversationDtoTest.conversationRequest.getId())), + HttpMethod.POST, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = new HttpResponse(200, null, Collections.emptyMap(), null); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); - Assertions.assertThat(projectIdCaptor.getValue()).isEqualTo(uriPartID); - Assertions.assertThat(conversationIdCaptor.getValue()) - .isEqualTo(ConversationDtoTest.conversationResponse.getId()); + service.stopActive(ConversationDtoTest.conversationRequest.getId()); } @Test void update() throws ApiException { - when(api.conversationUpdateConversation( - eq(uriPartID), - eq(ConversationDtoTest.conversationRequest.getId()), - eq(ConversationDtoTest.conversationRequest), - eq(null), - eq(MetadataUpdateStrategy.MERGE_PATCH))) - .thenReturn(ConversationDtoTest.conversationResponse); + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/conversations/%s", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment(ConversationDtoTest.conversationRequest.getId())), + HttpMethod.PATCH, + Arrays.asList( + new URLParameter( + "metadata_update_strategy", + MetadataUpdateStrategy.MERGE_PATCH, + STYLE.FORM, + true)), + jsonConversationRequest, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonConversationResponse.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + ConversationsUpdateQueryParameters queryParameters = + ConversationsUpdateQueryParameters.builder() + .setMetadataUpdateStrategy(MetadataUpdateStrategy.MERGE_PATCH) + .build(); Conversation response = service.update( ConversationDtoTest.conversationRequest.getId(), - MetadataUpdateStrategy.MERGE_PATCH, + queryParameters, ConversationDtoTest.conversationRequest); TestHelpers.recursiveEquals(response, ConversationDtoTest.conversationResponse); @@ -252,36 +444,59 @@ void update() throws ApiException { @Test void injectMessage() throws ApiException { + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/conversations/%s:inject-message", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment( + InjectMessageDtoTest.injectContactMessage.getConversationId())), + HttpMethod.POST, + Collections.emptyList(), + jsonInjectContactMessageRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + 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.injectMessage( InjectMessageDtoTest.injectContactMessage.getConversationId(), InjectMessageDtoTest.injectContactMessage); - - verify(api) - .conversationInjectMessage( - projectIdCaptor.capture(), - conversationIdCaptor.capture(), - injectMessageCaptor.capture()); - - Assertions.assertThat(projectIdCaptor.getValue()).isEqualTo(uriPartID); - Assertions.assertThat(conversationIdCaptor.getValue()) - .isEqualTo(InjectMessageDtoTest.injectContactMessage.getConversationId()); - TestHelpers.recursiveEquals( - injectMessageCaptor.getValue(), InjectMessageDtoTest.injectContactMessage); } @Test void injectEvent() throws ApiException { + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/conversations/%s:inject-event", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment(InjectEventDtoTest.injectEvent.getConversationId())), + HttpMethod.POST, + Collections.emptyList(), + jsonInjectEventRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + 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.injectEvent( InjectEventDtoTest.injectEvent.getConversationId(), InjectEventDtoTest.injectEvent); - - verify(api) - .eventsInjectEvent( - projectIdCaptor.capture(), conversationIdCaptor.capture(), injectEventCaptor.capture()); - - Assertions.assertThat(projectIdCaptor.getValue()).isEqualTo(uriPartID); - Assertions.assertThat(conversationIdCaptor.getValue()) - .isEqualTo(InjectEventDtoTest.injectEvent.getConversationId()); - TestHelpers.recursiveEquals(injectEventCaptor.getValue(), InjectEventDtoTest.injectEvent); } } diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/EventsServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/EventsServiceTest.java index 9f0c9326a..659dda1a8 100644 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/EventsServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/EventsServiceTest.java @@ -1,117 +1,212 @@ package com.sinch.sdk.domains.conversation.api.v1.adapters; +import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; 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.fasterxml.jackson.core.JsonProcessingException; +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.domains.conversation.api.v1.internal.EventsApi; +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.conversation.api.v1.EventsService; import com.sinch.sdk.domains.conversation.models.v1.events.ConversationEvent; import com.sinch.sdk.domains.conversation.models.v1.events.ConversationEventDtoTest; -import com.sinch.sdk.domains.conversation.models.v1.events.internal.ListEventsResponseInternal; -import com.sinch.sdk.domains.conversation.models.v1.events.request.EventsListRequest; +import com.sinch.sdk.domains.conversation.models.v1.events.request.EventsListQueryParameters; import com.sinch.sdk.domains.conversation.models.v1.events.request.SendEventRequestDtoTest; import com.sinch.sdk.domains.conversation.models.v1.events.response.EventsListResponse; import com.sinch.sdk.domains.conversation.models.v1.events.response.SendEventResponse; -import com.sinch.sdk.models.ConversationContext; -import java.time.Instant; +import com.sinch.sdk.domains.conversation.models.v1.events.response.SendEventResponseDtoTest; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; 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.ArgumentCaptor; -import org.mockito.Captor; import org.mockito.Mock; @TestWithResources public class EventsServiceTest extends ConversationBaseTest { - @Mock ConversationContext context; - @Mock EventsApi api; @Mock HttpClient httpClient; + @Mock ServerConfiguration serverConfiguration; @Mock Map authManagers; - @Captor ArgumentCaptor projectIdCaptor; - @Captor ArgumentCaptor eventIdCaptor; + + static final String uriUUID = "foo"; + static final Collection AUTH_NAMES = Arrays.asList("Basic", "oAuth2"); EventsService service; - String uriPartID = "foovalue"; - @BeforeEach - public void initMocks() { - service = spy(new EventsService(uriPartID, context, httpClient, authManagers)); - doReturn(api).when(service).getApi(); - } + @GivenTextResource("domains/conversation/v1/events/ConversationEventGenericEventDto.json") + String jsonConversationEvent; + + @GivenTextResource("/domains/conversation/v1/events/response/EventsListResponse-page-0.json") + String eventsListPage0; - SendEventResponse expectedResponse = - SendEventResponse.builder().setEventId("event id").setAcceptedTime(Instant.now()).build(); + @GivenTextResource("/domains/conversation/v1/events/response/EventsListResponse-page-1.json") + String eventsListPage1; - @GivenJsonResource("/domains/conversation/v1/events/response/EventsListResponse-page-0.json") - ListEventsResponseInternal eventsListPage0; + @GivenTextResource("/domains/conversation/v1/events/request/SendEventRequestDto.json") + String jsonSendEventRequestDto; - @GivenJsonResource("/domains/conversation/v1/events/response/EventsListResponse-page-1.json") - ListEventsResponseInternal eventsListPage1; + @GivenTextResource("domains/conversation/v1/events/response/SendEventResponseDto.json") + String jsonSendEventResponseDto; + + @BeforeEach + public void initMocks() { + service = + new EventsServiceImpl( + httpClient, serverConfiguration, authManagers, HttpMapper.getInstance(), uriUUID); + } @Test void get() throws ApiException { - when(api.eventsGetEvent( - eq(uriPartID), eq(ConversationEventDtoTest.expectedConversationEventDto.getId()))) - .thenReturn(ConversationEventDtoTest.expectedConversationEventDto); + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/events/%s", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment( + ConversationEventDtoTest.expectedConversationEventDto.getId())), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonConversationEvent.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); ConversationEvent response = service.get(ConversationEventDtoTest.expectedConversationEventDto.getId()); - Assertions.assertThat(response) - .usingRecursiveComparison() - .isEqualTo(ConversationEventDtoTest.expectedConversationEventDto); + TestHelpers.recursiveEquals(response, ConversationEventDtoTest.expectedConversationEventDto); } @Test void send() throws ApiException { - when(api.eventsSendEvent(eq(uriPartID), eq(SendEventRequestDtoTest.sendEventDto))) - .thenReturn(expectedResponse); + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/events:send", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.POST, + Collections.emptyList(), + jsonSendEventRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonSendEventResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); SendEventResponse response = service.send(SendEventRequestDtoTest.sendEventDto); - Assertions.assertThat(response).usingRecursiveComparison().isEqualTo(expectedResponse); + Assertions.assertThat(response) + .usingRecursiveComparison() + .isEqualTo(SendEventResponseDtoTest.expectedResponse); } @Test void delete() throws ApiException { - service.delete(ConversationEventDtoTest.expectedConversationEventDto.getId()); - - verify(api).eventsDeleteEvents(projectIdCaptor.capture(), eventIdCaptor.capture()); - - Assertions.assertThat(projectIdCaptor.getValue()).isEqualTo(uriPartID); - Assertions.assertThat(eventIdCaptor.getValue()) - .isEqualTo(ConversationEventDtoTest.expectedConversationEventDto.getId()); + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/events/%s", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment( + SendEventResponseDtoTest.expectedResponse.getEventId())), + HttpMethod.DELETE, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + 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(SendEventResponseDtoTest.expectedResponse.getEventId()); } @Test - void list() throws ApiException, JsonProcessingException { - - when(api.eventsListEvents(eq(uriPartID), eq("conversation id"), eq(null), eq(null), eq(null))) - .thenReturn(eventsListPage0); - - when(api.eventsListEvents( - eq(uriPartID), - eq("conversation id"), - eq(null), - eq(null), - eq(eventsListPage0.getNextPageToken()))) - .thenReturn(eventsListPage1); - - EventsListRequest request = - EventsListRequest.builder().setConversationId("conversation id").build(); + void list() throws ApiException { + + HttpRequest httpRequest1 = + new HttpRequest( + String.format("/v1/projects/%s/events", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.GET, + Arrays.asList(new URLParameter("conversation_id", "conversation id", STYLE.FORM, true)), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpRequest httpRequest2 = + new HttpRequest( + String.format("/v1/projects/%s/events", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.GET, + Arrays.asList( + new URLParameter("conversation_id", "conversation id", STYLE.FORM, true), + new URLParameter( + "page_token", + "ChowMUhRN1c0WjFSMTI2N0RCQlI4UzQ3TlZQOEoGCP70264G", + STYLE.FORM, + true)), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse1 = + new HttpResponse(200, null, Collections.emptyMap(), eventsListPage0.getBytes()); + HttpResponse httpResponse2 = + new HttpResponse(200, null, Collections.emptyMap(), eventsListPage1.getBytes()); + + 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); + + EventsListQueryParameters request = + EventsListQueryParameters.builder().setConversationId("conversation id").build(); EventsListResponse response0 = service.list(request); diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/MessagesServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/MessagesServiceTest.java index 91a237352..2d648eca2 100644 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/MessagesServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/MessagesServiceTest.java @@ -1,363 +1,688 @@ package com.sinch.sdk.domains.conversation.api.v1.adapters; +import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; 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.fasterxml.jackson.core.JsonProcessingException; +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.domains.conversation.api.v1.MessagesService.MessageSource; -import com.sinch.sdk.domains.conversation.api.v1.adapters.messages.ConversationMessageMapper; -import com.sinch.sdk.domains.conversation.api.v1.internal.MessagesApi; -import com.sinch.sdk.domains.conversation.models.v1.internal.ConversationMessageInternal; +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.conversation.api.v1.MessagesService; import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessage; import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessageDtoTest; -import com.sinch.sdk.domains.conversation.models.v1.messages.internal.ListMessagesResponseInternal; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessageUpdateRequest; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesListRequest; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesDeleteQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesGetQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesSource; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesUpdateQueryParameters; import com.sinch.sdk.domains.conversation.models.v1.messages.request.SendMessageDtoTest; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.UpdateMessageDtoTest; import com.sinch.sdk.domains.conversation.models.v1.messages.response.MessagesListResponse; import com.sinch.sdk.domains.conversation.models.v1.messages.response.SendMessageResponse; -import com.sinch.sdk.models.ConversationContext; -import java.time.Instant; +import com.sinch.sdk.domains.conversation.models.v1.messages.response.SendMessageResponseDtoTest; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; 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.ArgumentCaptor; -import org.mockito.Captor; import org.mockito.Mock; @TestWithResources public class MessagesServiceTest extends ConversationBaseTest { - - @Mock ConversationContext context; - @Mock MessagesApi api; @Mock HttpClient httpClient; + @Mock ServerConfiguration serverConfiguration; @Mock Map authManagers; - @Captor ArgumentCaptor projectIdCaptor; - @Captor ArgumentCaptor messageIdCaptor; - @Captor ArgumentCaptor messageSourceCaptor; + + static final String uriUUID = "foo"; + static final Collection AUTH_NAMES = Arrays.asList("Basic", "oAuth2"); MessagesService service; - String uriPartID = "foovalue"; @BeforeEach public void initMocks() { - service = spy(new MessagesService(uriPartID, context, httpClient, authManagers)); - doReturn(api).when(service).getApi(); + service = + new MessagesServiceImpl( + httpClient, serverConfiguration, authManagers, HttpMapper.getInstance(), uriUUID); } - SendMessageResponse expectedResponse = - SendMessageResponse.builder() - .setMessageId("message id") - .setAcceptedTime(Instant.now()) - .build(); + @GivenTextResource("/domains/conversation/v1/messages/ConversationMessageAppTextResponseDto.json") + String jsonConversationMessageAppTextResponseDto; + + @GivenTextResource("domains/conversation/v1/messages/response/SendMessageResponseDto.json") + String sendMessageResponseDto; + + @GivenTextResource("/domains/conversation/v1/messages/request/SendTemplateMessageRequestDto.json") + String jsonSendTemplateMessageRequestDto; + + @GivenTextResource("/domains/conversation/v1/messages/request/SendCardMessageRequestDto.json") + String jsonSendCardMessageRequestDto; + + @GivenTextResource("/domains/conversation/v1/messages/request/SendCarouselMessageRequestDto.json") + String jsonSendCarouselMessageRequestDto; + + @GivenTextResource("/domains/conversation/v1/messages/request/SendChoiceMessageRequestDto.json") + String jsonSendChoiceMessageRequestDto; + + @GivenTextResource( + "/domains/conversation/v1/messages/request/SendContactInfoMessageRequestDto.json") + String jsonSendContactInfoMessageRequestDto; - @GivenTextResource("/domains/conversation/v1/messages/ConversationMessageAppTextRequestDto.json") - static String jsonConversationMessageAppTextDto; + @GivenTextResource("/domains/conversation/v1/messages/request/SendListMessageRequestDto.json") + String jsonSendListMessageRequestDto; - @GivenJsonResource("/domains/conversation/v1/messages/response/MessagesListResponse-page-0.json") - ListMessagesResponseInternal messageListPage0; + @GivenTextResource("/domains/conversation/v1/messages/request/SendLocationMessageRequestDto.json") + String jsonSendLocationMessageRequestDto; - @GivenJsonResource("/domains/conversation/v1/messages/response/MessagesListResponse-page-1.json") - ListMessagesResponseInternal messageListPage1; + @GivenTextResource("/domains/conversation/v1/messages/request/SendMediaMessageRequestDto.json") + String jsonSendMediaMessageRequestDto; + + @GivenTextResource("/domains/conversation/v1/messages/request/SendTextMessageRequestDto.json") + String jsonSendTextMessageRequestDto; + + @GivenTextResource("/domains/conversation/v1/messages/request/MessageUpdateRequestDto.json") + String jsonMessageUpdateRequestDto; + + @GivenTextResource("/domains/conversation/v1/messages/response/MessagesListResponse-page-0.json") + String messageListPage0; + + @GivenTextResource("/domains/conversation/v1/messages/response/MessagesListResponse-page-1.json") + String messageListPage1; @Test void getDefault() throws ApiException { - when(api.messagesGetMessage( - eq(uriPartID), - eq(ConversationMessageDtoTest.appConversationMessageRequest.getId()), - eq(null))) - .thenReturn( - ConversationMessageMapper.convert( - ConversationMessageDtoTest.appConversationMessageRequest)); + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/messages/%s", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment( + ConversationMessageDtoTest.appConversationMessageRequest.getId())), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse( + 200, + null, + Collections.emptyMap(), + jsonConversationMessageAppTextResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); ConversationMessage response = service.get(ConversationMessageDtoTest.appConversationMessageRequest.getId()); - Assertions.assertThat(response) - .usingRecursiveComparison() - .isEqualTo(ConversationMessageDtoTest.appConversationMessageRequest); + TestHelpers.recursiveEquals( + response, ConversationMessageDtoTest.appConversationMessageResponse); } @Test void getBySource() throws ApiException { - when(api.messagesGetMessage( - eq(uriPartID), - eq(ConversationMessageDtoTest.appConversationMessageRequest.getId()), - eq("CONVERSATION_SOURCE"))) - .thenReturn( - ConversationMessageMapper.convert( - ConversationMessageDtoTest.appConversationMessageRequest)); - + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/messages/%s", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment( + ConversationMessageDtoTest.appConversationMessageRequest.getId())), + HttpMethod.GET, + Arrays.asList( + new URLParameter( + "messages_source", MessagesSource.CONVERSATION_SOURCE, STYLE.FORM, true)), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse( + 200, + null, + Collections.emptyMap(), + jsonConversationMessageAppTextResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + MessagesGetQueryParameters queryParameters = + MessagesGetQueryParameters.builder() + .setMessagesSource(MessagesSource.CONVERSATION_SOURCE) + .build(); ConversationMessage response = service.get( - ConversationMessageDtoTest.appConversationMessageRequest.getId(), - MessageSource.CONVERSATION_SOURCE); + ConversationMessageDtoTest.appConversationMessageRequest.getId(), queryParameters); - Assertions.assertThat(response) - .usingRecursiveComparison() - .isEqualTo(ConversationMessageDtoTest.appConversationMessageRequest); + TestHelpers.recursiveEquals( + response, ConversationMessageDtoTest.appConversationMessageResponse); } @Test void send() throws ApiException { - when(api.messagesSendMessage( - eq(uriPartID), eq(SendMessageDtoTest.sendTemplateMessageRequestDto))) - .thenReturn(expectedResponse); + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/messages:send", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.POST, + Collections.emptyList(), + jsonSendTemplateMessageRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), sendMessageResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); SendMessageResponse response = service.sendMessage(SendMessageDtoTest.sendTemplateMessageRequestDto); - Assertions.assertThat(response).usingRecursiveComparison().isEqualTo(expectedResponse); + TestHelpers.recursiveEquals(response, SendMessageResponseDtoTest.expectedResponse); } @Test void sendCardMessage() throws ApiException { - when(api.messagesSendMessage(eq(uriPartID), eq(SendMessageDtoTest.sendCardMessageRequestDto))) - .thenReturn(expectedResponse); + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/messages:send", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.POST, + Collections.emptyList(), + jsonSendCardMessageRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), sendMessageResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); SendMessageResponse response = service.sendCardMessage(SendMessageDtoTest.sendCardMessageRequestDto); - Assertions.assertThat(response).usingRecursiveComparison().isEqualTo(expectedResponse); + Assertions.assertThat(response) + .usingRecursiveComparison() + .isEqualTo(SendMessageResponseDtoTest.expectedResponse); } @Test void sendCarouselMessage() throws ApiException { - when(api.messagesSendMessage( - eq(uriPartID), eq(SendMessageDtoTest.sendCarouselMessageRequestDto))) - .thenReturn(expectedResponse); + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/messages:send", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.POST, + Collections.emptyList(), + jsonSendCarouselMessageRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), sendMessageResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); SendMessageResponse response = service.sendCarouselMessage(SendMessageDtoTest.sendCarouselMessageRequestDto); - Assertions.assertThat(response).usingRecursiveComparison().isEqualTo(expectedResponse); + Assertions.assertThat(response) + .usingRecursiveComparison() + .isEqualTo(SendMessageResponseDtoTest.expectedResponse); } @Test void sendChoiceMessage() throws ApiException { - when(api.messagesSendMessage(eq(uriPartID), eq(SendMessageDtoTest.sendChoiceMessageRequestDto))) - .thenReturn(expectedResponse); + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/messages:send", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.POST, + Collections.emptyList(), + jsonSendChoiceMessageRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), sendMessageResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); SendMessageResponse response = service.sendChoiceMessage(SendMessageDtoTest.sendChoiceMessageRequestDto); - Assertions.assertThat(response).usingRecursiveComparison().isEqualTo(expectedResponse); + Assertions.assertThat(response) + .usingRecursiveComparison() + .isEqualTo(SendMessageResponseDtoTest.expectedResponse); } @Test void sendContactInfoMessage() throws ApiException { - when(api.messagesSendMessage( - eq(uriPartID), eq(SendMessageDtoTest.sendContactInfoMessageRequestDto))) - .thenReturn(expectedResponse); + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/messages:send", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.POST, + Collections.emptyList(), + jsonSendContactInfoMessageRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), sendMessageResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); SendMessageResponse response = service.sendContactInfoMessage(SendMessageDtoTest.sendContactInfoMessageRequestDto); - Assertions.assertThat(response).usingRecursiveComparison().isEqualTo(expectedResponse); + Assertions.assertThat(response) + .usingRecursiveComparison() + .isEqualTo(SendMessageResponseDtoTest.expectedResponse); } @Test void sendListMessage() throws ApiException { - when(api.messagesSendMessage(eq(uriPartID), eq(SendMessageDtoTest.sendListMessageRequestDto))) - .thenReturn(expectedResponse); - + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/messages:send", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.POST, + Collections.emptyList(), + jsonSendListMessageRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), sendMessageResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); SendMessageResponse response = service.sendListMessage(SendMessageDtoTest.sendListMessageRequestDto); - Assertions.assertThat(response).usingRecursiveComparison().isEqualTo(expectedResponse); + Assertions.assertThat(response) + .usingRecursiveComparison() + .isEqualTo(SendMessageResponseDtoTest.expectedResponse); } @Test void sendLocationMessage() throws ApiException { - when(api.messagesSendMessage( - eq(uriPartID), eq(SendMessageDtoTest.sendLocationMessageRequestDto))) - .thenReturn(expectedResponse); - + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/messages:send", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.POST, + Collections.emptyList(), + jsonSendLocationMessageRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), sendMessageResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); SendMessageResponse response = service.sendLocationMessage(SendMessageDtoTest.sendLocationMessageRequestDto); - Assertions.assertThat(response).usingRecursiveComparison().isEqualTo(expectedResponse); + Assertions.assertThat(response) + .usingRecursiveComparison() + .isEqualTo(SendMessageResponseDtoTest.expectedResponse); } @Test void sendMediaMessage() throws ApiException { - when(api.messagesSendMessage(eq(uriPartID), eq(SendMessageDtoTest.sendMediaMessageRequestDto))) - .thenReturn(expectedResponse); - + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/messages:send", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.POST, + Collections.emptyList(), + jsonSendMediaMessageRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), sendMessageResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); SendMessageResponse response = service.sendMediaMessage(SendMessageDtoTest.sendMediaMessageRequestDto); - Assertions.assertThat(response).usingRecursiveComparison().isEqualTo(expectedResponse); + Assertions.assertThat(response) + .usingRecursiveComparison() + .isEqualTo(SendMessageResponseDtoTest.expectedResponse); } @Test void sendTemplateMessage() throws ApiException { - when(api.messagesSendMessage( - eq(uriPartID), eq(SendMessageDtoTest.sendTemplateMessageRequestDto))) - .thenReturn(expectedResponse); + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/messages:send", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.POST, + Collections.emptyList(), + jsonSendTemplateMessageRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), sendMessageResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); SendMessageResponse response = service.sendTemplateMessage(SendMessageDtoTest.sendTemplateMessageRequestDto); - Assertions.assertThat(response).usingRecursiveComparison().isEqualTo(expectedResponse); + Assertions.assertThat(response) + .usingRecursiveComparison() + .isEqualTo(SendMessageResponseDtoTest.expectedResponse); } @Test void sendTextMessage() throws ApiException { - when(api.messagesSendMessage(eq(uriPartID), eq(SendMessageDtoTest.sendTextMessageRequestDto))) - .thenReturn(expectedResponse); + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/messages:send", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.POST, + Collections.emptyList(), + jsonSendTextMessageRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), sendMessageResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); SendMessageResponse response = service.sendTextMessage(SendMessageDtoTest.sendTextMessageRequestDto); - Assertions.assertThat(response).usingRecursiveComparison().isEqualTo(expectedResponse); + Assertions.assertThat(response) + .usingRecursiveComparison() + .isEqualTo(SendMessageResponseDtoTest.expectedResponse); } @Test void deleteDefault() throws ApiException { - service.delete(ConversationMessageDtoTest.appConversationMessageRequest.getId()); + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/messages/%s", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment( + ConversationMessageDtoTest.appConversationMessageRequest.getId())), + HttpMethod.DELETE, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse( + 200, + null, + Collections.emptyMap(), + jsonConversationMessageAppTextResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); - verify(api) - .messagesDeleteMessage( - projectIdCaptor.capture(), messageIdCaptor.capture(), messageSourceCaptor.capture()); - - Assertions.assertThat(projectIdCaptor.getValue()).isEqualTo(uriPartID); - Assertions.assertThat(messageIdCaptor.getValue()) - .isEqualTo(ConversationMessageDtoTest.appConversationMessageRequest.getId()); - Assertions.assertThat(messageSourceCaptor.getValue()).isNull(); + service.delete(ConversationMessageDtoTest.appConversationMessageRequest.getId()); } @Test void deleteBySource() throws ApiException { - service.delete( - ConversationMessageDtoTest.appConversationMessageRequest.getId(), - MessageSource.DISPATCH_SOURCE); - - verify(api) - .messagesDeleteMessage( - projectIdCaptor.capture(), messageIdCaptor.capture(), messageSourceCaptor.capture()); + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/messages/%s", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment( + ConversationMessageDtoTest.appConversationMessageRequest.getId())), + HttpMethod.DELETE, + Arrays.asList( + new URLParameter( + "messages_source", MessagesSource.DISPATCH_SOURCE, STYLE.FORM, true)), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse( + 200, + null, + Collections.emptyMap(), + jsonConversationMessageAppTextResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + MessagesDeleteQueryParameters queryParameters = + MessagesDeleteQueryParameters.builder() + .setMessagesSource(MessagesSource.DISPATCH_SOURCE) + .build(); - Assertions.assertThat(projectIdCaptor.getValue()).isEqualTo(uriPartID); - Assertions.assertThat(messageIdCaptor.getValue()) - .isEqualTo(ConversationMessageDtoTest.appConversationMessageRequest.getId()); - Assertions.assertThat(messageSourceCaptor.getValue()).isEqualTo("DISPATCH_SOURCE"); + service.delete( + ConversationMessageDtoTest.appConversationMessageRequest.getId(), queryParameters); } @Test - void updateDefault() throws ApiException, JsonProcessingException { - - MessageUpdateRequest request = - MessageUpdateRequest.builder().setMetadata("metadata value").build(); - - ConversationMessageInternal deserialized = - objectMapper.readValue( - jsonConversationMessageAppTextDto, ConversationMessageInternal.class); - - when(api.messagesUpdateMessageMetadata( - eq(uriPartID), - eq(ConversationMessageDtoTest.appConversationMessageRequest.getId()), - eq(request), - eq(null))) - .thenReturn(deserialized); + void updateDefault() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/messages/%s", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment( + ConversationMessageDtoTest.appConversationMessageRequest.getId())), + HttpMethod.PATCH, + Collections.emptyList(), + jsonMessageUpdateRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse( + 200, + null, + Collections.emptyMap(), + jsonConversationMessageAppTextResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); ConversationMessage response = - service.update(ConversationMessageDtoTest.appConversationMessageRequest.getId(), request); + service.update( + ConversationMessageDtoTest.appConversationMessageRequest.getId(), + UpdateMessageDtoTest.updateMessageRequestDto); - Assertions.assertThat(response) - .usingRecursiveComparison() - .isEqualTo(ConversationMessageDtoTest.appConversationMessageRequest); + TestHelpers.recursiveEquals( + response, ConversationMessageDtoTest.appConversationMessageResponse); } @Test - void updateBySource() throws ApiException, JsonProcessingException { - - MessageUpdateRequest request = - MessageUpdateRequest.builder().setMetadata("metadata value").build(); - - ConversationMessageInternal deserialized = - objectMapper.readValue( - jsonConversationMessageAppTextDto, ConversationMessageInternal.class); - - when(api.messagesUpdateMessageMetadata( - eq(uriPartID), - eq(ConversationMessageDtoTest.appConversationMessageRequest.getId()), - eq(request), - eq("DISPATCH_SOURCE"))) - .thenReturn(deserialized); + void updateBySource() throws ApiException { + + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/messages/%s", + URLPathUtils.encodePathSegment(uriUUID), + URLPathUtils.encodePathSegment( + ConversationMessageDtoTest.appConversationMessageRequest.getId())), + HttpMethod.PATCH, + Arrays.asList( + new URLParameter( + "messages_source", MessagesSource.DISPATCH_SOURCE, STYLE.FORM, true)), + jsonMessageUpdateRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse( + 200, + null, + Collections.emptyMap(), + jsonConversationMessageAppTextResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + MessagesUpdateQueryParameters queryParameters = + MessagesUpdateQueryParameters.builder() + .setMessagesSource(MessagesSource.DISPATCH_SOURCE) + .build(); ConversationMessage response = service.update( ConversationMessageDtoTest.appConversationMessageRequest.getId(), - MessageSource.DISPATCH_SOURCE, - request); + queryParameters, + UpdateMessageDtoTest.updateMessageRequestDto); - Assertions.assertThat(response) - .usingRecursiveComparison() - .isEqualTo(ConversationMessageDtoTest.appConversationMessageRequest); + TestHelpers.recursiveEquals( + response, ConversationMessageDtoTest.appConversationMessageResponse); } @Test - void list() throws ApiException, JsonProcessingException { - - when(api.messagesListMessages( - eq(uriPartID), - eq(null), - eq(null), - eq(null), - eq(null), - eq(null), - eq(null), - eq(null), - eq(null), - eq(null), - eq(null), - eq(null), - eq(null))) - .thenReturn(messageListPage0); - - when(api.messagesListMessages( - eq(uriPartID), - eq(null), - eq(null), - eq(null), - eq(null), - eq(null), - eq(null), - eq(null), - eq(messageListPage0.getNextPageToken()), - eq(null), - eq(null), - eq(null), - eq(null))) - .thenReturn(messageListPage1); - - MessagesListRequest request = MessagesListRequest.builder().build(); - - MessagesListResponse response0 = service.list(request); + void list() throws ApiException { + + HttpRequest httpRequest1 = + new HttpRequest( + String.format("/v1/projects/%s/messages", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpRequest httpRequest2 = + new HttpRequest( + String.format("/v1/projects/%s/messages", URLPathUtils.encodePathSegment(uriUUID)), + HttpMethod.GET, + Arrays.asList( + new URLParameter( + "page_token", + "ChowMUhRN1c0WjFSMTI2N0RCQlI4UzQ3TlZQOEoGCP70264G", + STYLE.FORM, + true)), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse1 = + new HttpResponse(200, null, Collections.emptyMap(), messageListPage0.getBytes()); + HttpResponse httpResponse2 = + new HttpResponse(200, null, Collections.emptyMap(), messageListPage1.getBytes()); + + 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); + + MessagesListResponse response0 = service.list(); Assertions.assertThat(response0.getContent().size()).isEqualTo(1); Assertions.assertThat(response0.hasNextPage()).isEqualTo(true); diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ProjectSettingsServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ProjectSettingsServiceTest.java index ffd612e54..760052f45 100644 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ProjectSettingsServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/ProjectSettingsServiceTest.java @@ -1,54 +1,84 @@ package com.sinch.sdk.domains.conversation.api.v1.adapters; +import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +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.domains.conversation.api.v1.internal.ProjectSettingsApi; +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.models.ServerConfiguration; +import com.sinch.sdk.domains.conversation.api.v1.ProjectSettingsService; import com.sinch.sdk.domains.conversation.models.v1.projectsettings.request.ProjectSettingsRequestDtoTest; import com.sinch.sdk.domains.conversation.models.v1.projectsettings.response.ProjectSettingsResponse; import com.sinch.sdk.domains.conversation.models.v1.projectsettings.response.ProjectSettingsResponseDtoTest; -import com.sinch.sdk.models.ConversationContext; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; 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.ArgumentCaptor; -import org.mockito.Captor; import org.mockito.Mock; @TestWithResources class ProjectSettingsServiceTest extends BaseTest { - @Mock ConversationContext context; - @Mock ProjectSettingsApi api; + @Mock ServerConfiguration serverConfiguration; @Mock HttpClient httpClient; @Mock Map authManagers; - @Captor ArgumentCaptor projectIdCaptor; - ProjectSettingsService service; - String uriPartID = "foovalue"; + String uriUUID = "foovalue"; + + static final Collection AUTH_NAMES = Arrays.asList("Basic", "oAuth2"); + + @GivenTextResource( + "domains/conversation/v1/projectsettings/request/ProjectSettingsRequestDto.json") + String jsonProjectSettingsRequestDto; + + @GivenTextResource( + "domains/conversation/v1/projectsettings/response/ProjectSettingsResponseDto.json") + String jsonProjectSettingsResponseDto; @BeforeEach public void initMocks() { - service = spy(new ProjectSettingsService(uriPartID, context, httpClient, authManagers)); - doReturn(api).when(service).getApi(); + service = + new ProjectSettingsServiceImpl( + httpClient, serverConfiguration, authManagers, HttpMapper.getInstance(), uriUUID); } @Test void create() throws ApiException { - when(api.create(eq(uriPartID), eq(ProjectSettingsRequestDtoTest.expectedDto))) - .thenReturn(ProjectSettingsResponseDtoTest.expectedDto); + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/settings", uriUUID), + HttpMethod.POST, + Collections.emptyList(), + jsonProjectSettingsRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonProjectSettingsResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); ProjectSettingsResponse response = service.create(ProjectSettingsRequestDtoTest.expectedDto); @@ -58,7 +88,25 @@ void create() throws ApiException { @Test void get() throws ApiException { - when(api.get(eq(uriPartID))).thenReturn(ProjectSettingsResponseDtoTest.expectedDto); + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/settings", uriUUID), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonProjectSettingsResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); ProjectSettingsResponse response = service.get(); @@ -68,8 +116,25 @@ void get() throws ApiException { @Test void update() throws ApiException { - when(api.update(eq(uriPartID), eq(ProjectSettingsRequestDtoTest.expectedDto))) - .thenReturn(ProjectSettingsResponseDtoTest.expectedDto); + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/settings", uriUUID), + HttpMethod.PATCH, + Collections.emptyList(), + jsonProjectSettingsRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonProjectSettingsResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); ProjectSettingsResponse response = service.update(ProjectSettingsRequestDtoTest.expectedDto); @@ -79,10 +144,24 @@ void update() throws ApiException { @Test void delete() throws ApiException { - service.delete(); - - verify(api).delete(projectIdCaptor.capture()); + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/settings", uriUUID), + HttpMethod.DELETE, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = new HttpResponse(204, null, Collections.emptyMap(), null); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); - Assertions.assertThat(projectIdCaptor.getValue()).isEqualTo(uriPartID); + service.delete(); } } diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/TranscodingServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/TranscodingServiceTest.java index f3abc7ced..534e66992 100644 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/TranscodingServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/TranscodingServiceTest.java @@ -1,54 +1,85 @@ package com.sinch.sdk.domains.conversation.api.v1.adapters; +import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import com.adelean.inject.resources.junit.jupiter.GivenTextResource; import com.adelean.inject.resources.junit.jupiter.TestWithResources; +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.domains.conversation.api.v1.internal.TranscodingApi; +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.models.ServerConfiguration; +import com.sinch.sdk.domains.conversation.api.v1.TranscodingService; import com.sinch.sdk.domains.conversation.models.v1.transcoding.request.TranscodeMessageRequestDtoTest; import com.sinch.sdk.domains.conversation.models.v1.transcoding.response.TranscodeMessageResponse; import com.sinch.sdk.domains.conversation.models.v1.transcoding.response.TranscodeMessageResponseDtoTest; -import com.sinch.sdk.models.ConversationContext; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; 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 TranscodingServiceTest extends ConversationBaseTest { - - @Mock ConversationContext context; - @Mock TranscodingApi api; + @Mock ServerConfiguration serverConfiguration; @Mock HttpClient httpClient; @Mock Map authManagers; - TranscodingService service; String uriPartID = "foovalue"; + static final Collection AUTH_NAMES = Arrays.asList("Basic", "oAuth2"); + + @GivenTextResource("/domains/conversation/v1/transcoding/request/TranscodeMessageRequestDto.json") + String jsonTranscodeMessageRequestDto; + + @GivenTextResource( + "domains/conversation/v1/transcoding/response/TranscodeMessageResponseDto.json") + String jsonTranscodeMessageResponseDto; + @BeforeEach public void initMocks() { - service = spy(new TranscodingService(uriPartID, context, httpClient, authManagers)); - doReturn(api).when(service).getApi(); + service = + new TranscodingServiceImpl( + httpClient, serverConfiguration, authManagers, HttpMapper.getInstance(), uriPartID); } @Test void transcode() throws ApiException { - when(api.transcodingTranscodeMessage( - eq(uriPartID), eq(TranscodeMessageRequestDtoTest.transcodeMessageRequestDto))) - .thenReturn(TranscodeMessageResponseDtoTest.expectedTranscodeMessageResponseDto); + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/messages:transcode", uriPartID), + HttpMethod.POST, + Collections.emptyList(), + jsonTranscodeMessageRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse( + 200, null, Collections.emptyMap(), jsonTranscodeMessageResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); TranscodeMessageResponse response = service.transcodeMessage(TranscodeMessageRequestDtoTest.transcodeMessageRequestDto); - Assertions.assertThat(response) - .usingRecursiveComparison() - .isEqualTo(TranscodeMessageResponseDtoTest.expectedTranscodeMessageResponseDto); + TestHelpers.recursiveEquals( + response, TranscodeMessageResponseDtoTest.expectedTranscodeMessageResponseDto); } } diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksAdaptorServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksAdaptorServiceTest.java deleted file mode 100644 index 7f0d824b2..000000000 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksAdaptorServiceTest.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.sinch.sdk.domains.conversation.api.v1.adapters; - -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - -import com.adelean.inject.resources.junit.jupiter.GivenTextResource; -import com.adelean.inject.resources.junit.jupiter.TestWithResources; -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.domains.conversation.models.v1.webhooks.Webhook; -import com.sinch.sdk.models.ConversationContext; -import java.util.HashMap; -import java.util.Map; -import java.util.function.Supplier; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; - -@TestWithResources -public class WebHooksAdaptorServiceTest extends ConversationBaseTest { - - @GivenTextResource("domains/conversation/v1/webhooks/events/capability/CapabilityEventDto.json") - String jsonCapabilityEvent; - - WebHooksAdaptorService service; - - @Mock WebHooksApiService api; - @Mock ConversationContext context; - @Mock Runnable credentialValidation; - @Mock Supplier httpClient; - @Mock Supplier> authManagers; - - String uriPartID = "foovalue"; - - @BeforeEach - public void initMocks() { - service = - spy( - new WebHooksAdaptorService( - uriPartID, context, credentialValidation, httpClient, authManagers)); - } - - @Test - void list() throws ApiException { - doReturn(api).when(service).getApiService(); - - service.list("foo"); - - verify(credentialValidation, times(1)).run(); - } - - @Test - void get() throws ApiException { - doReturn(api).when(service).getApiService(); - - service.get("foo"); - - verify(credentialValidation, times(1)).run(); - } - - @Test - void create() throws ApiException { - doReturn(api).when(service).getApiService(); - - service.create(Webhook.builder().build()); - - verify(credentialValidation, times(1)).run(); - } - - @Test - void update() throws ApiException { - doReturn(api).when(service).getApiService(); - - service.update("foo", Webhook.builder().build()); - - verify(credentialValidation, times(1)).run(); - } - - @Test - void delete() throws ApiException { - doReturn(api).when(service).getApiService(); - - service.delete("foo"); - - verify(credentialValidation, times(1)).run(); - } - - @Test - void validateAuthenticationHeader() throws ApiException { - - service.validateAuthenticationHeader("", new HashMap<>(), ""); - - verify(credentialValidation, times(0)).run(); - } - - @Test - void parseEvent() throws ApiException { - - service.parseEvent(jsonCapabilityEvent); - - verify(credentialValidation, times(0)).run(); - } -} diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksApiServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksApiServiceTest.java index bcdc48cd6..18fcb1e21 100644 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksApiServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksApiServiceTest.java @@ -1,161 +1,216 @@ package com.sinch.sdk.domains.conversation.api.v1.adapters; -import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import com.adelean.inject.resources.junit.jupiter.GivenTextResource; import com.adelean.inject.resources.junit.jupiter.TestWithResources; 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.domains.conversation.api.v1.internal.WebhooksApi; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.ClientCredentialsDtoTest; +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.URLPathUtils; +import com.sinch.sdk.core.models.ServerConfiguration; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.conversation.api.v1.WebhooksService; import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; import com.sinch.sdk.domains.conversation.models.v1.webhooks.WebhookDtoTest; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.WebhookImpl; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.WebhookTargetType; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.WebhookTrigger; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.internal.CreateWebhookRequestInternal; import com.sinch.sdk.domains.conversation.models.v1.webhooks.response.ListWebhookResponseDtoTest; -import com.sinch.sdk.models.ConversationContext; -import java.util.ArrayList; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.response.WebhooksListResponse; import java.util.Arrays; import java.util.Collection; -import java.util.List; +import java.util.Collections; +import java.util.Iterator; 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.ArgumentCaptor; -import org.mockito.Captor; import org.mockito.Mock; @TestWithResources public class WebHooksApiServiceTest extends ConversationBaseTest { - @Mock ConversationContext context; - @Mock WebhooksApi api; + + @Mock ServerConfiguration serverConfiguration; @Mock HttpClient httpClient; @Mock Map authManagers; + WebhooksService service; + String uriPartID = "foovalue"; + String fooWebhookId = "barWebhookId"; + String fooAppId = "barAppId"; - @Captor ArgumentCaptor uriPartIDCaptor; - @Captor ArgumentCaptor idCaptor; - @Captor ArgumentCaptor webhookCaptor; - @Captor ArgumentCaptor webhookCreateRequestCaptor; + static final Collection AUTH_NAMES = Arrays.asList("Basic", "oAuth2"); - @Captor ArgumentCaptor> maskCaptor; + @GivenTextResource("domains/conversation/v1/webhooks/WebhookRequestDto.json") + String jsonWebhookRequestDto; - WebHooksApiService service; - String uriPartID = "foovalue"; + @GivenTextResource("/domains/conversation/v1/webhooks/WebhookResponseDto.json") + String jsonWebhookResponseDto; + + @GivenTextResource("domains/conversation/v1/webhooks/response/ListWebhooksResponseDto.json") + String jsonListWebhooksResponseDto; @BeforeEach public void initMocks() { - service = spy(new WebHooksApiService(uriPartID, context, httpClient, authManagers)); - doReturn(api).when(service).getApi(); + service = + new WebhooksServiceImpl( + httpClient, + serverConfiguration, + authManagers, + HttpMapper.getInstance(), + uriPartID, + null); } @Test void list() throws ApiException { - when(api.webhooksListWebhooks( - eq(uriPartID), - eq(ListWebhookResponseDtoTest.expectedRequestDto.getWebhooks().get(0).getAppId()))) - .thenReturn(ListWebhookResponseDtoTest.expectedResponseDto); - - Collection response = - service.list(ListWebhookResponseDtoTest.expectedRequestDto.getWebhooks().get(0).getAppId()); - TestHelpers.recursiveEquals( - response, ListWebhookResponseDtoTest.expectedResponseDto.getWebhooks()); + HttpRequest httpRequest = + new HttpRequest( + String.format( + "/v1/projects/%s/apps/%s/webhooks", + URLPathUtils.encodePathSegment(uriPartID), + URLPathUtils.encodePathSegment(fooAppId)), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonListWebhooksResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + WebhooksListResponse response = service.list(fooAppId); + Iterator iterator = response.iterator(); + + WebhooksListResponse expectedListResponse = + new WebhooksListResponse( + new Page<>(null, ListWebhookResponseDtoTest.expectedResponseDto.getWebhooks(), null)); + Iterator expectedIterator = expectedListResponse.iterator(); + + while (iterator.hasNext()) { + Webhook item = iterator.next(); + Webhook expectedItem = expectedIterator.next(); + TestHelpers.recursiveEquals(item, expectedItem); + } + Assertions.assertThat(expectedIterator.hasNext()).isEqualTo(false); } @Test void get() throws ApiException { - when(api.webhooksGetWebhook(eq(uriPartID), eq(WebhookDtoTest.expectedRequestDto.getId()))) - .thenReturn(WebhookDtoTest.expectedRequestDto); - - Webhook response = service.get(WebhookDtoTest.expectedRequestDto.getId()); - TestHelpers.recursiveEquals(response, WebhookDtoTest.expectedRequestDto); + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/webhooks/%s", uriPartID, fooWebhookId), + HttpMethod.GET, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonWebhookResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + Webhook response = service.get(fooWebhookId); + + TestHelpers.recursiveEquals(response, WebhookDtoTest.expectedResponseDto); } @Test void create() throws ApiException { - when(api.webhooksCreateWebhook(eq(uriPartID), any(CreateWebhookRequestInternal.class))) - .thenReturn(WebhookDtoTest.expectedRequestDto); + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/webhooks", uriPartID), + HttpMethod.POST, + Collections.emptyList(), + jsonWebhookRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonWebhookResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); Webhook response = service.create(WebhookDtoTest.expectedRequestDto); - verify(api) - .webhooksCreateWebhook(uriPartIDCaptor.capture(), webhookCreateRequestCaptor.capture()); - - WebhookImpl webhook = (WebhookImpl) WebhookDtoTest.expectedRequestDto; - CreateWebhookRequestInternal.Builder builder = CreateWebhookRequestInternal.builder(); - webhook.appId().ifPresent(builder::setAppId); - webhook.clientCredentials().ifPresent(builder::setClientCredentials); - webhook.secret().ifPresent(builder::setSecret); - webhook.target().ifPresent(builder::setTarget); - webhook.targetType().ifPresent(builder::setTargetType); - webhook.triggers().ifPresent(builder::setTriggers); - - Assertions.assertThat(uriPartIDCaptor.getValue()).isEqualTo(uriPartID); - Assertions.assertThat(webhookCreateRequestCaptor.getValue()).isEqualTo(builder.build()); - - TestHelpers.recursiveEquals(response, WebhookDtoTest.expectedRequestDto); + TestHelpers.recursiveEquals(response, WebhookDtoTest.expectedResponseDto); } @Test void update() throws ApiException { - Webhook update = - Webhook.builder() - .setAppId("my app id") - .setTarget("my target") - .setTriggers(Arrays.asList(WebhookTrigger.from("my trigger"))) - .setClientCredentials(ClientCredentialsDtoTest.expectedDto) - .setTargetType(WebhookTargetType.HTTP) - .build(); - - List mask = - new ArrayList<>( - Arrays.asList( - WebhookImpl.JSON_PROPERTY_APP_ID, - WebhookImpl.JSON_PROPERTY_CLIENT_CREDENTIALS, - WebhookImpl.JSON_PROPERTY_TARGET, - WebhookImpl.JSON_PROPERTY_TARGET_TYPE, - WebhookImpl.JSON_PROPERTY_TRIGGERS)); - - when(api.webhooksUpdateWebhook( - eq(uriPartID), - eq(WebhookDtoTest.expectedRequestDto.getId()), - eq(update), - any(List.class))) - .thenReturn(WebhookDtoTest.expectedRequestDto); - - Webhook response = service.update(WebhookDtoTest.expectedRequestDto.getId(), update); - - verify(api) - .webhooksUpdateWebhook( - uriPartIDCaptor.capture(), - idCaptor.capture(), - webhookCaptor.capture(), - maskCaptor.capture()); - - TestHelpers.recursiveEquals(maskCaptor.getValue(), mask); - - TestHelpers.recursiveEquals(response, WebhookDtoTest.expectedRequestDto); + + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/webhooks/%s", uriPartID, fooWebhookId), + HttpMethod.PATCH, + Collections.emptyList(), + jsonWebhookRequestDto, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + AUTH_NAMES); + HttpResponse httpResponse = + new HttpResponse(200, null, Collections.emptyMap(), jsonWebhookResponseDto.getBytes()); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + Webhook response = service.update(fooWebhookId, WebhookDtoTest.expectedResponseDto); + + TestHelpers.recursiveEquals(response, WebhookDtoTest.expectedResponseDto); } @Test void delete() throws ApiException { - service.delete(WebhookDtoTest.expectedRequestDto.getId()); - - verify(api).webhooksDeleteWebhook(uriPartIDCaptor.capture(), idCaptor.capture()); - - Assertions.assertThat(uriPartIDCaptor.getValue()).isEqualTo(uriPartID); - Assertions.assertThat(idCaptor.getValue()).isEqualTo(WebhookDtoTest.expectedRequestDto.getId()); + HttpRequest httpRequest = + new HttpRequest( + String.format("/v1/projects/%s/webhooks/%s", uriPartID, fooWebhookId), + HttpMethod.DELETE, + Collections.emptyList(), + (String) null, + Collections.emptyMap(), + Collections.singletonList(HttpContentType.APPLICATION_JSON), + Collections.emptyList(), + AUTH_NAMES); + HttpResponse httpResponse = new HttpResponse(204, null, Collections.emptyMap(), null); + + when(httpClient.invokeAPI( + eq(serverConfiguration), + eq(authManagers), + argThat(new HttpRequestMatcher(httpRequest)))) + .thenReturn(httpResponse); + + service.delete(fooWebhookId); } } diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksCallbackServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebhooksCallbackServiceTest.java similarity index 97% rename from client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksCallbackServiceTest.java rename to client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebhooksCallbackServiceTest.java index ac1b7ceef..5224e5efa 100644 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebHooksCallbackServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/WebhooksCallbackServiceTest.java @@ -7,6 +7,7 @@ import com.sinch.sdk.SinchClient; import com.sinch.sdk.auth.HmacAuthenticationValidation; import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.domains.conversation.api.v1.WebhooksService; import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.capability.CapabilityEvent; import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.channel.ChannelEvent; import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.contact.ContactCreateEvent; @@ -36,9 +37,9 @@ import org.junit.jupiter.api.Test; @TestWithResources -public class WebHooksCallbackServiceTest extends ConversationBaseTest { +public class WebhooksCallbackServiceTest extends ConversationBaseTest { - com.sinch.sdk.domains.conversation.api.v1.WebHooksService serverService; + WebhooksService serverService; @GivenTextResource("domains/conversation/v1/webhooks/events/capability/CapabilityEventDto.json") String jsonCapabilityEvent; @@ -113,6 +114,13 @@ public class WebHooksCallbackServiceTest extends ConversationBaseTest { "domains/conversation/v1/webhooks/events/unsupported/UnsupportedCallbackEventDto.json") String jsonUnsupportedCallbackEvent; + @BeforeEach + public void setUp() { + // Get a service without any parameters to ensure webhooks callback + // service can be used without them nor any performing any HTTP calls. + serverService = new SinchClient().conversation().v1().webhooks(); + } + @Test void checkApplicationAuthentication() throws ApiException { @@ -257,9 +265,4 @@ void checkUnsupportedCallbackEventDto() throws ApiException { assertTrue( serverService.parseEvent(jsonUnsupportedCallbackEvent) instanceof UnsupportedCallbackEvent); } - - @BeforeEach - public void setUp() { - serverService = new SinchClient().conversation().v1().webhooks(); - } } diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/AppsSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/AppsSteps.java index 70ad29668..542cade60 100644 --- a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/AppsSteps.java +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/AppsSteps.java @@ -1,11 +1,13 @@ package com.sinch.sdk.e2e.domains.conversation; -import com.sinch.sdk.domains.conversation.api.v1.AppService; +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.conversation.api.v1.AppsService; import com.sinch.sdk.domains.conversation.models.v1.ProcessingMode; -import com.sinch.sdk.domains.conversation.models.v1.app.ConversationMetadataReportView; -import com.sinch.sdk.domains.conversation.models.v1.app.request.AppCreateRequest; -import com.sinch.sdk.domains.conversation.models.v1.app.request.AppUpdateRequest; -import com.sinch.sdk.domains.conversation.models.v1.app.response.AppResponse; +import com.sinch.sdk.domains.conversation.models.v1.apps.ConversationMetadataReportView; +import com.sinch.sdk.domains.conversation.models.v1.apps.request.AppCreateRequest; +import com.sinch.sdk.domains.conversation.models.v1.apps.request.AppUpdateRequest; +import com.sinch.sdk.domains.conversation.models.v1.apps.response.AppResponse; +import com.sinch.sdk.domains.conversation.models.v1.apps.response.AppsListResponse; import com.sinch.sdk.domains.conversation.models.v1.credentials.ChannelIntegrationStatus; import com.sinch.sdk.domains.conversation.models.v1.credentials.ConversationChannelCredentials; import com.sinch.sdk.domains.conversation.models.v1.credentials.ConversationChannelCredentialsBuilderFactory; @@ -15,23 +17,22 @@ import io.cucumber.java.en.Then; import io.cucumber.java.en.When; import java.util.Arrays; -import java.util.Collection; import org.junit.jupiter.api.Assertions; public class AppsSteps { static final String APP_ID = "01W4FFL35P4NC4K35CONVAPP001"; - AppService service; + AppsService service; AppResponse createResponse; - Collection listResponse; + AppsListResponse listResponse; AppResponse getResponse; AppResponse updateResponse; boolean deletePassed; @Given("^the Conversation service \"Apps\" is available$") public void serviceAvailable() { - service = Config.getSinchClient().conversation().v1().app(); + service = Config.getSinchClient().conversation().v1().apps(); } @When("^I send a request to create an app$") @@ -95,17 +96,7 @@ public void createResult() { @Then("the apps list contains {int} apps") public void listResult(int size) { - - Assertions.assertEquals(listResponse.size(), size); - AppResponse item = listResponse.stream().findFirst().orElse(null); - - checkExpectedAppResponseCommonFields(item); - Assertions.assertEquals(item.getDisplayName(), "E2E Conversation App"); - Assertions.assertEquals( - item.getChannelCredentials().get(0).getState().getStatus(), - ChannelIntegrationStatus.ACTIVE); - item = listResponse.stream().reduce((first, second) -> second).orElse(null); - Assertions.assertEquals(item.getId(), "01W4FFL35P4NC4K35CONVAPP002"); + TestHelpers.checkIteratorItems(listResponse.iterator(), size); } @Then("the response contains the app details") diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/ContactsSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/ContactsSteps.java index 1e4c47576..6827278d8 100644 --- a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/ContactsSteps.java +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/ContactsSteps.java @@ -1,45 +1,49 @@ package com.sinch.sdk.e2e.domains.conversation; -import com.sinch.sdk.domains.conversation.api.v1.ContactService; +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.conversation.api.v1.ContactsService; import com.sinch.sdk.domains.conversation.models.v1.ChannelIdentity; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; -import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; -import com.sinch.sdk.domains.conversation.models.v1.contact.ContactLanguage; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactCreateRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactGetChannelProfileByContactIdRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactListRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.GetChannelProfileConversationChannel; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.IdentityConflictsListRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.ContactListResponse; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.IdentityConflictsListResponse; +import com.sinch.sdk.domains.conversation.models.v1.contacts.Contact; +import com.sinch.sdk.domains.conversation.models.v1.contacts.ContactLanguage; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactCreateRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactGetChannelProfileByContactIdRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.GetChannelProfileConversationChannel; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.IdentityConflictsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.MergeContactRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.response.ContactsListResponse; +import com.sinch.sdk.domains.conversation.models.v1.contacts.response.GetChannelProfileResponse; +import com.sinch.sdk.domains.conversation.models.v1.contacts.response.IdentityConflictsListResponse; 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.util.Arrays; +import java.util.Iterator; import org.junit.jupiter.api.Assertions; public class ContactsSteps { static final String CONTACT_ID = "01W4FFL35P4NC4K35CONTACT001"; - ContactService service; + ContactsService service; Contact createResponse; - ContactListResponse listPageResponse; - ContactListResponse listAllResponse; - ContactListResponse listPageIterateResponse; + ContactsListResponse listPageResponse; + ContactsListResponse listAllResponse; + ContactsListResponse listPageIterateResponse; Contact getResponse; Contact updateResponse; Contact mergeResponse; boolean deletePassed; - String channelProfileByContactIdResponse; + GetChannelProfileResponse channelProfileByContactIdResponse; IdentityConflictsListResponse listIdentityConflictsResponse; IdentityConflictsListResponse listAllIdentityConflictsResponse; IdentityConflictsListResponse listPageIterateIdentityConflictsResponse; @Given("^the Conversation service \"Contacts\" is available$") public void serviceAvailable() { - service = Config.getSinchClient().conversation().v1().contact(); + service = Config.getSinchClient().conversation().v1().contacts(); } @When("^I send a request to create a contact$") @@ -64,21 +68,24 @@ public void create() { @When("^I send a request to list the existing contacts$") public void listPage() { - ContactListRequest request = ContactListRequest.builder().setPageSize(2).build(); + ContactsListQueryParameters request = + ContactsListQueryParameters.builder().setPageSize(2).build(); listPageResponse = service.list(request); } @When("^I send a request to list all the contacts$") public void listAll() { - ContactListRequest request = ContactListRequest.builder().setPageSize(2).build(); + ContactsListQueryParameters request = + ContactsListQueryParameters.builder().setPageSize(2).build(); listAllResponse = service.list(request); } @When("^I iterate manually over the contacts pages$") public void listPageIterate() { - ContactListRequest request = ContactListRequest.builder().setPageSize(2).build(); + ContactsListQueryParameters request = + ContactsListQueryParameters.builder().setPageSize(2).build(); listPageIterateResponse = service.list(request); } @@ -119,7 +126,9 @@ public void delete() { @When("^I send a request to merge a source contact to a destination contact$") public void merge() { - mergeResponse = service.mergeContact("destinationId", CONTACT_ID); + mergeResponse = + service.mergeContact( + "destinationId", MergeContactRequest.builder().setSourceId(CONTACT_ID).build()); } @When("^I send a request to get the channel profile of a contact ID$") @@ -137,24 +146,24 @@ public void channelProfileByContactId() { @When("^I send a request to list the existing identity conflicts$") public void listIdentityConflictsPage() { - IdentityConflictsListRequest request = - IdentityConflictsListRequest.builder().setPageSize(2).build(); + IdentityConflictsListQueryParameters request = + IdentityConflictsListQueryParameters.builder().setPageSize(2).build(); listIdentityConflictsResponse = service.listIdentityConflicts(request); } @When("^I send a request to list all the identity conflicts$") public void listIdentityConflictsAll() { - IdentityConflictsListRequest request = - IdentityConflictsListRequest.builder().setPageSize(2).build(); + IdentityConflictsListQueryParameters request = + IdentityConflictsListQueryParameters.builder().setPageSize(2).build(); listAllIdentityConflictsResponse = service.listIdentityConflicts(request); } @When("^I iterate manually over the identity conflicts pages$") public void listIdentityConflictsPageIterate() { - IdentityConflictsListRequest request = - IdentityConflictsListRequest.builder().setPageSize(2).build(); + IdentityConflictsListQueryParameters request = + IdentityConflictsListQueryParameters.builder().setPageSize(2).build(); listPageIterateIdentityConflictsResponse = service.listIdentityConflicts(request); } @@ -173,9 +182,15 @@ public void listExistingResult(int size) { public void listAllResult(int size) { // FIXME: to be thread-safe compliant we need to check which variables are set - if (null != listAllResponse) Assertions.assertEquals(listAllResponse.stream().count(), size); - if (null != listPageIterateResponse) - Assertions.assertEquals(listPageIterateResponse.stream().count(), size); + Iterator iterator = null; + if (null != listAllResponse) { + iterator = listAllResponse.iterator(); + } + + if (null != listPageIterateResponse) { + iterator = listPageIterateResponse.iterator(); + } + TestHelpers.checkIteratorItems(iterator, size); } @Then("the contacts iteration result contains the data from \"{int}\" pages") @@ -183,7 +198,7 @@ public void listPageIterateResult(int size) { int pageCount = 0; - ContactListResponse listPageIterateResponseThreadSafety = listPageIterateResponse; + ContactsListResponse listPageIterateResponseThreadSafety = listPageIterateResponse; do { pageCount++; if (!listPageIterateResponseThreadSafety.hasNextPage()) { @@ -252,7 +267,10 @@ public void mergeResult() { @Then("the response contains the profile of the contact on the requested channel") public void channelProfileByContactIdResult() { - Assertions.assertEquals(channelProfileByContactIdResponse, "Marty McFly FB"); + + GetChannelProfileResponse expected = + GetChannelProfileResponse.builder().setProfileName("Marty McFly FB").build(); + TestHelpers.recursiveEquals(channelProfileByContactIdResponse, expected); } @Then("the response contains \"{int}\" identity conflicts") @@ -263,18 +281,22 @@ public void listIdentityConflictsResults(int count) { @Then("the identity conflicts list contains \"{int}\" identity conflicts") public void listIdentityConflictsAllResults(int count) { - // FIXME: to be thread-safe compliant we need to check which variables are set - if (null != listAllIdentityConflictsResponse) - Assertions.assertEquals(listAllIdentityConflictsResponse.stream().count(), count); - if (null != listPageIterateIdentityConflictsResponse) - Assertions.assertEquals(listPageIterateIdentityConflictsResponse.stream().count(), count); + Iterator iterator = null; + if (null != listAllIdentityConflictsResponse) { + iterator = listAllIdentityConflictsResponse.iterator(); + } + + if (null != listPageIterateIdentityConflictsResponse) { + iterator = listPageIterateIdentityConflictsResponse.iterator(); + } + TestHelpers.checkIteratorItems(iterator, count); } @Then("the identity conflicts iteration result contains the data from \"{int}\" pages") public void listAllIdentityConflictsPageIterateResults(int count) { - int pageCount = 0; + int pageCount = 0; IdentityConflictsListResponse listPageIterateResponseThreadSafety = listPageIterateIdentityConflictsResponse; do { diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/ConversationsSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/ConversationsSteps.java index 915ae9b15..0595d2f33 100644 --- a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/ConversationsSteps.java +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/ConversationsSteps.java @@ -1,18 +1,20 @@ package com.sinch.sdk.e2e.domains.conversation; +import com.sinch.sdk.core.TestHelpers; import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; import com.sinch.sdk.domains.conversation.models.v1.ChannelIdentity; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; import com.sinch.sdk.domains.conversation.models.v1.ConversationDirection; -import com.sinch.sdk.domains.conversation.models.v1.conversation.Conversation; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.ConversationsListRecentRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.ConversationsListRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.CreateConversationRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.InjectEventRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.InjectMessageRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.ConversationsListRecentResponse; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.ConversationsListResponse; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.InjectEventResponse; +import com.sinch.sdk.domains.conversation.models.v1.conversations.Conversation; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.ConversationsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.ConversationsUpdateQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.CreateConversationRequest; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.InjectEventRequest; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.InjectMessageRequest; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.RecentConversationsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.conversations.response.ConversationsListResponse; +import com.sinch.sdk.domains.conversation.models.v1.conversations.response.InjectEventResponse; +import com.sinch.sdk.domains.conversation.models.v1.conversations.response.RecentConversationsListResponse; import com.sinch.sdk.domains.conversation.models.v1.events.types.ComposingEvent; import com.sinch.sdk.domains.conversation.models.v1.messages.AppMessage; import com.sinch.sdk.domains.conversation.models.v1.messages.types.text.TextMessage; @@ -23,6 +25,7 @@ import io.cucumber.java.en.When; import java.time.Instant; import java.util.AbstractMap; +import java.util.Iterator; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -37,9 +40,9 @@ public class ConversationsSteps { ConversationsListResponse listPageResponse; ConversationsListResponse listAllResponse; ConversationsListResponse listPageIterateResponse; - ConversationsListRecentResponse listRecentPageResponse; - ConversationsListRecentResponse listRecentAllResponse; - ConversationsListRecentResponse listRecentPageIterateResponse; + RecentConversationsListResponse listRecentPageResponse; + RecentConversationsListResponse listRecentAllResponse; + RecentConversationsListResponse listRecentPageIterateResponse; Conversation getResponse; Conversation updateResponse; boolean deletePassed; @@ -75,48 +78,48 @@ public void create() { @When("^I send a request to list the existing conversations$") public void listPage() { - ConversationsListRequest request = - ConversationsListRequest.builder().setAppId(AppsSteps.APP_ID).build(); + ConversationsListQueryParameters request = + ConversationsListQueryParameters.builder().setAppId(AppsSteps.APP_ID).build(); listPageResponse = service.list(request); } @When("^I send a request to list all the conversations$") public void listAll() { - ConversationsListRequest request = - ConversationsListRequest.builder().setAppId(AppsSteps.APP_ID).build(); + ConversationsListQueryParameters request = + ConversationsListQueryParameters.builder().setAppId(AppsSteps.APP_ID).build(); listAllResponse = service.list(request); } @When("^I iterate manually over the conversations pages$") public void listPageIterate() { - ConversationsListRequest request = - ConversationsListRequest.builder().setAppId(AppsSteps.APP_ID).build(); + ConversationsListQueryParameters request = + ConversationsListQueryParameters.builder().setAppId(AppsSteps.APP_ID).build(); listPageIterateResponse = service.list(request); } @When("^I send a request to list the recent conversations$") public void listRecentPage() { - ConversationsListRecentRequest request = - ConversationsListRecentRequest.builder().setAppId(AppsSteps.APP_ID).build(); + RecentConversationsListQueryParameters request = + RecentConversationsListQueryParameters.builder().setAppId(AppsSteps.APP_ID).build(); listRecentPageResponse = service.listRecent(request); } @When("^I send a request to list all the recent conversations$") public void listRecentAll() { - ConversationsListRecentRequest request = - ConversationsListRecentRequest.builder().setAppId(AppsSteps.APP_ID).build(); + RecentConversationsListQueryParameters request = + RecentConversationsListQueryParameters.builder().setAppId(AppsSteps.APP_ID).build(); listRecentAllResponse = service.listRecent(request); } @When("^I iterate manually over the recent conversations pages$") public void listRecentPageIterate() { - ConversationsListRecentRequest request = - ConversationsListRecentRequest.builder().setAppId(AppsSteps.APP_ID).build(); + RecentConversationsListQueryParameters request = + RecentConversationsListQueryParameters.builder().setAppId(AppsSteps.APP_ID).build(); listRecentPageIterateResponse = service.listRecent(request); } @@ -136,7 +139,13 @@ public void update() { .setMetadata("Transferred conversation") .setCorrelationId("my-correlator") .build(); - updateResponse = service.update(CONVERSATION_ID, MetadataUpdateStrategy.REPLACE, request); + updateResponse = + service.update( + CONVERSATION_ID, + ConversationsUpdateQueryParameters.builder() + .setMetadataUpdateStrategy(MetadataUpdateStrategy.REPLACE) + .build(), + request); } @When("^I send a request to delete a conversation$") @@ -199,9 +208,15 @@ public void listPageResult(int size) { public void listAllResult(int size) { // FIXME: to be thread-safe compliant we need to check which variables are set - if (null != listAllResponse) Assertions.assertEquals(listAllResponse.stream().count(), size); - if (null != listPageIterateResponse) - Assertions.assertEquals(listPageIterateResponse.stream().count(), size); + Iterator iterator = null; + if (null != listAllResponse) { + iterator = listAllResponse.iterator(); + } + + if (null != listPageIterateResponse) { + iterator = listPageIterateResponse.iterator(); + } + TestHelpers.checkIteratorItems(iterator, size); } @Then("the conversations iteration result contains the data from \"{int}\" pages") @@ -231,10 +246,15 @@ public void listRecentPageResult(int size) { @Then("the recent conversations list contains \"{int}\" recent conversations") public void listRecentAllResult(int size) { - if (null != listRecentAllResponse) - Assertions.assertEquals(listRecentAllResponse.stream().count(), size); - if (null != listRecentPageIterateResponse) - Assertions.assertEquals(listRecentPageIterateResponse.stream().count(), size); + Iterator iterator = null; + if (null != listRecentAllResponse) { + iterator = listRecentAllResponse.iterator(); + } + + if (null != listRecentPageIterateResponse) { + iterator = listRecentPageIterateResponse.iterator(); + } + TestHelpers.checkIteratorItems(iterator, size); } @Then("the recent conversations iteration result contains the data from \"{int}\" pages") @@ -242,7 +262,7 @@ public void listRecentPageIterateResult(int size) { int pageCount = 0; - ConversationsListRecentResponse listPageIterateResponseThreadSafety = + RecentConversationsListResponse listPageIterateResponseThreadSafety = listRecentPageIterateResponse; do { pageCount++; diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/EventsSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/EventsSteps.java index e7da7ce0c..482ae8c09 100644 --- a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/EventsSteps.java +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/EventsSteps.java @@ -1,9 +1,10 @@ package com.sinch.sdk.e2e.domains.conversation; +import com.sinch.sdk.core.TestHelpers; import com.sinch.sdk.domains.conversation.api.v1.EventsService; import com.sinch.sdk.domains.conversation.models.v1.ContactId; import com.sinch.sdk.domains.conversation.models.v1.events.ConversationEvent; -import com.sinch.sdk.domains.conversation.models.v1.events.request.EventsListRequest; +import com.sinch.sdk.domains.conversation.models.v1.events.request.EventsListQueryParameters; import com.sinch.sdk.domains.conversation.models.v1.events.request.SendEventRequest; import com.sinch.sdk.domains.conversation.models.v1.events.response.EventsListResponse; import com.sinch.sdk.domains.conversation.models.v1.events.response.SendEventResponse; @@ -12,6 +13,7 @@ import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; +import java.util.Iterator; import org.junit.jupiter.api.Assertions; public class EventsSteps { @@ -47,21 +49,21 @@ public void send() { @When("^I send a request to list the existing conversation events$") public void listPage() { - EventsListRequest request = EventsListRequest.builder().setPageSize(2).build(); + EventsListQueryParameters request = EventsListQueryParameters.builder().setPageSize(2).build(); listPageResponse = service.list(request); } @When("^I send a request to list all the conversation events$") public void listAll() { - EventsListRequest request = EventsListRequest.builder().setPageSize(2).build(); + EventsListQueryParameters request = EventsListQueryParameters.builder().setPageSize(2).build(); listAllResponse = service.list(request); } @When("^I iterate manually over the conversation events pages$") public void listPageIterate() { - EventsListRequest request = EventsListRequest.builder().setPageSize(2).build(); + EventsListQueryParameters request = EventsListQueryParameters.builder().setPageSize(2).build(); listPageIterateResponse = service.list(request); } @@ -93,9 +95,15 @@ public void listPageResult(int size) { public void listAllResult(int size) { // FIXME: to be thread-safe compliant we need to check which variables are set - if (null != listAllResponse) Assertions.assertEquals(listAllResponse.stream().count(), size); - if (null != listPageIterateResponse) - Assertions.assertEquals(listPageIterateResponse.stream().count(), size); + Iterator iterator = null; + if (null != listAllResponse) { + iterator = listAllResponse.iterator(); + } + + if (null != listPageIterateResponse) { + iterator = listPageIterateResponse.iterator(); + } + TestHelpers.checkIteratorItems(iterator, size); } @Then("the conversation events iteration result contains the data from \"{int}\" pages") diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/MessagesSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/MessagesSteps.java index 64c9471eb..362502caa 100644 --- a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/MessagesSteps.java +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/MessagesSteps.java @@ -1,11 +1,12 @@ package com.sinch.sdk.e2e.domains.conversation; +import com.sinch.sdk.core.TestHelpers; import com.sinch.sdk.domains.conversation.api.v1.MessagesService; import com.sinch.sdk.domains.conversation.models.v1.ContactId; import com.sinch.sdk.domains.conversation.models.v1.messages.AppMessage; import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessage; import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessageUpdateRequest; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesListRequest; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesListQueryParameters; import com.sinch.sdk.domains.conversation.models.v1.messages.request.SendMessageRequest; import com.sinch.sdk.domains.conversation.models.v1.messages.response.MessagesListResponse; import com.sinch.sdk.domains.conversation.models.v1.messages.response.SendMessageResponse; @@ -15,6 +16,7 @@ import io.cucumber.java.en.Then; import io.cucumber.java.en.When; import java.time.Instant; +import java.util.Iterator; import org.junit.jupiter.api.Assertions; public class MessagesSteps { @@ -54,21 +56,24 @@ public void send() { @When("^I send a request to list the existing messages$") public void listPage() { - MessagesListRequest request = MessagesListRequest.builder().setPageSize(2).build(); + MessagesListQueryParameters request = + MessagesListQueryParameters.builder().setPageSize(2).build(); listPageResponse = service.list(request); } @When("^I send a request to list all the messages$") public void listAll() { - MessagesListRequest request = MessagesListRequest.builder().setPageSize(2).build(); + MessagesListQueryParameters request = + MessagesListQueryParameters.builder().setPageSize(2).build(); listAllResponse = service.list(request); } @When("^I iterate manually over the messages pages$") public void listPageIterate() { - MessagesListRequest request = MessagesListRequest.builder().setPageSize(2).build(); + MessagesListQueryParameters request = + MessagesListQueryParameters.builder().setPageSize(2).build(); listPageIterateResponse = service.list(request); } @@ -111,9 +116,15 @@ public void listPageResult(int size) { public void listAllResult(int size) { // FIXME: to be thread-safe compliant we need to check which variables are set - if (null != listAllResponse) Assertions.assertEquals(listAllResponse.stream().count(), size); - if (null != listPageIterateResponse) - Assertions.assertEquals(listPageIterateResponse.stream().count(), size); + Iterator iterator = null; + if (null != listAllResponse) { + iterator = listAllResponse.iterator(); + } + + if (null != listPageIterateResponse) { + iterator = listPageIterateResponse.iterator(); + } + TestHelpers.checkIteratorItems(iterator, size); } @Then("the result contains the data from \"{int}\" pages") diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/TemplateV1Steps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/TemplateV1Steps.java deleted file mode 100644 index 31d2d2945..000000000 --- a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/TemplateV1Steps.java +++ /dev/null @@ -1,241 +0,0 @@ -package com.sinch.sdk.e2e.domains.conversation; - -import com.sinch.sdk.core.TestHelpers; -import com.sinch.sdk.domains.conversation.api.templates.v1.TemplatesServiceV1; -import com.sinch.sdk.domains.conversation.templates.models.TemplateVariable; -import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateChannel; -import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateTranslation; -import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateV1; -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.Collection; -import java.util.Collections; -import org.junit.jupiter.api.Assertions; - -public class TemplateV1Steps { - - static final String TEMPLATE_V1_ID = "01W4FFL35P4NC4K35TEMPLATE01"; - - TemplatesServiceV1 service; - TemplateV1 createResponse; - Collection listResponse; - TemplateV1 getResponse; - TemplateV1 updateResponse; - boolean deletePassed; - - TemplateTranslation frTranslation = - TemplateTranslation.builder() - .setCreateTime(Instant.parse("2024-06-06T14:45:45Z")) - .setUpdateTime(Instant.parse("2024-06-06T14:45:45Z")) - .setLanguageCode("fr-FR") - .setVersion("1") - .setContent( - "{\"text_message\":{\"text\":\"Bonjour ${name}. Ce message texte provient d'un" - + " template V1\"}}") - .setVariables( - Arrays.asList( - TemplateVariable.builder() - .setKey("name") - .setPreviewValue("Professeur Jones") - .build())) - .build(); - - TemplateTranslation enTranslation = - TemplateTranslation.builder() - .setCreateTime(Instant.parse("2024-06-06T14:45:45Z")) - .setUpdateTime(Instant.parse("2024-06-06T14:45:45Z")) - .setLanguageCode("en-US") - .setVersion("1") - .setContent( - "{\"text_message\":{\"text\":\"Hello ${name}. Text message template created with V1" - + " API\"}}") - .setVariables( - Arrays.asList( - TemplateVariable.builder() - .setKey("name") - .setPreviewValue("Professor Jones") - .build())) - .build(); - - TemplateV1 expectedCreateGetResult = - TemplateV1.builder() - .setId(TEMPLATE_V1_ID) - .setCreateTime(Instant.parse("2024-06-06T14:42:42Z")) - .setUpdateTime(Instant.parse("2024-06-06T14:42:42Z")) - .setDescription("Text template V1") - .setChannel(TemplateChannel.UNSPECIFIED) - .setDefaultTranslation("en-US") - .setTranslations( - Arrays.asList( - TemplateTranslation.builder() - .setCreateTime(Instant.parse("2024-06-06T14:42:42Z")) - .setUpdateTime(Instant.parse("2024-06-06T14:42:42Z")) - .setLanguageCode(enTranslation.getLanguageCode()) - .setVersion(enTranslation.getVersion()) - .setContent(enTranslation.getContent()) - .setVariables(enTranslation.getVariables()) - .build())) - .build(); - - @Given("^the Conversation service \"TemplatesV1\" is available$") - public void serviceAvailable() { - service = Config.getSinchClient().conversation().templates().v1(); - } - - @When("^I send a request to create a conversation template with the V1 API$") - public void create() { - - TemplateV1 request = - TemplateV1.builder() - .setDefaultTranslation(enTranslation.getLanguageCode()) - .setChannel(TemplateChannel.MESSENGER) - .setDescription("Text template V1") - .setTranslations(Arrays.asList(enTranslation)) - .build(); - - createResponse = service.create(request); - } - - @When("^I send a request to list the conversation templates with the V1 API$") - public void list() { - - listResponse = service.list(); - } - - @When("^I send a request to retrieve a conversation template with the V1 API$") - public void get() { - - getResponse = service.get(TEMPLATE_V1_ID); - } - - @When("^I send a request to update a conversation template with the V1 API$") - public void update() { - - TemplateV1 request = - TemplateV1.builder() - .setDescription("Updated text template V1") - .setChannel(TemplateChannel.SMS) - .setDefaultTranslation("fr-FR") - .setTranslations( - Arrays.asList( - TemplateTranslation.builder() - .setLanguageCode(enTranslation.getLanguageCode()) - .setVersion("2") - .setContent( - "{\"text_message\":{\"text\":\"Hello ${name}. This text message" - + " template has been created with V1 API\"}}") - .setVariables(enTranslation.getVariables()) - .build(), - frTranslation)) - .build(); - - updateResponse = service.update(TEMPLATE_V1_ID, request); - } - - @When("^I send a request to delete a conversation template with the V1 API$") - public void delete() { - - service.delete(TEMPLATE_V1_ID); - deletePassed = true; - } - - @Then("the conversation template V1 is created") - public void createResult() { - - TestHelpers.recursiveEquals(createResponse, expectedCreateGetResult); - } - - @Then("the response contains the list of conversation templates with the V1 structure") - public void listResult() { - - Assertions.assertEquals(listResponse.size(), 2); - TestHelpers.recursiveEquals( - expectedCreateGetResult, - listResponse.stream() - .filter(f -> TEMPLATE_V1_ID.equals(f.getId())) - .findFirst() - .orElse(null)); - - TemplateV1 expectedDoom = - TemplateV1.builder() - .setId("01W4FFL35P4NC4K35TEMPLATE02") - .setDescription("Temple of Doom location") - .setTranslations( - Arrays.asList( - TemplateTranslation.builder() - .setLanguageCode("en-US") - .setContent( - "{\"location_message\":{\"title\":\"Temple of Doom\",\"label\":\"The" - + " temple may be" - + " here\",\"coordinates\":{\"longitude\":78.8613,\"latitude\":30.2884}}}") - .setVersion("4") - .setCreateTime(Instant.parse("2024-06-06T15:52:52Z")) - .setUpdateTime(Instant.parse("2024-06-06T15:52:52Z")) - .setVariables(Collections.emptyList()) - .build())) - .setDefaultTranslation("en-US") - .setCreateTime(Instant.parse("2024-06-06T15:50:00Z")) - .setUpdateTime(Instant.parse("2024-06-06T15:52:52Z")) - .setChannel(TemplateChannel.UNSPECIFIED) - .build(); - - TestHelpers.recursiveEquals( - expectedDoom, - listResponse.stream() - .filter(f -> expectedDoom.getId().equals(f.getId())) - .findFirst() - .orElse(null)); - } - - @Then("the response contains the conversation template details with the V1 structure") - public void getResult() { - - TestHelpers.recursiveEquals(getResponse, expectedCreateGetResult); - } - - @Then( - "the response contains the conversation template details with updated data with the V1" - + " structure") - public void updateResult() { - TemplateV1 expected = - TemplateV1.builder() - .setId(TEMPLATE_V1_ID) - .setCreateTime(Instant.parse("2024-06-06T14:42:42Z")) - .setUpdateTime(Instant.parse("2024-06-06T14:45:45Z")) - .setDescription("Updated text template V1") - .setChannel(TemplateChannel.UNSPECIFIED) - .setDefaultTranslation("fr-FR") - .setTranslations( - Arrays.asList( - TemplateTranslation.builder() - .setCreateTime(Instant.parse("2024-06-06T14:45:45Z")) - .setUpdateTime(Instant.parse("2024-06-06T14:45:45Z")) - .setLanguageCode(frTranslation.getLanguageCode()) - .setVersion(frTranslation.getVersion()) - .setContent(frTranslation.getContent()) - .setVariables(frTranslation.getVariables()) - .build(), - TemplateTranslation.builder() - .setCreateTime(Instant.parse("2024-06-06T14:45:45Z")) - .setUpdateTime(Instant.parse("2024-06-06T14:45:45Z")) - .setLanguageCode("en-US") - .setVersion("2") - .setContent( - "{\"text_message\":{\"text\":\"Hello ${name}. This text message" - + " template has been created with V1 API\"}}") - .setVariables(enTranslation.getVariables()) - .build())) - .build(); - TestHelpers.recursiveEquals(updateResponse, expected); - } - - @Then("the delete conversation template response V1 contains no data") - public void deleteResult() { - - Assertions.assertTrue(deletePassed); - } -} diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/TemplateV2Steps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/TemplateV2Steps.java index be4e3bc18..bc7015c80 100644 --- a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/TemplateV2Steps.java +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/TemplateV2Steps.java @@ -1,15 +1,17 @@ package com.sinch.sdk.e2e.domains.conversation; import com.sinch.sdk.core.TestHelpers; -import com.sinch.sdk.domains.conversation.api.templates.v2.TemplatesServiceV2; import com.sinch.sdk.domains.conversation.models.v1.messages.ChoiceItem; import com.sinch.sdk.domains.conversation.models.v1.messages.types.list.ListAdditionalProperties; import com.sinch.sdk.domains.conversation.models.v1.messages.types.list.ListMessage; import com.sinch.sdk.domains.conversation.models.v1.messages.types.list.ListSection; import com.sinch.sdk.domains.conversation.models.v1.messages.types.text.TextMessage; +import com.sinch.sdk.domains.conversation.templates.api.v2.TemplatesV2Service; import com.sinch.sdk.domains.conversation.templates.models.TemplateVariable; import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslation; import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2; +import com.sinch.sdk.domains.conversation.templates.models.v2.response.TemplatesV2ListResponse; +import com.sinch.sdk.domains.conversation.templates.models.v2.response.TranslationsV2ListResponse; import com.sinch.sdk.e2e.Config; import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; @@ -17,7 +19,6 @@ import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.LinkedHashMap; import java.util.concurrent.atomic.AtomicInteger; @@ -27,10 +28,10 @@ public class TemplateV2Steps { static final String TEMPLATE_V2_ID = "01HVN010MG3B9N6X323JAFN59P"; - TemplatesServiceV2 service; + TemplatesV2Service service; TemplateV2 createResponse; - Collection listResponse; - Collection listTranslationsResponse; + TemplatesV2ListResponse listResponse; + TranslationsV2ListResponse listTranslationsResponse; TemplateV2 getResponse; TemplateV2 updateResponse; boolean deletePassed; @@ -123,7 +124,7 @@ public void list() { @When("^I send a request to list the translations for a template with the V2 API$") public void listTranslations() { - listTranslationsResponse = service.listTranslations(TEMPLATE_V2_ID, null); + listTranslationsResponse = service.listTranslations(TEMPLATE_V2_ID); } @When("^I send a request to retrieve a conversation template with the V2 API$") @@ -200,7 +201,8 @@ public void createResult() { @Then("the response contains the list of conversation templates with the V2 structure") public void listResult() { - Assertions.assertEquals(listResponse.size(), 2); + TestHelpers.checkIteratorItems(listResponse.iterator(), 2); + TestHelpers.recursiveEquals( expectedGetResult, listResponse.stream() @@ -219,29 +221,29 @@ public void listResult() { "for each templateV2 in the templateV2 list response, it defines a translation with version" + " {string} on top of each current translation version") public void listResultLatest(String versionValue) { - - listResponse.forEach( - template -> { - AtomicInteger searchedValueCount = new AtomicInteger(); - AtomicInteger otherVersionCount = new AtomicInteger(); - template - .getTranslations() - .forEach( - translation -> { - if (translation.getVersion().equals(versionValue)) { - searchedValueCount.getAndIncrement(); - } else { - otherVersionCount.getAndIncrement(); - } - }); - Assertions.assertEquals(searchedValueCount.get(), otherVersionCount.get()); - }); + listResponse + .iterator() + .forEachRemaining( + template -> { + AtomicInteger searchedValueCount = new AtomicInteger(); + AtomicInteger otherVersionCount = new AtomicInteger(); + template + .getTranslations() + .forEach( + translation -> { + if (translation.getVersion().equals(versionValue)) { + searchedValueCount.getAndIncrement(); + } else { + otherVersionCount.getAndIncrement(); + } + }); + Assertions.assertEquals(searchedValueCount.get(), otherVersionCount.get()); + }); } @Then("the response contains the list of translations for a template with the V2 structure") public void listTranslationsResult() { - - Assertions.assertEquals(listTranslationsResponse.size(), 2); + TestHelpers.checkIteratorItems(listTranslationsResponse.iterator(), 2); Assertions.assertEquals( listTranslationsResponse.stream().filter(f -> f.getVersion().equals("latest")).count(), 0); } diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/WebhooksEventsSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/WebhooksEventsSteps.java index ca602f014..9f86759f4 100644 --- a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/WebhooksEventsSteps.java +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/WebhooksEventsSteps.java @@ -1,7 +1,7 @@ package com.sinch.sdk.e2e.domains.conversation; import com.sinch.sdk.core.TestHelpers; -import com.sinch.sdk.domains.conversation.api.v1.WebHooksService; +import com.sinch.sdk.domains.conversation.api.v1.WebhooksService; import com.sinch.sdk.domains.conversation.models.v1.ChannelIdentity; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; import com.sinch.sdk.domains.conversation.models.v1.ProcessingMode; @@ -111,7 +111,7 @@ public class WebhooksEventsSteps { WEBHOOKS_PATH + "message-inbound/smart-conversation-redaction")) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - WebHooksService service; + WebhooksService service; Map> receivedEvents = new ConcurrentHashMap<>(); diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/WebhooksSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/WebhooksSteps.java index cbea625d5..9d5f4971c 100644 --- a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/WebhooksSteps.java +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/WebhooksSteps.java @@ -1,19 +1,18 @@ package com.sinch.sdk.e2e.domains.conversation; import com.sinch.sdk.core.TestHelpers; -import com.sinch.sdk.domains.conversation.api.v1.WebHooksService; -import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; -import com.sinch.sdk.domains.conversation.models.v1.contact.ContactLanguage; +import com.sinch.sdk.domains.conversation.api.v1.WebhooksService; import com.sinch.sdk.domains.conversation.models.v1.webhooks.ClientCredentials; import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; import com.sinch.sdk.domains.conversation.models.v1.webhooks.WebhookTargetType; import com.sinch.sdk.domains.conversation.models.v1.webhooks.WebhookTrigger; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.request.CreateWebhookRequest; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.response.WebhooksListResponse; 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.util.Arrays; -import java.util.Collection; import java.util.Collections; import org.junit.jupiter.api.Assertions; @@ -21,9 +20,10 @@ public class WebhooksSteps { static final String WEBHOOK_ID = "01W4FFL35P4NC4K35WEBHOOK004"; - WebHooksService service; + WebhooksService service; Webhook createResponse; - Collection listResponse; + + WebhooksListResponse listResponse; Webhook getResponse; Webhook updateResponse; boolean deletePassed; @@ -36,8 +36,8 @@ public void serviceAvailable() { @When("^I send a request to create a conversation webhook$") public void create() { - Webhook request = - Webhook.builder() + CreateWebhookRequest request = + CreateWebhookRequest.builder() .setAppId(AppsSteps.APP_ID) .setTarget("https://my-callback-server.com/capability") .setTriggers(Collections.singletonList(WebhookTrigger.CAPABILITY)) @@ -96,7 +96,8 @@ public void createResult() { @Then("the response contains the list of conversation webhooks") public void listResult() { - Assertions.assertEquals(listResponse.size(), 4); + TestHelpers.checkIteratorItems(listResponse.iterator(), 4); + Webhook entry = listResponse.stream() .filter(f -> f.getId().equals("01W4FFL35P4NC4K35WEBHOOK002")) @@ -148,8 +149,4 @@ public void deleteResult() { Assertions.assertTrue(deletePassed); } - - void checkExpectedContactResponseCommonFields(Contact contactResponse) { - Assertions.assertEquals(contactResponse.getLanguage(), ContactLanguage.EN_US); - } } 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 e74f7db49..301b66e9b 100644 --- a/core/src/test/java/com/sinch/sdk/core/TestHelpers.java +++ b/core/src/test/java/com/sinch/sdk/core/TestHelpers.java @@ -1,5 +1,7 @@ package com.sinch.sdk.core; +import java.util.Iterator; +import java.util.concurrent.atomic.AtomicInteger; import org.assertj.core.api.Assertions; import org.assertj.core.api.recursive.comparison.RecursiveComparisonConfiguration; @@ -8,11 +10,18 @@ public class TestHelpers { private static final RecursiveComparisonConfiguration recursiveComparisonConfiguration = RecursiveComparisonConfiguration.builder().withStrictTypeChecking(true).build(); - public static void recursiveEquals(Object actual, Object expected) { + public static void recursiveEquals(Object actual, Object expected, String... excludedFields) { Assertions.assertThat(actual.getClass()).isEqualTo(expected.getClass()); Assertions.assertThat(actual) .usingRecursiveComparison(recursiveComparisonConfiguration) + .ignoringFields(excludedFields) .isEqualTo(expected); } + + public static void checkIteratorItems(Iterator iterator, int expectedCount) { + AtomicInteger count = new AtomicInteger(); + iterator.forEachRemaining(i -> count.incrementAndGet()); + Assertions.assertThat(count.get()).isEqualTo(expectedCount); + } } diff --git a/core/src/test/java/com/sinch/sdk/core/http/HttpRequestTest.java b/core/src/test/java/com/sinch/sdk/core/http/HttpRequestTest.java index 0fe1202ff..5e3e753b2 100644 --- a/core/src/test/java/com/sinch/sdk/core/http/HttpRequestTest.java +++ b/core/src/test/java/com/sinch/sdk/core/http/HttpRequestTest.java @@ -1,7 +1,9 @@ package com.sinch.sdk.core.http; import com.sinch.sdk.core.TestHelpers; +import org.json.JSONException; import org.mockito.ArgumentMatcher; +import org.skyscreamer.jsonassert.JSONAssert; public class HttpRequestTest { @@ -16,8 +18,19 @@ public HttpRequestMatcher(HttpRequest left) { @Override public boolean matches(HttpRequest right) { try { - TestHelpers.recursiveEquals(right, left); - } catch (AssertionError e) { + if (null != right.getContentType() + && right.getContentType().contains(HttpContentType.APPLICATION_JSON)) { + // ignoring JSON payload differences in formatting (if field order differs, etc) + // we are doing this to simplify writing input test condition about JSON payload and order + // of fields within it + TestHelpers.recursiveEquals(right, left, "body"); + // now check the body specifically as JSON string and do not take fields order into + // account + JSONAssert.assertEquals(right.getBody(), left.getBody(), true); + } else { + TestHelpers.recursiveEquals(right, left); + } + } catch (AssertionError | JSONException e) { return false; } return true; diff --git a/examples/snippets/src/main/java/conversation/README.md b/examples/snippets/src/main/java/conversation/README.md index 063f5ef5b..a36701f68 100644 --- a/examples/snippets/src/main/java/conversation/README.md +++ b/examples/snippets/src/main/java/conversation/README.md @@ -3,27 +3,23 @@ Sinch Java SDK Code Snippets Repository for Conversation APIs See main [README.md](../../../../README.md) for how to execute snippets -- Messages - - [conversation/messages/Send](./messages/Send.java) - - [conversation/messages/Update](./messages/Update.java) - - [conversation/messages/Get](./messages/Get.java) - - [conversation/messages/Delete](./messages/Delete.java) - - [conversation/messages/List](./messages/List.java) -- Application - - [conversation/application/List](./application/List.java) - - [conversation/application/Create](./application/Create.java) - - [conversation/application/Get](./application/Get.java) - - [conversation/application/Delete](./application/Delete.java) - - [conversation/application/Update](./application/Update.java) -- Contact - - [conversation/contact/List](./contact/List.java) - - [conversation/contact/Create](./contact/Create.java) - - [conversation/contact/Get](./contact/Get.java) - - [conversation/contact/Delete](./contact/Delete.java) - - [conversation/contact/Update](./contact/Update.java) - - [conversation/contact/Merge](./contact/Merge.java) - - [conversation/contact/GetChannelProfile](./contact/GetChannelProfile.java) -- Conversation +- Applications + - [conversation/applications/List](./applications/List.java) + - [conversation/applications/Create](./applications/Create.java) + - [conversation/applications/Get](./applications/Get.java) + - [conversation/applications/Delete](./applications/Delete.java) + - [conversation/applications/Update](./applications/Update.java) +- Capability + - [conversation/capability/Capability](./capability/Capability.java) +- Contacts + - [conversation/contacts/List](./contacts/List.java) + - [conversation/contacts/Create](./contacts/Create.java) + - [conversation/contacts/Get](./contacts/Get.java) + - [conversation/contacts/Delete](./contacts/Delete.java) + - [conversation/contacts/Update](./contacts/Update.java) + - [conversation/contacts/Merge](./contacts/Merge.java) + - [conversation/contacts/GetChannelProfile](./contacts/GetChannelProfile.java) +- Conversations - [conversation/conversations/List](./conversations/List.java) - [conversation/conversations/Create](./conversations/Create.java) - [conversation/conversations/Get](./conversations/Get.java) @@ -38,10 +34,19 @@ See main [README.md](../../../../README.md) for how to execute snippets - [conversation/events/Get](./events/Get.java) - [conversation/events/Delete](./events/Delete.java) - [conversation/events/List](./events/List.java) +- Project Settings + - [conversation/projectsettings/Create](./projectsettings/Create.java) + - [conversation/projectsettings/Delete](./projectsettings/Delete.java) + - [conversation/projectsettings/Get](./projectsettings/Get.java) + - [conversation/projectsettings/Update](./projectsettings/Update.java) +- Messages + - [conversation/messages/Send](./messages/Send.java) + - [conversation/messages/Update](./messages/Update.java) + - [conversation/messages/Get](./messages/Get.java) + - [conversation/messages/Delete](./messages/Delete.java) + - [conversation/messages/List](./messages/List.java) - Transcoding - [conversation/transcoding/Transcode](./transcoding/Transcode.java) -- Capability - - [conversation/capability/Capability](./capability/Capability.java) - Webhooks - [conversation/webhooks/List](./webhooks/List.java) - [conversation/webhooks/Create](./webhooks/Create.java) @@ -50,12 +55,6 @@ See main [README.md](../../../../README.md) for how to execute snippets - [conversation/webhooks/Delete](./webhooks/Delete.java) - Templates - - V1 - - [conversation/templates/v1/List](./templates/v1/List.java) - - [conversation/templates/v1/Create](./templates/v1/Create.java) - - [conversation/templates/v1/Update](./templates/v1/Update.java) - - [conversation/templates/v1/Get](./templates/v1/Get.java) - - [conversation/templates/v1/Delete](./templates/v1/Delete.java) - V2 - [conversation/templates/v2/List](./templates/v2/List.java) - [conversation/templates/v2/Create](./templates/v2/Create.java) diff --git a/examples/snippets/src/main/java/conversation/application/Create.java b/examples/snippets/src/main/java/conversation/applications/Create.java similarity index 88% rename from examples/snippets/src/main/java/conversation/application/Create.java rename to examples/snippets/src/main/java/conversation/applications/Create.java index 9dfa9689d..52b1c52b3 100644 --- a/examples/snippets/src/main/java/conversation/application/Create.java +++ b/examples/snippets/src/main/java/conversation/applications/Create.java @@ -5,12 +5,12 @@ * *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details */ -package conversation.application; +package conversation.applications; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.AppService; -import com.sinch.sdk.domains.conversation.models.v1.app.request.AppCreateRequest; -import com.sinch.sdk.domains.conversation.models.v1.app.response.AppResponse; +import com.sinch.sdk.domains.conversation.api.v1.AppsService; +import com.sinch.sdk.domains.conversation.models.v1.apps.request.AppCreateRequest; +import com.sinch.sdk.domains.conversation.models.v1.apps.response.AppResponse; import com.sinch.sdk.domains.conversation.models.v1.credentials.ConversationChannelCredentials; import com.sinch.sdk.domains.conversation.models.v1.credentials.ConversationChannelCredentialsBuilderFactory; import com.sinch.sdk.domains.conversation.models.v1.credentials.StaticBearerCredentials; @@ -46,7 +46,7 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - AppService appService = client.conversation().v1().app(); + AppsService appService = client.conversation().v1().apps(); LOGGER.info( String.format( diff --git a/examples/snippets/src/main/java/conversation/application/Delete.java b/examples/snippets/src/main/java/conversation/applications/Delete.java similarity index 90% rename from examples/snippets/src/main/java/conversation/application/Delete.java rename to examples/snippets/src/main/java/conversation/applications/Delete.java index b8d5d3381..e5d8974d4 100644 --- a/examples/snippets/src/main/java/conversation/application/Delete.java +++ b/examples/snippets/src/main/java/conversation/applications/Delete.java @@ -5,10 +5,10 @@ * *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details */ -package conversation.application; +package conversation.applications; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.AppService; +import com.sinch.sdk.domains.conversation.api.v1.AppsService; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.logging.Logger; @@ -38,7 +38,7 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - AppService appService = client.conversation().v1().app(); + AppsService appService = client.conversation().v1().apps(); LOGGER.info( String.format("Delete conversation application with ID '%s'", conversationApplicationId)); diff --git a/examples/snippets/src/main/java/conversation/application/Get.java b/examples/snippets/src/main/java/conversation/applications/Get.java similarity index 86% rename from examples/snippets/src/main/java/conversation/application/Get.java rename to examples/snippets/src/main/java/conversation/applications/Get.java index a7f25b8d4..fd1d74e31 100644 --- a/examples/snippets/src/main/java/conversation/application/Get.java +++ b/examples/snippets/src/main/java/conversation/applications/Get.java @@ -5,11 +5,11 @@ * *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details */ -package conversation.application; +package conversation.applications; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.AppService; -import com.sinch.sdk.domains.conversation.models.v1.app.response.AppResponse; +import com.sinch.sdk.domains.conversation.api.v1.AppsService; +import com.sinch.sdk.domains.conversation.models.v1.apps.response.AppResponse; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - AppService appService = client.conversation().v1().app(); + AppsService appService = client.conversation().v1().apps(); LOGGER.info( String.format("Get details for application with ID '%s'", conversationApplicationId)); diff --git a/examples/snippets/src/main/java/conversation/application/List.java b/examples/snippets/src/main/java/conversation/applications/List.java similarity index 81% rename from examples/snippets/src/main/java/conversation/application/List.java rename to examples/snippets/src/main/java/conversation/applications/List.java index 079cb359a..9a696c2ba 100644 --- a/examples/snippets/src/main/java/conversation/application/List.java +++ b/examples/snippets/src/main/java/conversation/applications/List.java @@ -5,14 +5,13 @@ * *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details */ -package conversation.application; +package conversation.applications; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.AppService; -import com.sinch.sdk.domains.conversation.models.v1.app.response.AppResponse; +import com.sinch.sdk.domains.conversation.api.v1.AppsService; +import com.sinch.sdk.domains.conversation.models.v1.apps.response.AppsListResponse; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; -import java.util.Collection; import java.util.logging.Logger; import utils.Settings; @@ -37,11 +36,11 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - AppService appService = client.conversation().v1().app(); + AppsService appService = client.conversation().v1().apps(); LOGGER.info("List conversations"); - Collection result = appService.list(); + AppsListResponse result = appService.list(); LOGGER.info("Response: "); diff --git a/examples/snippets/src/main/java/conversation/application/Update.java b/examples/snippets/src/main/java/conversation/applications/Update.java similarity index 84% rename from examples/snippets/src/main/java/conversation/application/Update.java rename to examples/snippets/src/main/java/conversation/applications/Update.java index b47df3ab1..145f8907b 100644 --- a/examples/snippets/src/main/java/conversation/application/Update.java +++ b/examples/snippets/src/main/java/conversation/applications/Update.java @@ -5,12 +5,12 @@ * *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details */ -package conversation.application; +package conversation.applications; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.AppService; -import com.sinch.sdk.domains.conversation.models.v1.app.request.AppUpdateRequest; -import com.sinch.sdk.domains.conversation.models.v1.app.response.AppResponse; +import com.sinch.sdk.domains.conversation.api.v1.AppsService; +import com.sinch.sdk.domains.conversation.models.v1.apps.request.AppUpdateRequest; +import com.sinch.sdk.domains.conversation.models.v1.apps.response.AppResponse; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.logging.Logger; @@ -42,7 +42,7 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - AppService appService = client.conversation().v1().app(); + AppsService appService = client.conversation().v1().apps(); LOGGER.info(String.format("Update application with ID '%s'", conversationApplicationId)); diff --git a/examples/snippets/src/main/java/conversation/contact/Create.java b/examples/snippets/src/main/java/conversation/contacts/Create.java similarity index 85% rename from examples/snippets/src/main/java/conversation/contact/Create.java rename to examples/snippets/src/main/java/conversation/contacts/Create.java index bcaa6999a..e0f4a3b7c 100644 --- a/examples/snippets/src/main/java/conversation/contact/Create.java +++ b/examples/snippets/src/main/java/conversation/contacts/Create.java @@ -5,15 +5,15 @@ * *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details */ -package conversation.contact; +package conversation.contacts; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.ContactService; +import com.sinch.sdk.domains.conversation.api.v1.ContactsService; import com.sinch.sdk.domains.conversation.models.v1.ChannelIdentity; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; -import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; -import com.sinch.sdk.domains.conversation.models.v1.contact.ContactLanguage; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactCreateRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.Contact; +import com.sinch.sdk.domains.conversation.models.v1.contacts.ContactLanguage; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactCreateRequest; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.Arrays; @@ -50,7 +50,7 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - ContactService contactService = client.conversation().v1().contact(); + ContactsService contactService = client.conversation().v1().contacts(); LOGGER.info("Create contact"); diff --git a/examples/snippets/src/main/java/conversation/contact/Delete.java b/examples/snippets/src/main/java/conversation/contacts/Delete.java similarity index 89% rename from examples/snippets/src/main/java/conversation/contact/Delete.java rename to examples/snippets/src/main/java/conversation/contacts/Delete.java index 94efb14b7..51cf1ff12 100644 --- a/examples/snippets/src/main/java/conversation/contact/Delete.java +++ b/examples/snippets/src/main/java/conversation/contacts/Delete.java @@ -5,10 +5,10 @@ * *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details */ -package conversation.contact; +package conversation.contacts; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.ContactService; +import com.sinch.sdk.domains.conversation.api.v1.ContactsService; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.logging.Logger; @@ -38,7 +38,7 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - ContactService contactService = client.conversation().v1().contact(); + ContactsService contactService = client.conversation().v1().contacts(); LOGGER.info(String.format("Delete conversation contact with ID '%s'", conversationContactId)); diff --git a/examples/snippets/src/main/java/conversation/contact/Get.java b/examples/snippets/src/main/java/conversation/contacts/Get.java similarity index 85% rename from examples/snippets/src/main/java/conversation/contact/Get.java rename to examples/snippets/src/main/java/conversation/contacts/Get.java index 4d6e9de8d..3c61edc90 100644 --- a/examples/snippets/src/main/java/conversation/contact/Get.java +++ b/examples/snippets/src/main/java/conversation/contacts/Get.java @@ -5,11 +5,11 @@ * *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details */ -package conversation.contact; +package conversation.contacts; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.ContactService; -import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; +import com.sinch.sdk.domains.conversation.api.v1.ContactsService; +import com.sinch.sdk.domains.conversation.models.v1.contacts.Contact; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - ContactService contactService = client.conversation().v1().contact(); + ContactsService contactService = client.conversation().v1().contacts(); LOGGER.info(String.format("Get details for contact with ID '%s'", conversationContactId)); diff --git a/examples/snippets/src/main/java/conversation/contact/GetChannelProfile.java b/examples/snippets/src/main/java/conversation/contacts/GetChannelProfile.java similarity index 77% rename from examples/snippets/src/main/java/conversation/contact/GetChannelProfile.java rename to examples/snippets/src/main/java/conversation/contacts/GetChannelProfile.java index bc3e1369b..86d66334b 100644 --- a/examples/snippets/src/main/java/conversation/contact/GetChannelProfile.java +++ b/examples/snippets/src/main/java/conversation/contacts/GetChannelProfile.java @@ -5,12 +5,13 @@ * *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details */ -package conversation.contact; +package conversation.contacts; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.ContactService; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactGetChannelProfileByContactIdRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.GetChannelProfileConversationChannel; +import com.sinch.sdk.domains.conversation.api.v1.ContactsService; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactGetChannelProfileByContactIdRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.GetChannelProfileConversationChannel; +import com.sinch.sdk.domains.conversation.models.v1.contacts.response.GetChannelProfileResponse; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.logging.Logger; @@ -45,7 +46,7 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - ContactService contactService = client.conversation().v1().contact(); + ContactsService contactService = client.conversation().v1().contacts(); ContactGetChannelProfileByContactIdRequest parametersByContactId = ContactGetChannelProfileByContactIdRequest.builder() @@ -58,7 +59,8 @@ public static void main(String[] args) { String.format( "Get MESSENGER channel profile for contact with ID '%s'", conversationContactId)); - String result = contactService.getChannelProfileByContactId(parametersByContactId); + GetChannelProfileResponse result = + contactService.getChannelProfileByContactId(parametersByContactId); LOGGER.info("Response: " + result); } diff --git a/examples/snippets/src/main/java/conversation/contact/List.java b/examples/snippets/src/main/java/conversation/contacts/List.java similarity index 70% rename from examples/snippets/src/main/java/conversation/contact/List.java rename to examples/snippets/src/main/java/conversation/contacts/List.java index 61e3f539e..962032a72 100644 --- a/examples/snippets/src/main/java/conversation/contact/List.java +++ b/examples/snippets/src/main/java/conversation/contacts/List.java @@ -5,12 +5,12 @@ * *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details */ -package conversation.contact; +package conversation.contacts; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.ContactService; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactListRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.ContactListResponse; +import com.sinch.sdk.domains.conversation.api.v1.ContactsService; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.contacts.response.ContactsListResponse; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.logging.Logger; @@ -37,13 +37,14 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - ContactService contactService = client.conversation().v1().contact(); + ContactsService contactService = client.conversation().v1().contacts(); LOGGER.info("List contacts"); - ContactListRequest request = ContactListRequest.builder().setPageSize(20).build(); + ContactsListQueryParameters request = + ContactsListQueryParameters.builder().setPageSize(20).build(); - ContactListResponse response = contactService.list(request); + ContactsListResponse response = contactService.list(request); LOGGER.info("Response: "); diff --git a/examples/snippets/src/main/java/conversation/contact/Merge.java b/examples/snippets/src/main/java/conversation/contacts/Merge.java similarity index 78% rename from examples/snippets/src/main/java/conversation/contact/Merge.java rename to examples/snippets/src/main/java/conversation/contacts/Merge.java index 852e14bf5..3b64a1072 100644 --- a/examples/snippets/src/main/java/conversation/contact/Merge.java +++ b/examples/snippets/src/main/java/conversation/contacts/Merge.java @@ -5,11 +5,12 @@ * *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details */ -package conversation.contact; +package conversation.contacts; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.ContactService; -import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; +import com.sinch.sdk.domains.conversation.api.v1.ContactsService; +import com.sinch.sdk.domains.conversation.models.v1.contacts.Contact; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.MergeContactRequest; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.logging.Logger; @@ -41,14 +42,16 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - ContactService contactService = client.conversation().v1().contact(); + ContactsService contactService = client.conversation().v1().contacts(); LOGGER.info( String.format( "Merge contact with ID '%s' onto contact with ID '%s'", sourceContactId, destinationContactId)); - Contact result = contactService.mergeContact(destinationContactId, sourceContactId); + MergeContactRequest request = + MergeContactRequest.builder().setSourceId(sourceContactId).build(); + Contact result = contactService.mergeContact(destinationContactId, request); LOGGER.info("Response: " + result); } diff --git a/examples/snippets/src/main/java/conversation/contact/Update.java b/examples/snippets/src/main/java/conversation/contacts/Update.java similarity index 86% rename from examples/snippets/src/main/java/conversation/contact/Update.java rename to examples/snippets/src/main/java/conversation/contacts/Update.java index e604711ef..18f4c6743 100644 --- a/examples/snippets/src/main/java/conversation/contact/Update.java +++ b/examples/snippets/src/main/java/conversation/contacts/Update.java @@ -5,11 +5,11 @@ * *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details */ -package conversation.contact; +package conversation.contacts; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.ContactService; -import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; +import com.sinch.sdk.domains.conversation.api.v1.ContactsService; +import com.sinch.sdk.domains.conversation.models.v1.contacts.Contact; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.logging.Logger; @@ -39,7 +39,7 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - ContactService contactService = client.conversation().v1().contact(); + ContactsService contactService = client.conversation().v1().contacts(); LOGGER.info(String.format("Update contact with ID '%s'", conversationContactId)); diff --git a/examples/snippets/src/main/java/conversation/conversations/Create.java b/examples/snippets/src/main/java/conversation/conversations/Create.java index 656b0f3f5..9461388eb 100644 --- a/examples/snippets/src/main/java/conversation/conversations/Create.java +++ b/examples/snippets/src/main/java/conversation/conversations/Create.java @@ -9,8 +9,8 @@ import com.sinch.sdk.SinchClient; import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; -import com.sinch.sdk.domains.conversation.models.v1.conversation.Conversation; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.CreateConversationRequest; +import com.sinch.sdk.domains.conversation.models.v1.conversations.Conversation; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.CreateConversationRequest; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.logging.Logger; diff --git a/examples/snippets/src/main/java/conversation/conversations/Get.java b/examples/snippets/src/main/java/conversation/conversations/Get.java index ce1c517c3..6ba139bf6 100644 --- a/examples/snippets/src/main/java/conversation/conversations/Get.java +++ b/examples/snippets/src/main/java/conversation/conversations/Get.java @@ -9,7 +9,7 @@ import com.sinch.sdk.SinchClient; import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; -import com.sinch.sdk.domains.conversation.models.v1.conversation.Conversation; +import com.sinch.sdk.domains.conversation.models.v1.conversations.Conversation; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.logging.Logger; diff --git a/examples/snippets/src/main/java/conversation/conversations/InjectEvent.java b/examples/snippets/src/main/java/conversation/conversations/InjectEvent.java index 151d965c1..4011cb5bc 100644 --- a/examples/snippets/src/main/java/conversation/conversations/InjectEvent.java +++ b/examples/snippets/src/main/java/conversation/conversations/InjectEvent.java @@ -12,8 +12,8 @@ import com.sinch.sdk.domains.conversation.models.v1.ChannelIdentity; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; import com.sinch.sdk.domains.conversation.models.v1.ProcessingMode; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.InjectEventRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.InjectEventResponse; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.InjectEventRequest; +import com.sinch.sdk.domains.conversation.models.v1.conversations.response.InjectEventResponse; import com.sinch.sdk.domains.conversation.models.v1.events.AppEvent; import com.sinch.sdk.domains.conversation.models.v1.events.types.GenericEvent; import com.sinch.sdk.models.Configuration; diff --git a/examples/snippets/src/main/java/conversation/conversations/InjectMessage.java b/examples/snippets/src/main/java/conversation/conversations/InjectMessage.java index ef98d7ea8..5c70e8732 100644 --- a/examples/snippets/src/main/java/conversation/conversations/InjectMessage.java +++ b/examples/snippets/src/main/java/conversation/conversations/InjectMessage.java @@ -12,7 +12,7 @@ import com.sinch.sdk.domains.conversation.models.v1.ChannelIdentity; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; import com.sinch.sdk.domains.conversation.models.v1.ConversationDirection; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.InjectMessageRequest; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.InjectMessageRequest; import com.sinch.sdk.domains.conversation.models.v1.messages.AppMessage; import com.sinch.sdk.domains.conversation.models.v1.messages.types.text.TextMessage; import com.sinch.sdk.models.Configuration; diff --git a/examples/snippets/src/main/java/conversation/conversations/List.java b/examples/snippets/src/main/java/conversation/conversations/List.java index 17a592d1f..10264659b 100644 --- a/examples/snippets/src/main/java/conversation/conversations/List.java +++ b/examples/snippets/src/main/java/conversation/conversations/List.java @@ -9,8 +9,8 @@ import com.sinch.sdk.SinchClient; import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.ConversationsListRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.ConversationsListResponse; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.ConversationsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.conversations.response.ConversationsListResponse; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.logging.Logger; @@ -46,8 +46,8 @@ public static void main(String[] args) { String.format( "List conversations for application with ID '%s'", conversationApplicationId)); - ConversationsListRequest request = - ConversationsListRequest.builder().setAppId(conversationApplicationId).build(); + ConversationsListQueryParameters request = + ConversationsListQueryParameters.builder().setAppId(conversationApplicationId).build(); ConversationsListResponse response = conversationsService.list(request); diff --git a/examples/snippets/src/main/java/conversation/conversations/ListRecent.java b/examples/snippets/src/main/java/conversation/conversations/ListRecent.java index 2bef23979..ec858c61e 100644 --- a/examples/snippets/src/main/java/conversation/conversations/ListRecent.java +++ b/examples/snippets/src/main/java/conversation/conversations/ListRecent.java @@ -9,8 +9,8 @@ import com.sinch.sdk.SinchClient; import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.ConversationsListRecentRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.ConversationsListRecentResponse; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.RecentConversationsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.conversations.response.RecentConversationsListResponse; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.logging.Logger; @@ -46,13 +46,13 @@ public static void main(String[] args) { String.format( "List recent conversations for application with ID '%s'", conversationApplicationId)); - ConversationsListRecentRequest request = - ConversationsListRecentRequest.builder() + RecentConversationsListQueryParameters request = + RecentConversationsListQueryParameters.builder() .setOnlyActive(false) .setAppId(conversationApplicationId) .build(); - ConversationsListRecentResponse response = conversationsService.listRecent(request); + RecentConversationsListResponse response = conversationsService.listRecent(request); LOGGER.info("Response:"); diff --git a/examples/snippets/src/main/java/conversation/conversations/Update.java b/examples/snippets/src/main/java/conversation/conversations/Update.java index 4aed402da..4819f6269 100644 --- a/examples/snippets/src/main/java/conversation/conversations/Update.java +++ b/examples/snippets/src/main/java/conversation/conversations/Update.java @@ -9,7 +9,8 @@ import com.sinch.sdk.SinchClient; import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; -import com.sinch.sdk.domains.conversation.models.v1.conversation.Conversation; +import com.sinch.sdk.domains.conversation.models.v1.conversations.Conversation; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.ConversationsUpdateQueryParameters; import com.sinch.sdk.domains.conversation.models.v1.request.MetadataUpdateStrategy; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; @@ -42,12 +43,16 @@ public static void main(String[] args) { ConversationsService conversationsService = client.conversation().v1().conversations(); - Conversation request = Conversation.builder().setActive(true).build(); + ConversationsUpdateQueryParameters request = + ConversationsUpdateQueryParameters.builder() + .setMetadataUpdateStrategy(MetadataUpdateStrategy.REPLACE) + .build(); + + Conversation conversation = Conversation.builder().setActive(true).build(); LOGGER.info(String.format("Update conversation with ID '%s'", conversationId)); - Conversation result = - conversationsService.update(conversationId, MetadataUpdateStrategy.REPLACE, request); + Conversation result = conversationsService.update(conversationId, request, conversation); LOGGER.info("Response: " + result); } diff --git a/examples/snippets/src/main/java/conversation/events/List.java b/examples/snippets/src/main/java/conversation/events/List.java index dc041f8ec..bdb23cc2a 100644 --- a/examples/snippets/src/main/java/conversation/events/List.java +++ b/examples/snippets/src/main/java/conversation/events/List.java @@ -9,7 +9,7 @@ import com.sinch.sdk.SinchClient; import com.sinch.sdk.domains.conversation.api.v1.EventsService; -import com.sinch.sdk.domains.conversation.models.v1.events.request.EventsListRequest; +import com.sinch.sdk.domains.conversation.models.v1.events.request.EventsListQueryParameters; import com.sinch.sdk.domains.conversation.models.v1.events.response.EventsListResponse; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; @@ -44,8 +44,8 @@ public static void main(String[] args) { LOGGER.info(String.format("List events for conversation with ID '%s'", conversationId)); - EventsListRequest request = - EventsListRequest.builder().setConversationId(conversationId).build(); + EventsListQueryParameters request = + EventsListQueryParameters.builder().setConversationId(conversationId).build(); EventsListResponse response = eventsService.list(request); diff --git a/examples/snippets/src/main/java/conversation/messages/List.java b/examples/snippets/src/main/java/conversation/messages/List.java index bcaa4ce38..1e37d3378 100644 --- a/examples/snippets/src/main/java/conversation/messages/List.java +++ b/examples/snippets/src/main/java/conversation/messages/List.java @@ -9,7 +9,7 @@ import com.sinch.sdk.SinchClient; import com.sinch.sdk.domains.conversation.api.v1.MessagesService; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesListRequest; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesListQueryParameters; import com.sinch.sdk.domains.conversation.models.v1.messages.response.MessagesListResponse; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; @@ -45,8 +45,8 @@ public static void main(String[] args) { LOGGER.info( String.format("List messages for application with ID '%s'", conversationApplicationId)); - MessagesListRequest request = - MessagesListRequest.builder().setAppId(conversationApplicationId).build(); + MessagesListQueryParameters request = + MessagesListQueryParameters.builder().setAppId(conversationApplicationId).build(); MessagesListResponse response = messagesService.list(request); diff --git a/examples/snippets/src/main/java/conversation/templates/v1/Create.java b/examples/snippets/src/main/java/conversation/projectsettings/Create.java similarity index 55% rename from examples/snippets/src/main/java/conversation/templates/v1/Create.java rename to examples/snippets/src/main/java/conversation/projectsettings/Create.java index ee6763bd9..3ddbb41b3 100644 --- a/examples/snippets/src/main/java/conversation/templates/v1/Create.java +++ b/examples/snippets/src/main/java/conversation/projectsettings/Create.java @@ -5,15 +5,15 @@ * *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details */ -package conversation.templates.v1; +package conversation.projectsettings; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.templates.v1.TemplatesServiceV1; -import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateTranslation; -import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateV1; +import com.sinch.sdk.domains.conversation.api.v1.ProjectSettingsService; +import com.sinch.sdk.domains.conversation.models.v1.projectsettings.ContactSettings; +import com.sinch.sdk.domains.conversation.models.v1.projectsettings.request.ProjectSettingsRequest; +import com.sinch.sdk.domains.conversation.models.v1.projectsettings.response.ProjectSettingsResponse; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; -import java.util.Arrays; import java.util.logging.Logger; import utils.Settings; @@ -38,24 +38,17 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - TemplatesServiceV1 templatesServiceV1 = client.conversation().templates().v1(); - - TemplateV1 request = - TemplateV1.builder() - .setDefaultTranslation("en-US") - .setTranslations( - Arrays.asList( - TemplateTranslation.builder() - .setLanguageCode("en-US") - .setVersion("1234") - .setContent( - "{ \"text_message\": { \"text\" : \"my text from V1 template\"}}") - .build())) - .build(); + ProjectSettingsService service = client.conversation().v1().projectSettings(); + + LOGGER.info("Create conversation project settings"); + + ContactSettings contactSettings = + ContactSettings.builder().setUnifiedContactIdEnabled(false).build(); - LOGGER.info("Create template"); + ProjectSettingsRequest request = + ProjectSettingsRequest.builder().setContactSettings(contactSettings).build(); - TemplateV1 result = templatesServiceV1.create(request); + ProjectSettingsResponse result = service.create(request); LOGGER.info("Response: " + result); } diff --git a/examples/snippets/src/main/java/conversation/templates/v1/Delete.java b/examples/snippets/src/main/java/conversation/projectsettings/Delete.java similarity index 72% rename from examples/snippets/src/main/java/conversation/templates/v1/Delete.java rename to examples/snippets/src/main/java/conversation/projectsettings/Delete.java index 56d58167e..d84319d46 100644 --- a/examples/snippets/src/main/java/conversation/templates/v1/Delete.java +++ b/examples/snippets/src/main/java/conversation/projectsettings/Delete.java @@ -5,10 +5,10 @@ * *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details */ -package conversation.templates.v1; +package conversation.projectsettings; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.templates.v1.TemplatesServiceV1; +import com.sinch.sdk.domains.conversation.api.v1.ProjectSettingsService; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.logging.Logger; @@ -25,9 +25,6 @@ public static void main(String[] args) { String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); - // The ID of the template to delete - String conversationTemplateId = "TEMPLATE_ID"; - Configuration configuration = Configuration.builder() .setProjectId(projectId) @@ -38,12 +35,12 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - TemplatesServiceV1 templatesServiceV1 = client.conversation().templates().v1(); + ProjectSettingsService service = client.conversation().v1().projectSettings(); - LOGGER.info(String.format("Delete template with ID '%s'", conversationTemplateId)); + LOGGER.info("Delete conversation project settings"); - templatesServiceV1.delete(conversationTemplateId); + service.delete(); - LOGGER.info("Done"); + LOGGER.info("Deletion done."); } } diff --git a/examples/snippets/src/main/java/conversation/templates/v1/Get.java b/examples/snippets/src/main/java/conversation/projectsettings/Get.java similarity index 66% rename from examples/snippets/src/main/java/conversation/templates/v1/Get.java rename to examples/snippets/src/main/java/conversation/projectsettings/Get.java index 98eea101d..80f942e2b 100644 --- a/examples/snippets/src/main/java/conversation/templates/v1/Get.java +++ b/examples/snippets/src/main/java/conversation/projectsettings/Get.java @@ -5,11 +5,11 @@ * *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details */ -package conversation.templates.v1; +package conversation.projectsettings; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.templates.v1.TemplatesServiceV1; -import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateV1; +import com.sinch.sdk.domains.conversation.api.v1.ProjectSettingsService; +import com.sinch.sdk.domains.conversation.models.v1.projectsettings.response.ProjectSettingsResponse; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.logging.Logger; @@ -26,9 +26,6 @@ public static void main(String[] args) { String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); - // The ID of the template to retrieve - String conversationTemplateId = "TEMPLATE_ID"; - Configuration configuration = Configuration.builder() .setProjectId(projectId) @@ -39,13 +36,12 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - TemplatesServiceV1 templatesServiceV1 = client.conversation().templates().v1(); + ProjectSettingsService service = client.conversation().v1().projectSettings(); - LOGGER.info( - String.format("Get information about template with ID '%s'", conversationTemplateId)); + LOGGER.info("Get conversation project settings"); - TemplateV1 response = templatesServiceV1.get(conversationTemplateId); + ProjectSettingsResponse result = service.get(); - LOGGER.info("Response: " + response); + LOGGER.info("Response: " + result); } } diff --git a/examples/snippets/src/main/java/conversation/projectsettings/Update.java b/examples/snippets/src/main/java/conversation/projectsettings/Update.java new file mode 100644 index 000000000..e4cffc211 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/projectsettings/Update.java @@ -0,0 +1,56 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java + * + *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details + */ +package conversation.projectsettings; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.ProjectSettingsService; +import com.sinch.sdk.domains.conversation.models.v1.projectsettings.ContactSettings; +import com.sinch.sdk.domains.conversation.models.v1.projectsettings.request.ProjectSettingsRequest; +import com.sinch.sdk.domains.conversation.models.v1.projectsettings.response.ProjectSettingsResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.io.IOException; +import java.util.logging.Logger; +import utils.Settings; + +public class Update { + + private static final Logger LOGGER = Logger.getLogger(Update.class.getName()); + + public static void main(String[] args) throws IOException { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + ProjectSettingsService service = client.conversation().v1().projectSettings(); + + LOGGER.info("conversation project settings"); + + ContactSettings contactSettings = + ContactSettings.builder().setUnifiedContactIdEnabled(false).build(); + + ProjectSettingsRequest request = + ProjectSettingsRequest.builder().setContactSettings(contactSettings).build(); + + ProjectSettingsResponse result = service.update(request); + + LOGGER.info("Response: " + result); + } +} diff --git a/examples/snippets/src/main/java/conversation/templates/v1/List.java b/examples/snippets/src/main/java/conversation/templates/v1/List.java deleted file mode 100644 index f8d0d3ad3..000000000 --- a/examples/snippets/src/main/java/conversation/templates/v1/List.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Sinch Java Snippet - * - *

This snippet is available at https://github.com/sinch/sinch-sdk-java - * - *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details - */ -package conversation.templates.v1; - -import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.templates.v1.TemplatesServiceV1; -import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateV1; -import com.sinch.sdk.models.Configuration; -import com.sinch.sdk.models.ConversationRegion; -import java.util.Collection; -import java.util.logging.Logger; -import utils.Settings; - -public class List { - - private static final Logger LOGGER = Logger.getLogger(List.class.getName()); - - public static void main(String[] args) { - - String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); - String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); - String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); - String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); - - Configuration configuration = - Configuration.builder() - .setProjectId(projectId) - .setKeyId(keyId) - .setKeySecret(keySecret) - .setConversationRegion(ConversationRegion.from(conversationRegion)) - .build(); - - SinchClient client = new SinchClient(configuration); - - TemplatesServiceV1 templatesServiceV1 = client.conversation().templates().v1(); - - LOGGER.info("List templates V1"); - - Collection result = templatesServiceV1.list(); - - LOGGER.info("Response: "); - - result.iterator().forEachRemaining(f -> LOGGER.info(String.format("- %s: %s", f.getId(), f))); - } -} diff --git a/examples/snippets/src/main/java/conversation/templates/v1/Update.java b/examples/snippets/src/main/java/conversation/templates/v1/Update.java deleted file mode 100644 index 16297216c..000000000 --- a/examples/snippets/src/main/java/conversation/templates/v1/Update.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Sinch Java Snippet - * - *

This snippet is available at https://github.com/sinch/sinch-sdk-java - * - *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details - */ -package conversation.templates.v1; - -import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.templates.v1.TemplatesServiceV1; -import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateTranslation; -import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateV1; -import com.sinch.sdk.models.Configuration; -import com.sinch.sdk.models.ConversationRegion; -import java.util.Arrays; -import java.util.logging.Logger; -import utils.Settings; - -public class Update { - - private static final Logger LOGGER = Logger.getLogger(Update.class.getName()); - - public static void main(String[] args) { - - String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); - String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); - String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); - String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); - - // The ID of the template to update - String conversationTemplateId = "TEMPLATE_ID"; - - Configuration configuration = - Configuration.builder() - .setProjectId(projectId) - .setKeyId(keyId) - .setKeySecret(keySecret) - .setConversationRegion(ConversationRegion.from(conversationRegion)) - .build(); - - SinchClient client = new SinchClient(configuration); - - TemplatesServiceV1 templatesServiceV1 = client.conversation().templates().v1(); - - TemplateV1 request = - TemplateV1.builder() - .setDescription("Updated description from V1 API") - .setDefaultTranslation("en-US") - .setTranslations( - Arrays.asList( - TemplateTranslation.builder() - .setLanguageCode("en-US") - .setContent( - "{ \"text_message\": { \"text\" : \"text updated from V1 template\"}}") - .build())) - .build(); - - LOGGER.info(String.format("Update template with ID '%s'", conversationTemplateId)); - - TemplateV1 result = templatesServiceV1.update(conversationTemplateId, request); - - LOGGER.info("Response: " + result); - } -} diff --git a/examples/snippets/src/main/java/conversation/templates/v2/Create.java b/examples/snippets/src/main/java/conversation/templates/v2/Create.java index 35136cd7d..2e2efee6d 100644 --- a/examples/snippets/src/main/java/conversation/templates/v2/Create.java +++ b/examples/snippets/src/main/java/conversation/templates/v2/Create.java @@ -8,8 +8,8 @@ package conversation.templates.v2; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.templates.v2.TemplatesServiceV2; import com.sinch.sdk.domains.conversation.models.v1.messages.types.text.TextMessage; +import com.sinch.sdk.domains.conversation.templates.api.v2.TemplatesV2Service; import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslation; import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2; import com.sinch.sdk.models.Configuration; @@ -39,7 +39,7 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - TemplatesServiceV2 templatesServiceV2 = client.conversation().templates().v2(); + TemplatesV2Service templatesServiceV2 = client.conversation().templates().v2(); TemplateV2 request = TemplateV2.builder() .setDefaultTranslation("en-US") diff --git a/examples/snippets/src/main/java/conversation/templates/v2/Delete.java b/examples/snippets/src/main/java/conversation/templates/v2/Delete.java index 5bdd4544b..bf8ae8e99 100644 --- a/examples/snippets/src/main/java/conversation/templates/v2/Delete.java +++ b/examples/snippets/src/main/java/conversation/templates/v2/Delete.java @@ -8,7 +8,7 @@ package conversation.templates.v2; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.templates.v2.TemplatesServiceV2; +import com.sinch.sdk.domains.conversation.templates.api.v2.TemplatesV2Service; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.logging.Logger; @@ -38,7 +38,7 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - TemplatesServiceV2 templatesServiceV2 = client.conversation().templates().v2(); + TemplatesV2Service templatesServiceV2 = client.conversation().templates().v2(); LOGGER.info(String.format("Deleting template with ID '%s'", conversationTemplateId)); diff --git a/examples/snippets/src/main/java/conversation/templates/v2/Get.java b/examples/snippets/src/main/java/conversation/templates/v2/Get.java index d71414612..3b0b8eece 100644 --- a/examples/snippets/src/main/java/conversation/templates/v2/Get.java +++ b/examples/snippets/src/main/java/conversation/templates/v2/Get.java @@ -8,7 +8,7 @@ package conversation.templates.v2; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.templates.v2.TemplatesServiceV2; +import com.sinch.sdk.domains.conversation.templates.api.v2.TemplatesV2Service; import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; @@ -39,7 +39,7 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - TemplatesServiceV2 templatesServiceV2 = client.conversation().templates().v2(); + TemplatesV2Service templatesServiceV2 = client.conversation().templates().v2(); LOGGER.info( String.format("Get information about template with ID '%s'", conversationTemplateId)); diff --git a/examples/snippets/src/main/java/conversation/templates/v2/List.java b/examples/snippets/src/main/java/conversation/templates/v2/List.java index f064426fb..b0e5af3ca 100644 --- a/examples/snippets/src/main/java/conversation/templates/v2/List.java +++ b/examples/snippets/src/main/java/conversation/templates/v2/List.java @@ -8,11 +8,10 @@ package conversation.templates.v2; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.templates.v2.TemplatesServiceV2; -import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2; +import com.sinch.sdk.domains.conversation.templates.api.v2.TemplatesV2Service; +import com.sinch.sdk.domains.conversation.templates.models.v2.response.TemplatesV2ListResponse; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; -import java.util.Collection; import java.util.logging.Logger; import utils.Settings; @@ -37,11 +36,11 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - TemplatesServiceV2 templatesServiceV2 = client.conversation().templates().v2(); + TemplatesV2Service templatesServiceV2 = client.conversation().templates().v2(); LOGGER.info("List templates V2"); - Collection result = templatesServiceV2.list(); + TemplatesV2ListResponse result = templatesServiceV2.list(); LOGGER.info("Response: "); result.iterator().forEachRemaining(f -> LOGGER.info(String.format("- %s: %s", f.getId(), f))); diff --git a/examples/snippets/src/main/java/conversation/templates/v2/ListTranslations.java b/examples/snippets/src/main/java/conversation/templates/v2/ListTranslations.java index b2bb78b78..f7dbd02ab 100644 --- a/examples/snippets/src/main/java/conversation/templates/v2/ListTranslations.java +++ b/examples/snippets/src/main/java/conversation/templates/v2/ListTranslations.java @@ -8,11 +8,10 @@ package conversation.templates.v2; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.templates.v2.TemplatesServiceV2; -import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslation; +import com.sinch.sdk.domains.conversation.templates.api.v2.TemplatesV2Service; +import com.sinch.sdk.domains.conversation.templates.models.v2.response.TranslationsV2ListResponse; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; -import java.util.Collection; import java.util.logging.Logger; import utils.Settings; @@ -40,12 +39,12 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - TemplatesServiceV2 templatesServiceV2 = client.conversation().templates().v2(); + TemplatesV2Service templatesServiceV2 = client.conversation().templates().v2(); LOGGER.info( String.format("List translations for template with ID '%s'", conversationTemplateId)); - Collection response = + TranslationsV2ListResponse response = templatesServiceV2.listTranslations(conversationTemplateId, null); LOGGER.info("Response: "); diff --git a/examples/snippets/src/main/java/conversation/templates/v2/Update.java b/examples/snippets/src/main/java/conversation/templates/v2/Update.java index fd1e92131..17b186b8a 100644 --- a/examples/snippets/src/main/java/conversation/templates/v2/Update.java +++ b/examples/snippets/src/main/java/conversation/templates/v2/Update.java @@ -8,8 +8,8 @@ package conversation.templates.v2; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.templates.v2.TemplatesServiceV2; import com.sinch.sdk.domains.conversation.models.v1.messages.types.text.TextMessage; +import com.sinch.sdk.domains.conversation.templates.api.v2.TemplatesV2Service; import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslation; import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2; import com.sinch.sdk.models.Configuration; @@ -42,7 +42,7 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - TemplatesServiceV2 templatesServiceV2 = client.conversation().templates().v2(); + TemplatesV2Service templatesServiceV2 = client.conversation().templates().v2(); TemplateV2 request = TemplateV2.builder() diff --git a/examples/snippets/src/main/java/conversation/webhooks/Create.java b/examples/snippets/src/main/java/conversation/webhooks/Create.java index a37b40925..7e6220a33 100644 --- a/examples/snippets/src/main/java/conversation/webhooks/Create.java +++ b/examples/snippets/src/main/java/conversation/webhooks/Create.java @@ -8,9 +8,10 @@ package conversation.webhooks; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.WebHooksService; +import com.sinch.sdk.domains.conversation.api.v1.WebhooksService; import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; import com.sinch.sdk.domains.conversation.models.v1.webhooks.WebhookTrigger; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.request.CreateWebhookRequest; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.Arrays; @@ -41,10 +42,10 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - WebHooksService webHooksService = client.conversation().v1().webhooks(); + WebhooksService webHooksService = client.conversation().v1().webhooks(); - Webhook webhookRequest = - Webhook.builder() + CreateWebhookRequest webhookRequest = + CreateWebhookRequest.builder() .setAppId(conversationApplicationId) .setTarget("https://foo.com") .setTriggers(Arrays.asList(WebhookTrigger.CAPABILITY)) diff --git a/examples/snippets/src/main/java/conversation/webhooks/Delete.java b/examples/snippets/src/main/java/conversation/webhooks/Delete.java index d76b45891..55896c6e2 100644 --- a/examples/snippets/src/main/java/conversation/webhooks/Delete.java +++ b/examples/snippets/src/main/java/conversation/webhooks/Delete.java @@ -8,7 +8,7 @@ package conversation.webhooks; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.WebHooksService; +import com.sinch.sdk.domains.conversation.api.v1.WebhooksService; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; import java.util.logging.Logger; @@ -38,7 +38,7 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - WebHooksService webHooksService = client.conversation().v1().webhooks(); + WebhooksService webHooksService = client.conversation().v1().webhooks(); LOGGER.info("Deleting webhook: " + conversationWebhookId); diff --git a/examples/snippets/src/main/java/conversation/webhooks/Get.java b/examples/snippets/src/main/java/conversation/webhooks/Get.java index 46268dd51..5088d379b 100644 --- a/examples/snippets/src/main/java/conversation/webhooks/Get.java +++ b/examples/snippets/src/main/java/conversation/webhooks/Get.java @@ -8,7 +8,7 @@ package conversation.webhooks; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.WebHooksService; +import com.sinch.sdk.domains.conversation.api.v1.WebhooksService; import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; @@ -39,7 +39,7 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - WebHooksService webHooksService = client.conversation().v1().webhooks(); + WebhooksService webHooksService = client.conversation().v1().webhooks(); LOGGER.info(String.format("Get information about webhook with ID '%s'", conversationWebhookId)); diff --git a/examples/snippets/src/main/java/conversation/webhooks/List.java b/examples/snippets/src/main/java/conversation/webhooks/List.java index dceab9d3d..18c94ca66 100644 --- a/examples/snippets/src/main/java/conversation/webhooks/List.java +++ b/examples/snippets/src/main/java/conversation/webhooks/List.java @@ -8,11 +8,10 @@ package conversation.webhooks; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.WebHooksService; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; +import com.sinch.sdk.domains.conversation.api.v1.WebhooksService; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.response.WebhooksListResponse; import com.sinch.sdk.models.Configuration; import com.sinch.sdk.models.ConversationRegion; -import java.util.Collection; import java.util.logging.Logger; import utils.Settings; @@ -40,11 +39,11 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - WebHooksService webHooksService = client.conversation().v1().webhooks(); + WebhooksService webHooksService = client.conversation().v1().webhooks(); LOGGER.info("List"); - Collection response = webHooksService.list(conversationApplicationId); + WebhooksListResponse response = webHooksService.list(conversationApplicationId); LOGGER.info("Response: "); response.iterator().forEachRemaining(f -> LOGGER.info(f.toString())); diff --git a/examples/snippets/src/main/java/conversation/webhooks/Update.java b/examples/snippets/src/main/java/conversation/webhooks/Update.java index 5b548b5ff..8fc3eae85 100644 --- a/examples/snippets/src/main/java/conversation/webhooks/Update.java +++ b/examples/snippets/src/main/java/conversation/webhooks/Update.java @@ -8,7 +8,7 @@ package conversation.webhooks; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.WebHooksService; +import com.sinch.sdk.domains.conversation.api.v1.WebhooksService; import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; import com.sinch.sdk.domains.conversation.models.v1.webhooks.WebhookTargetType; import com.sinch.sdk.domains.conversation.models.v1.webhooks.WebhookTrigger; @@ -42,7 +42,7 @@ public static void main(String[] args) { SinchClient client = new SinchClient(configuration); - WebHooksService webHooksService = client.conversation().v1().webhooks(); + WebhooksService webHooksService = client.conversation().v1().webhooks(); Webhook webhookRequest = Webhook.builder() diff --git a/examples/webhooks/src/main/java/com/mycompany/app/conversation/Controller.java b/examples/webhooks/src/main/java/com/mycompany/app/conversation/Controller.java index befb0835a..a2cca09d1 100644 --- a/examples/webhooks/src/main/java/com/mycompany/app/conversation/Controller.java +++ b/examples/webhooks/src/main/java/com/mycompany/app/conversation/Controller.java @@ -1,7 +1,7 @@ package com.mycompany.app.conversation; import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.conversation.api.v1.WebHooksService; +import com.sinch.sdk.domains.conversation.api.v1.WebhooksService; import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.ConversationWebhookEvent; import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.capability.CapabilityEvent; import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.channel.ChannelEvent; @@ -58,7 +58,7 @@ public Controller(SinchClient sinchClient, ServerBusinessLogic webhooksBusinessL public ResponseEntity ConversationEvent( @RequestHeader Map headers, @RequestBody String body) { - WebHooksService webhooks = sinchClient.conversation().v1().webhooks(); + WebhooksService webhooks = sinchClient.conversation().v1().webhooks(); // set this value to true to validate request from Sinch servers // see https://developers.sinch.com/docs/numbers/api-reference/numbers/tag/Numbers-Callbacks for diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/AppsService.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/AppsService.java new file mode 100644 index 000000000..2abed1c46 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/AppsService.java @@ -0,0 +1,90 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.api.v1; + +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.domains.conversation.models.v1.apps.request.AppCreateRequest; +import com.sinch.sdk.domains.conversation.models.v1.apps.request.AppUpdateRequest; +import com.sinch.sdk.domains.conversation.models.v1.apps.response.AppResponse; +import com.sinch.sdk.domains.conversation.models.v1.apps.response.AppsListResponse; + +/** Apps Service */ +public interface AppsService { + + /** + * List all apps for a given project + * + *

Get a list of all apps in the specified project. + * + * @return AppsListResponse + * @throws ApiException if fails to make API call + */ + AppsListResponse list() throws ApiException; + + /** + * Create an app + * + *

You can create a new Conversation API app using the API. You can create an app for one or + * more channels at once. The ID of the app is generated at creation and will be returned in the + * response. + * + * @param appCreateRequest The app to create. (required) + * @return AppResponse + * @throws ApiException if fails to make API call + */ + AppResponse create(AppCreateRequest appCreateRequest) throws ApiException; + + /** + * Delete an app + * + *

Deletes the app specified by the App ID. Note that this operation will not delete contacts + * (which are stored at the project level) nor any channel-specific resources (for example, + * WhatsApp Sender Identities will not be deleted). + * + * @param appId The unique ID of the app. You can find this on the [Sinch + * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) + * @throws ApiException if fails to make API call + */ + void delete(String appId) throws ApiException; + + /** + * Get an app + * + *

Returns a particular app as specified by the App ID. + * + * @param appId The unique ID of the app. You can find this on the [Sinch + * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) + * @return AppResponse + * @throws ApiException if fails to make API call + */ + AppResponse get(String appId) throws ApiException; + + /** + * Update an app + * + *

Updates a particular app as specified by the App ID. Note that this is a `PATCH` + * operation, so any specified field values will replace existing values. Therefore, **if + * you'd like to add additional configurations to an existing Conversation API app, ensure + * that you include existing values AND new values in the call**. For example, if you'd like + * to add new `channel_credentials`, you can + * [get](https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/App/#tag/App/operation/App_GetApp) + * your existing Conversation API app, extract the existing `channel_credentials` list, + * append your new configuration to that list, and include the updated + * `channel_credentials` list in this update call. + * + * @param appId The unique ID of the app. You can find this on the [Sinch + * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) + * @param appUpdateRequest The updated app. (required) + * @return AppResponse + * @throws ApiException if fails to make API call + */ + AppResponse update(String appId, AppUpdateRequest appUpdateRequest) throws ApiException; +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/CapabilityService.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/CapabilityService.java new file mode 100644 index 000000000..59272b75b --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/CapabilityService.java @@ -0,0 +1,32 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.api.v1; + +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.domains.conversation.models.v1.capability.request.QueryCapabilityRequest; +import com.sinch.sdk.domains.conversation.models.v1.capability.response.QueryCapabilityResponse; + +/** Capability Service */ +public interface CapabilityService { + + /** + * Capability lookup + * + *

This method is asynchronous - it immediately returns the requested Capability registration. + * Capability check is then delivered as a callback to registered webhooks with trigger CAPABILITY + * for every reachable channel. + * + * @param queryCapabilityRequest The query capability request. (required) + * @return QueryCapabilityResponse + * @throws ApiException if fails to make API call + */ + QueryCapabilityResponse lookup(QueryCapabilityRequest queryCapabilityRequest) throws ApiException; +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/ContactsService.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/ContactsService.java new file mode 100644 index 000000000..6f2101292 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/ContactsService.java @@ -0,0 +1,194 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.api.v1; + +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.domains.conversation.models.v1.contacts.Contact; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactCreateRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactGetChannelProfileByChannelIdentityRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactGetChannelProfileByContactIdRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.GetChannelProfileRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.IdentityConflictsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.MergeContactRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.response.ContactsListResponse; +import com.sinch.sdk.domains.conversation.models.v1.contacts.response.GetChannelProfileResponse; +import com.sinch.sdk.domains.conversation.models.v1.contacts.response.IdentityConflictsListResponse; + +/** Contacts Service */ +public interface ContactsService { + + /** + * List Contacts (using default parameters) + * + *

List all contacts in the project. Note that, if a WhatsApp contact is returned, the + * `display_name` field of that contact may be populated with the WhatsApp display name + * (if the name is already stored on the server and the `display_name` field has not + * been overwritten by the user). + * + * @return ContactsListResponse + * @throws ApiException if fails to make API call + */ + ContactsListResponse list() throws ApiException; + + /** + * List Contacts + * + *

List all contacts in the project. Note that, if a WhatsApp contact is returned, the + * `display_name` field of that contact may be populated with the WhatsApp display name + * (if the name is already stored on the server and the `display_name` field has not + * been overwritten by the user). + * + * @param queryParameter (optional) + * @return ContactsListResponse + * @throws ApiException if fails to make API call + */ + ContactsListResponse list(ContactsListQueryParameters queryParameter) throws ApiException; + + /** + * Get Channel Profile + * + *

Get user profile from a specific channel. Only supported on `MESSENGER`, + * `INSTAGRAM`, `VIBER` and `LINE` channels. Note that, in order to + * retrieve a WhatsApp display name, you can use the Get a Contact or List Contacts operations, + * which will populate the `display_name` field of each returned contact with the + * WhatsApp display name (if the name is already stored on the server and the + * `display_name` field has not been overwritten by the user). + * + * @param getChannelProfileRequest (required) + * @return GetChannelProfileResponse + * @throws ApiException if fails to make API call + */ + GetChannelProfileResponse contactGetChannelProfile( + GetChannelProfileRequest getChannelProfileRequest) throws ApiException; + + /** + * Get user profile from a specific channel by contact ID. + * + * @param parameters The ID of the contact to be used to check profile information + * @see #contactGetChannelProfile(GetChannelProfileRequest) + * @since 1.3 + */ + GetChannelProfileResponse getChannelProfileByContactId( + ContactGetChannelProfileByContactIdRequest parameters) throws ApiException; + + /** + * Get user profile from a specific channel by channel identity. + * + * @param parameters The identity as specified by the channel to be used to check profile + * information + * @see #contactGetChannelProfile(GetChannelProfileRequest) + * @since 1.3 + */ + GetChannelProfileResponse getChannelProfileByChannelIdentity( + ContactGetChannelProfileByChannelIdentityRequest parameters) throws ApiException; + + /** + * Create a Contact + * + *

Most Conversation API contacts are [created + * automatically](https://developers.sinch.com/docs/conversation/contact-management/) when a + * message is sent to a new recipient. You can also create a new contact manually using this API + * call. + * + * @param contactCreateRequest The contact to create. (required) + * @return Contact + * @throws ApiException if fails to make API call + */ + Contact create(ContactCreateRequest contactCreateRequest) throws ApiException; + + /** + * Delete a Contact + * + *

Delete a contact as specified by the contact ID. + * + * @param contactId The unique ID of the contact. (required) + * @throws ApiException if fails to make API call + */ + void delete(String contactId) throws ApiException; + + /** + * Get a Contact + * + *

Returns a specific contact as specified by the contact ID. Note the following: - If a + * WhatsApp contact is returned, the `display_name` field of that contact may be + * populated with the WhatsApp display name (if the name is already stored on the server and the + * `display_name` field has not been overwritten by the user). - If you receive an + * Inbound Message callback for an MO message on the Instagram channel, the corresponding payload + * will not include the Instagram username. You may use the `contact_id` and + * `channel_identity` values included in the callback to retreive the username (detailed + * in the `display_name` field) with this Conversation API operation. + * + * @param contactId The unique ID of the contact. (required) + * @return Contact + * @throws ApiException if fails to make API call + */ + Contact get(String contactId) throws ApiException; + + /** + * Lists Contact Identity Conflicts (using default parameters) + * + *

Lists contact identity conflicts across supported SIM-based channels (SMS, MMS, RCS). Use + * this to identify contact records sharing the same identity (e.g., phone number), which must be + * resolved before enabling the Unified Contact ID feature. + * + * @return IdentityConflictsListResponse + * @throws ApiException if fails to make API call + */ + IdentityConflictsListResponse listIdentityConflicts() throws ApiException; + + /** + * Lists Contact Identity Conflicts + * + *

Lists contact identity conflicts across supported SIM-based channels (SMS, MMS, RCS). Use + * this to identify contact records sharing the same identity (e.g., phone number), which must be + * resolved before enabling the Unified Contact ID feature. + * + * @param queryParameter (optional) + * @return IdentityConflictsListResponse + * @throws ApiException if fails to make API call + */ + IdentityConflictsListResponse listIdentityConflicts( + IdentityConflictsListQueryParameters queryParameter) throws ApiException; + + /** + * Merge two Contacts + * + *

The remaining contact will contain all conversations that the removed contact did. If both + * contacts had conversations within the same App, messages from the removed contact will be + * merged into corresponding active conversations in the destination contact. Channel identities + * will be moved from the source contact to the destination contact only for channels that + * weren't present there before. Moved channel identities will be placed at the bottom of the + * channel priority list. Optional fields from the source contact will be copied only if + * corresponding fields in the destination contact are empty The contact being removed cannot be + * referenced after this call. + * + * @param destinationId The unique ID of the contact that should be kept when merging two + * contacts. (required) + * @param mergeContactRequest The contact to be removed. (required) + * @return Contact + * @throws ApiException if fails to make API call + */ + Contact mergeContact(String destinationId, MergeContactRequest mergeContactRequest) + throws ApiException; + + /** + * Update a Contact + * + *

Updates a contact as specified by the contact ID. + * + * @param contactId The unique ID of the contact. (required) + * @param contact The contact to be updated (required) + * @return Contact + * @throws ApiException if fails to make API call + */ + Contact update(String contactId, Contact contact) throws ApiException; +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/ConversationsService.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/ConversationsService.java new file mode 100644 index 000000000..1a7524226 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/ConversationsService.java @@ -0,0 +1,176 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.api.v1; + +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.domains.conversation.models.v1.conversations.Conversation; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.ConversationsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.ConversationsUpdateQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.CreateConversationRequest; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.InjectEventRequest; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.InjectMessageRequestBase; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.RecentConversationsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.conversations.response.ConversationsListResponse; +import com.sinch.sdk.domains.conversation.models.v1.conversations.response.InjectEventResponse; +import com.sinch.sdk.domains.conversation.models.v1.conversations.response.RecentConversationsListResponse; + +/** Conversations Service */ +public interface ConversationsService { + + /** + * List conversations (using default parameters) + * + *

This operation lists all conversations that are associated with an app and/or a contact. + * + * @return ConversationsListResponse + * @throws ApiException if fails to make API call + */ + ConversationsListResponse list() throws ApiException; + + /** + * List conversations + * + *

This operation lists all conversations that are associated with an app and/or a contact. + * + * @param queryParameter (optional) + * @return ConversationsListResponse + * @throws ApiException if fails to make API call + */ + ConversationsListResponse list(ConversationsListQueryParameters queryParameter) + throws ApiException; + + /** + * Create a conversation + * + *

Creates a new empty conversation. It is generally not needed to create a conversation + * explicitly since sending or receiving a message automatically creates a new conversation if it + * does not already exist between the given app and contact. Creating empty conversation is useful + * if the metadata of the conversation should be populated when the first message in the + * conversation is a contact message or the first message in the conversation comes out-of-band + * and needs to be injected with InjectMessage endpoint. + * + * @param createConversationRequest The conversation to create. ID will be generated for the + * conversation and any ID in the given conversation will be ignored. (required) + * @return Conversation + * @throws ApiException if fails to make API call + */ + Conversation create(CreateConversationRequest createConversationRequest) throws ApiException; + + /** + * Delete a conversation + * + *

Deletes a conversation together with all the messages sent as part of the conversation. + * + * @param conversationId The unique ID of the conversation. This is generated by the system. + * (required) + * @throws ApiException if fails to make API call + */ + void delete(String conversationId) throws ApiException; + + /** + * Get a conversation + * + *

Retrieves a conversation by id. A conversation has two participating entities, an app and a + * contact. + * + * @param conversationId The unique ID of the conversation. This is generated by the system. + * (required) + * @return Conversation + * @throws ApiException if fails to make API call + */ + Conversation get(String conversationId) throws ApiException; + + /** + * Inject an event + * + *

This operation injects a conversation event in to a specific conversation. It only supports + * injecting App events in `CONVERSATION` mode. + * + * @param conversationId The unique ID of the conversation. This is generated by the system. + * (required) + * @param injectEventRequest Inject event request (required) + * @return InjectEventResponse + * @throws ApiException if fails to make API call + */ + InjectEventResponse injectEvent(String conversationId, InjectEventRequest injectEventRequest) + throws ApiException; + + /** + * Inject a message + * + *

This operation injects a conversation message in to a specific conversation. + * + * @param conversationId The ID of the conversation. (required) + * @param injectMessageRequestBase Message to be injected. (required) + * @throws ApiException if fails to make API call + */ + void injectMessage(String conversationId, InjectMessageRequestBase injectMessageRequestBase) + throws ApiException; + + /** + * List recent conversations + * + *

This operation lists conversations and their most recent message, ordered by when the most + * recent message was sent for that conversation. + * + * @param queryParameter (optional) + * @return RecentConversationsListResponse + * @throws ApiException if fails to make API call + */ + RecentConversationsListResponse listRecent(RecentConversationsListQueryParameters queryParameter) + throws ApiException; + + /** + * Stop conversation + * + *

This operation stops the referenced conversation, if the conversation is still active. A new + * conversation will be created if a new message is exchanged between the app or contact that was + * part of the stopped conversation. + * + * @param conversationId The unique ID of the conversation. This is generated by the system. + * (required) + * @throws ApiException if fails to make API call + */ + void stopActive(String conversationId) throws ApiException; + + /** + * Update a conversation (using default parameters) + * + *

This operation updates a conversation which can, for instance, be used to update the + * metadata associated with a conversation. + * + * @param conversationId The unique ID of the conversation. This is generated by the system. + * (required) + * @param conversation The updated conversation. (required) + * @return Conversation + * @throws ApiException if fails to make API call + */ + Conversation update(String conversationId, Conversation conversation) throws ApiException; + + /** + * Update a conversation + * + *

This operation updates a conversation which can, for instance, be used to update the + * metadata associated with a conversation. + * + * @param conversationId The unique ID of the conversation. This is generated by the system. + * (required) + * @param queryParameter (optional) + * @param conversation The updated conversation. (required) + * @return Conversation + * @throws ApiException if fails to make API call + */ + Conversation update( + String conversationId, + ConversationsUpdateQueryParameters queryParameter, + Conversation conversation) + throws ApiException; +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/EventsService.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/EventsService.java new file mode 100644 index 000000000..d91356331 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/EventsService.java @@ -0,0 +1,77 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.api.v1; + +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.domains.conversation.models.v1.events.ConversationEvent; +import com.sinch.sdk.domains.conversation.models.v1.events.request.EventsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.events.request.SendEventRequest; +import com.sinch.sdk.domains.conversation.models.v1.events.response.EventsListResponse; +import com.sinch.sdk.domains.conversation.models.v1.events.response.SendEventResponse; + +/** Events Service */ +public interface EventsService { + + /** + * List events (using default parameters) + * + *

List all events in a project + * + * @return EventsListResponse + * @throws ApiException if fails to make API call + */ + EventsListResponse list() throws ApiException; + + /** + * List events + * + *

List all events in a project + * + * @param queryParameter (optional) + * @return EventsListResponse + * @throws ApiException if fails to make API call + */ + EventsListResponse list(EventsListQueryParameters queryParameter) throws ApiException; + + /** + * Delete an event + * + *

Delete a specific event by its ID. + * + * @param eventId The unique ID of the event. (required) + * @throws ApiException if fails to make API call + */ + void delete(String eventId) throws ApiException; + + /** + * Get an event + * + *

Get event from ID + * + * @param eventId The unique ID of the event. (required) + * @return ConversationEvent + * @throws ApiException if fails to make API call + */ + ConversationEvent get(String eventId) throws ApiException; + + /** + * Send an event + * + *

Sends an event to the referenced contact from the referenced app. Note that this operation + * enqueues the event in a queue so a successful response only indicates that the event has been + * queued. + * + * @param sendEventRequest The event to be sent. (required) + * @return SendEventResponse + * @throws ApiException if fails to make API call + */ + SendEventResponse send(SendEventRequest sendEventRequest) throws ApiException; +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/MessagesService.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/MessagesService.java new file mode 100644 index 000000000..988146721 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/MessagesService.java @@ -0,0 +1,266 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.api.v1; + +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.domains.conversation.models.v1.messages.AppMessageBody; +import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessageUpdateRequest; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesDeleteQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesGetQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesUpdateQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.SendMessageRequest; +import com.sinch.sdk.domains.conversation.models.v1.messages.response.MessagesListResponse; +import com.sinch.sdk.domains.conversation.models.v1.messages.response.SendMessageResponse; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.card.CardMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.carousel.CarouselMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.choice.ChoiceMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo.ContactInfoMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.list.ListMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.location.LocationMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.media.MediaMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.template.TemplateMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.text.TextMessage; + +/** Messages Service */ +public interface MessagesService { + + /** + * List messages (using default parameters) + * + *

This operation lists all messages sent or received via particular [Processing + * Modes](https://developers.sinch.com/docs/conversation/processing-modes/). Setting the + * `messages_source` parameter to `CONVERSATION_SOURCE` allows for querying + * messages in `CONVERSATION` mode, and setting it to `DISPATCH_SOURCE` will + * allow for queries of messages in `DISPATCH` mode. Combining multiple parameters is + * supported for more detailed filtering of messages, but some of them are not supported depending + * on the value specified for `messages_source`. The description for each field will + * inform if that field may not be supported. The messages are ordered by their + * `accept_time` property in descending order, where `accept_time` is a + * timestamp of when the message was enqueued by the Conversation API. This means messages + * received most recently will be listed first. + * + * @return MessagesListResponse + * @throws ApiException if fails to make API call + */ + MessagesListResponse list() throws ApiException; + + /** + * List messages + * + *

This operation lists all messages sent or received via particular [Processing + * Modes](https://developers.sinch.com/docs/conversation/processing-modes/). Setting the + * `messages_source` parameter to `CONVERSATION_SOURCE` allows for querying + * messages in `CONVERSATION` mode, and setting it to `DISPATCH_SOURCE` will + * allow for queries of messages in `DISPATCH` mode. Combining multiple parameters is + * supported for more detailed filtering of messages, but some of them are not supported depending + * on the value specified for `messages_source`. The description for each field will + * inform if that field may not be supported. The messages are ordered by their + * `accept_time` property in descending order, where `accept_time` is a + * timestamp of when the message was enqueued by the Conversation API. This means messages + * received most recently will be listed first. + * + * @param queryParameter (optional) + * @return MessagesListResponse + * @throws ApiException if fails to make API call + */ + MessagesListResponse list(MessagesListQueryParameters queryParameter) throws ApiException; + + /** + * Delete a message (using default parameters) + * + *

Delete a specific message by its ID. Note that this operation deletes the message from + * Conversation API storage; this operation does not affect messages already delivered to + * recipients' handsets. Also note that removing all messages of a conversation will not + * automatically delete the conversation. + * + * @param messageId The unique ID of the message. (required) + * @throws ApiException if fails to make API call + */ + void delete(String messageId) throws ApiException; + + /** + * Delete a message + * + *

Delete a specific message by its ID. Note that this operation deletes the message from + * Conversation API storage; this operation does not affect messages already delivered to + * recipients' handsets. Also note that removing all messages of a conversation will not + * automatically delete the conversation. + * + * @param messageId The unique ID of the message. (required) + * @param queryParameter (optional) + * @throws ApiException if fails to make API call + */ + void delete(String messageId, MessagesDeleteQueryParameters queryParameter) throws ApiException; + + /** + * Get a message (using default parameters) + * + *

Retrieves a specific message by its ID. + * + * @param messageId The unique ID of the message. (required) + * @return ConversationMessage + * @throws ApiException if fails to make API call + */ + ConversationMessage get(String messageId) throws ApiException; + + /** + * Get a message + * + *

Retrieves a specific message by its ID. + * + * @param messageId The unique ID of the message. (required) + * @param queryParameter (optional) + * @return ConversationMessage + * @throws ApiException if fails to make API call + */ + ConversationMessage get(String messageId, MessagesGetQueryParameters queryParameter) + throws ApiException; + + /** + * Send a message + * + *

You can send a message from a Conversation app to a contact associated with that app. If the + * recipient is not associated with an existing contact, a new contact will be created. The + * message is added to the active conversation with the contact if a conversation already exists. + * If no active conversation exists a new one is started automatically. You can find all of your + * IDs and authentication credentials on the [Sinch Customer + * Dashboard](https://dashboard.sinch.com/settings/access-keys). + * + * @param sendMessageRequest This is the request body for sending a message. `app_id`, + * `recipient`, and `message` are all required fields. (required) + * @return SendMessageResponse + * @throws ApiException if fails to make API call + */ + SendMessageResponse sendMessage(SendMessageRequest sendMessageRequest) + throws ApiException; + + /** + * Send a card message + * + * @param request CardMessage request + * @return Response related to sent message + * @see #sendMessage(SendMessageRequest) + * @since 1.3 + */ + SendMessageResponse sendCardMessage(SendMessageRequest request); + + /** + * Send a carousel message + * + * @param request CarouselMessage request + * @return Response related to sent message + * @see #sendMessage(SendMessageRequest) + * @since 1.3 + */ + SendMessageResponse sendCarouselMessage(SendMessageRequest request); + + /** + * Send a choice message + * + * @param request ChoiceMessage request + * @return Response related to sent message + * @see #sendMessage(SendMessageRequest) + * @since 1.3 + */ + SendMessageResponse sendChoiceMessage(SendMessageRequest request); + + /** + * Send a contact info message + * + * @param request ContactInfoMessage request + * @return Response related to sent message + * @see #sendMessage(SendMessageRequest) + * @since 1.3 + */ + SendMessageResponse sendContactInfoMessage(SendMessageRequest request); + + /** + * Send a list message + * + * @param request ListMessage request + * @return Response related to sent message + * @see #sendMessage(SendMessageRequest) + * @since 1.3 + */ + SendMessageResponse sendListMessage(SendMessageRequest request); + + /** + * Send a location message + * + * @param request LocationMessage request + * @return Response related to sent message + * @see #sendMessage(SendMessageRequest) + * @since 1.3 + */ + SendMessageResponse sendLocationMessage(SendMessageRequest request); + + /** + * Send a media message + * + * @param request MediaMessage request + * @return Response related to sent message + * @see #sendMessage(SendMessageRequest) + * @since 1.3 + */ + SendMessageResponse sendMediaMessage(SendMessageRequest request); + + /** + * Send a template message + * + * @param request TemplateMessage request + * @return Response related to sent message + * @see #sendMessage(SendMessageRequest) + * @since 1.3 + */ + SendMessageResponse sendTemplateMessage(SendMessageRequest request); + + /** + * Send a send message request message + * + * @param request request + * @return Response related to sent message + * @see #sendMessage(SendMessageRequest) + * @since 1.3 + */ + SendMessageResponse sendTextMessage(SendMessageRequest request); + + /** + * Update message metadata (using default parameters) + * + *

Update a specific message metadata by its ID. + * + * @param messageId The unique ID of the message. (required) + * @param messageUpdateRequest Update message metadata request. (required) + * @return ConversationMessage + * @throws ApiException if fails to make API call + */ + ConversationMessage update(String messageId, MessageUpdateRequest messageUpdateRequest) + throws ApiException; + + /** + * Update message metadata + * + *

Update a specific message metadata by its ID. + * + * @param messageId The unique ID of the message. (required) + * @param queryParameter (optional) + * @param messageUpdateRequest Update message metadata request. (required) + * @return ConversationMessage + * @throws ApiException if fails to make API call + */ + ConversationMessage update( + String messageId, + MessagesUpdateQueryParameters queryParameter, + MessageUpdateRequest messageUpdateRequest) + throws ApiException; +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/ProjectSettingsService.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/ProjectSettingsService.java new file mode 100644 index 000000000..d0bbdfcf6 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/ProjectSettingsService.java @@ -0,0 +1,63 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.api.v1; + +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.domains.conversation.models.v1.projectsettings.request.ProjectSettingsRequest; +import com.sinch.sdk.domains.conversation.models.v1.projectsettings.response.ProjectSettingsResponse; + +/** Project Settings Service */ +public interface ProjectSettingsService { + + /** + * Create Project Settings + * + *

Creates initial settings for the project. Useful for enabling features like Unified Contact + * ID. For new projects with no existing contacts, you can enable Unified Contact ID immediately. + * + * @param projectSettingsRequest The project settings to create. (required) + * @return ProjectSettingsResponse + * @throws ApiException if fails to make API call + */ + ProjectSettingsResponse create(ProjectSettingsRequest projectSettingsRequest) throws ApiException; + + /** + * Delete Project Settings + * + *

Deletes all project-level settings for the specified project. + * + * @throws ApiException if fails to make API call + */ + void delete() throws ApiException; + + /** + * Get Project Settings + * + *

Retrieves the current settings for the specified project, including contact management + * options such as Unified Contact ID. + * + * @return ProjectSettingsResponse + * @throws ApiException if fails to make API call + */ + ProjectSettingsResponse get() throws ApiException; + + /** + * Update Project Settings + * + *

Updates project settings (e.g. enabling/disabling Unified Contact ID). For existing + * projects, you must resolve all identity conflicts before enabling Unified Contact ID. + * + * @param projectSettingsRequest The project settings to update. (required) + * @return ProjectSettingsResponse + * @throws ApiException if fails to make API call + */ + ProjectSettingsResponse update(ProjectSettingsRequest projectSettingsRequest) throws ApiException; +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/TranscodingService.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/TranscodingService.java new file mode 100644 index 000000000..28804bdac --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/TranscodingService.java @@ -0,0 +1,33 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.api.v1; + +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.domains.conversation.models.v1.transcoding.request.TranscodeMessageRequest; +import com.sinch.sdk.domains.conversation.models.v1.transcoding.response.TranscodeMessageResponse; + +/** Transcoding Service */ +public interface TranscodingService { + + /** + * Transcode a message + * + *

Transcodes the message from the Conversation API format to the channel-specific formats for + * the requested channels. No message is sent to the contact. + * + * @param transcodeMessageRequest The message to be transcoded, and the app and channels for which + * the message is to be transcoded. (required) + * @return TranscodeMessageResponse + * @throws ApiException if fails to make API call + */ + TranscodeMessageResponse transcodeMessage(TranscodeMessageRequest transcodeMessageRequest) + throws ApiException; +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/WebhooksService.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/WebhooksService.java new file mode 100644 index 000000000..7c01d4aff --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/WebhooksService.java @@ -0,0 +1,114 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.api.v1; + +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.core.exceptions.ApiMappingException; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.ConversationWebhookEvent; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.request.CreateWebhookRequest; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.response.WebhooksListResponse; +import java.util.Map; + +/** Webhooks Service */ +public interface WebhooksService { + + /** + * List webhooks + * + *

List all webhooks for a given app as specified by the App ID. + * + * @param appId The unique ID of the app. You can find this on the [Sinch + * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) + * @return WebhooksListResponse + * @throws ApiException if fails to make API call + */ + WebhooksListResponse list(String appId) throws ApiException; + + /** + * Create a new webhook + * + *

Creates a webhook for receiving callbacks on specific triggers. You can create up to 5 + * webhooks per app. + * + * @param createWebhookRequest Required. The Webhook to create (required) + * @return Webhook + * @throws ApiException if fails to make API call + */ + Webhook create(CreateWebhookRequest createWebhookRequest) throws ApiException; + + /** + * The Sinch Platform can initiate callback requests to a URL you define (Callback URL) on request + * and result events. All callback requests are signed and the signature is included in the + * Authorization header of the request + * + *

By using following function, you can ensure authentication according to received payload + * from your backend + * + * @param secret Secret token to be used to validate received request. See App's webhook configuration onto dashboard + * @param headers Received headers + * @param jsonPayload Received payload + * @return Is authentication is validated (true) or not (false) + *

see online + * documentation + * @since 1.3 + */ + boolean validateAuthenticationHeader( + String secret, Map headers, String jsonPayload); + + /** + * This function can be called to deserialize received payload onto callback onto proper java + * verification event class + * + * @param jsonPayload Received payload to be deserialized + * @return The verification event instance class + *

see triggered + * events + * @since 1.3 + */ + ConversationWebhookEvent parseEvent(String jsonPayload) throws ApiMappingException; + + /** + * Delete an existing webhook + * + *

Deletes a webhook as specified by the webhook ID. + * + * @param webhookId The unique ID of the webhook. (required) + * @throws ApiException if fails to make API call + */ + void delete(String webhookId) throws ApiException; + + /** + * Get a webhook + * + *

Get a webhook as specified by the webhook ID. + * + * @param webhookId The unique ID of the webhook. (required) + * @return Webhook + * @throws ApiException if fails to make API call + */ + Webhook get(String webhookId) throws ApiException; + + /** + * Update an existing webhook + * + *

Updates an existing webhook as specified by the webhook ID. + * + * @param webhookId The unique ID of the webhook. (required) + * @param webhook Required. The Webhook to update (required) + * @return Webhook + * @throws ApiException if fails to make API call + */ + Webhook update(String webhookId, Webhook webhook) throws ApiException; +} 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/adapters/AppsServiceImpl.java similarity index 51% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/AppApi.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/AppsServiceImpl.java index 20e980aa5..bd86fed4b 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/adapters/AppsServiceImpl.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.api.v1.internal; +package com.sinch.sdk.domains.conversation.api.v1.adapters; import com.fasterxml.jackson.core.type.TypeReference; import com.sinch.sdk.core.exceptions.ApiException; @@ -23,10 +23,12 @@ import com.sinch.sdk.core.http.URLParameter; import com.sinch.sdk.core.http.URLPathUtils; import com.sinch.sdk.core.models.ServerConfiguration; -import com.sinch.sdk.domains.conversation.models.v1.app.request.AppCreateRequest; -import com.sinch.sdk.domains.conversation.models.v1.app.request.AppUpdateRequest; -import com.sinch.sdk.domains.conversation.models.v1.app.response.AppResponse; -import com.sinch.sdk.domains.conversation.models.v1.app.response.ListAppsResponse; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.conversation.models.v1.apps.internal.AppsListResponseInternal; +import com.sinch.sdk.domains.conversation.models.v1.apps.request.AppCreateRequest; +import com.sinch.sdk.domains.conversation.models.v1.apps.request.AppUpdateRequest; +import com.sinch.sdk.domains.conversation.models.v1.apps.response.AppResponse; +import com.sinch.sdk.domains.conversation.models.v1.apps.response.AppsListResponse; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -35,56 +37,45 @@ import java.util.Map; import java.util.logging.Logger; -public class AppApi { +public class AppsServiceImpl implements com.sinch.sdk.domains.conversation.api.v1.AppsService { - private static final Logger LOGGER = Logger.getLogger(AppApi.class.getName()); - private HttpClient httpClient; - private ServerConfiguration serverConfiguration; - private Map authManagersByOasSecuritySchemes; - private HttpMapper mapper; + private static final Logger LOGGER = Logger.getLogger(AppsServiceImpl.class.getName()); + private final HttpClient httpClient; + private final ServerConfiguration serverConfiguration; + private final Map authManagersByOasSecuritySchemes; + private final HttpMapper mapper; - public AppApi( + private final String projectId; + + public AppsServiceImpl( HttpClient httpClient, ServerConfiguration serverConfiguration, Map authManagersByOasSecuritySchemes, - HttpMapper mapper) { + HttpMapper mapper, + String projectId) { this.httpClient = httpClient; this.serverConfiguration = serverConfiguration; this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; this.mapper = mapper; + this.projectId = projectId; } - /** - * Create an app You can create a new Conversation API app using the API. You can create an app - * for one or more channels at once. The ID of the app is generated at creation and will be - * returned in the response. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param appCreateRequest The app to create. (required) - * @return AppResponse - * @throws ApiException if fails to make API call - */ - public AppResponse appCreateApp(String projectId, AppCreateRequest appCreateRequest) - throws ApiException { + @Override + public AppsListResponse list() throws ApiException { - LOGGER.finest( - "[appCreateApp]" - + " " - + "projectId: " - + projectId - + ", " - + "appCreateRequest: " - + appCreateRequest); - - HttpRequest httpRequest = appCreateAppRequestBuilder(projectId, appCreateRequest); + LOGGER.finest("[list]" + " "); + + HttpRequest httpRequest = listRequestBuilder(); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + + AppsListResponseInternal deserialized = + mapper.deserialize(response, new TypeReference() {}); + + return new AppsListResponse(new Page<>(null, deserialized.getApps(), null)); } // fallback to default errors handling: // all error cases definition are not required from specs: will try some "hardcoded" content @@ -95,23 +86,18 @@ public AppResponse appCreateApp(String projectId, AppCreateRequest appCreateRequ mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest appCreateAppRequestBuilder( - String projectId, AppCreateRequest appCreateRequest) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest listRequestBuilder() throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling appCreateApp"); - } - // verify the required parameter 'appCreateRequest' is set - if (appCreateRequest == null) { - throw new ApiException( - 400, "Missing the required parameter 'appCreateRequest' when calling appCreateApp"); + 400, "Missing the required parameter 'this.projectId' when calling list"); } String localVarPath = "/v1/projects/{project_id}/apps" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); List localVarQueryParams = new ArrayList<>(); @@ -119,14 +105,14 @@ private HttpRequest appCreateAppRequestBuilder( final Collection localVarAccepts = Arrays.asList("application/json"); - final Collection localVarContentTypes = Arrays.asList("application/json"); + final Collection localVarContentTypes = Arrays.asList(); final Collection localVarAuthNames = Arrays.asList("Basic", "oAuth2"); - final String serializedBody = mapper.serialize(localVarContentTypes, appCreateRequest); + final String serializedBody = null; return new HttpRequest( localVarPath, - HttpMethod.POST, + HttpMethod.GET, localVarQueryParams, serializedBody, localVarHeaderParams, @@ -135,28 +121,18 @@ private HttpRequest appCreateAppRequestBuilder( localVarAuthNames); } - /** - * Delete an app Deletes the app specified by the App ID. Note that this operation will not delete - * contacts (which are stored at the project level) nor any channel-specific resources (for - * example, WhatsApp Sender Identities will not be deleted). - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param appId The unique ID of the app. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @throws ApiException if fails to make API call - */ - public void appDeleteApp(String projectId, String appId) throws ApiException { - - LOGGER.finest("[appDeleteApp]" + " " + "projectId: " + projectId + ", " + "appId: " + appId); - - HttpRequest httpRequest = appDeleteAppRequestBuilder(projectId, appId); + @Override + public AppResponse create(AppCreateRequest appCreateRequest) throws ApiException { + + LOGGER.finest("[create]" + " " + "appCreateRequest: " + appCreateRequest); + + HttpRequest httpRequest = createRequestBuilder(appCreateRequest); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - return; + 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 @@ -167,24 +143,23 @@ public void appDeleteApp(String projectId, String appId) throws ApiException { mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest appDeleteAppRequestBuilder(String projectId, String appId) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest createRequestBuilder(AppCreateRequest appCreateRequest) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling appDeleteApp"); + 400, "Missing the required parameter 'this.projectId' when calling create"); } - // verify the required parameter 'appId' is set - if (appId == null) { + // verify the required parameter 'appCreateRequest' is set + if (appCreateRequest == null) { throw new ApiException( - 400, "Missing the required parameter 'appId' when calling appDeleteApp"); + 400, "Missing the required parameter 'appCreateRequest' when calling create"); } String localVarPath = - "/v1/projects/{project_id}/apps/{app_id}" + "/v1/projects/{project_id}/apps" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll("\\{" + "app_id" + "\\}", URLPathUtils.encodePathSegment(appId.toString())); + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); List localVarQueryParams = new ArrayList<>(); @@ -192,14 +167,14 @@ private HttpRequest appDeleteAppRequestBuilder(String projectId, String appId) final Collection localVarAccepts = Arrays.asList("application/json"); - final Collection localVarContentTypes = Arrays.asList(); + final Collection localVarContentTypes = Arrays.asList("application/json"); final Collection localVarAuthNames = Arrays.asList("Basic", "oAuth2"); - final String serializedBody = null; + final String serializedBody = mapper.serialize(localVarContentTypes, appCreateRequest); return new HttpRequest( localVarPath, - HttpMethod.DELETE, + HttpMethod.POST, localVarQueryParams, serializedBody, localVarHeaderParams, @@ -208,28 +183,18 @@ private HttpRequest appDeleteAppRequestBuilder(String projectId, String appId) localVarAuthNames); } - /** - * Get an app Returns a particular app as specified by the App ID. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param appId The unique ID of the app. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @return AppResponse - * @throws ApiException if fails to make API call - */ - public AppResponse appGetApp(String projectId, String appId) throws ApiException { - - LOGGER.finest("[appGetApp]" + " " + "projectId: " + projectId + ", " + "appId: " + appId); - - HttpRequest httpRequest = appGetAppRequestBuilder(projectId, appId); + @Override + public void delete(String appId) throws ApiException { + + LOGGER.finest("[delete]" + " " + "appId: " + appId); + + HttpRequest httpRequest = deleteRequestBuilder(appId); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + return; } // fallback to default errors handling: // all error cases definition are not required from specs: will try some "hardcoded" content @@ -240,21 +205,22 @@ public AppResponse appGetApp(String projectId, String appId) throws ApiException mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest appGetAppRequestBuilder(String projectId, String appId) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest deleteRequestBuilder(String appId) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling appGetApp"); + 400, "Missing the required parameter 'this.projectId' when calling delete"); } // verify the required parameter 'appId' is set if (appId == null) { - throw new ApiException(400, "Missing the required parameter 'appId' when calling appGetApp"); + throw new ApiException(400, "Missing the required parameter 'appId' when calling delete"); } String localVarPath = "/v1/projects/{project_id}/apps/{app_id}" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) .replaceAll("\\{" + "app_id" + "\\}", URLPathUtils.encodePathSegment(appId.toString())); List localVarQueryParams = new ArrayList<>(); @@ -270,7 +236,7 @@ private HttpRequest appGetAppRequestBuilder(String projectId, String appId) thro return new HttpRequest( localVarPath, - HttpMethod.GET, + HttpMethod.DELETE, localVarQueryParams, serializedBody, localVarHeaderParams, @@ -279,26 +245,18 @@ private HttpRequest appGetAppRequestBuilder(String projectId, String appId) thro localVarAuthNames); } - /** - * List all apps for a given project Get a list of all apps in the specified project. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @return ListAppsResponse - * @throws ApiException if fails to make API call - */ - public ListAppsResponse appListApps(String projectId) throws ApiException { + @Override + public AppResponse get(String appId) throws ApiException { - LOGGER.finest("[appListApps]" + " " + "projectId: " + projectId); + LOGGER.finest("[get]" + " " + "appId: " + appId); - HttpRequest httpRequest = appListAppsRequestBuilder(projectId); + HttpRequest httpRequest = getRequestBuilder(appId); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + 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 @@ -309,17 +267,23 @@ public ListAppsResponse appListApps(String projectId) throws ApiException { mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest appListAppsRequestBuilder(String projectId) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest getRequestBuilder(String appId) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling appListApps"); + 400, "Missing the required parameter 'this.projectId' when calling get"); + } + // verify the required parameter 'appId' is set + if (appId == null) { + throw new ApiException(400, "Missing the required parameter 'appId' when calling get"); } String localVarPath = - "/v1/projects/{project_id}/apps" + "/v1/projects/{project_id}/apps/{app_id}" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) + .replaceAll("\\{" + "app_id" + "\\}", URLPathUtils.encodePathSegment(appId.toString())); List localVarQueryParams = new ArrayList<>(); @@ -343,54 +307,19 @@ private HttpRequest appListAppsRequestBuilder(String projectId) throws ApiExcept localVarAuthNames); } - /** - * Update an app Updates a particular app as specified by the App ID. Note that this is a - * `PATCH` operation, so any specified field values will replace existing values. - * Therefore, **if you'd like to add additional configurations to an existing Conversation API - * app, ensure that you include existing values AND new values in the call**. For example, if - * you'd like to add new `channel_credentials`, you can - * [get](https://developers.sinch.com/docs/conversation/api-reference/conversation/tag/App/#tag/App/operation/App_GetApp) - * your existing Conversation API app, extract the existing `channel_credentials` list, - * append your new configuration to that list, and include the updated - * `channel_credentials` list in this update call. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param appId The unique ID of the app. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param appUpdateRequest The updated app. (required) - * @param updateMask The set of field mask paths. (optional - * @return AppResponse - * @throws ApiException if fails to make API call - */ - public AppResponse appUpdateApp( - String projectId, String appId, AppUpdateRequest appUpdateRequest, List updateMask) - throws ApiException { + @Override + public AppResponse update(String appId, AppUpdateRequest appUpdateRequest) throws ApiException { LOGGER.finest( - "[appUpdateApp]" - + " " - + "projectId: " - + projectId - + ", " - + "appId: " - + appId - + ", " - + "appUpdateRequest: " - + appUpdateRequest - + ", " - + "updateMask: " - + updateMask); - - HttpRequest httpRequest = - appUpdateAppRequestBuilder(projectId, appId, appUpdateRequest, updateMask); + "[update]" + " " + "appId: " + appId + ", " + "appUpdateRequest: " + appUpdateRequest); + + HttpRequest httpRequest = updateRequestBuilder(appId, appUpdateRequest); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + 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 @@ -401,39 +330,32 @@ public AppResponse appUpdateApp( mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest appUpdateAppRequestBuilder( - String projectId, String appId, AppUpdateRequest appUpdateRequest, List updateMask) + private HttpRequest updateRequestBuilder(String appId, AppUpdateRequest appUpdateRequest) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling appUpdateApp"); + 400, "Missing the required parameter 'this.projectId' when calling update"); } // verify the required parameter 'appId' is set if (appId == null) { - throw new ApiException( - 400, "Missing the required parameter 'appId' when calling appUpdateApp"); + throw new ApiException(400, "Missing the required parameter 'appId' when calling update"); } // verify the required parameter 'appUpdateRequest' is set if (appUpdateRequest == null) { throw new ApiException( - 400, "Missing the required parameter 'appUpdateRequest' when calling appUpdateApp"); + 400, "Missing the required parameter 'appUpdateRequest' when calling update"); } String localVarPath = "/v1/projects/{project_id}/apps/{app_id}" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) .replaceAll("\\{" + "app_id" + "\\}", URLPathUtils.encodePathSegment(appId.toString())); List localVarQueryParams = new ArrayList<>(); - if (null != updateMask) { - localVarQueryParams.add( - new URLParameter( - "update_mask", updateMask, URLParameter.STYLE.valueOf("form".toUpperCase()), false)); - } - Map localVarHeaderParams = new HashMap<>(); final Collection localVarAccepts = Arrays.asList("application/json"); diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/CapabilityApi.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/CapabilityServiceImpl.java similarity index 59% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/CapabilityApi.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/CapabilityServiceImpl.java index bdcc7ee5a..93cb58620 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/CapabilityApi.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/CapabilityServiceImpl.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.api.v1.internal; +package com.sinch.sdk.domains.conversation.api.v1.adapters; import com.fasterxml.jackson.core.type.TypeReference; import com.sinch.sdk.core.exceptions.ApiException; @@ -33,58 +33,43 @@ import java.util.Map; import java.util.logging.Logger; -public class CapabilityApi { +public class CapabilityServiceImpl + implements com.sinch.sdk.domains.conversation.api.v1.CapabilityService { - private static final Logger LOGGER = Logger.getLogger(CapabilityApi.class.getName()); - private HttpClient httpClient; - private ServerConfiguration serverConfiguration; - private Map authManagersByOasSecuritySchemes; - private HttpMapper mapper; + private static final Logger LOGGER = Logger.getLogger(CapabilityServiceImpl.class.getName()); + private final HttpClient httpClient; + private final ServerConfiguration serverConfiguration; + private final Map authManagersByOasSecuritySchemes; + private final HttpMapper mapper; - public CapabilityApi( + private final String projectId; + + public CapabilityServiceImpl( HttpClient httpClient, ServerConfiguration serverConfiguration, Map authManagersByOasSecuritySchemes, - HttpMapper mapper) { + HttpMapper mapper, + String projectId) { this.httpClient = httpClient; this.serverConfiguration = serverConfiguration; this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; this.mapper = mapper; + this.projectId = projectId; } - /** - * Capability lookup This method is asynchronous - it immediately returns the requested Capability - * registration. Capability check is then delivered as a callback to registered webhooks with - * trigger CAPABILITY for every reachable channel. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param queryCapabilityRequest The query capability request. (required) - * @return QueryCapabilityResponse - * @throws ApiException if fails to make API call - */ - public QueryCapabilityResponse capabilityQueryCapability( - String projectId, QueryCapabilityRequest queryCapabilityRequest) throws ApiException { - - LOGGER.finest( - "[capabilityQueryCapability]" - + " " - + "projectId: " - + projectId - + ", " - + "queryCapabilityRequest: " - + queryCapabilityRequest); - - HttpRequest httpRequest = - capabilityQueryCapabilityRequestBuilder(projectId, queryCapabilityRequest); + @Override + public QueryCapabilityResponse lookup(QueryCapabilityRequest queryCapabilityRequest) + throws ApiException { + + LOGGER.finest("[lookup]" + " " + "queryCapabilityRequest: " + queryCapabilityRequest); + + HttpRequest httpRequest = lookupRequestBuilder(queryCapabilityRequest); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + 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 @@ -95,25 +80,24 @@ public QueryCapabilityResponse capabilityQueryCapability( mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest capabilityQueryCapabilityRequestBuilder( - String projectId, QueryCapabilityRequest queryCapabilityRequest) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest lookupRequestBuilder(QueryCapabilityRequest queryCapabilityRequest) + throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling capabilityQueryCapability"); + 400, "Missing the required parameter 'this.projectId' when calling lookup"); } // verify the required parameter 'queryCapabilityRequest' is set if (queryCapabilityRequest == null) { throw new ApiException( - 400, - "Missing the required parameter 'queryCapabilityRequest' when calling" - + " capabilityQueryCapability"); + 400, "Missing the required parameter 'queryCapabilityRequest' when calling lookup"); } String localVarPath = "/v1/projects/{project_id}/capability:query" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); List localVarQueryParams = new ArrayList<>(); diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ContactsServiceImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ContactsServiceImpl.java new file mode 100644 index 000000000..8bc130e01 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ContactsServiceImpl.java @@ -0,0 +1,728 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.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.core.models.pagination.PageNavigator; +import com.sinch.sdk.core.utils.StringUtil; +import com.sinch.sdk.domains.conversation.models.v1.contacts.Contact; +import com.sinch.sdk.domains.conversation.models.v1.contacts.internal.ContactsListResponseInternal; +import com.sinch.sdk.domains.conversation.models.v1.contacts.internal.IdentityConflictsListResponseInternal; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactCreateRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactGetChannelProfileByChannelIdentityRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactGetChannelProfileByContactIdRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.GetChannelProfileRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.IdentityConflictsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.MergeContactRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.response.ContactsListResponse; +import com.sinch.sdk.domains.conversation.models.v1.contacts.response.GetChannelProfileResponse; +import com.sinch.sdk.domains.conversation.models.v1.contacts.response.IdentityConflictsListResponse; +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 ContactsServiceImpl + implements com.sinch.sdk.domains.conversation.api.v1.ContactsService { + + private static final Logger LOGGER = Logger.getLogger(ContactsServiceImpl.class.getName()); + private final HttpClient httpClient; + private final ServerConfiguration serverConfiguration; + private final Map authManagersByOasSecuritySchemes; + private final HttpMapper mapper; + + private final String projectId; + + public ContactsServiceImpl( + HttpClient httpClient, + ServerConfiguration serverConfiguration, + Map authManagersByOasSecuritySchemes, + HttpMapper mapper, + String projectId) { + this.httpClient = httpClient; + this.serverConfiguration = serverConfiguration; + this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; + this.mapper = mapper; + this.projectId = projectId; + } + + @Override + public ContactsListResponse list() throws ApiException { + + return list((ContactsListQueryParameters) null); + } + + @Override + public ContactsListResponse list(ContactsListQueryParameters queryParameter) throws ApiException { + + LOGGER.finest("[list]" + " " + "queryParameter: " + queryParameter); + + HttpRequest httpRequest = listRequestBuilder(queryParameter); + return _getContactsListPageAsListResponse(queryParameter, httpRequest); + } + + public ContactsListResponse _getContactsListPageAsListResponse( + ContactsListQueryParameters queryParameter, HttpRequest httpRequest) throws ApiException { + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + + ContactsListResponseInternal deserialized = + mapper.deserialize(response, new TypeReference() {}); + + String nextToken = deserialized.getNextPageToken(); + + ContactsListQueryParameters nextParameters = + ContactsListQueryParameters.builder(queryParameter) + .setPageToken(deserialized.getNextPageToken()) + .build(); + + HttpRequest nextPage = null; + if (!StringUtil.isEmpty(nextToken)) { + nextPage = listRequestBuilder(nextParameters); + } + + return new ContactsListResponse( + this, + new Page<>(nextParameters, deserialized.getContacts(), new PageNavigator<>(nextPage))); + } + // 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(ContactsListQueryParameters queryParameter) + throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling list"); + } + + String localVarPath = + "/v1/projects/{project_id}/contacts" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); + + List localVarQueryParams = new ArrayList<>(); + if (null != queryParameter) { + + URLParameterUtils.addQueryParam( + queryParameter.getPageSize(), + "page_size", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getPageToken(), + "page_token", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getExternalId(), + "external_id", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getChannel(), + "channel", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getIdentity(), + "identity", + 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("Basic", "oAuth2"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + @Override + public GetChannelProfileResponse contactGetChannelProfile( + GetChannelProfileRequest getChannelProfileRequest) throws ApiException { + + LOGGER.finest( + "[contactGetChannelProfile]" + + " " + + "getChannelProfileRequest: " + + getChannelProfileRequest); + + HttpRequest httpRequest = contactGetChannelProfileRequestBuilder(getChannelProfileRequest); + 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 contactGetChannelProfileRequestBuilder( + GetChannelProfileRequest getChannelProfileRequest) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, + "Missing the required parameter 'this.projectId' when calling contactGetChannelProfile"); + } + // verify the required parameter 'getChannelProfileRequest' is set + if (getChannelProfileRequest == null) { + throw new ApiException( + 400, + "Missing the required parameter 'getChannelProfileRequest' when calling" + + " contactGetChannelProfile"); + } + + String localVarPath = + "/v1/projects/{project_id}/contacts:getChannelProfile" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.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("Basic", "oAuth2"); + final String serializedBody = mapper.serialize(localVarContentTypes, getChannelProfileRequest); + + return new HttpRequest( + localVarPath, + HttpMethod.POST, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public GetChannelProfileResponse getChannelProfileByContactId( + ContactGetChannelProfileByContactIdRequest request) { + return contactGetChannelProfile(request); + } + + public GetChannelProfileResponse getChannelProfileByChannelIdentity( + ContactGetChannelProfileByChannelIdentityRequest request) { + return contactGetChannelProfile(request); + } + + @Override + public Contact create(ContactCreateRequest contactCreateRequest) throws ApiException { + + LOGGER.finest("[create]" + " " + "contactCreateRequest: " + contactCreateRequest); + + HttpRequest httpRequest = createRequestBuilder(contactCreateRequest); + 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(ContactCreateRequest contactCreateRequest) + throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling create"); + } + // verify the required parameter 'contactCreateRequest' is set + if (contactCreateRequest == null) { + throw new ApiException( + 400, "Missing the required parameter 'contactCreateRequest' when calling create"); + } + + String localVarPath = + "/v1/projects/{project_id}/contacts" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.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("Basic", "oAuth2"); + final String serializedBody = mapper.serialize(localVarContentTypes, contactCreateRequest); + + return new HttpRequest( + localVarPath, + HttpMethod.POST, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + @Override + public void delete(String contactId) throws ApiException { + + LOGGER.finest("[delete]" + " " + "contactId: " + contactId); + + HttpRequest httpRequest = deleteRequestBuilder(contactId); + 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 contactId) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling delete"); + } + // verify the required parameter 'contactId' is set + if (contactId == null) { + throw new ApiException(400, "Missing the required parameter 'contactId' when calling delete"); + } + + String localVarPath = + "/v1/projects/{project_id}/contacts/{contact_id}" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) + .replaceAll( + "\\{" + "contact_id" + "\\}", URLPathUtils.encodePathSegment(contactId.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("Basic", "oAuth2"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.DELETE, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + @Override + public Contact get(String contactId) throws ApiException { + + LOGGER.finest("[get]" + " " + "contactId: " + contactId); + + HttpRequest httpRequest = getRequestBuilder(contactId); + 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 contactId) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling get"); + } + // verify the required parameter 'contactId' is set + if (contactId == null) { + throw new ApiException(400, "Missing the required parameter 'contactId' when calling get"); + } + + String localVarPath = + "/v1/projects/{project_id}/contacts/{contact_id}" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) + .replaceAll( + "\\{" + "contact_id" + "\\}", URLPathUtils.encodePathSegment(contactId.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("Basic", "oAuth2"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + @Override + public IdentityConflictsListResponse listIdentityConflicts() throws ApiException { + + return listIdentityConflicts((IdentityConflictsListQueryParameters) null); + } + + @Override + public IdentityConflictsListResponse listIdentityConflicts( + IdentityConflictsListQueryParameters queryParameter) throws ApiException { + + LOGGER.finest("[listIdentityConflicts]" + " " + "queryParameter: " + queryParameter); + + HttpRequest httpRequest = listIdentityConflictsRequestBuilder(queryParameter); + return _getIdentityConflictsListPageAsListResponse(queryParameter, httpRequest); + } + + public IdentityConflictsListResponse _getIdentityConflictsListPageAsListResponse( + IdentityConflictsListQueryParameters queryParameter, HttpRequest httpRequest) + throws ApiException { + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + + IdentityConflictsListResponseInternal deserialized = + mapper.deserialize( + response, new TypeReference() {}); + + String nextToken = deserialized.getNextPageToken(); + + IdentityConflictsListQueryParameters nextParameters = + IdentityConflictsListQueryParameters.builder(queryParameter) + .setPageToken(deserialized.getNextPageToken()) + .build(); + + HttpRequest nextPage = null; + if (!StringUtil.isEmpty(nextToken)) { + nextPage = listIdentityConflictsRequestBuilder(nextParameters); + } + + return new IdentityConflictsListResponse( + this, + new Page<>(nextParameters, deserialized.getConflicts(), new PageNavigator<>(nextPage))); + } + // 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 listIdentityConflictsRequestBuilder( + IdentityConflictsListQueryParameters queryParameter) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, + "Missing the required parameter 'this.projectId' when calling listIdentityConflicts"); + } + + String localVarPath = + "/v1/projects/{project_id}/contacts:identityConflicts" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); + + List localVarQueryParams = new ArrayList<>(); + if (null != queryParameter) { + + URLParameterUtils.addQueryParam( + queryParameter.getPageSize(), + "page_size", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getPageToken(), + "page_token", + 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("Basic", "oAuth2"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + @Override + public Contact mergeContact(String destinationId, MergeContactRequest mergeContactRequest) + throws ApiException { + + LOGGER.finest( + "[mergeContact]" + + " " + + "destinationId: " + + destinationId + + ", " + + "mergeContactRequest: " + + mergeContactRequest); + + HttpRequest httpRequest = mergeContactRequestBuilder(destinationId, mergeContactRequest); + 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 mergeContactRequestBuilder( + String destinationId, MergeContactRequest mergeContactRequest) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling mergeContact"); + } + // verify the required parameter 'destinationId' is set + if (destinationId == null) { + throw new ApiException( + 400, "Missing the required parameter 'destinationId' when calling mergeContact"); + } + // verify the required parameter 'mergeContactRequest' is set + if (mergeContactRequest == null) { + throw new ApiException( + 400, "Missing the required parameter 'mergeContactRequest' when calling mergeContact"); + } + + String localVarPath = + "/v1/projects/{project_id}/contacts/{destination_id}:merge" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) + .replaceAll( + "\\{" + "destination_id" + "\\}", + URLPathUtils.encodePathSegment(destinationId.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("Basic", "oAuth2"); + final String serializedBody = mapper.serialize(localVarContentTypes, mergeContactRequest); + + return new HttpRequest( + localVarPath, + HttpMethod.POST, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + @Override + public Contact update(String contactId, Contact contact) throws ApiException { + + LOGGER.finest("[update]" + " " + "contactId: " + contactId + ", " + "contact: " + contact); + + HttpRequest httpRequest = updateRequestBuilder(contactId, contact); + 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 contactId, Contact contact) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling update"); + } + // verify the required parameter 'contactId' is set + if (contactId == null) { + throw new ApiException(400, "Missing the required parameter 'contactId' when calling update"); + } + // verify the required parameter 'contact' is set + if (contact == null) { + throw new ApiException(400, "Missing the required parameter 'contact' when calling update"); + } + + String localVarPath = + "/v1/projects/{project_id}/contacts/{contact_id}" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) + .replaceAll( + "\\{" + "contact_id" + "\\}", URLPathUtils.encodePathSegment(contactId.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("Basic", "oAuth2"); + final String serializedBody = mapper.serialize(localVarContentTypes, contact); + + return new HttpRequest( + localVarPath, + HttpMethod.PATCH, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationsServiceImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationsServiceImpl.java new file mode 100644 index 000000000..d3c765c89 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ConversationsServiceImpl.java @@ -0,0 +1,853 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.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.core.models.pagination.PageNavigator; +import com.sinch.sdk.core.utils.StringUtil; +import com.sinch.sdk.domains.conversation.models.v1.conversations.Conversation; +import com.sinch.sdk.domains.conversation.models.v1.conversations.internal.ConversationsListResponseInternal; +import com.sinch.sdk.domains.conversation.models.v1.conversations.internal.RecentConversationsListResponseInternal; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.ConversationsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.ConversationsUpdateQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.CreateConversationRequest; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.InjectEventRequest; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.InjectMessageRequestBase; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.RecentConversationsListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.conversations.response.ConversationsListResponse; +import com.sinch.sdk.domains.conversation.models.v1.conversations.response.InjectEventResponse; +import com.sinch.sdk.domains.conversation.models.v1.conversations.response.RecentConversationsListResponse; +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 ConversationsServiceImpl + implements com.sinch.sdk.domains.conversation.api.v1.ConversationsService { + + private static final Logger LOGGER = Logger.getLogger(ConversationsServiceImpl.class.getName()); + private final HttpClient httpClient; + private final ServerConfiguration serverConfiguration; + private final Map authManagersByOasSecuritySchemes; + private final HttpMapper mapper; + + private final String projectId; + + public ConversationsServiceImpl( + HttpClient httpClient, + ServerConfiguration serverConfiguration, + Map authManagersByOasSecuritySchemes, + HttpMapper mapper, + String projectId) { + this.httpClient = httpClient; + this.serverConfiguration = serverConfiguration; + this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; + this.mapper = mapper; + this.projectId = projectId; + } + + @Override + public ConversationsListResponse list() throws ApiException { + + return list((ConversationsListQueryParameters) null); + } + + @Override + public ConversationsListResponse list(ConversationsListQueryParameters queryParameter) + throws ApiException { + + LOGGER.finest("[list]" + " " + "queryParameter: " + queryParameter); + + HttpRequest httpRequest = listRequestBuilder(queryParameter); + return _getConversationsListPageAsListResponse(queryParameter, httpRequest); + } + + public ConversationsListResponse _getConversationsListPageAsListResponse( + ConversationsListQueryParameters queryParameter, HttpRequest httpRequest) + throws ApiException { + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + + ConversationsListResponseInternal deserialized = + mapper.deserialize(response, new TypeReference() {}); + + String nextToken = deserialized.getNextPageToken(); + + ConversationsListQueryParameters nextParameters = + ConversationsListQueryParameters.builder(queryParameter) + .setPageToken(deserialized.getNextPageToken()) + .build(); + + HttpRequest nextPage = null; + if (!StringUtil.isEmpty(nextToken)) { + nextPage = listRequestBuilder(nextParameters); + } + + return new ConversationsListResponse( + this, + new Page<>( + nextParameters, deserialized.getConversations(), new PageNavigator<>(nextPage))); + } + // 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(ConversationsListQueryParameters queryParameter) + throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling list"); + } + + String localVarPath = + "/v1/projects/{project_id}/conversations" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); + + List localVarQueryParams = new ArrayList<>(); + if (null != queryParameter) { + + URLParameterUtils.addQueryParam( + queryParameter.getAppId(), "app_id", URLParameter.form, null, localVarQueryParams, true); + + URLParameterUtils.addQueryParam( + queryParameter.getContactId(), + "contact_id", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getOnlyActive(), + "only_active", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getPageSize(), + "page_size", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getPageToken(), + "page_token", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getActiveChannel(), + "active_channel", + 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("Basic", "oAuth2"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + @Override + public Conversation create(CreateConversationRequest createConversationRequest) + throws ApiException { + + LOGGER.finest("[create]" + " " + "createConversationRequest: " + createConversationRequest); + + HttpRequest httpRequest = createRequestBuilder(createConversationRequest); + 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(CreateConversationRequest createConversationRequest) + throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling create"); + } + // verify the required parameter 'createConversationRequest' is set + if (createConversationRequest == null) { + throw new ApiException( + 400, "Missing the required parameter 'createConversationRequest' when calling create"); + } + + String localVarPath = + "/v1/projects/{project_id}/conversations" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.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("Basic", "oAuth2"); + final String serializedBody = mapper.serialize(localVarContentTypes, createConversationRequest); + + return new HttpRequest( + localVarPath, + HttpMethod.POST, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + @Override + public void delete(String conversationId) throws ApiException { + + LOGGER.finest("[delete]" + " " + "conversationId: " + conversationId); + + HttpRequest httpRequest = deleteRequestBuilder(conversationId); + 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 conversationId) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling delete"); + } + // verify the required parameter 'conversationId' is set + if (conversationId == null) { + throw new ApiException( + 400, "Missing the required parameter 'conversationId' when calling delete"); + } + + String localVarPath = + "/v1/projects/{project_id}/conversations/{conversation_id}" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) + .replaceAll( + "\\{" + "conversation_id" + "\\}", + URLPathUtils.encodePathSegment(conversationId.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("Basic", "oAuth2"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.DELETE, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + @Override + public Conversation get(String conversationId) throws ApiException { + + LOGGER.finest("[get]" + " " + "conversationId: " + conversationId); + + HttpRequest httpRequest = getRequestBuilder(conversationId); + 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 conversationId) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling get"); + } + // verify the required parameter 'conversationId' is set + if (conversationId == null) { + throw new ApiException( + 400, "Missing the required parameter 'conversationId' when calling get"); + } + + String localVarPath = + "/v1/projects/{project_id}/conversations/{conversation_id}" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) + .replaceAll( + "\\{" + "conversation_id" + "\\}", + URLPathUtils.encodePathSegment(conversationId.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("Basic", "oAuth2"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + @Override + public InjectEventResponse injectEvent( + String conversationId, InjectEventRequest injectEventRequest) throws ApiException { + + LOGGER.finest( + "[injectEvent]" + + " " + + "conversationId: " + + conversationId + + ", " + + "injectEventRequest: " + + injectEventRequest); + + HttpRequest httpRequest = injectEventRequestBuilder(conversationId, injectEventRequest); + 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 injectEventRequestBuilder( + String conversationId, InjectEventRequest injectEventRequest) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling injectEvent"); + } + // verify the required parameter 'conversationId' is set + if (conversationId == null) { + throw new ApiException( + 400, "Missing the required parameter 'conversationId' when calling injectEvent"); + } + // verify the required parameter 'injectEventRequest' is set + if (injectEventRequest == null) { + throw new ApiException( + 400, "Missing the required parameter 'injectEventRequest' when calling injectEvent"); + } + + String localVarPath = + "/v1/projects/{project_id}/conversations/{conversation_id}:inject-event" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) + .replaceAll( + "\\{" + "conversation_id" + "\\}", + URLPathUtils.encodePathSegment(conversationId.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("Basic", "oAuth2"); + final String serializedBody = mapper.serialize(localVarContentTypes, injectEventRequest); + + return new HttpRequest( + localVarPath, + HttpMethod.POST, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + @Override + public void injectMessage( + String conversationId, InjectMessageRequestBase injectMessageRequestBase) + throws ApiException { + + LOGGER.finest( + "[injectMessage]" + + " " + + "conversationId: " + + conversationId + + ", " + + "injectMessageRequestBase: " + + injectMessageRequestBase); + + HttpRequest httpRequest = injectMessageRequestBuilder(conversationId, injectMessageRequestBase); + 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 injectMessageRequestBuilder( + String conversationId, InjectMessageRequestBase injectMessageRequestBase) + throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling injectMessage"); + } + // verify the required parameter 'conversationId' is set + if (conversationId == null) { + throw new ApiException( + 400, "Missing the required parameter 'conversationId' when calling injectMessage"); + } + // verify the required parameter 'injectMessageRequestBase' is set + if (injectMessageRequestBase == null) { + throw new ApiException( + 400, + "Missing the required parameter 'injectMessageRequestBase' when calling injectMessage"); + } + + String localVarPath = + "/v1/projects/{project_id}/conversations/{conversation_id}:inject-message" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) + .replaceAll( + "\\{" + "conversation_id" + "\\}", + URLPathUtils.encodePathSegment(conversationId.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("Basic", "oAuth2"); + final String serializedBody = mapper.serialize(localVarContentTypes, injectMessageRequestBase); + + return new HttpRequest( + localVarPath, + HttpMethod.POST, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + @Override + public RecentConversationsListResponse listRecent( + RecentConversationsListQueryParameters queryParameter) throws ApiException { + + LOGGER.finest("[listRecent]" + " " + "queryParameter: " + queryParameter); + + HttpRequest httpRequest = listRecentRequestBuilder(queryParameter); + return _getRecentConversationsListPageAsListResponse(queryParameter, httpRequest); + } + + public RecentConversationsListResponse _getRecentConversationsListPageAsListResponse( + RecentConversationsListQueryParameters queryParameter, HttpRequest httpRequest) + throws ApiException { + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + + RecentConversationsListResponseInternal deserialized = + mapper.deserialize( + response, new TypeReference() {}); + + String nextToken = deserialized.getNextPageToken(); + + RecentConversationsListQueryParameters nextParameters = + RecentConversationsListQueryParameters.builder(queryParameter) + .setPageToken(deserialized.getNextPageToken()) + .build(); + + HttpRequest nextPage = null; + if (!StringUtil.isEmpty(nextToken)) { + nextPage = listRecentRequestBuilder(nextParameters); + } + + return new RecentConversationsListResponse( + this, + new Page<>( + nextParameters, deserialized.getConversations(), new PageNavigator<>(nextPage))); + } + // 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 listRecentRequestBuilder( + RecentConversationsListQueryParameters queryParameter) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling listRecent"); + } + // verify the required parameter 'appId' is set + if (null == queryParameter || queryParameter.getAppId() == null) { + throw new ApiException(400, "Missing the required parameter 'appId' when calling listRecent"); + } + + String localVarPath = + "/v1/projects/{project_id}/conversations:recent" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); + + List localVarQueryParams = new ArrayList<>(); + if (null != queryParameter) { + + URLParameterUtils.addQueryParam( + queryParameter.getAppId(), "app_id", URLParameter.form, null, localVarQueryParams, true); + + URLParameterUtils.addQueryParam( + queryParameter.getOnlyActive(), + "only_active", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getPageSize(), + "page_size", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getPageToken(), + "page_token", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getOrder(), "order", 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("Basic", "oAuth2"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + @Override + public void stopActive(String conversationId) throws ApiException { + + LOGGER.finest("[stopActive]" + " " + "conversationId: " + conversationId); + + HttpRequest httpRequest = stopActiveRequestBuilder(conversationId); + 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 stopActiveRequestBuilder(String conversationId) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling stopActive"); + } + // verify the required parameter 'conversationId' is set + if (conversationId == null) { + throw new ApiException( + 400, "Missing the required parameter 'conversationId' when calling stopActive"); + } + + String localVarPath = + "/v1/projects/{project_id}/conversations/{conversation_id}:stop" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) + .replaceAll( + "\\{" + "conversation_id" + "\\}", + URLPathUtils.encodePathSegment(conversationId.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("Basic", "oAuth2"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.POST, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + @Override + public Conversation update(String conversationId, Conversation conversation) throws ApiException { + + return update(conversationId, (ConversationsUpdateQueryParameters) null, conversation); + } + + @Override + public Conversation update( + String conversationId, + ConversationsUpdateQueryParameters queryParameter, + Conversation conversation) + throws ApiException { + + LOGGER.finest( + "[update]" + + " " + + "conversationId: " + + conversationId + + ", " + + "queryParameter: " + + queryParameter + + ", " + + "conversation: " + + conversation); + + HttpRequest httpRequest = updateRequestBuilder(conversationId, queryParameter, conversation); + 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 conversationId, + ConversationsUpdateQueryParameters queryParameter, + Conversation conversation) + throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling update"); + } + // verify the required parameter 'conversationId' is set + if (conversationId == null) { + throw new ApiException( + 400, "Missing the required parameter 'conversationId' when calling update"); + } + // verify the required parameter 'conversation' is set + if (conversation == null) { + throw new ApiException( + 400, "Missing the required parameter 'conversation' when calling update"); + } + + String localVarPath = + "/v1/projects/{project_id}/conversations/{conversation_id}" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) + .replaceAll( + "\\{" + "conversation_id" + "\\}", + URLPathUtils.encodePathSegment(conversationId.toString())); + + List localVarQueryParams = new ArrayList<>(); + if (null != queryParameter) { + + URLParameterUtils.addQueryParam( + queryParameter.getMetadataUpdateStrategy(), + "metadata_update_strategy", + 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("Basic", "oAuth2"); + final String serializedBody = mapper.serialize(localVarContentTypes, conversation); + + return new HttpRequest( + localVarPath, + HttpMethod.PATCH, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } +} 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/adapters/EventsServiceImpl.java similarity index 50% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/EventsApi.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/EventsServiceImpl.java index b8e16e461..60aa33215 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/adapters/EventsServiceImpl.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.api.v1.internal; +package com.sinch.sdk.domains.conversation.api.v1.adapters; import com.fasterxml.jackson.core.type.TypeReference; import com.sinch.sdk.core.exceptions.ApiException; @@ -21,11 +21,17 @@ 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.core.models.pagination.PageNavigator; +import com.sinch.sdk.core.utils.StringUtil; import com.sinch.sdk.domains.conversation.models.v1.events.ConversationEvent; -import com.sinch.sdk.domains.conversation.models.v1.events.internal.ListEventsResponseInternal; +import com.sinch.sdk.domains.conversation.models.v1.events.internal.EventsListResponseInternal; +import com.sinch.sdk.domains.conversation.models.v1.events.request.EventsListQueryParameters; import com.sinch.sdk.domains.conversation.models.v1.events.request.SendEventRequest; +import com.sinch.sdk.domains.conversation.models.v1.events.response.EventsListResponse; import com.sinch.sdk.domains.conversation.models.v1.events.response.SendEventResponse; import java.util.ArrayList; import java.util.Arrays; @@ -35,45 +41,70 @@ import java.util.Map; import java.util.logging.Logger; -public class EventsApi { +public class EventsServiceImpl implements com.sinch.sdk.domains.conversation.api.v1.EventsService { - private static final Logger LOGGER = Logger.getLogger(EventsApi.class.getName()); - private HttpClient httpClient; - private ServerConfiguration serverConfiguration; - private Map authManagersByOasSecuritySchemes; - private HttpMapper mapper; + private static final Logger LOGGER = Logger.getLogger(EventsServiceImpl.class.getName()); + private final HttpClient httpClient; + private final ServerConfiguration serverConfiguration; + private final Map authManagersByOasSecuritySchemes; + private final HttpMapper mapper; - public EventsApi( + private final String projectId; + + public EventsServiceImpl( HttpClient httpClient, ServerConfiguration serverConfiguration, Map authManagersByOasSecuritySchemes, - HttpMapper mapper) { + HttpMapper mapper, + String projectId) { this.httpClient = httpClient; this.serverConfiguration = serverConfiguration; this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; this.mapper = mapper; + this.projectId = projectId; + } + + @Override + public EventsListResponse list() throws ApiException { + + return list((EventsListQueryParameters) null); } - /** - * Delete an event Delete a specific event by its ID. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param eventId The unique ID of the event. (required) - * @throws ApiException if fails to make API call - */ - public void eventsDeleteEvents(String projectId, String eventId) throws ApiException { + @Override + public EventsListResponse list(EventsListQueryParameters queryParameter) throws ApiException { - LOGGER.finest( - "[eventsDeleteEvents]" + " " + "projectId: " + projectId + ", " + "eventId: " + eventId); + LOGGER.finest("[list]" + " " + "queryParameter: " + queryParameter); - HttpRequest httpRequest = eventsDeleteEventsRequestBuilder(projectId, eventId); + HttpRequest httpRequest = listRequestBuilder(queryParameter); + return _getEventsListPageAsListResponse(queryParameter, httpRequest); + } + + public EventsListResponse _getEventsListPageAsListResponse( + EventsListQueryParameters queryParameter, HttpRequest httpRequest) throws ApiException { HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - return; + + EventsListResponseInternal deserialized = + mapper.deserialize(response, new TypeReference() {}); + + String nextToken = deserialized.getNextPageToken(); + + EventsListQueryParameters nextParameters = + EventsListQueryParameters.builder(queryParameter) + .setPageToken(deserialized.getNextPageToken()) + .build(); + + HttpRequest nextPage = null; + if (!StringUtil.isEmpty(nextToken)) { + nextPage = listRequestBuilder(nextParameters); + } + + return new EventsListResponse( + this, + new Page<>(nextParameters, deserialized.getEvents(), new PageNavigator<>(nextPage))); } // fallback to default errors handling: // all error cases definition are not required from specs: will try some "hardcoded" content @@ -84,27 +115,55 @@ public void eventsDeleteEvents(String projectId, String eventId) throws ApiExcep mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest eventsDeleteEventsRequestBuilder(String projectId, String eventId) + private HttpRequest listRequestBuilder(EventsListQueryParameters queryParameter) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling eventsDeleteEvents"); - } - // verify the required parameter 'eventId' is set - if (eventId == null) { - throw new ApiException( - 400, "Missing the required parameter 'eventId' when calling eventsDeleteEvents"); + 400, "Missing the required parameter 'this.projectId' when calling list"); } String localVarPath = - "/v1/projects/{project_id}/events/{event_id}" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) + "/v1/projects/{project_id}/events" .replaceAll( - "\\{" + "event_id" + "\\}", URLPathUtils.encodePathSegment(eventId.toString())); + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); List localVarQueryParams = new ArrayList<>(); + if (null != queryParameter) { + + URLParameterUtils.addQueryParam( + queryParameter.getConversationId(), + "conversation_id", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getContactId(), + "contact_id", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getPageSize(), + "page_size", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getPageToken(), + "page_token", + URLParameter.form, + null, + localVarQueryParams, + true); + } Map localVarHeaderParams = new HashMap<>(); @@ -117,7 +176,7 @@ private HttpRequest eventsDeleteEventsRequestBuilder(String projectId, String ev return new HttpRequest( localVarPath, - HttpMethod.DELETE, + HttpMethod.GET, localVarQueryParams, serializedBody, localVarHeaderParams, @@ -126,29 +185,18 @@ private HttpRequest eventsDeleteEventsRequestBuilder(String projectId, String ev localVarAuthNames); } - /** - * Get an event Get event from ID - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param eventId The unique ID of the event. (required) - * @return ConversationEvent - * @throws ApiException if fails to make API call - */ - public ConversationEvent eventsGetEvent(String projectId, String eventId) throws ApiException { - - LOGGER.finest( - "[eventsGetEvent]" + " " + "projectId: " + projectId + ", " + "eventId: " + eventId); - - HttpRequest httpRequest = eventsGetEventRequestBuilder(projectId, eventId); + @Override + public void delete(String eventId) throws ApiException { + + LOGGER.finest("[delete]" + " " + "eventId: " + eventId); + + HttpRequest httpRequest = deleteRequestBuilder(eventId); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + return; } // fallback to default errors handling: // all error cases definition are not required from specs: will try some "hardcoded" content @@ -159,23 +207,22 @@ public ConversationEvent eventsGetEvent(String projectId, String eventId) throws mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest eventsGetEventRequestBuilder(String projectId, String eventId) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest deleteRequestBuilder(String eventId) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling eventsGetEvent"); + 400, "Missing the required parameter 'this.projectId' when calling delete"); } // verify the required parameter 'eventId' is set if (eventId == null) { - throw new ApiException( - 400, "Missing the required parameter 'eventId' when calling eventsGetEvent"); + throw new ApiException(400, "Missing the required parameter 'eventId' when calling delete"); } String localVarPath = "/v1/projects/{project_id}/events/{event_id}" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) .replaceAll( "\\{" + "event_id" + "\\}", URLPathUtils.encodePathSegment(eventId.toString())); @@ -192,7 +239,7 @@ private HttpRequest eventsGetEventRequestBuilder(String projectId, String eventI return new HttpRequest( localVarPath, - HttpMethod.GET, + HttpMethod.DELETE, localVarQueryParams, serializedBody, localVarHeaderParams, @@ -201,55 +248,18 @@ private HttpRequest eventsGetEventRequestBuilder(String projectId, String eventI localVarAuthNames); } - /** - * List events List all events in a project - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param conversationId Resource name (id) of the conversation. One of conversation_id or - * contact_id needs to be present. (optional) - * @param contactId Resource name (id) of the contact. One of conversation_id or contact_id needs - * to be present. (optional) - * @param pageSize Maximum number of events to fetch. Defaults to 10 and the maximum is 20. - * (optional) - * @param pageToken Next page token previously returned if any. When specifying this token, make - * sure to use the same values for the other parameters from the request that originated the - * token, otherwise the paged results may be inconsistent. (optional) - * @return ListEventsResponseInternal - * @throws ApiException if fails to make API call - */ - public ListEventsResponseInternal eventsListEvents( - String projectId, String conversationId, String contactId, Integer pageSize, String pageToken) - throws ApiException { + @Override + public ConversationEvent get(String eventId) throws ApiException { - LOGGER.finest( - "[eventsListEvents]" - + " " - + "projectId: " - + projectId - + ", " - + "conversationId: " - + conversationId - + ", " - + "contactId: " - + contactId - + ", " - + "pageSize: " - + pageSize - + ", " - + "pageToken: " - + pageToken); - - HttpRequest httpRequest = - eventsListEventsRequestBuilder(projectId, conversationId, contactId, pageSize, pageToken); + LOGGER.finest("[get]" + " " + "eventId: " + eventId); + + HttpRequest httpRequest = getRequestBuilder(eventId); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + 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 @@ -260,49 +270,27 @@ public ListEventsResponseInternal eventsListEvents( mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest eventsListEventsRequestBuilder( - String projectId, String conversationId, String contactId, Integer pageSize, String pageToken) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest getRequestBuilder(String eventId) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling eventsListEvents"); + 400, "Missing the required parameter 'this.projectId' when calling get"); + } + // verify the required parameter 'eventId' is set + if (eventId == null) { + throw new ApiException(400, "Missing the required parameter 'eventId' when calling get"); } String localVarPath = - "/v1/projects/{project_id}/events" + "/v1/projects/{project_id}/events/{event_id}" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); + "\\{" + "event_id" + "\\}", URLPathUtils.encodePathSegment(eventId.toString())); List localVarQueryParams = new ArrayList<>(); - if (null != conversationId) { - localVarQueryParams.add( - new URLParameter( - "conversation_id", - conversationId, - 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( - "page_token", pageToken, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); - } - Map localVarHeaderParams = new HashMap<>(); final Collection localVarAccepts = Arrays.asList("application/json"); @@ -323,38 +311,18 @@ private HttpRequest eventsListEventsRequestBuilder( localVarAuthNames); } - /** - * Send an event Sends an event to the referenced contact from the referenced app. Note that this - * operation enqueues the event in a queue so a successful response only indicates that the event - * has been queued. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param sendEventRequest The event to be sent. (required) - * @return SendEventResponse - * @throws ApiException if fails to make API call - */ - public SendEventResponse eventsSendEvent(String projectId, SendEventRequest sendEventRequest) - throws ApiException { + @Override + public SendEventResponse send(SendEventRequest sendEventRequest) throws ApiException { - LOGGER.finest( - "[eventsSendEvent]" - + " " - + "projectId: " - + projectId - + ", " - + "sendEventRequest: " - + sendEventRequest); + LOGGER.finest("[send]" + " " + "sendEventRequest: " + sendEventRequest); - HttpRequest httpRequest = eventsSendEventRequestBuilder(projectId, sendEventRequest); + HttpRequest httpRequest = sendRequestBuilder(sendEventRequest); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + 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 @@ -365,23 +333,23 @@ public SendEventResponse eventsSendEvent(String projectId, SendEventRequest send mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest eventsSendEventRequestBuilder( - String projectId, SendEventRequest sendEventRequest) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest sendRequestBuilder(SendEventRequest sendEventRequest) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling eventsSendEvent"); + 400, "Missing the required parameter 'this.projectId' when calling send"); } // verify the required parameter 'sendEventRequest' is set if (sendEventRequest == null) { throw new ApiException( - 400, "Missing the required parameter 'sendEventRequest' when calling eventsSendEvent"); + 400, "Missing the required parameter 'sendEventRequest' when calling send"); } String localVarPath = "/v1/projects/{project_id}/events:send" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); List localVarQueryParams = new ArrayList<>(); diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/MessagesServiceImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/MessagesServiceImpl.java new file mode 100644 index 000000000..2fde86f31 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/MessagesServiceImpl.java @@ -0,0 +1,623 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.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.core.models.pagination.PageNavigator; +import com.sinch.sdk.core.utils.StringUtil; +import com.sinch.sdk.domains.conversation.models.v1.messages.AppMessageBody; +import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.internal.MessagesListResponseInternal; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessageUpdateRequest; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesDeleteQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesGetQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesUpdateQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.SendMessageRequest; +import com.sinch.sdk.domains.conversation.models.v1.messages.response.MessagesListResponse; +import com.sinch.sdk.domains.conversation.models.v1.messages.response.SendMessageResponse; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.card.CardMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.carousel.CarouselMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.choice.ChoiceMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo.ContactInfoMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.list.ListMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.location.LocationMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.media.MediaMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.template.TemplateMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.text.TextMessage; +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 MessagesServiceImpl + implements com.sinch.sdk.domains.conversation.api.v1.MessagesService { + + private static final Logger LOGGER = Logger.getLogger(MessagesServiceImpl.class.getName()); + private final HttpClient httpClient; + private final ServerConfiguration serverConfiguration; + private final Map authManagersByOasSecuritySchemes; + private final HttpMapper mapper; + + private final String projectId; + + public MessagesServiceImpl( + HttpClient httpClient, + ServerConfiguration serverConfiguration, + Map authManagersByOasSecuritySchemes, + HttpMapper mapper, + String projectId) { + this.httpClient = httpClient; + this.serverConfiguration = serverConfiguration; + this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; + this.mapper = mapper; + this.projectId = projectId; + } + + @Override + public MessagesListResponse list() throws ApiException { + + return list((MessagesListQueryParameters) null); + } + + @Override + public MessagesListResponse list(MessagesListQueryParameters queryParameter) throws ApiException { + + LOGGER.finest("[list]" + " " + "queryParameter: " + queryParameter); + + HttpRequest httpRequest = listRequestBuilder(queryParameter); + return _getMessagesListPageAsListResponse(queryParameter, httpRequest); + } + + public MessagesListResponse _getMessagesListPageAsListResponse( + MessagesListQueryParameters queryParameter, HttpRequest httpRequest) throws ApiException { + HttpResponse response = + httpClient.invokeAPI( + this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); + + if (HttpStatus.isSuccessfulStatus(response.getCode())) { + + MessagesListResponseInternal deserialized = + mapper.deserialize(response, new TypeReference() {}); + + String nextToken = deserialized.getNextPageToken(); + + MessagesListQueryParameters nextParameters = + MessagesListQueryParameters.builder(queryParameter) + .setPageToken(deserialized.getNextPageToken()) + .build(); + + HttpRequest nextPage = null; + if (!StringUtil.isEmpty(nextToken)) { + nextPage = listRequestBuilder(nextParameters); + } + + return new MessagesListResponse( + this, + new Page<>(nextParameters, deserialized.getMessages(), new PageNavigator<>(nextPage))); + } + // 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(MessagesListQueryParameters queryParameter) + throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling list"); + } + + String localVarPath = + "/v1/projects/{project_id}/messages" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); + + List localVarQueryParams = new ArrayList<>(); + if (null != queryParameter) { + + URLParameterUtils.addQueryParam( + queryParameter.getConversationId(), + "conversation_id", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getContactId(), + "contact_id", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getAppId(), "app_id", URLParameter.form, null, localVarQueryParams, true); + + URLParameterUtils.addQueryParam( + queryParameter.getChannelIdentity(), + "channel_identity", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getStartTime(), + "start_time", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getEndTime(), + "end_time", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getPageSize(), + "page_size", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getPageToken(), + "page_token", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getView(), "view", URLParameter.form, null, localVarQueryParams, true); + + URLParameterUtils.addQueryParam( + queryParameter.getMessagesSource(), + "messages_source", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getOnlyRecipientOriginated(), + "only_recipient_originated", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getChannel(), + "channel", + 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("Basic", "oAuth2"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + @Override + public void delete(String messageId) throws ApiException { + + delete(messageId, (MessagesDeleteQueryParameters) null); + } + + @Override + public void delete(String messageId, MessagesDeleteQueryParameters queryParameter) + throws ApiException { + + LOGGER.finest( + "[delete]" + " " + "messageId: " + messageId + ", " + "queryParameter: " + queryParameter); + + HttpRequest httpRequest = deleteRequestBuilder(messageId, queryParameter); + 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 messageId, MessagesDeleteQueryParameters queryParameter) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling delete"); + } + // verify the required parameter 'messageId' is set + if (messageId == null) { + throw new ApiException(400, "Missing the required parameter 'messageId' when calling delete"); + } + + String localVarPath = + "/v1/projects/{project_id}/messages/{message_id}" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) + .replaceAll( + "\\{" + "message_id" + "\\}", URLPathUtils.encodePathSegment(messageId.toString())); + + List localVarQueryParams = new ArrayList<>(); + if (null != queryParameter) { + + URLParameterUtils.addQueryParam( + queryParameter.getMessagesSource(), + "messages_source", + 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("Basic", "oAuth2"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.DELETE, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + @Override + public ConversationMessage get(String messageId) throws ApiException { + + return get(messageId, (MessagesGetQueryParameters) null); + } + + @Override + public ConversationMessage get(String messageId, MessagesGetQueryParameters queryParameter) + throws ApiException { + + LOGGER.finest( + "[get]" + " " + "messageId: " + messageId + ", " + "queryParameter: " + queryParameter); + + HttpRequest httpRequest = getRequestBuilder(messageId, 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 messageId, MessagesGetQueryParameters queryParameter) + throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling get"); + } + // verify the required parameter 'messageId' is set + if (messageId == null) { + throw new ApiException(400, "Missing the required parameter 'messageId' when calling get"); + } + + String localVarPath = + "/v1/projects/{project_id}/messages/{message_id}" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) + .replaceAll( + "\\{" + "message_id" + "\\}", URLPathUtils.encodePathSegment(messageId.toString())); + + List localVarQueryParams = new ArrayList<>(); + if (null != queryParameter) { + + URLParameterUtils.addQueryParam( + queryParameter.getMessagesSource(), + "messages_source", + 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("Basic", "oAuth2"); + final String serializedBody = null; + + return new HttpRequest( + localVarPath, + HttpMethod.GET, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + @Override + public SendMessageResponse sendMessage( + SendMessageRequest sendMessageRequest) throws ApiException { + + LOGGER.finest("[sendMessage]" + " " + "sendMessageRequest: " + sendMessageRequest); + + HttpRequest httpRequest = sendMessageRequestBuilder(sendMessageRequest); + 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 sendMessageRequestBuilder( + SendMessageRequest sendMessageRequest) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling sendMessage"); + } + // verify the required parameter 'sendMessageRequest' is set + if (sendMessageRequest == null) { + throw new ApiException( + 400, "Missing the required parameter 'sendMessageRequest' when calling sendMessage"); + } + + String localVarPath = + "/v1/projects/{project_id}/messages:send" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.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("Basic", "oAuth2"); + final String serializedBody = mapper.serialize(localVarContentTypes, sendMessageRequest); + + return new HttpRequest( + localVarPath, + HttpMethod.POST, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } + + public SendMessageResponse sendCardMessage(SendMessageRequest request) { + return sendMessage(request); + } + + public SendMessageResponse sendCarouselMessage(SendMessageRequest request) { + return sendMessage(request); + } + + public SendMessageResponse sendChoiceMessage(SendMessageRequest request) { + return sendMessage(request); + } + + public SendMessageResponse sendContactInfoMessage( + SendMessageRequest request) { + return sendMessage(request); + } + + public SendMessageResponse sendListMessage(SendMessageRequest request) { + return sendMessage(request); + } + + public SendMessageResponse sendLocationMessage(SendMessageRequest request) { + return sendMessage(request); + } + + public SendMessageResponse sendMediaMessage(SendMessageRequest request) { + return sendMessage(request); + } + + public SendMessageResponse sendTemplateMessage(SendMessageRequest request) { + return sendMessage(request); + } + + public SendMessageResponse sendTextMessage(SendMessageRequest request) { + return sendMessage(request); + } + + @Override + public ConversationMessage update(String messageId, MessageUpdateRequest messageUpdateRequest) + throws ApiException { + return update(messageId, (MessagesUpdateQueryParameters) null, messageUpdateRequest); + } + + @Override + public ConversationMessage update( + String messageId, + MessagesUpdateQueryParameters queryParameter, + MessageUpdateRequest messageUpdateRequest) + throws ApiException { + + LOGGER.finest( + "[update]" + + " " + + "messageId: " + + messageId + + ", " + + "queryParameter: " + + queryParameter + + ", " + + "messageUpdateRequest: " + + messageUpdateRequest); + + HttpRequest httpRequest = updateRequestBuilder(messageId, queryParameter, messageUpdateRequest); + 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 messageId, + MessagesUpdateQueryParameters queryParameter, + MessageUpdateRequest messageUpdateRequest) + throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling update"); + } + // verify the required parameter 'messageId' is set + if (messageId == null) { + throw new ApiException(400, "Missing the required parameter 'messageId' when calling update"); + } + // verify the required parameter 'messageUpdateRequest' is set + if (messageUpdateRequest == null) { + throw new ApiException( + 400, "Missing the required parameter 'messageUpdateRequest' when calling update"); + } + + String localVarPath = + "/v1/projects/{project_id}/messages/{message_id}" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) + .replaceAll( + "\\{" + "message_id" + "\\}", URLPathUtils.encodePathSegment(messageId.toString())); + + List localVarQueryParams = new ArrayList<>(); + if (null != queryParameter) { + + URLParameterUtils.addQueryParam( + queryParameter.getMessagesSource(), + "messages_source", + 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("Basic", "oAuth2"); + final String serializedBody = mapper.serialize(localVarContentTypes, messageUpdateRequest); + + return new HttpRequest( + localVarPath, + HttpMethod.PATCH, + localVarQueryParams, + serializedBody, + localVarHeaderParams, + localVarAccepts, + localVarContentTypes, + localVarAuthNames); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/ProjectSettingsApi.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ProjectSettingsServiceImpl.java similarity index 57% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/ProjectSettingsApi.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ProjectSettingsServiceImpl.java index c5f26d2f8..4f8a9697a 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/ProjectSettingsApi.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/ProjectSettingsServiceImpl.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.api.v1.internal; +package com.sinch.sdk.domains.conversation.api.v1.adapters; import com.fasterxml.jackson.core.type.TypeReference; import com.sinch.sdk.core.exceptions.ApiException; @@ -33,57 +33,43 @@ import java.util.Map; import java.util.logging.Logger; -public class ProjectSettingsApi { +public class ProjectSettingsServiceImpl + implements com.sinch.sdk.domains.conversation.api.v1.ProjectSettingsService { - private static final Logger LOGGER = Logger.getLogger(ProjectSettingsApi.class.getName()); - private HttpClient httpClient; - private ServerConfiguration serverConfiguration; - private Map authManagersByOasSecuritySchemes; - private HttpMapper mapper; + private static final Logger LOGGER = Logger.getLogger(ProjectSettingsServiceImpl.class.getName()); + private final HttpClient httpClient; + private final ServerConfiguration serverConfiguration; + private final Map authManagersByOasSecuritySchemes; + private final HttpMapper mapper; - public ProjectSettingsApi( + private final String projectId; + + public ProjectSettingsServiceImpl( HttpClient httpClient, ServerConfiguration serverConfiguration, Map authManagersByOasSecuritySchemes, - HttpMapper mapper) { + HttpMapper mapper, + String projectId) { this.httpClient = httpClient; this.serverConfiguration = serverConfiguration; this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; this.mapper = mapper; + this.projectId = projectId; } - /** - * Create Project Settings Creates initial settings for the project. Useful for enabling features - * like Unified Contact ID. For new projects with no existing contacts, you can enable Unified - * Contact ID immediately. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param projectSettingsRequest The project settings to create. (required) - * @return ProjectSettingsResponse - * @throws ApiException if fails to make API call - */ - public ProjectSettingsResponse create( - String projectId, ProjectSettingsRequest projectSettingsRequest) throws ApiException { - - LOGGER.finest( - "[create]" - + " " - + "projectId: " - + projectId - + ", " - + "projectSettingsRequest: " - + projectSettingsRequest); - - HttpRequest httpRequest = createRequestBuilder(projectId, projectSettingsRequest); + @Override + public ProjectSettingsResponse create(ProjectSettingsRequest projectSettingsRequest) + throws ApiException { + + LOGGER.finest("[create]" + " " + "projectSettingsRequest: " + projectSettingsRequest); + + HttpRequest httpRequest = createRequestBuilder(projectSettingsRequest); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + 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 @@ -94,11 +80,12 @@ public ProjectSettingsResponse create( mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest createRequestBuilder( - String projectId, ProjectSettingsRequest projectSettingsRequest) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException(400, "Missing the required parameter 'projectId' when calling create"); + private HttpRequest createRequestBuilder(ProjectSettingsRequest projectSettingsRequest) + throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling create"); } // verify the required parameter 'projectSettingsRequest' is set if (projectSettingsRequest == null) { @@ -109,7 +96,8 @@ private HttpRequest createRequestBuilder( String localVarPath = "/v1/projects/{project_id}/settings" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); List localVarQueryParams = new ArrayList<>(); @@ -133,18 +121,12 @@ private HttpRequest createRequestBuilder( localVarAuthNames); } - /** - * Delete Project Settings Deletes all project-level settings for the specified project. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @throws ApiException if fails to make API call - */ - public void delete(String projectId) throws ApiException { + @Override + public void delete() throws ApiException { - LOGGER.finest("[delete]" + " " + "projectId: " + projectId); + LOGGER.finest("[delete]" + " "); - HttpRequest httpRequest = deleteRequestBuilder(projectId); + HttpRequest httpRequest = deleteRequestBuilder(); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); @@ -161,16 +143,18 @@ public void delete(String projectId) throws ApiException { mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest deleteRequestBuilder(String projectId) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException(400, "Missing the required parameter 'projectId' when calling delete"); + private HttpRequest deleteRequestBuilder() throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling delete"); } String localVarPath = "/v1/projects/{project_id}/settings" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); List localVarQueryParams = new ArrayList<>(); @@ -194,28 +178,18 @@ private HttpRequest deleteRequestBuilder(String projectId) throws ApiException { localVarAuthNames); } - /** - * Get Project Settings Retrieves the current settings for the specified project, including - * contact management options such as Unified Contact ID. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @return ProjectSettingsResponse - * @throws ApiException if fails to make API call - */ - public ProjectSettingsResponse get(String projectId) throws ApiException { + @Override + public ProjectSettingsResponse get() throws ApiException { - LOGGER.finest("[get]" + " " + "projectId: " + projectId); + LOGGER.finest("[get]" + " "); - HttpRequest httpRequest = getRequestBuilder(projectId); + HttpRequest httpRequest = getRequestBuilder(); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + 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 @@ -226,16 +200,18 @@ public ProjectSettingsResponse get(String projectId) throws ApiException { mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest getRequestBuilder(String projectId) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException(400, "Missing the required parameter 'projectId' when calling get"); + private HttpRequest getRequestBuilder() throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling get"); } String localVarPath = "/v1/projects/{project_id}/settings" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); List localVarQueryParams = new ArrayList<>(); @@ -259,38 +235,19 @@ private HttpRequest getRequestBuilder(String projectId) throws ApiException { localVarAuthNames); } - /** - * Update Project Settings Updates project settings (e.g. enabling/disabling Unified Contact ID). - * For existing projects, you must resolve all identity conflicts before enabling Unified Contact - * ID. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param projectSettingsRequest The project settings to update. (required) - * @return ProjectSettingsResponse - * @throws ApiException if fails to make API call - */ - public ProjectSettingsResponse update( - String projectId, ProjectSettingsRequest projectSettingsRequest) throws ApiException { - - LOGGER.finest( - "[update]" - + " " - + "projectId: " - + projectId - + ", " - + "projectSettingsRequest: " - + projectSettingsRequest); - - HttpRequest httpRequest = updateRequestBuilder(projectId, projectSettingsRequest); + @Override + public ProjectSettingsResponse update(ProjectSettingsRequest projectSettingsRequest) + throws ApiException { + + LOGGER.finest("[update]" + " " + "projectSettingsRequest: " + projectSettingsRequest); + + HttpRequest httpRequest = updateRequestBuilder(projectSettingsRequest); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + 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 @@ -301,11 +258,12 @@ public ProjectSettingsResponse update( mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest updateRequestBuilder( - String projectId, ProjectSettingsRequest projectSettingsRequest) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException(400, "Missing the required parameter 'projectId' when calling update"); + private HttpRequest updateRequestBuilder(ProjectSettingsRequest projectSettingsRequest) + throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { + throw new ApiException( + 400, "Missing the required parameter 'this.projectId' when calling update"); } // verify the required parameter 'projectSettingsRequest' is set if (projectSettingsRequest == null) { @@ -316,7 +274,8 @@ private HttpRequest updateRequestBuilder( String localVarPath = "/v1/projects/{project_id}/settings" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); List localVarQueryParams = new ArrayList<>(); diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/TranscodingApi.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/TranscodingServiceImpl.java similarity index 61% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/TranscodingApi.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/TranscodingServiceImpl.java index 555385a87..4b5caf644 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/TranscodingApi.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/TranscodingServiceImpl.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.api.v1.internal; +package com.sinch.sdk.domains.conversation.api.v1.adapters; import com.fasterxml.jackson.core.type.TypeReference; import com.sinch.sdk.core.exceptions.ApiException; @@ -33,58 +33,44 @@ import java.util.Map; import java.util.logging.Logger; -public class TranscodingApi { +public class TranscodingServiceImpl + implements com.sinch.sdk.domains.conversation.api.v1.TranscodingService { - private static final Logger LOGGER = Logger.getLogger(TranscodingApi.class.getName()); - private HttpClient httpClient; - private ServerConfiguration serverConfiguration; - private Map authManagersByOasSecuritySchemes; - private HttpMapper mapper; + private static final Logger LOGGER = Logger.getLogger(TranscodingServiceImpl.class.getName()); + private final HttpClient httpClient; + private final ServerConfiguration serverConfiguration; + private final Map authManagersByOasSecuritySchemes; + private final HttpMapper mapper; - public TranscodingApi( + private final String projectId; + + public TranscodingServiceImpl( HttpClient httpClient, ServerConfiguration serverConfiguration, Map authManagersByOasSecuritySchemes, - HttpMapper mapper) { + HttpMapper mapper, + String projectId) { this.httpClient = httpClient; this.serverConfiguration = serverConfiguration; this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; this.mapper = mapper; + this.projectId = projectId; } - /** - * Transcode a message Transcodes the message from the Conversation API format to the - * channel-specific formats for the requested channels. No message is sent to the contact. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param transcodeMessageRequest The message to be transcoded, and the app and channels for which - * the message is to be transcoded. (required) - * @return TranscodeMessageResponse - * @throws ApiException if fails to make API call - */ - public TranscodeMessageResponse transcodingTranscodeMessage( - String projectId, TranscodeMessageRequest transcodeMessageRequest) throws ApiException { + @Override + public TranscodeMessageResponse transcodeMessage(TranscodeMessageRequest transcodeMessageRequest) + throws ApiException { LOGGER.finest( - "[transcodingTranscodeMessage]" - + " " - + "projectId: " - + projectId - + ", " - + "transcodeMessageRequest: " - + transcodeMessageRequest); - - HttpRequest httpRequest = - transcodingTranscodeMessageRequestBuilder(projectId, transcodeMessageRequest); + "[transcodeMessage]" + " " + "transcodeMessageRequest: " + transcodeMessageRequest); + + HttpRequest httpRequest = transcodeMessageRequestBuilder(transcodeMessageRequest); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + 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 @@ -95,26 +81,25 @@ public TranscodeMessageResponse transcodingTranscodeMessage( mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest transcodingTranscodeMessageRequestBuilder( - String projectId, TranscodeMessageRequest transcodeMessageRequest) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest transcodeMessageRequestBuilder( + TranscodeMessageRequest transcodeMessageRequest) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, - "Missing the required parameter 'projectId' when calling transcodingTranscodeMessage"); + 400, "Missing the required parameter 'this.projectId' when calling transcodeMessage"); } // verify the required parameter 'transcodeMessageRequest' is set if (transcodeMessageRequest == null) { throw new ApiException( 400, - "Missing the required parameter 'transcodeMessageRequest' when calling" - + " transcodingTranscodeMessage"); + "Missing the required parameter 'transcodeMessageRequest' when calling transcodeMessage"); } String localVarPath = "/v1/projects/{project_id}/messages:transcode" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); List localVarQueryParams = new ArrayList<>(); 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/adapters/WebhooksServiceImpl.java similarity index 52% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/WebhooksApi.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/adapters/WebhooksServiceImpl.java index 7072d87b9..d42d88bbb 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/adapters/WebhooksServiceImpl.java @@ -8,11 +8,14 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.api.v1.internal; +package com.sinch.sdk.domains.conversation.api.v1.adapters; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; +import com.sinch.sdk.auth.HmacAuthenticationValidation; import com.sinch.sdk.core.exceptions.ApiException; import com.sinch.sdk.core.exceptions.ApiExceptionBuilder; +import com.sinch.sdk.core.exceptions.ApiMappingException; import com.sinch.sdk.core.http.AuthManager; import com.sinch.sdk.core.http.HttpClient; import com.sinch.sdk.core.http.HttpMapper; @@ -23,9 +26,14 @@ import com.sinch.sdk.core.http.URLParameter; 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.core.utils.databind.Mapper; import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.internal.CreateWebhookRequestInternal; -import com.sinch.sdk.domains.conversation.models.v1.webhooks.response.ListWebhooksResponse; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.ConversationWebhookEvent; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.internal.ConversationEventInternalImpl; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.internal.WebhooksListResponseInternal; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.request.CreateWebhookRequest; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.response.WebhooksListResponse; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -34,57 +42,50 @@ import java.util.Map; import java.util.logging.Logger; -public class WebhooksApi { +public class WebhooksServiceImpl + implements com.sinch.sdk.domains.conversation.api.v1.WebhooksService { - private static final Logger LOGGER = Logger.getLogger(WebhooksApi.class.getName()); - private HttpClient httpClient; - private ServerConfiguration serverConfiguration; - private Map authManagersByOasSecuritySchemes; - private HttpMapper mapper; + private static final Logger LOGGER = Logger.getLogger(WebhooksServiceImpl.class.getName()); + private final HttpClient httpClient; + private final ServerConfiguration serverConfiguration; + private final Map authManagersByOasSecuritySchemes; + private final HttpMapper mapper; - public WebhooksApi( + private final String projectId; + + private final HmacAuthenticationValidation authenticationChecker; + + public WebhooksServiceImpl( HttpClient httpClient, ServerConfiguration serverConfiguration, Map authManagersByOasSecuritySchemes, - HttpMapper mapper) { + HttpMapper mapper, + String projectId, + HmacAuthenticationValidation authenticationChecker) { this.httpClient = httpClient; this.serverConfiguration = serverConfiguration; this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; this.mapper = mapper; + this.projectId = projectId; + this.authenticationChecker = authenticationChecker; } - /** - * Create a new webhook Creates a webhook for receiving callbacks on specific triggers. You can - * create up to 5 webhooks per app. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param createWebhookRequestInternal Required. The Webhook to create (required) - * @return Webhook - * @throws ApiException if fails to make API call - */ - public Webhook webhooksCreateWebhook( - String projectId, CreateWebhookRequestInternal createWebhookRequestInternal) - throws ApiException { + @Override + public WebhooksListResponse list(String appId) throws ApiException { + + LOGGER.finest("[list]" + " " + "appId: " + appId); - LOGGER.finest( - "[webhooksCreateWebhook]" - + " " - + "projectId: " - + projectId - + ", " - + "createWebhookRequestInternal: " - + createWebhookRequestInternal); - - HttpRequest httpRequest = - webhooksCreateWebhookRequestBuilder(projectId, createWebhookRequestInternal); + HttpRequest httpRequest = listRequestBuilder(appId); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + + WebhooksListResponseInternal deserialized = + mapper.deserialize(response, new TypeReference() {}); + + return new WebhooksListResponse(new Page<>(null, deserialized.getWebhooks(), null)); } // fallback to default errors handling: // all error cases definition are not required from specs: will try some "hardcoded" content @@ -95,26 +96,23 @@ public Webhook webhooksCreateWebhook( mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest webhooksCreateWebhookRequestBuilder( - String projectId, CreateWebhookRequestInternal createWebhookRequestInternal) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest listRequestBuilder(String appId) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling webhooksCreateWebhook"); + 400, "Missing the required parameter 'this.projectId' when calling list"); } - // verify the required parameter 'createWebhookRequestInternal' is set - if (createWebhookRequestInternal == null) { - throw new ApiException( - 400, - "Missing the required parameter 'createWebhookRequestInternal' when calling" - + " webhooksCreateWebhook"); + // verify the required parameter 'appId' is set + if (appId == null) { + throw new ApiException(400, "Missing the required parameter 'appId' when calling list"); } String localVarPath = - "/v1/projects/{project_id}/webhooks" + "/v1/projects/{project_id}/apps/{app_id}/webhooks" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) + .replaceAll("\\{" + "app_id" + "\\}", URLPathUtils.encodePathSegment(appId.toString())); List localVarQueryParams = new ArrayList<>(); @@ -122,15 +120,14 @@ private HttpRequest webhooksCreateWebhookRequestBuilder( final Collection localVarAccepts = Arrays.asList("application/json"); - final Collection localVarContentTypes = Arrays.asList("application/json"); + final Collection localVarContentTypes = Arrays.asList(); final Collection localVarAuthNames = Arrays.asList("Basic", "oAuth2"); - final String serializedBody = - mapper.serialize(localVarContentTypes, createWebhookRequestInternal); + final String serializedBody = null; return new HttpRequest( localVarPath, - HttpMethod.POST, + HttpMethod.GET, localVarQueryParams, serializedBody, localVarHeaderParams, @@ -139,32 +136,18 @@ private HttpRequest webhooksCreateWebhookRequestBuilder( localVarAuthNames); } - /** - * Delete an existing webhook Deletes a webhook as specified by the webhook ID. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param webhookId The unique ID of the webhook. (required) - * @throws ApiException if fails to make API call - */ - public void webhooksDeleteWebhook(String projectId, String webhookId) throws ApiException { - - LOGGER.finest( - "[webhooksDeleteWebhook]" - + " " - + "projectId: " - + projectId - + ", " - + "webhookId: " - + webhookId); - - HttpRequest httpRequest = webhooksDeleteWebhookRequestBuilder(projectId, webhookId); + @Override + public Webhook create(CreateWebhookRequest createWebhookRequest) throws ApiException { + + LOGGER.finest("[create]" + " " + "createWebhookRequest: " + createWebhookRequest); + + HttpRequest httpRequest = createRequestBuilder(createWebhookRequest); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - return; + 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 @@ -175,25 +158,24 @@ public void webhooksDeleteWebhook(String projectId, String webhookId) throws Api mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest webhooksDeleteWebhookRequestBuilder(String projectId, String webhookId) + private HttpRequest createRequestBuilder(CreateWebhookRequest createWebhookRequest) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling webhooksDeleteWebhook"); + 400, "Missing the required parameter 'this.projectId' when calling create"); } - // verify the required parameter 'webhookId' is set - if (webhookId == null) { + // verify the required parameter 'createWebhookRequest' is set + if (createWebhookRequest == null) { throw new ApiException( - 400, "Missing the required parameter 'webhookId' when calling webhooksDeleteWebhook"); + 400, "Missing the required parameter 'createWebhookRequest' when calling create"); } String localVarPath = - "/v1/projects/{project_id}/webhooks/{webhook_id}" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) + "/v1/projects/{project_id}/webhooks" .replaceAll( - "\\{" + "webhook_id" + "\\}", URLPathUtils.encodePathSegment(webhookId.toString())); + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); List localVarQueryParams = new ArrayList<>(); @@ -201,14 +183,14 @@ private HttpRequest webhooksDeleteWebhookRequestBuilder(String projectId, String final Collection localVarAccepts = Arrays.asList("application/json"); - final Collection localVarContentTypes = Arrays.asList(); + final Collection localVarContentTypes = Arrays.asList("application/json"); final Collection localVarAuthNames = Arrays.asList("Basic", "oAuth2"); - final String serializedBody = null; + final String serializedBody = mapper.serialize(localVarContentTypes, createWebhookRequest); return new HttpRequest( localVarPath, - HttpMethod.DELETE, + HttpMethod.POST, localVarQueryParams, serializedBody, localVarHeaderParams, @@ -217,34 +199,36 @@ private HttpRequest webhooksDeleteWebhookRequestBuilder(String projectId, String localVarAuthNames); } - /** - * Get a webhook Get a webhook as specified by the webhook ID. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param webhookId The unique ID of the webhook. (required) - * @return Webhook - * @throws ApiException if fails to make API call - */ - public Webhook webhooksGetWebhook(String projectId, String webhookId) throws ApiException { - - LOGGER.finest( - "[webhooksGetWebhook]" - + " " - + "projectId: " - + projectId - + ", " - + "webhookId: " - + webhookId); - - HttpRequest httpRequest = webhooksGetWebhookRequestBuilder(projectId, webhookId); + @Override + public boolean validateAuthenticationHeader( + String secret, Map headers, String jsonPayload) { + + return authenticationChecker.validateAuthenticationHeader(secret, headers, jsonPayload); + } + + @Override + public ConversationWebhookEvent parseEvent(String jsonPayload) throws ApiMappingException { + try { + ConversationEventInternalImpl dto = + Mapper.getInstance().readValue(jsonPayload, ConversationEventInternalImpl.class); + return (ConversationWebhookEvent) dto.getActualInstance(); + } catch (JsonProcessingException e) { + throw new ApiMappingException(jsonPayload, e); + } + } + + @Override + public void delete(String webhookId) throws ApiException { + + LOGGER.finest("[delete]" + " " + "webhookId: " + webhookId); + + HttpRequest httpRequest = deleteRequestBuilder(webhookId); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + return; } // fallback to default errors handling: // all error cases definition are not required from specs: will try some "hardcoded" content @@ -255,23 +239,22 @@ public Webhook webhooksGetWebhook(String projectId, String webhookId) throws Api mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest webhooksGetWebhookRequestBuilder(String projectId, String webhookId) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest deleteRequestBuilder(String webhookId) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling webhooksGetWebhook"); + 400, "Missing the required parameter 'this.projectId' when calling delete"); } // verify the required parameter 'webhookId' is set if (webhookId == null) { - throw new ApiException( - 400, "Missing the required parameter 'webhookId' when calling webhooksGetWebhook"); + throw new ApiException(400, "Missing the required parameter 'webhookId' when calling delete"); } String localVarPath = "/v1/projects/{project_id}/webhooks/{webhook_id}" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) .replaceAll( "\\{" + "webhook_id" + "\\}", URLPathUtils.encodePathSegment(webhookId.toString())); @@ -288,7 +271,7 @@ private HttpRequest webhooksGetWebhookRequestBuilder(String projectId, String we return new HttpRequest( localVarPath, - HttpMethod.GET, + HttpMethod.DELETE, localVarQueryParams, serializedBody, localVarHeaderParams, @@ -297,31 +280,18 @@ private HttpRequest webhooksGetWebhookRequestBuilder(String projectId, String we localVarAuthNames); } - /** - * List webhooks List all webhooks for a given app as specified by the App ID. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param appId The unique ID of the app. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @return ListWebhooksResponse - * @throws ApiException if fails to make API call - */ - public ListWebhooksResponse webhooksListWebhooks(String projectId, String appId) - throws ApiException { + @Override + public Webhook get(String webhookId) throws ApiException { - LOGGER.finest( - "[webhooksListWebhooks]" + " " + "projectId: " + projectId + ", " + "appId: " + appId); + LOGGER.finest("[get]" + " " + "webhookId: " + webhookId); - HttpRequest httpRequest = webhooksListWebhooksRequestBuilder(projectId, appId); + HttpRequest httpRequest = getRequestBuilder(webhookId); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + 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 @@ -332,24 +302,24 @@ public ListWebhooksResponse webhooksListWebhooks(String projectId, String appId) mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest webhooksListWebhooksRequestBuilder(String projectId, String appId) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest getRequestBuilder(String webhookId) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling webhooksListWebhooks"); + 400, "Missing the required parameter 'this.projectId' when calling get"); } - // verify the required parameter 'appId' is set - if (appId == null) { - throw new ApiException( - 400, "Missing the required parameter 'appId' when calling webhooksListWebhooks"); + // verify the required parameter 'webhookId' is set + if (webhookId == null) { + throw new ApiException(400, "Missing the required parameter 'webhookId' when calling get"); } String localVarPath = - "/v1/projects/{project_id}/apps/{app_id}/webhooks" + "/v1/projects/{project_id}/webhooks/{webhook_id}" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll("\\{" + "app_id" + "\\}", URLPathUtils.encodePathSegment(appId.toString())); + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) + .replaceAll( + "\\{" + "webhook_id" + "\\}", URLPathUtils.encodePathSegment(webhookId.toString())); List localVarQueryParams = new ArrayList<>(); @@ -373,45 +343,18 @@ private HttpRequest webhooksListWebhooksRequestBuilder(String projectId, String localVarAuthNames); } - /** - * Update an existing webhook Updates an existing webhook as specified by the webhook ID. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param webhookId The unique ID of the webhook. (required) - * @param webhook Required. The Webhook to update (required) - * @param updateMask The set of field mask paths. (optional - * @return Webhook - * @throws ApiException if fails to make API call - */ - public Webhook webhooksUpdateWebhook( - String projectId, String webhookId, Webhook webhook, List updateMask) - throws ApiException { + @Override + public Webhook update(String webhookId, Webhook webhook) throws ApiException { - LOGGER.finest( - "[webhooksUpdateWebhook]" - + " " - + "projectId: " - + projectId - + ", " - + "webhookId: " - + webhookId - + ", " - + "webhook: " - + webhook - + ", " - + "updateMask: " - + updateMask); - - HttpRequest httpRequest = - webhooksUpdateWebhookRequestBuilder(projectId, webhookId, webhook, updateMask); + LOGGER.finest("[update]" + " " + "webhookId: " + webhookId + ", " + "webhook: " + webhook); + + HttpRequest httpRequest = updateRequestBuilder(webhookId, webhook); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + 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 @@ -422,40 +365,31 @@ public Webhook webhooksUpdateWebhook( mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest webhooksUpdateWebhookRequestBuilder( - String projectId, String webhookId, Webhook webhook, List updateMask) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest updateRequestBuilder(String webhookId, Webhook webhook) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling webhooksUpdateWebhook"); + 400, "Missing the required parameter 'this.projectId' when calling update"); } // verify the required parameter 'webhookId' is set if (webhookId == null) { - throw new ApiException( - 400, "Missing the required parameter 'webhookId' when calling webhooksUpdateWebhook"); + throw new ApiException(400, "Missing the required parameter 'webhookId' when calling update"); } // verify the required parameter 'webhook' is set if (webhook == null) { - throw new ApiException( - 400, "Missing the required parameter 'webhook' when calling webhooksUpdateWebhook"); + throw new ApiException(400, "Missing the required parameter 'webhook' when calling update"); } String localVarPath = "/v1/projects/{project_id}/webhooks/{webhook_id}" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) .replaceAll( "\\{" + "webhook_id" + "\\}", URLPathUtils.encodePathSegment(webhookId.toString())); List localVarQueryParams = new ArrayList<>(); - if (null != updateMask) { - localVarQueryParams.add( - new URLParameter( - "update_mask", updateMask, URLParameter.STYLE.valueOf("form".toUpperCase()), false)); - } - Map localVarHeaderParams = new HashMap<>(); final Collection localVarAccepts = Arrays.asList("application/json"); 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 deleted file mode 100644 index e4f42a500..000000000 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/ContactApi.java +++ /dev/null @@ -1,836 +0,0 @@ -/* - * Conversation API | Sinch - * - * OpenAPI document version: 1.0 - * 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.conversation.api.v1.internal; - -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.URLPathUtils; -import com.sinch.sdk.core.models.ServerConfiguration; -import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; -import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactCreateRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.GetChannelProfileRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.MergeContactRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.GetChannelProfileResponse; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.ListContactsResponse; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.ListIdentityConflictsResponse; -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 ContactApi { - - private static final Logger LOGGER = Logger.getLogger(ContactApi.class.getName()); - private HttpClient httpClient; - private ServerConfiguration serverConfiguration; - private Map authManagersByOasSecuritySchemes; - private HttpMapper mapper; - - public ContactApi( - HttpClient httpClient, - ServerConfiguration serverConfiguration, - Map authManagersByOasSecuritySchemes, - HttpMapper mapper) { - this.httpClient = httpClient; - this.serverConfiguration = serverConfiguration; - this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; - this.mapper = mapper; - } - - /** - * Create a Contact Most Conversation API contacts are [created - * automatically](https://developers.sinch.com/docs/conversation/contact-management/) when a - * message is sent to a new recipient. You can also create a new contact manually using this API - * call. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param contactCreateRequest The contact to create. (required) - * @return Contact - * @throws ApiException if fails to make API call - */ - public Contact contactCreateContact(String projectId, ContactCreateRequest contactCreateRequest) - throws ApiException { - - LOGGER.finest( - "[contactCreateContact]" - + " " - + "projectId: " - + projectId - + ", " - + "contactCreateRequest: " - + contactCreateRequest); - - HttpRequest httpRequest = contactCreateContactRequestBuilder(projectId, contactCreateRequest); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 contactCreateContactRequestBuilder( - String projectId, ContactCreateRequest contactCreateRequest) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling contactCreateContact"); - } - // verify the required parameter 'contactCreateRequest' is set - if (contactCreateRequest == null) { - throw new ApiException( - 400, - "Missing the required parameter 'contactCreateRequest' when calling" - + " contactCreateContact"); - } - - String localVarPath = - "/v1/projects/{project_id}/contacts" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.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("Basic", "oAuth2"); - final String serializedBody = mapper.serialize(localVarContentTypes, contactCreateRequest); - - return new HttpRequest( - localVarPath, - HttpMethod.POST, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Delete a Contact Delete a contact as specified by the contact ID. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param contactId The unique ID of the contact. (required) - * @throws ApiException if fails to make API call - */ - public void contactDeleteContact(String projectId, String contactId) throws ApiException { - - LOGGER.finest( - "[contactDeleteContact]" - + " " - + "projectId: " - + projectId - + ", " - + "contactId: " - + contactId); - - HttpRequest httpRequest = contactDeleteContactRequestBuilder(projectId, contactId); - 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 contactDeleteContactRequestBuilder(String projectId, String contactId) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling contactDeleteContact"); - } - // verify the required parameter 'contactId' is set - if (contactId == null) { - throw new ApiException( - 400, "Missing the required parameter 'contactId' when calling contactDeleteContact"); - } - - String localVarPath = - "/v1/projects/{project_id}/contacts/{contact_id}" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll( - "\\{" + "contact_id" + "\\}", URLPathUtils.encodePathSegment(contactId.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("Basic", "oAuth2"); - final String serializedBody = null; - - return new HttpRequest( - localVarPath, - HttpMethod.DELETE, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Get Channel Profile Get user profile from a specific channel. Only supported on - * `MESSENGER`, `INSTAGRAM`, `VIBER` and `LINE` channels. - * Note that, in order to retrieve a WhatsApp display name, you can use the Get a Contact or List - * Contacts operations, which will populate the `display_name` field of each returned - * contact with the WhatsApp display name (if the name is already stored on the server and the - * `display_name` field has not been overwritten by the user). - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param getChannelProfileRequest (required) - * @return GetChannelProfileResponse - * @throws ApiException if fails to make API call - */ - public GetChannelProfileResponse contactGetChannelProfile( - String projectId, GetChannelProfileRequest getChannelProfileRequest) throws ApiException { - - LOGGER.finest( - "[contactGetChannelProfile]" - + " " - + "projectId: " - + projectId - + ", " - + "getChannelProfileRequest: " - + getChannelProfileRequest); - - HttpRequest httpRequest = - contactGetChannelProfileRequestBuilder(projectId, getChannelProfileRequest); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 contactGetChannelProfileRequestBuilder( - String projectId, GetChannelProfileRequest getChannelProfileRequest) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling contactGetChannelProfile"); - } - // verify the required parameter 'getChannelProfileRequest' is set - if (getChannelProfileRequest == null) { - throw new ApiException( - 400, - "Missing the required parameter 'getChannelProfileRequest' when calling" - + " contactGetChannelProfile"); - } - - String localVarPath = - "/v1/projects/{project_id}/contacts:getChannelProfile" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.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("Basic", "oAuth2"); - final String serializedBody = mapper.serialize(localVarContentTypes, getChannelProfileRequest); - - return new HttpRequest( - localVarPath, - HttpMethod.POST, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Get a Contact Returns a specific contact as specified by the contact ID. Note the following: - - * If a WhatsApp contact is returned, the `display_name` field of that contact may be - * populated with the WhatsApp display name (if the name is already stored on the server and the - * `display_name` field has not been overwritten by the user). - If you receive an - * Inbound Message callback for an MO message on the Instagram channel, the corresponding payload - * will not include the Instagram username. You may use the `contact_id` and - * `channel_identity` values included in the callback to retreive the username (detailed - * in the `display_name` field) with this Conversation API operation. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param contactId The unique ID of the contact. (required) - * @return Contact - * @throws ApiException if fails to make API call - */ - public Contact contactGetContact(String projectId, String contactId) throws ApiException { - - LOGGER.finest( - "[contactGetContact]" + " " + "projectId: " + projectId + ", " + "contactId: " + contactId); - - HttpRequest httpRequest = contactGetContactRequestBuilder(projectId, contactId); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 contactGetContactRequestBuilder(String projectId, String contactId) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling contactGetContact"); - } - // verify the required parameter 'contactId' is set - if (contactId == null) { - throw new ApiException( - 400, "Missing the required parameter 'contactId' when calling contactGetContact"); - } - - String localVarPath = - "/v1/projects/{project_id}/contacts/{contact_id}" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll( - "\\{" + "contact_id" + "\\}", URLPathUtils.encodePathSegment(contactId.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("Basic", "oAuth2"); - final String serializedBody = null; - - return new HttpRequest( - localVarPath, - HttpMethod.GET, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * List Contacts List all contacts in the project. Note that, if a WhatsApp contact is returned, - * the `display_name` field of that contact may be populated with the WhatsApp display - * name (if the name is already stored on the server and the `display_name` field has - * not been overwritten by the user). - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param pageSize Optional. The maximum number of contacts to fetch. The default is 10 and the - * maximum is 20. (optional) - * @param pageToken Optional. Next page token previously returned if any. (optional) - * @param externalId Optional. Contact identifier in an external system. If used, - * `channel` and `identity` query parameters can't be used. (optional) - * @param channel Optional. Specifies a channel, and must be set to one of the enum values. If - * set, the `identity` parameter must be set and `external_id` can't - * be used. Used in conjunction with `identity` to uniquely identify the specified - * channel identity. (optional) - * @param identity Optional. If set, the `channel` parameter must be set and - * `external_id` can't be used. Used in conjunction with `channel` to - * uniquely identify the specified channel identity. This will differ from channel to channel. - * For example, a phone number for SMS, WhatsApp, and Viber Business. (optional) - * @return ListContactsResponse - * @throws ApiException if fails to make API call - */ - public ListContactsResponse contactListContacts( - String projectId, - Integer pageSize, - String pageToken, - String externalId, - ConversationChannel channel, - String identity) - throws ApiException { - - LOGGER.finest( - "[contactListContacts]" - + " " - + "projectId: " - + projectId - + ", " - + "pageSize: " - + pageSize - + ", " - + "pageToken: " - + pageToken - + ", " - + "externalId: " - + externalId - + ", " - + "channel: " - + channel - + ", " - + "identity: " - + identity); - - HttpRequest httpRequest = - contactListContactsRequestBuilder( - projectId, pageSize, pageToken, externalId, channel, identity); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 contactListContactsRequestBuilder( - String projectId, - Integer pageSize, - String pageToken, - String externalId, - ConversationChannel channel, - String identity) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling contactListContacts"); - } - - String localVarPath = - "/v1/projects/{project_id}/contacts" - .replaceAll( - "\\{" + "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( - "identity", identity, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); - } - - Map localVarHeaderParams = new HashMap<>(); - - final Collection localVarAccepts = Arrays.asList("application/json"); - - final Collection localVarContentTypes = Arrays.asList(); - - final Collection localVarAuthNames = Arrays.asList("Basic", "oAuth2"); - final String serializedBody = null; - - return new HttpRequest( - localVarPath, - HttpMethod.GET, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Merge two Contacts The remaining contact will contain all conversations that the removed - * contact did. If both contacts had conversations within the same App, messages from the removed - * contact will be merged into corresponding active conversations in the destination contact. - * Channel identities will be moved from the source contact to the destination contact only for - * channels that weren't present there before. Moved channel identities will be placed at the - * bottom of the channel priority list. Optional fields from the source contact will be copied - * only if corresponding fields in the destination contact are empty The contact being removed - * cannot be referenced after this call. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param destinationId The unique ID of the contact that should be kept when merging two - * contacts. (required) - * @param mergeContactRequest The contact to be removed. (required) - * @return Contact - * @throws ApiException if fails to make API call - */ - public Contact contactMergeContact( - String projectId, String destinationId, MergeContactRequest mergeContactRequest) - throws ApiException { - - LOGGER.finest( - "[contactMergeContact]" - + " " - + "projectId: " - + projectId - + ", " - + "destinationId: " - + destinationId - + ", " - + "mergeContactRequest: " - + mergeContactRequest); - - HttpRequest httpRequest = - contactMergeContactRequestBuilder(projectId, destinationId, mergeContactRequest); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 contactMergeContactRequestBuilder( - String projectId, String destinationId, MergeContactRequest mergeContactRequest) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling contactMergeContact"); - } - // verify the required parameter 'destinationId' is set - if (destinationId == null) { - throw new ApiException( - 400, "Missing the required parameter 'destinationId' when calling contactMergeContact"); - } - // verify the required parameter 'mergeContactRequest' is set - if (mergeContactRequest == null) { - throw new ApiException( - 400, - "Missing the required parameter 'mergeContactRequest' when calling contactMergeContact"); - } - - String localVarPath = - "/v1/projects/{project_id}/contacts/{destination_id}:merge" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll( - "\\{" + "destination_id" + "\\}", - URLPathUtils.encodePathSegment(destinationId.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("Basic", "oAuth2"); - final String serializedBody = mapper.serialize(localVarContentTypes, mergeContactRequest); - - return new HttpRequest( - localVarPath, - HttpMethod.POST, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Update a Contact Updates a contact as specified by the contact ID. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param contactId The unique ID of the contact. (required) - * @param contact The contact to be updated (required) - * @param updateMask The set of field mask paths. (optional - * @return Contact - * @throws ApiException if fails to make API call - */ - public Contact contactUpdateContact( - String projectId, String contactId, Contact contact, List updateMask) - throws ApiException { - - LOGGER.finest( - "[contactUpdateContact]" - + " " - + "projectId: " - + projectId - + ", " - + "contactId: " - + contactId - + ", " - + "contact: " - + contact - + ", " - + "updateMask: " - + updateMask); - - HttpRequest httpRequest = - contactUpdateContactRequestBuilder(projectId, contactId, contact, updateMask); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 contactUpdateContactRequestBuilder( - String projectId, String contactId, Contact contact, List updateMask) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling contactUpdateContact"); - } - // verify the required parameter 'contactId' is set - if (contactId == null) { - throw new ApiException( - 400, "Missing the required parameter 'contactId' when calling contactUpdateContact"); - } - // verify the required parameter 'contact' is set - if (contact == null) { - throw new ApiException( - 400, "Missing the required parameter 'contact' when calling contactUpdateContact"); - } - - String localVarPath = - "/v1/projects/{project_id}/contacts/{contact_id}" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll( - "\\{" + "contact_id" + "\\}", URLPathUtils.encodePathSegment(contactId.toString())); - - List localVarQueryParams = new ArrayList<>(); - - if (null != updateMask) { - localVarQueryParams.add( - new URLParameter( - "update_mask", updateMask, URLParameter.STYLE.valueOf("form".toUpperCase()), false)); - } - - Map localVarHeaderParams = new HashMap<>(); - - final Collection localVarAccepts = Arrays.asList("application/json"); - - final Collection localVarContentTypes = Arrays.asList("application/json"); - - final Collection localVarAuthNames = Arrays.asList("Basic", "oAuth2"); - final String serializedBody = mapper.serialize(localVarContentTypes, contact); - - return new HttpRequest( - localVarPath, - HttpMethod.PATCH, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Lists Contact Identity Conflicts Lists contact identity conflicts across supported SIM-based - * channels (SMS, MMS, RCS). Use this to identify contact records sharing the same identity (e.g., - * phone number), which must be resolved before enabling the Unified Contact ID feature. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param pageSize Maximum number of conflicts to return (max 20). (optional) - * @param pageToken Pagination token for retrieving next page. (optional) - * @return ListIdentityConflictsResponse - * @throws ApiException if fails to make API call - */ - public ListIdentityConflictsResponse listIdentityConflicts( - String projectId, Integer pageSize, String pageToken) throws ApiException { - - LOGGER.finest( - "[listIdentityConflicts]" - + " " - + "projectId: " - + projectId - + ", " - + "pageSize: " - + pageSize - + ", " - + "pageToken: " - + pageToken); - - HttpRequest httpRequest = listIdentityConflictsRequestBuilder(projectId, pageSize, pageToken); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 listIdentityConflictsRequestBuilder( - String projectId, Integer pageSize, String pageToken) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling listIdentityConflicts"); - } - - String localVarPath = - "/v1/projects/{project_id}/contacts:identityConflicts" - .replaceAll( - "\\{" + "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)); - } - - Map localVarHeaderParams = new HashMap<>(); - - final Collection localVarAccepts = Arrays.asList("application/json"); - - final Collection localVarContentTypes = Arrays.asList(); - - final Collection localVarAuthNames = Arrays.asList("Basic", "oAuth2"); - 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/conversation/api/v1/internal/ConversationApi.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/ConversationApi.java deleted file mode 100644 index 12d3ab9a7..000000000 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/ConversationApi.java +++ /dev/null @@ -1,1046 +0,0 @@ -/* - * Conversation API | Sinch - * - * OpenAPI document version: 1.0 - * 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.conversation.api.v1.internal; - -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.URLPathUtils; -import com.sinch.sdk.core.models.ServerConfiguration; -import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; -import com.sinch.sdk.domains.conversation.models.v1.conversation.Conversation; -import com.sinch.sdk.domains.conversation.models.v1.conversation.internal.ListConversationsResponseInternal; -import com.sinch.sdk.domains.conversation.models.v1.conversation.internal.ListRecentConversationsResponseInternal; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.CreateConversationRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.InjectEventRequest; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.InjectMessageRequestBase; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.InjectEventResponse; -import com.sinch.sdk.domains.conversation.models.v1.request.MetadataUpdateStrategy; -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 ConversationApi { - - private static final Logger LOGGER = Logger.getLogger(ConversationApi.class.getName()); - private HttpClient httpClient; - private ServerConfiguration serverConfiguration; - private Map authManagersByOasSecuritySchemes; - private HttpMapper mapper; - - public ConversationApi( - HttpClient httpClient, - ServerConfiguration serverConfiguration, - Map authManagersByOasSecuritySchemes, - HttpMapper mapper) { - this.httpClient = httpClient; - this.serverConfiguration = serverConfiguration; - this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; - this.mapper = mapper; - } - - /** - * Create a conversation Creates a new empty conversation. It is generally not needed to create a - * conversation explicitly since sending or receiving a message automatically creates a new - * conversation if it does not already exist between the given app and contact. Creating empty - * conversation is useful if the metadata of the conversation should be populated when the first - * message in the conversation is a contact message or the first message in the conversation comes - * out-of-band and needs to be injected with InjectMessage endpoint. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param createConversationRequest The conversation to create. ID will be generated for the - * conversation and any ID in the given conversation will be ignored. (required) - * @return Conversation - * @throws ApiException if fails to make API call - */ - public Conversation conversationCreateConversation( - String projectId, CreateConversationRequest createConversationRequest) throws ApiException { - - LOGGER.finest( - "[conversationCreateConversation]" - + " " - + "projectId: " - + projectId - + ", " - + "createConversationRequest: " - + createConversationRequest); - - HttpRequest httpRequest = - conversationCreateConversationRequestBuilder(projectId, createConversationRequest); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 conversationCreateConversationRequestBuilder( - String projectId, CreateConversationRequest createConversationRequest) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, - "Missing the required parameter 'projectId' when calling conversationCreateConversation"); - } - // verify the required parameter 'createConversationRequest' is set - if (createConversationRequest == null) { - throw new ApiException( - 400, - "Missing the required parameter 'createConversationRequest' when calling" - + " conversationCreateConversation"); - } - - String localVarPath = - "/v1/projects/{project_id}/conversations" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.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("Basic", "oAuth2"); - final String serializedBody = mapper.serialize(localVarContentTypes, createConversationRequest); - - return new HttpRequest( - localVarPath, - HttpMethod.POST, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Delete a conversation Deletes a conversation together with all the messages sent as part of the - * conversation. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param conversationId The unique ID of the conversation. This is generated by the system. - * (required) - * @throws ApiException if fails to make API call - */ - public void conversationDeleteConversation(String projectId, String conversationId) - throws ApiException { - - LOGGER.finest( - "[conversationDeleteConversation]" - + " " - + "projectId: " - + projectId - + ", " - + "conversationId: " - + conversationId); - - HttpRequest httpRequest = - conversationDeleteConversationRequestBuilder(projectId, conversationId); - 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 conversationDeleteConversationRequestBuilder( - String projectId, String conversationId) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, - "Missing the required parameter 'projectId' when calling conversationDeleteConversation"); - } - // verify the required parameter 'conversationId' is set - if (conversationId == null) { - throw new ApiException( - 400, - "Missing the required parameter 'conversationId' when calling" - + " conversationDeleteConversation"); - } - - String localVarPath = - "/v1/projects/{project_id}/conversations/{conversation_id}" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll( - "\\{" + "conversation_id" + "\\}", - URLPathUtils.encodePathSegment(conversationId.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("Basic", "oAuth2"); - final String serializedBody = null; - - return new HttpRequest( - localVarPath, - HttpMethod.DELETE, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Get a conversation Retrieves a conversation by id. A conversation has two participating - * entities, an app and a contact. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param conversationId The unique ID of the conversation. This is generated by the system. - * (required) - * @return Conversation - * @throws ApiException if fails to make API call - */ - public Conversation conversationGetConversation(String projectId, String conversationId) - throws ApiException { - - LOGGER.finest( - "[conversationGetConversation]" - + " " - + "projectId: " - + projectId - + ", " - + "conversationId: " - + conversationId); - - HttpRequest httpRequest = conversationGetConversationRequestBuilder(projectId, conversationId); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 conversationGetConversationRequestBuilder( - String projectId, String conversationId) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, - "Missing the required parameter 'projectId' when calling conversationGetConversation"); - } - // verify the required parameter 'conversationId' is set - if (conversationId == null) { - throw new ApiException( - 400, - "Missing the required parameter 'conversationId' when calling" - + " conversationGetConversation"); - } - - String localVarPath = - "/v1/projects/{project_id}/conversations/{conversation_id}" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll( - "\\{" + "conversation_id" + "\\}", - URLPathUtils.encodePathSegment(conversationId.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("Basic", "oAuth2"); - final String serializedBody = null; - - return new HttpRequest( - localVarPath, - HttpMethod.GET, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Inject a message This operation injects a conversation message in to a specific conversation. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param conversationId The ID of the conversation. (required) - * @param injectMessageRequestBase Message to be injected. (required) - * @throws ApiException if fails to make API call - */ - public void conversationInjectMessage( - String projectId, String conversationId, InjectMessageRequestBase injectMessageRequestBase) - throws ApiException { - - LOGGER.finest( - "[conversationInjectMessage]" - + " " - + "projectId: " - + projectId - + ", " - + "conversationId: " - + conversationId - + ", " - + "injectMessageRequestBase: " - + injectMessageRequestBase); - - HttpRequest httpRequest = - conversationInjectMessageRequestBuilder( - projectId, conversationId, injectMessageRequestBase); - 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 conversationInjectMessageRequestBuilder( - String projectId, String conversationId, InjectMessageRequestBase injectMessageRequestBase) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling conversationInjectMessage"); - } - // verify the required parameter 'conversationId' is set - if (conversationId == null) { - throw new ApiException( - 400, - "Missing the required parameter 'conversationId' when calling conversationInjectMessage"); - } - // verify the required parameter 'injectMessageRequestBase' is set - if (injectMessageRequestBase == null) { - throw new ApiException( - 400, - "Missing the required parameter 'injectMessageRequestBase' when calling" - + " conversationInjectMessage"); - } - - String localVarPath = - "/v1/projects/{project_id}/conversations/{conversation_id}:inject-message" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll( - "\\{" + "conversation_id" + "\\}", - URLPathUtils.encodePathSegment(conversationId.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("Basic", "oAuth2"); - final String serializedBody = mapper.serialize(localVarContentTypes, injectMessageRequestBase); - - return new HttpRequest( - localVarPath, - HttpMethod.POST, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * List conversations This operation lists all conversations that are associated with an app - * and/or a contact. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param appId The ID of the app involved in the conversations. Note that either - * `app_id` or `contact_id` is required in order for the operation to - * function correctly. (optional) - * @param contactId Resource name (ID) of the contact. Note that either `app_id` or - * `contact_id` is required in order for the operation to function correctly. - * (optional) - * @param onlyActive Set to `true` to list only active conversations. Set to - * `false` to list only inactive conversations. (optional) - * @param pageSize The maximum number of conversations to fetch. Defaults to 10 and the maximum is - * 20. (optional) - * @param pageToken Next page token previously returned if any. (optional) - * @param activeChannel Only fetch conversations from the `active_channel` (optional) - * @return ListConversationsResponseInternal - * @throws ApiException if fails to make API call - */ - public ListConversationsResponseInternal conversationListConversations( - String projectId, - String appId, - String contactId, - Boolean onlyActive, - Integer pageSize, - String pageToken, - ConversationChannel activeChannel) - throws ApiException { - - LOGGER.finest( - "[conversationListConversations]" - + " " - + "projectId: " - + projectId - + ", " - + "appId: " - + appId - + ", " - + "contactId: " - + contactId - + ", " - + "onlyActive: " - + onlyActive - + ", " - + "pageSize: " - + pageSize - + ", " - + "pageToken: " - + pageToken - + ", " - + "activeChannel: " - + activeChannel); - - HttpRequest httpRequest = - conversationListConversationsRequestBuilder( - projectId, appId, contactId, onlyActive, pageSize, pageToken, activeChannel); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 conversationListConversationsRequestBuilder( - String projectId, - String appId, - String contactId, - Boolean onlyActive, - Integer pageSize, - String pageToken, - ConversationChannel activeChannel) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, - "Missing the required parameter 'projectId' when calling conversationListConversations"); - } - - String localVarPath = - "/v1/projects/{project_id}/conversations" - .replaceAll( - "\\{" + "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( - "active_channel", - activeChannel, - URLParameter.STYLE.valueOf("form".toUpperCase()), - true)); - } - - Map localVarHeaderParams = new HashMap<>(); - - final Collection localVarAccepts = Arrays.asList("application/json"); - - final Collection localVarContentTypes = Arrays.asList(); - - final Collection localVarAuthNames = Arrays.asList("Basic", "oAuth2"); - final String serializedBody = null; - - return new HttpRequest( - localVarPath, - HttpMethod.GET, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * List recent conversations This operation lists conversations and their most recent message, - * ordered by when the most recent message was sent for that conversation. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param appId The application ID (required) - * @param onlyActive True if only active conversations should be listed. Default is false. - * (optional) - * @param pageSize The maximum number of conversations to fetch. Defaults to 10 and the maximum - * value is 50. (optional) - * @param pageToken Next page token previously returned if any. When specifying this token, make - * sure to use the same values for the other parameters from the request that originated the - * token, otherwise the paged results may be inconsistent. (optional) - * @param order Whether to sort conversations by newest message first or oldest. Default is DESC - * (newest first) (optional) - * @return ListRecentConversationsResponseInternal - * @throws ApiException if fails to make API call - */ - public ListRecentConversationsResponseInternal conversationListRecentConversations( - String projectId, - String appId, - Boolean onlyActive, - Integer pageSize, - String pageToken, - String order) - throws ApiException { - - LOGGER.finest( - "[conversationListRecentConversations]" - + " " - + "projectId: " - + projectId - + ", " - + "appId: " - + appId - + ", " - + "onlyActive: " - + onlyActive - + ", " - + "pageSize: " - + pageSize - + ", " - + "pageToken: " - + pageToken - + ", " - + "order: " - + order); - - HttpRequest httpRequest = - conversationListRecentConversationsRequestBuilder( - projectId, appId, onlyActive, pageSize, pageToken, order); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 conversationListRecentConversationsRequestBuilder( - String projectId, - String appId, - Boolean onlyActive, - Integer pageSize, - String pageToken, - String order) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, - "Missing the required parameter 'projectId' when calling" - + " conversationListRecentConversations"); - } - // verify the required parameter 'appId' is set - if (appId == null) { - throw new ApiException( - 400, - "Missing the required parameter 'appId' when calling" - + " conversationListRecentConversations"); - } - - String localVarPath = - "/v1/projects/{project_id}/conversations:recent" - .replaceAll( - "\\{" + "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)); - } - - Map localVarHeaderParams = new HashMap<>(); - - final Collection localVarAccepts = Arrays.asList("application/json"); - - final Collection localVarContentTypes = Arrays.asList(); - - final Collection localVarAuthNames = Arrays.asList("Basic", "oAuth2"); - final String serializedBody = null; - - return new HttpRequest( - localVarPath, - HttpMethod.GET, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Stop conversation This operation stops the referenced conversation, if the conversation is - * still active. A new conversation will be created if a new message is exchanged between the app - * or contact that was part of the stopped conversation. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param conversationId The unique ID of the conversation. This is generated by the system. - * (required) - * @throws ApiException if fails to make API call - */ - public void conversationStopActiveConversation(String projectId, String conversationId) - throws ApiException { - - LOGGER.finest( - "[conversationStopActiveConversation]" - + " " - + "projectId: " - + projectId - + ", " - + "conversationId: " - + conversationId); - - HttpRequest httpRequest = - conversationStopActiveConversationRequestBuilder(projectId, conversationId); - 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 conversationStopActiveConversationRequestBuilder( - String projectId, String conversationId) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, - "Missing the required parameter 'projectId' when calling" - + " conversationStopActiveConversation"); - } - // verify the required parameter 'conversationId' is set - if (conversationId == null) { - throw new ApiException( - 400, - "Missing the required parameter 'conversationId' when calling" - + " conversationStopActiveConversation"); - } - - String localVarPath = - "/v1/projects/{project_id}/conversations/{conversation_id}:stop" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll( - "\\{" + "conversation_id" + "\\}", - URLPathUtils.encodePathSegment(conversationId.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("Basic", "oAuth2"); - final String serializedBody = null; - - return new HttpRequest( - localVarPath, - HttpMethod.POST, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Update a conversation This operation updates a conversation which can, for instance, be used to - * update the metadata associated with a conversation. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param conversationId The unique ID of the conversation. This is generated by the system. - * (required) - * @param conversation The updated conversation. (required) - * @param updateMask The set of field mask paths. (optional - * @param metadataUpdateStrategy Update strategy for the `conversation_metadata` field. - * (optional, default to REPLACE) - * @return Conversation - * @throws ApiException if fails to make API call - */ - public Conversation conversationUpdateConversation( - String projectId, - String conversationId, - Conversation conversation, - List updateMask, - MetadataUpdateStrategy metadataUpdateStrategy) - throws ApiException { - - LOGGER.finest( - "[conversationUpdateConversation]" - + " " - + "projectId: " - + projectId - + ", " - + "conversationId: " - + conversationId - + ", " - + "conversation: " - + conversation - + ", " - + "updateMask: " - + updateMask - + ", " - + "metadataUpdateStrategy: " - + metadataUpdateStrategy); - - HttpRequest httpRequest = - conversationUpdateConversationRequestBuilder( - projectId, conversationId, conversation, updateMask, metadataUpdateStrategy); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 conversationUpdateConversationRequestBuilder( - String projectId, - String conversationId, - Conversation conversation, - List updateMask, - MetadataUpdateStrategy metadataUpdateStrategy) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, - "Missing the required parameter 'projectId' when calling conversationUpdateConversation"); - } - // verify the required parameter 'conversationId' is set - if (conversationId == null) { - throw new ApiException( - 400, - "Missing the required parameter 'conversationId' when calling" - + " conversationUpdateConversation"); - } - // verify the required parameter 'conversation' is set - if (conversation == null) { - throw new ApiException( - 400, - "Missing the required parameter 'conversation' when calling" - + " conversationUpdateConversation"); - } - - String localVarPath = - "/v1/projects/{project_id}/conversations/{conversation_id}" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll( - "\\{" + "conversation_id" + "\\}", - 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( - "metadata_update_strategy", - metadataUpdateStrategy, - URLParameter.STYLE.valueOf("form".toUpperCase()), - true)); - } - - Map localVarHeaderParams = new HashMap<>(); - - final Collection localVarAccepts = Arrays.asList("application/json"); - - final Collection localVarContentTypes = Arrays.asList("application/json"); - - final Collection localVarAuthNames = Arrays.asList("Basic", "oAuth2"); - final String serializedBody = mapper.serialize(localVarContentTypes, conversation); - - return new HttpRequest( - localVarPath, - HttpMethod.PATCH, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Inject an event This operation injects a conversation event in to a specific conversation. It - * only supports injecting App events in `CONVERSATION` mode. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param conversationId The unique ID of the conversation. This is generated by the system. - * (required) - * @param injectEventRequest Inject event request (required) - * @return InjectEventResponse - * @throws ApiException if fails to make API call - */ - public InjectEventResponse eventsInjectEvent( - String projectId, String conversationId, InjectEventRequest injectEventRequest) - throws ApiException { - - LOGGER.finest( - "[eventsInjectEvent]" - + " " - + "projectId: " - + projectId - + ", " - + "conversationId: " - + conversationId - + ", " - + "injectEventRequest: " - + injectEventRequest); - - HttpRequest httpRequest = - eventsInjectEventRequestBuilder(projectId, conversationId, injectEventRequest); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 eventsInjectEventRequestBuilder( - String projectId, String conversationId, InjectEventRequest injectEventRequest) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling eventsInjectEvent"); - } - // verify the required parameter 'conversationId' is set - if (conversationId == null) { - throw new ApiException( - 400, "Missing the required parameter 'conversationId' when calling eventsInjectEvent"); - } - // verify the required parameter 'injectEventRequest' is set - if (injectEventRequest == null) { - throw new ApiException( - 400, - "Missing the required parameter 'injectEventRequest' when calling eventsInjectEvent"); - } - - String localVarPath = - "/v1/projects/{project_id}/conversations/{conversation_id}:inject-event" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll( - "\\{" + "conversation_id" + "\\}", - URLPathUtils.encodePathSegment(conversationId.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("Basic", "oAuth2"); - final String serializedBody = mapper.serialize(localVarContentTypes, injectEventRequest); - - return new HttpRequest( - localVarPath, - HttpMethod.POST, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } -} 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 deleted file mode 100644 index ea94690f7..000000000 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/api/v1/internal/MessagesApi.java +++ /dev/null @@ -1,728 +0,0 @@ -/* - * Conversation API | Sinch - * - * OpenAPI document version: 1.0 - * 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.conversation.api.v1.internal; - -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.URLPathUtils; -import com.sinch.sdk.core.models.ServerConfiguration; -import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; -import com.sinch.sdk.domains.conversation.models.v1.internal.ConversationMessageInternal; -import com.sinch.sdk.domains.conversation.models.v1.messages.internal.ListMessagesResponseInternal; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.ConversationMessagesView; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessageUpdateRequest; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.SendMessageRequest; -import com.sinch.sdk.domains.conversation.models.v1.messages.response.SendMessageResponse; -import java.time.Instant; -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 MessagesApi { - - private static final Logger LOGGER = Logger.getLogger(MessagesApi.class.getName()); - private HttpClient httpClient; - private ServerConfiguration serverConfiguration; - private Map authManagersByOasSecuritySchemes; - private HttpMapper mapper; - - public MessagesApi( - HttpClient httpClient, - ServerConfiguration serverConfiguration, - Map authManagersByOasSecuritySchemes, - HttpMapper mapper) { - this.httpClient = httpClient; - this.serverConfiguration = serverConfiguration; - this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; - this.mapper = mapper; - } - - /** - * Delete a message Delete a specific message by its ID. Note that this operation deletes the - * message from Conversation API storage; this operation does not affect messages already - * delivered to recipients' handsets. Also note that removing all messages of a conversation - * will not automatically delete the conversation. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param messageId The unique ID of the message. (required) - * @param messagesSource Specifies the message source for which the request will be processed. - * Used for operations on messages in Dispatch Mode. For more information, see [Processing - * Modes](https://developers.sinch.com/docs/conversation/processing-modes/). (optional, - * default to CONVERSATION_SOURCE) - * @throws ApiException if fails to make API call - */ - public void messagesDeleteMessage(String projectId, String messageId, String messagesSource) - throws ApiException { - - LOGGER.finest( - "[messagesDeleteMessage]" - + " " - + "projectId: " - + projectId - + ", " - + "messageId: " - + messageId - + ", " - + "messagesSource: " - + messagesSource); - - HttpRequest httpRequest = - messagesDeleteMessageRequestBuilder(projectId, messageId, messagesSource); - 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 messagesDeleteMessageRequestBuilder( - String projectId, String messageId, String messagesSource) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling messagesDeleteMessage"); - } - // verify the required parameter 'messageId' is set - if (messageId == null) { - throw new ApiException( - 400, "Missing the required parameter 'messageId' when calling messagesDeleteMessage"); - } - - String localVarPath = - "/v1/projects/{project_id}/messages/{message_id}" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll( - "\\{" + "message_id" + "\\}", URLPathUtils.encodePathSegment(messageId.toString())); - - List localVarQueryParams = new ArrayList<>(); - - if (null != messagesSource) { - localVarQueryParams.add( - new URLParameter( - "messages_source", - messagesSource, - URLParameter.STYLE.valueOf("form".toUpperCase()), - true)); - } - - Map localVarHeaderParams = new HashMap<>(); - - final Collection localVarAccepts = Arrays.asList("application/json"); - - final Collection localVarContentTypes = Arrays.asList(); - - final Collection localVarAuthNames = Arrays.asList("Basic", "oAuth2"); - final String serializedBody = null; - - return new HttpRequest( - localVarPath, - HttpMethod.DELETE, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Get a message Retrieves a specific message by its ID. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param messageId The unique ID of the message. (required) - * @param messagesSource Specifies the message source for which the request will be processed. - * Used for operations on messages in Dispatch Mode. For more information, see [Processing - * Modes](https://developers.sinch.com/docs/conversation/processing-modes/). (optional, - * default to CONVERSATION_SOURCE) - * @return ConversationMessageInternal - * @throws ApiException if fails to make API call - */ - public ConversationMessageInternal messagesGetMessage( - String projectId, String messageId, String messagesSource) throws ApiException { - - LOGGER.finest( - "[messagesGetMessage]" - + " " - + "projectId: " - + projectId - + ", " - + "messageId: " - + messageId - + ", " - + "messagesSource: " - + messagesSource); - - HttpRequest httpRequest = - messagesGetMessageRequestBuilder(projectId, messageId, messagesSource); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 messagesGetMessageRequestBuilder( - String projectId, String messageId, String messagesSource) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling messagesGetMessage"); - } - // verify the required parameter 'messageId' is set - if (messageId == null) { - throw new ApiException( - 400, "Missing the required parameter 'messageId' when calling messagesGetMessage"); - } - - String localVarPath = - "/v1/projects/{project_id}/messages/{message_id}" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll( - "\\{" + "message_id" + "\\}", URLPathUtils.encodePathSegment(messageId.toString())); - - List localVarQueryParams = new ArrayList<>(); - - if (null != messagesSource) { - localVarQueryParams.add( - new URLParameter( - "messages_source", - messagesSource, - URLParameter.STYLE.valueOf("form".toUpperCase()), - true)); - } - - Map localVarHeaderParams = new HashMap<>(); - - final Collection localVarAccepts = Arrays.asList("application/json"); - - final Collection localVarContentTypes = Arrays.asList(); - - final Collection localVarAuthNames = Arrays.asList("Basic", "oAuth2"); - final String serializedBody = null; - - return new HttpRequest( - localVarPath, - HttpMethod.GET, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * List messages This operation lists all messages sent or received via particular [Processing - * Modes](https://developers.sinch.com/docs/conversation/processing-modes/). Setting the - * `messages_source` parameter to `CONVERSATION_SOURCE` allows for querying - * messages in `CONVERSATION` mode, and setting it to `DISPATCH_SOURCE` will - * allow for queries of messages in `DISPATCH` mode. Combining multiple parameters is - * supported for more detailed filtering of messages, but some of them are not supported depending - * on the value specified for `messages_source`. The description for each field will - * inform if that field may not be supported. The messages are ordered by their - * `accept_time` property in descending order, where `accept_time` is a - * timestamp of when the message was enqueued by the Conversation API. This means messages - * received most recently will be listed first. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param conversationId Resource name (ID) of the conversation. (optional) - * @param contactId Resource name (ID) of the contact. Note that either `app_id` or - * `contact_id` is required in order for the operation to function correctly. - * (optional) - * @param appId Id of the app. (optional) - * @param channelIdentity Channel identity of the contact. (optional) - * @param startTime Filter messages with `accept_time` after this timestamp. Must be - * before `end_time` if that is specified. (optional) - * @param endTime Filter messages with `accept_time` before this timestamp. (optional) - * @param pageSize Maximum number of messages to fetch. Defaults to 10 and the maximum is 1000. - * (optional) - * @param pageToken Next page token previously returned if any. When specifying this token, make - * sure to use the same values for the other parameters from the request that originated the - * token, otherwise the paged results may be inconsistent. (optional) - * @param view (optional, default to WITH_METADATA) - * @param messagesSource Specifies the message source for which the request will be processed. - * Used for operations on messages in Dispatch Mode. For more information, see [Processing - * Modes](https://developers.sinch.com/docs/conversation/processing-modes/). (optional, - * default to CONVERSATION_SOURCE) - * @param onlyRecipientOriginated If true, fetch only recipient originated messages. Available - * only when `messages_source` is `DISPATCH_SOURCE`. (optional) - * @param channel Only fetch messages from the `channel`. (optional) - * @return ListMessagesResponseInternal - * @throws ApiException if fails to make API call - */ - public ListMessagesResponseInternal messagesListMessages( - String projectId, - String conversationId, - String contactId, - String appId, - String channelIdentity, - Instant startTime, - Instant endTime, - Integer pageSize, - String pageToken, - ConversationMessagesView view, - String messagesSource, - Boolean onlyRecipientOriginated, - ConversationChannel channel) - throws ApiException { - - LOGGER.finest( - "[messagesListMessages]" - + " " - + "projectId: " - + projectId - + ", " - + "conversationId: " - + conversationId - + ", " - + "contactId: " - + contactId - + ", " - + "appId: " - + appId - + ", " - + "channelIdentity: " - + channelIdentity - + ", " - + "startTime: " - + startTime - + ", " - + "endTime: " - + endTime - + ", " - + "pageSize: " - + pageSize - + ", " - + "pageToken: " - + pageToken - + ", " - + "view: " - + view - + ", " - + "messagesSource: " - + messagesSource - + ", " - + "onlyRecipientOriginated: " - + onlyRecipientOriginated - + ", " - + "channel: " - + channel); - - HttpRequest httpRequest = - messagesListMessagesRequestBuilder( - projectId, - conversationId, - contactId, - appId, - channelIdentity, - startTime, - endTime, - pageSize, - pageToken, - view, - messagesSource, - onlyRecipientOriginated, - channel); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 messagesListMessagesRequestBuilder( - String projectId, - String conversationId, - String contactId, - String appId, - String channelIdentity, - Instant startTime, - Instant endTime, - Integer pageSize, - String pageToken, - ConversationMessagesView view, - String messagesSource, - Boolean onlyRecipientOriginated, - ConversationChannel channel) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling messagesListMessages"); - } - - String localVarPath = - "/v1/projects/{project_id}/messages" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); - - List localVarQueryParams = new ArrayList<>(); - - if (null != conversationId) { - localVarQueryParams.add( - new URLParameter( - "conversation_id", - conversationId, - 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( - "channel_identity", - channelIdentity, - 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( - "messages_source", - messagesSource, - URLParameter.STYLE.valueOf("form".toUpperCase()), - true)); - } - - if (null != onlyRecipientOriginated) { - localVarQueryParams.add( - new URLParameter( - "only_recipient_originated", - onlyRecipientOriginated, - URLParameter.STYLE.valueOf("form".toUpperCase()), - true)); - } - - if (null != channel) { - localVarQueryParams.add( - new URLParameter( - "channel", channel, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); - } - - Map localVarHeaderParams = new HashMap<>(); - - final Collection localVarAccepts = Arrays.asList("application/json"); - - final Collection localVarContentTypes = Arrays.asList(); - - final Collection localVarAuthNames = Arrays.asList("Basic", "oAuth2"); - final String serializedBody = null; - - return new HttpRequest( - localVarPath, - HttpMethod.GET, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Send a message You can send a message from a Conversation app to a contact associated with that - * app. If the recipient is not associated with an existing contact, a new contact will be - * created. The message is added to the active conversation with the contact if a conversation - * already exists. If no active conversation exists a new one is started automatically. You can - * find all of your IDs and authentication credentials on the [Sinch Customer - * Dashboard](https://dashboard.sinch.com/settings/access-keys). - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param sendMessageRequest This is the request body for sending a message. `app_id`, - * `recipient`, and `message` are all required fields. (required) - * @return SendMessageResponse - * @throws ApiException if fails to make API call - */ - public SendMessageResponse messagesSendMessage( - String projectId, SendMessageRequest sendMessageRequest) throws ApiException { - - LOGGER.finest( - "[messagesSendMessage]" - + " " - + "projectId: " - + projectId - + ", " - + "sendMessageRequest: " - + sendMessageRequest); - - HttpRequest httpRequest = messagesSendMessageRequestBuilder(projectId, sendMessageRequest); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 messagesSendMessageRequestBuilder( - String projectId, SendMessageRequest sendMessageRequest) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling messagesSendMessage"); - } - // verify the required parameter 'sendMessageRequest' is set - if (sendMessageRequest == null) { - throw new ApiException( - 400, - "Missing the required parameter 'sendMessageRequest' when calling messagesSendMessage"); - } - - String localVarPath = - "/v1/projects/{project_id}/messages:send" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.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("Basic", "oAuth2"); - final String serializedBody = mapper.serialize(localVarContentTypes, sendMessageRequest); - - return new HttpRequest( - localVarPath, - HttpMethod.POST, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Update message metadata Update a specific message metadata by its ID. - * - * @param projectId The unique ID of the project. You can find this on the [Sinch - * Dashboard](https://dashboard.sinch.com/convapi/apps). (required) - * @param messageId The unique ID of the message. (required) - * @param messageUpdateRequest Update message metadata request. (required) - * @param messagesSource Specifies the message source for which the request will be processed. - * Used for operations on messages in Dispatch Mode. For more information, see [Processing - * Modes](https://developers.sinch.com/docs/conversation/processing-modes/). (optional, - * default to CONVERSATION_SOURCE) - * @return ConversationMessageInternal - * @throws ApiException if fails to make API call - */ - public ConversationMessageInternal messagesUpdateMessageMetadata( - String projectId, - String messageId, - MessageUpdateRequest messageUpdateRequest, - String messagesSource) - throws ApiException { - - LOGGER.finest( - "[messagesUpdateMessageMetadata]" - + " " - + "projectId: " - + projectId - + ", " - + "messageId: " - + messageId - + ", " - + "messageUpdateRequest: " - + messageUpdateRequest - + ", " - + "messagesSource: " - + messagesSource); - - HttpRequest httpRequest = - messagesUpdateMessageMetadataRequestBuilder( - projectId, messageId, messageUpdateRequest, messagesSource); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 messagesUpdateMessageMetadataRequestBuilder( - String projectId, - String messageId, - MessageUpdateRequest messageUpdateRequest, - String messagesSource) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, - "Missing the required parameter 'projectId' when calling messagesUpdateMessageMetadata"); - } - // verify the required parameter 'messageId' is set - if (messageId == null) { - throw new ApiException( - 400, - "Missing the required parameter 'messageId' when calling messagesUpdateMessageMetadata"); - } - // verify the required parameter 'messageUpdateRequest' is set - if (messageUpdateRequest == null) { - throw new ApiException( - 400, - "Missing the required parameter 'messageUpdateRequest' when calling" - + " messagesUpdateMessageMetadata"); - } - - String localVarPath = - "/v1/projects/{project_id}/messages/{message_id}" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll( - "\\{" + "message_id" + "\\}", URLPathUtils.encodePathSegment(messageId.toString())); - - List localVarQueryParams = new ArrayList<>(); - - if (null != messagesSource) { - localVarQueryParams.add( - new URLParameter( - "messages_source", - messagesSource, - URLParameter.STYLE.valueOf("form".toUpperCase()), - true)); - } - - Map localVarHeaderParams = new HashMap<>(); - - final Collection localVarAccepts = Arrays.asList("application/json"); - - final Collection localVarContentTypes = Arrays.asList("application/json"); - - final Collection localVarAuthNames = Arrays.asList("Basic", "oAuth2"); - final String serializedBody = mapper.serialize(localVarContentTypes, messageUpdateRequest); - - return new HttpRequest( - localVarPath, - HttpMethod.PATCH, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } -} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/CallbackSettings.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/CallbackSettings.java similarity index 96% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/CallbackSettings.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/CallbackSettings.java index 161e95753..33204a7e1 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/CallbackSettings.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/CallbackSettings.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.app; +package com.sinch.sdk.domains.conversation.models.v1.apps; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/CallbackSettingsImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/CallbackSettingsImpl.java similarity index 98% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/CallbackSettingsImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/CallbackSettingsImpl.java index 970b6aced..670c6bfb6 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/CallbackSettingsImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/CallbackSettingsImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.app; +package com.sinch.sdk.domains.conversation.models.v1.apps; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/ConversationMetadataReportView.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/ConversationMetadataReportView.java similarity index 95% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/ConversationMetadataReportView.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/ConversationMetadataReportView.java index ea5c45dce..894c18fcf 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/ConversationMetadataReportView.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/ConversationMetadataReportView.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.app; +package com.sinch.sdk.domains.conversation.models.v1.apps; import com.sinch.sdk.core.utils.EnumDynamic; import com.sinch.sdk.core.utils.EnumSupportDynamic; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/DeliveryReportBasedFallback.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/DeliveryReportBasedFallback.java similarity index 97% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/DeliveryReportBasedFallback.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/DeliveryReportBasedFallback.java index 0c251f334..50c26ddda 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/DeliveryReportBasedFallback.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/DeliveryReportBasedFallback.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.app; +package com.sinch.sdk.domains.conversation.models.v1.apps; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/DeliveryReportBasedFallbackImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/DeliveryReportBasedFallbackImpl.java similarity index 98% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/DeliveryReportBasedFallbackImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/DeliveryReportBasedFallbackImpl.java index ca5c20047..fa7bc6049 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/DeliveryReportBasedFallbackImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/DeliveryReportBasedFallbackImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.app; +package com.sinch.sdk.domains.conversation.models.v1.apps; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/DispatchRetentionPolicy.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/DispatchRetentionPolicy.java similarity index 97% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/DispatchRetentionPolicy.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/DispatchRetentionPolicy.java index df9de6252..e956c891c 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/DispatchRetentionPolicy.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/DispatchRetentionPolicy.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.app; +package com.sinch.sdk.domains.conversation.models.v1.apps; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/DispatchRetentionPolicyImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/DispatchRetentionPolicyImpl.java similarity index 98% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/DispatchRetentionPolicyImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/DispatchRetentionPolicyImpl.java index 8989668d4..1f7fff495 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/DispatchRetentionPolicyImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/DispatchRetentionPolicyImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.app; +package com.sinch.sdk.domains.conversation.models.v1.apps; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/DispatchRetentionPolicyType.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/DispatchRetentionPolicyType.java similarity index 95% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/DispatchRetentionPolicyType.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/DispatchRetentionPolicyType.java index e6b645ed2..752df89b9 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/DispatchRetentionPolicyType.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/DispatchRetentionPolicyType.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.app; +package com.sinch.sdk.domains.conversation.models.v1.apps; import com.sinch.sdk.core.utils.EnumDynamic; import com.sinch.sdk.core.utils.EnumSupportDynamic; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/MessageRetrySettings.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/MessageRetrySettings.java similarity index 96% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/MessageRetrySettings.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/MessageRetrySettings.java index c2ecdc7c7..c9a551d94 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/MessageRetrySettings.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/MessageRetrySettings.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.app; +package com.sinch.sdk.domains.conversation.models.v1.apps; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/MessageRetrySettingsImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/MessageRetrySettingsImpl.java similarity index 97% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/MessageRetrySettingsImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/MessageRetrySettingsImpl.java index 0fa5de0ee..29333c89d 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/MessageRetrySettingsImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/MessageRetrySettingsImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.app; +package com.sinch.sdk.domains.conversation.models.v1.apps; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/RetentionPolicy.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/RetentionPolicy.java similarity index 97% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/RetentionPolicy.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/RetentionPolicy.java index f79781b47..e90908853 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/RetentionPolicy.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/RetentionPolicy.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.app; +package com.sinch.sdk.domains.conversation.models.v1.apps; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/RetentionPolicyImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/RetentionPolicyImpl.java similarity index 98% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/RetentionPolicyImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/RetentionPolicyImpl.java index 918ed4252..394bfa9ed 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/RetentionPolicyImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/RetentionPolicyImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.app; +package com.sinch.sdk.domains.conversation.models.v1.apps; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/RetentionPolicyType.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/RetentionPolicyType.java similarity index 97% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/RetentionPolicyType.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/RetentionPolicyType.java index 48e55f63a..c62805e4a 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/RetentionPolicyType.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/RetentionPolicyType.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.app; +package com.sinch.sdk.domains.conversation.models.v1.apps; import com.sinch.sdk.core.utils.EnumDynamic; import com.sinch.sdk.core.utils.EnumSupportDynamic; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/SmartConversation.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/SmartConversation.java similarity index 95% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/SmartConversation.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/SmartConversation.java index d7a742f18..5e0e26d80 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/SmartConversation.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/SmartConversation.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.app; +package com.sinch.sdk.domains.conversation.models.v1.apps; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/SmartConversationImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/SmartConversationImpl.java similarity index 97% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/SmartConversationImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/SmartConversationImpl.java index 4003db767..44db2f915 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/SmartConversationImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/SmartConversationImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.app; +package com.sinch.sdk.domains.conversation.models.v1.apps; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/ListAppsResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/internal/AppsListResponseInternal.java similarity index 69% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/ListAppsResponse.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/internal/AppsListResponseInternal.java index 91f38393a..ea7a8f73b 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/ListAppsResponse.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/internal/AppsListResponseInternal.java @@ -8,14 +8,15 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.app.response; +package com.sinch.sdk.domains.conversation.models.v1.apps.internal; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.domains.conversation.models.v1.apps.response.AppResponse; import java.util.List; -/** ListAppsResponse */ -@JsonDeserialize(builder = ListAppsResponseImpl.Builder.class) -public interface ListAppsResponse { +/** AppsListResponseInternal */ +@JsonDeserialize(builder = AppsListResponseInternalImpl.Builder.class) +public interface AppsListResponseInternal { /** * List of apps belonging to a specific project ID. @@ -30,7 +31,7 @@ public interface ListAppsResponse { * @return New Builder instance */ static Builder builder() { - return new ListAppsResponseImpl.Builder(); + return new AppsListResponseInternalImpl.Builder(); } /** Dedicated Builder */ @@ -50,6 +51,6 @@ interface Builder { * * @return The instance build with current builder values */ - ListAppsResponse build(); + AppsListResponseInternal build(); } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/ListAppsResponseImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/internal/AppsListResponseInternalImpl.java similarity index 74% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/ListAppsResponseImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/internal/AppsListResponseInternalImpl.java index 01cbdfbd8..439a7f597 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/ListAppsResponseImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/internal/AppsListResponseInternalImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.app.response; +package com.sinch.sdk.domains.conversation.models.v1.apps.internal; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -7,22 +7,23 @@ 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.apps.response.AppResponse; import java.util.List; import java.util.Objects; -@JsonPropertyOrder({ListAppsResponseImpl.JSON_PROPERTY_APPS}) +@JsonPropertyOrder({AppsListResponseInternalImpl.JSON_PROPERTY_APPS}) @JsonFilter("uninitializedFilter") @JsonInclude(value = JsonInclude.Include.CUSTOM) -public class ListAppsResponseImpl implements ListAppsResponse { +public class AppsListResponseInternalImpl implements AppsListResponseInternal { private static final long serialVersionUID = 1L; public static final String JSON_PROPERTY_APPS = "apps"; private OptionalValue> apps; - public ListAppsResponseImpl() {} + public AppsListResponseInternalImpl() {} - protected ListAppsResponseImpl(OptionalValue> apps) { + protected AppsListResponseInternalImpl(OptionalValue> apps) { this.apps = apps; } @@ -46,7 +47,7 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) { return false; } - ListAppsResponseImpl listAppsResponse = (ListAppsResponseImpl) o; + AppsListResponseInternalImpl listAppsResponse = (AppsListResponseInternalImpl) o; return Objects.equals(this.apps, listAppsResponse.apps); } @@ -58,7 +59,7 @@ public int hashCode() { @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("class ListAppsResponseImpl {\n"); + sb.append("class AppsListResponseInternalImpl {\n"); sb.append(" apps: ").append(toIndentedString(apps)).append("\n"); sb.append("}"); return sb.toString(); @@ -75,7 +76,7 @@ private String toIndentedString(Object o) { } @JsonPOJOBuilder(withPrefix = "set") - static class Builder implements ListAppsResponse.Builder { + static class Builder implements AppsListResponseInternal.Builder { OptionalValue> apps = OptionalValue.empty(); @JsonProperty(JSON_PROPERTY_APPS) @@ -84,8 +85,8 @@ public Builder setApps(List apps) { return this; } - public ListAppsResponse build() { - return new ListAppsResponseImpl(apps); + public AppsListResponseInternal build() { + return new AppsListResponseInternalImpl(apps); } } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/request/AppCreateRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/request/AppCreateRequest.java similarity index 88% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/request/AppCreateRequest.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/request/AppCreateRequest.java index 7f3670da4..92c4be48d 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/request/AppCreateRequest.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/request/AppCreateRequest.java @@ -8,17 +8,17 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.app.request; +package com.sinch.sdk.domains.conversation.models.v1.apps.request; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.sinch.sdk.domains.conversation.models.v1.ProcessingMode; -import com.sinch.sdk.domains.conversation.models.v1.app.CallbackSettings; -import com.sinch.sdk.domains.conversation.models.v1.app.ConversationMetadataReportView; -import com.sinch.sdk.domains.conversation.models.v1.app.DeliveryReportBasedFallback; -import com.sinch.sdk.domains.conversation.models.v1.app.DispatchRetentionPolicy; -import com.sinch.sdk.domains.conversation.models.v1.app.MessageRetrySettings; -import com.sinch.sdk.domains.conversation.models.v1.app.RetentionPolicy; -import com.sinch.sdk.domains.conversation.models.v1.app.SmartConversation; +import com.sinch.sdk.domains.conversation.models.v1.apps.CallbackSettings; +import com.sinch.sdk.domains.conversation.models.v1.apps.ConversationMetadataReportView; +import com.sinch.sdk.domains.conversation.models.v1.apps.DeliveryReportBasedFallback; +import com.sinch.sdk.domains.conversation.models.v1.apps.DispatchRetentionPolicy; +import com.sinch.sdk.domains.conversation.models.v1.apps.MessageRetrySettings; +import com.sinch.sdk.domains.conversation.models.v1.apps.RetentionPolicy; +import com.sinch.sdk.domains.conversation.models.v1.apps.SmartConversation; import com.sinch.sdk.domains.conversation.models.v1.credentials.ConversationChannelCredentials; import java.util.List; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/request/AppCreateRequestImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/request/AppCreateRequestImpl.java similarity index 95% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/request/AppCreateRequestImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/request/AppCreateRequestImpl.java index 28f68963f..246565bd9 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/request/AppCreateRequestImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/request/AppCreateRequestImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.app.request; +package com.sinch.sdk.domains.conversation.models.v1.apps.request; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -8,13 +8,13 @@ import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; import com.sinch.sdk.core.models.OptionalValue; import com.sinch.sdk.domains.conversation.models.v1.ProcessingMode; -import com.sinch.sdk.domains.conversation.models.v1.app.CallbackSettings; -import com.sinch.sdk.domains.conversation.models.v1.app.ConversationMetadataReportView; -import com.sinch.sdk.domains.conversation.models.v1.app.DeliveryReportBasedFallback; -import com.sinch.sdk.domains.conversation.models.v1.app.DispatchRetentionPolicy; -import com.sinch.sdk.domains.conversation.models.v1.app.MessageRetrySettings; -import com.sinch.sdk.domains.conversation.models.v1.app.RetentionPolicy; -import com.sinch.sdk.domains.conversation.models.v1.app.SmartConversation; +import com.sinch.sdk.domains.conversation.models.v1.apps.CallbackSettings; +import com.sinch.sdk.domains.conversation.models.v1.apps.ConversationMetadataReportView; +import com.sinch.sdk.domains.conversation.models.v1.apps.DeliveryReportBasedFallback; +import com.sinch.sdk.domains.conversation.models.v1.apps.DispatchRetentionPolicy; +import com.sinch.sdk.domains.conversation.models.v1.apps.MessageRetrySettings; +import com.sinch.sdk.domains.conversation.models.v1.apps.RetentionPolicy; +import com.sinch.sdk.domains.conversation.models.v1.apps.SmartConversation; import com.sinch.sdk.domains.conversation.models.v1.credentials.ConversationChannelCredentials; import java.util.List; import java.util.Objects; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/request/AppUpdateRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/request/AppUpdateRequest.java similarity index 88% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/request/AppUpdateRequest.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/request/AppUpdateRequest.java index bf4f164bb..3cc4d0df1 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/request/AppUpdateRequest.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/request/AppUpdateRequest.java @@ -8,17 +8,17 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.app.request; +package com.sinch.sdk.domains.conversation.models.v1.apps.request; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.sinch.sdk.domains.conversation.models.v1.ProcessingMode; -import com.sinch.sdk.domains.conversation.models.v1.app.CallbackSettings; -import com.sinch.sdk.domains.conversation.models.v1.app.ConversationMetadataReportView; -import com.sinch.sdk.domains.conversation.models.v1.app.DeliveryReportBasedFallback; -import com.sinch.sdk.domains.conversation.models.v1.app.DispatchRetentionPolicy; -import com.sinch.sdk.domains.conversation.models.v1.app.MessageRetrySettings; -import com.sinch.sdk.domains.conversation.models.v1.app.RetentionPolicy; -import com.sinch.sdk.domains.conversation.models.v1.app.SmartConversation; +import com.sinch.sdk.domains.conversation.models.v1.apps.CallbackSettings; +import com.sinch.sdk.domains.conversation.models.v1.apps.ConversationMetadataReportView; +import com.sinch.sdk.domains.conversation.models.v1.apps.DeliveryReportBasedFallback; +import com.sinch.sdk.domains.conversation.models.v1.apps.DispatchRetentionPolicy; +import com.sinch.sdk.domains.conversation.models.v1.apps.MessageRetrySettings; +import com.sinch.sdk.domains.conversation.models.v1.apps.RetentionPolicy; +import com.sinch.sdk.domains.conversation.models.v1.apps.SmartConversation; import com.sinch.sdk.domains.conversation.models.v1.credentials.ConversationChannelCredentials; import java.util.List; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/request/AppUpdateRequestImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/request/AppUpdateRequestImpl.java similarity index 95% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/request/AppUpdateRequestImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/request/AppUpdateRequestImpl.java index 2ebf03342..2b02c859e 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/request/AppUpdateRequestImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/request/AppUpdateRequestImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.app.request; +package com.sinch.sdk.domains.conversation.models.v1.apps.request; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -8,13 +8,13 @@ import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; import com.sinch.sdk.core.models.OptionalValue; import com.sinch.sdk.domains.conversation.models.v1.ProcessingMode; -import com.sinch.sdk.domains.conversation.models.v1.app.CallbackSettings; -import com.sinch.sdk.domains.conversation.models.v1.app.ConversationMetadataReportView; -import com.sinch.sdk.domains.conversation.models.v1.app.DeliveryReportBasedFallback; -import com.sinch.sdk.domains.conversation.models.v1.app.DispatchRetentionPolicy; -import com.sinch.sdk.domains.conversation.models.v1.app.MessageRetrySettings; -import com.sinch.sdk.domains.conversation.models.v1.app.RetentionPolicy; -import com.sinch.sdk.domains.conversation.models.v1.app.SmartConversation; +import com.sinch.sdk.domains.conversation.models.v1.apps.CallbackSettings; +import com.sinch.sdk.domains.conversation.models.v1.apps.ConversationMetadataReportView; +import com.sinch.sdk.domains.conversation.models.v1.apps.DeliveryReportBasedFallback; +import com.sinch.sdk.domains.conversation.models.v1.apps.DispatchRetentionPolicy; +import com.sinch.sdk.domains.conversation.models.v1.apps.MessageRetrySettings; +import com.sinch.sdk.domains.conversation.models.v1.apps.RetentionPolicy; +import com.sinch.sdk.domains.conversation.models.v1.apps.SmartConversation; import com.sinch.sdk.domains.conversation.models.v1.credentials.ConversationChannelCredentials; import java.util.List; import java.util.Objects; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/AppResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/AppResponse.java similarity index 89% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/AppResponse.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/AppResponse.java index 8604185f0..b8c557d61 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/AppResponse.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/AppResponse.java @@ -8,17 +8,17 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.app.response; +package com.sinch.sdk.domains.conversation.models.v1.apps.response; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.sinch.sdk.domains.conversation.models.v1.ProcessingMode; -import com.sinch.sdk.domains.conversation.models.v1.app.CallbackSettings; -import com.sinch.sdk.domains.conversation.models.v1.app.ConversationMetadataReportView; -import com.sinch.sdk.domains.conversation.models.v1.app.DeliveryReportBasedFallback; -import com.sinch.sdk.domains.conversation.models.v1.app.DispatchRetentionPolicy; -import com.sinch.sdk.domains.conversation.models.v1.app.MessageRetrySettings; -import com.sinch.sdk.domains.conversation.models.v1.app.RetentionPolicy; -import com.sinch.sdk.domains.conversation.models.v1.app.SmartConversation; +import com.sinch.sdk.domains.conversation.models.v1.apps.CallbackSettings; +import com.sinch.sdk.domains.conversation.models.v1.apps.ConversationMetadataReportView; +import com.sinch.sdk.domains.conversation.models.v1.apps.DeliveryReportBasedFallback; +import com.sinch.sdk.domains.conversation.models.v1.apps.DispatchRetentionPolicy; +import com.sinch.sdk.domains.conversation.models.v1.apps.MessageRetrySettings; +import com.sinch.sdk.domains.conversation.models.v1.apps.RetentionPolicy; +import com.sinch.sdk.domains.conversation.models.v1.apps.SmartConversation; import com.sinch.sdk.domains.conversation.models.v1.credentials.ConversationChannelCredentials; import java.util.List; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/AppResponseImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/AppResponseImpl.java similarity index 96% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/AppResponseImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/AppResponseImpl.java index ef210ff53..50e8bedf4 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/AppResponseImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/AppResponseImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.app.response; +package com.sinch.sdk.domains.conversation.models.v1.apps.response; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -8,13 +8,13 @@ import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; import com.sinch.sdk.core.models.OptionalValue; import com.sinch.sdk.domains.conversation.models.v1.ProcessingMode; -import com.sinch.sdk.domains.conversation.models.v1.app.CallbackSettings; -import com.sinch.sdk.domains.conversation.models.v1.app.ConversationMetadataReportView; -import com.sinch.sdk.domains.conversation.models.v1.app.DeliveryReportBasedFallback; -import com.sinch.sdk.domains.conversation.models.v1.app.DispatchRetentionPolicy; -import com.sinch.sdk.domains.conversation.models.v1.app.MessageRetrySettings; -import com.sinch.sdk.domains.conversation.models.v1.app.RetentionPolicy; -import com.sinch.sdk.domains.conversation.models.v1.app.SmartConversation; +import com.sinch.sdk.domains.conversation.models.v1.apps.CallbackSettings; +import com.sinch.sdk.domains.conversation.models.v1.apps.ConversationMetadataReportView; +import com.sinch.sdk.domains.conversation.models.v1.apps.DeliveryReportBasedFallback; +import com.sinch.sdk.domains.conversation.models.v1.apps.DispatchRetentionPolicy; +import com.sinch.sdk.domains.conversation.models.v1.apps.MessageRetrySettings; +import com.sinch.sdk.domains.conversation.models.v1.apps.RetentionPolicy; +import com.sinch.sdk.domains.conversation.models.v1.apps.SmartConversation; import com.sinch.sdk.domains.conversation.models.v1.credentials.ConversationChannelCredentials; import java.util.List; import java.util.Objects; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/AppsListResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/AppsListResponse.java new file mode 100644 index 000000000..93600c66f --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/AppsListResponse.java @@ -0,0 +1,47 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.apps.response; + +import com.sinch.sdk.core.models.pagination.ListResponse; +import com.sinch.sdk.core.models.pagination.Page; +import java.util.Collection; +import java.util.Collections; + +/** Auto paginated response for list of AppResponse */ +public class AppsListResponse extends ListResponse { + + private final Page page; + + public AppsListResponse(Page page) { + this.page = page; + } + + @Override + public boolean hasNextPage() { + return false; + } + + @Override + public AppsListResponse nextPage() { + + return null; + } + + @Override + public Collection getContent() { + return page == null ? Collections.emptyList() : page.getEntities(); + } + + @Override + public String toString() { + return "AppsListResponse {" + "page=" + page + '}'; + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/QueueStats.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/QueueStats.java similarity index 96% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/QueueStats.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/QueueStats.java index 3d2eac999..c5e89fc7a 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/QueueStats.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/QueueStats.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.app.response; +package com.sinch.sdk.domains.conversation.models.v1.apps.response; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/QueueStatsImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/QueueStatsImpl.java similarity index 98% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/QueueStatsImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/QueueStatsImpl.java index 2d6b6aabb..a2d6d42f7 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/QueueStatsImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/QueueStatsImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.app.response; +package com.sinch.sdk.domains.conversation.models.v1.apps.response; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/RateLimits.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/RateLimits.java similarity index 97% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/RateLimits.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/RateLimits.java index 8bdceae66..24c11aa17 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/RateLimits.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/RateLimits.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.app.response; +package com.sinch.sdk.domains.conversation.models.v1.apps.response; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/RateLimitsImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/RateLimitsImpl.java similarity index 98% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/RateLimitsImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/RateLimitsImpl.java index 0cef225a1..e78dd8a68 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/app/response/RateLimitsImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/apps/response/RateLimitsImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.app.response; +package com.sinch.sdk.domains.conversation.models.v1.apps.response; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/Contact.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/Contact.java similarity index 98% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/Contact.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/Contact.java index 2262baecd..351b9d7eb 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/Contact.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/Contact.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.contact; +package com.sinch.sdk.domains.conversation.models.v1.contacts; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.sinch.sdk.domains.conversation.models.v1.ChannelIdentity; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/ContactImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/ContactImpl.java similarity index 99% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/ContactImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/ContactImpl.java index 0ba7807c2..26bcf4fba 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/ContactImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/ContactImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact; +package com.sinch.sdk.domains.conversation.models.v1.contacts; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/ContactLanguage.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/ContactLanguage.java similarity index 99% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/ContactLanguage.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/ContactLanguage.java index f315922ce..08cf21c84 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/ContactLanguage.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/ContactLanguage.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact; +package com.sinch.sdk.domains.conversation.models.v1.contacts; import com.sinch.sdk.core.utils.EnumDynamic; import com.sinch.sdk.core.utils.EnumSupportDynamic; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/ListContactsResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/internal/ContactsListResponseInternal.java similarity index 75% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/ListContactsResponse.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/internal/ContactsListResponseInternal.java index 4161fadc0..74ef76135 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/ListContactsResponse.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/internal/ContactsListResponseInternal.java @@ -8,15 +8,15 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.contact.response; +package com.sinch.sdk.domains.conversation.models.v1.contacts.internal; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; +import com.sinch.sdk.domains.conversation.models.v1.contacts.Contact; import java.util.List; -/** ListContactsResponse */ -@JsonDeserialize(builder = ListContactsResponseImpl.Builder.class) -public interface ListContactsResponse { +/** ContactsListResponseInternal */ +@JsonDeserialize(builder = ContactsListResponseInternalImpl.Builder.class) +public interface ContactsListResponseInternal { /** * List of contacts belonging to the specified project. @@ -38,7 +38,7 @@ public interface ListContactsResponse { * @return New Builder instance */ static Builder builder() { - return new ListContactsResponseImpl.Builder(); + return new ContactsListResponseInternalImpl.Builder(); } /** Dedicated Builder */ @@ -67,6 +67,6 @@ interface Builder { * * @return The instance build with current builder values */ - ListContactsResponse build(); + ContactsListResponseInternal build(); } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/ListContactsResponseImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/internal/ContactsListResponseInternalImpl.java similarity index 79% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/ListContactsResponseImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/internal/ContactsListResponseInternalImpl.java index 682f2182b..e83bf93ee 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/ListContactsResponseImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/internal/ContactsListResponseInternalImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact.response; +package com.sinch.sdk.domains.conversation.models.v1.contacts.internal; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -7,17 +7,17 @@ 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.contact.Contact; +import com.sinch.sdk.domains.conversation.models.v1.contacts.Contact; import java.util.List; import java.util.Objects; @JsonPropertyOrder({ - ListContactsResponseImpl.JSON_PROPERTY_CONTACTS, - ListContactsResponseImpl.JSON_PROPERTY_NEXT_PAGE_TOKEN + ContactsListResponseInternalImpl.JSON_PROPERTY_CONTACTS, + ContactsListResponseInternalImpl.JSON_PROPERTY_NEXT_PAGE_TOKEN }) @JsonFilter("uninitializedFilter") @JsonInclude(value = JsonInclude.Include.CUSTOM) -public class ListContactsResponseImpl implements ListContactsResponse { +public class ContactsListResponseInternalImpl implements ContactsListResponseInternal { private static final long serialVersionUID = 1L; public static final String JSON_PROPERTY_CONTACTS = "contacts"; @@ -28,9 +28,9 @@ public class ListContactsResponseImpl implements ListContactsResponse { private OptionalValue nextPageToken; - public ListContactsResponseImpl() {} + public ContactsListResponseInternalImpl() {} - protected ListContactsResponseImpl( + protected ContactsListResponseInternalImpl( OptionalValue> contacts, OptionalValue nextPageToken) { this.contacts = contacts; this.nextPageToken = nextPageToken; @@ -67,7 +67,7 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) { return false; } - ListContactsResponseImpl listContactsResponse = (ListContactsResponseImpl) o; + ContactsListResponseInternalImpl listContactsResponse = (ContactsListResponseInternalImpl) o; return Objects.equals(this.contacts, listContactsResponse.contacts) && Objects.equals(this.nextPageToken, listContactsResponse.nextPageToken); } @@ -80,7 +80,7 @@ public int hashCode() { @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("class ListContactsResponseImpl {\n"); + sb.append("class ContactsListResponseInternalImpl {\n"); sb.append(" contacts: ").append(toIndentedString(contacts)).append("\n"); sb.append(" nextPageToken: ").append(toIndentedString(nextPageToken)).append("\n"); sb.append("}"); @@ -98,7 +98,7 @@ private String toIndentedString(Object o) { } @JsonPOJOBuilder(withPrefix = "set") - static class Builder implements ListContactsResponse.Builder { + static class Builder implements ContactsListResponseInternal.Builder { OptionalValue> contacts = OptionalValue.empty(); OptionalValue nextPageToken = OptionalValue.empty(); @@ -114,8 +114,8 @@ public Builder setNextPageToken(String nextPageToken) { return this; } - public ListContactsResponse build() { - return new ListContactsResponseImpl(contacts, nextPageToken); + public ContactsListResponseInternal build() { + return new ContactsListResponseInternalImpl(contacts, nextPageToken); } } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/ListIdentityConflictsResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/internal/IdentityConflictsListResponseInternal.java similarity index 72% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/ListIdentityConflictsResponse.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/internal/IdentityConflictsListResponseInternal.java index 475ccd2c6..45a2a85cf 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/ListIdentityConflictsResponse.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/internal/IdentityConflictsListResponseInternal.java @@ -8,14 +8,15 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.contact.response; +package com.sinch.sdk.domains.conversation.models.v1.contacts.internal; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.domains.conversation.models.v1.contacts.response.IdentityConflicts; import java.util.List; -/** ListIdentityConflictsResponse */ -@JsonDeserialize(builder = ListIdentityConflictsResponseImpl.Builder.class) -public interface ListIdentityConflictsResponse { +/** IdentityConflictsListResponseInternal */ +@JsonDeserialize(builder = IdentityConflictsListResponseInternalImpl.Builder.class) +public interface IdentityConflictsListResponseInternal { /** * Get conflicts @@ -37,7 +38,7 @@ public interface ListIdentityConflictsResponse { * @return New Builder instance */ static Builder builder() { - return new ListIdentityConflictsResponseImpl.Builder(); + return new IdentityConflictsListResponseInternalImpl.Builder(); } /** Dedicated Builder */ @@ -66,6 +67,6 @@ interface Builder { * * @return The instance build with current builder values */ - ListIdentityConflictsResponse build(); + IdentityConflictsListResponseInternal build(); } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/ListIdentityConflictsResponseImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/internal/IdentityConflictsListResponseInternalImpl.java similarity index 77% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/ListIdentityConflictsResponseImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/internal/IdentityConflictsListResponseInternalImpl.java index 0fa51149b..f9c4d3fad 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/ListIdentityConflictsResponseImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/internal/IdentityConflictsListResponseInternalImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact.response; +package com.sinch.sdk.domains.conversation.models.v1.contacts.internal; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -7,16 +7,18 @@ 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.contacts.response.IdentityConflicts; import java.util.List; import java.util.Objects; @JsonPropertyOrder({ - ListIdentityConflictsResponseImpl.JSON_PROPERTY_CONFLICTS, - ListIdentityConflictsResponseImpl.JSON_PROPERTY_NEXT_PAGE_TOKEN + IdentityConflictsListResponseInternalImpl.JSON_PROPERTY_CONFLICTS, + IdentityConflictsListResponseInternalImpl.JSON_PROPERTY_NEXT_PAGE_TOKEN }) @JsonFilter("uninitializedFilter") @JsonInclude(value = JsonInclude.Include.CUSTOM) -public class ListIdentityConflictsResponseImpl implements ListIdentityConflictsResponse { +public class IdentityConflictsListResponseInternalImpl + implements IdentityConflictsListResponseInternal { private static final long serialVersionUID = 1L; public static final String JSON_PROPERTY_CONFLICTS = "conflicts"; @@ -27,9 +29,9 @@ public class ListIdentityConflictsResponseImpl implements ListIdentityConflictsR private OptionalValue nextPageToken; - public ListIdentityConflictsResponseImpl() {} + public IdentityConflictsListResponseInternalImpl() {} - protected ListIdentityConflictsResponseImpl( + protected IdentityConflictsListResponseInternalImpl( OptionalValue> conflicts, OptionalValue nextPageToken) { this.conflicts = conflicts; this.nextPageToken = nextPageToken; @@ -66,8 +68,8 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) { return false; } - ListIdentityConflictsResponseImpl contactListIdentityConflicts200Response = - (ListIdentityConflictsResponseImpl) o; + IdentityConflictsListResponseInternalImpl contactListIdentityConflicts200Response = + (IdentityConflictsListResponseInternalImpl) o; return Objects.equals(this.conflicts, contactListIdentityConflicts200Response.conflicts) && Objects.equals( this.nextPageToken, contactListIdentityConflicts200Response.nextPageToken); @@ -81,7 +83,7 @@ public int hashCode() { @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("class ListIdentityConflictsResponseImpl {\n"); + sb.append("class IdentityConflictsListResponseInternalImpl {\n"); sb.append(" conflicts: ").append(toIndentedString(conflicts)).append("\n"); sb.append(" nextPageToken: ").append(toIndentedString(nextPageToken)).append("\n"); sb.append("}"); @@ -99,7 +101,7 @@ private String toIndentedString(Object o) { } @JsonPOJOBuilder(withPrefix = "set") - static class Builder implements ListIdentityConflictsResponse.Builder { + static class Builder implements IdentityConflictsListResponseInternal.Builder { OptionalValue> conflicts = OptionalValue.empty(); OptionalValue nextPageToken = OptionalValue.empty(); @@ -115,8 +117,8 @@ public Builder setNextPageToken(String nextPageToken) { return this; } - public ListIdentityConflictsResponse build() { - return new ListIdentityConflictsResponseImpl(conflicts, nextPageToken); + public IdentityConflictsListResponseInternal build() { + return new IdentityConflictsListResponseInternalImpl(conflicts, nextPageToken); } } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ContactCreateRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactCreateRequest.java similarity index 95% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ContactCreateRequest.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactCreateRequest.java index 4a8e9e3ea..7587e0ecf 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ContactCreateRequest.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactCreateRequest.java @@ -8,12 +8,12 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.contact.request; +package com.sinch.sdk.domains.conversation.models.v1.contacts.request; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.sinch.sdk.domains.conversation.models.v1.ChannelIdentity; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; -import com.sinch.sdk.domains.conversation.models.v1.contact.ContactLanguage; +import com.sinch.sdk.domains.conversation.models.v1.contacts.ContactLanguage; import java.util.List; /** diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ContactCreateRequestImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactCreateRequestImpl.java similarity index 98% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ContactCreateRequestImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactCreateRequestImpl.java index 932afb421..bd316ddf2 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ContactCreateRequestImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactCreateRequestImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact.request; +package com.sinch.sdk.domains.conversation.models.v1.contacts.request; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -9,7 +9,7 @@ import com.sinch.sdk.core.models.OptionalValue; import com.sinch.sdk.domains.conversation.models.v1.ChannelIdentity; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; -import com.sinch.sdk.domains.conversation.models.v1.contact.ContactLanguage; +import com.sinch.sdk.domains.conversation.models.v1.contacts.ContactLanguage; import java.util.List; import java.util.Objects; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactsListQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactsListQueryParameters.java new file mode 100644 index 000000000..46a45e6f3 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactsListQueryParameters.java @@ -0,0 +1,127 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.contacts.request; + +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; + +/** ContactsListQueryParameters */ +public interface ContactsListQueryParameters { + + /** + * Get pageSize + * + * @return pageSize + */ + OptionalValue getPageSize(); + + /** + * Get pageToken + * + * @return pageToken + */ + OptionalValue getPageToken(); + + /** + * Get externalId + * + * @return externalId + */ + OptionalValue getExternalId(); + + /** + * Get channel + * + * @return channel + */ + OptionalValue getChannel(); + + /** + * Get identity + * + * @return identity + */ + OptionalValue getIdentity(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new ContactsListQueryParametersImpl.Builder(); + } + + /** + * Getting builder from existing instance + * + * @return New Builder instance + */ + static Builder builder(ContactsListQueryParameters parameters) { + return new ContactsListQueryParametersImpl.Builder(parameters); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param pageSize see getter + * @return Current builder + * @see #getPageSize + */ + Builder setPageSize(Integer pageSize); + + /** + * see getter + * + * @param pageToken see getter + * @return Current builder + * @see #getPageToken + */ + Builder setPageToken(String pageToken); + + /** + * see getter + * + * @param externalId see getter + * @return Current builder + * @see #getExternalId + */ + Builder setExternalId(String externalId); + + /** + * see getter + * + * @param channel see getter + * @return Current builder + * @see #getChannel + */ + Builder setChannel(ConversationChannel channel); + + /** + * see getter + * + * @param identity see getter + * @return Current builder + * @see #getIdentity + */ + Builder setIdentity(String identity); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + ContactsListQueryParameters build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactsListQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactsListQueryParametersImpl.java new file mode 100644 index 000000000..6ae87e828 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ContactsListQueryParametersImpl.java @@ -0,0 +1,145 @@ +package com.sinch.sdk.domains.conversation.models.v1.contacts.request; + +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; +import java.util.Objects; + +public class ContactsListQueryParametersImpl implements ContactsListQueryParameters { + + private final OptionalValue pageSize; + private final OptionalValue pageToken; + private final OptionalValue externalId; + private final OptionalValue channel; + private final OptionalValue identity; + + private ContactsListQueryParametersImpl( + OptionalValue pageSize, + OptionalValue pageToken, + OptionalValue externalId, + OptionalValue channel, + OptionalValue identity) { + this.pageSize = pageSize; + this.pageToken = pageToken; + this.externalId = externalId; + this.channel = channel; + this.identity = identity; + } + + public OptionalValue getPageSize() { + return pageSize; + } + + public OptionalValue getPageToken() { + return pageToken; + } + + public OptionalValue getExternalId() { + return externalId; + } + + public OptionalValue getChannel() { + return channel; + } + + public OptionalValue getIdentity() { + return identity; + } + + /** Return true if this ContactListContactsQueryParameters object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ContactsListQueryParametersImpl contactListContactsQueryParameters = + (ContactsListQueryParametersImpl) o; + return Objects.equals(this.pageSize, contactListContactsQueryParameters.pageSize) + && Objects.equals(this.pageToken, contactListContactsQueryParameters.pageToken) + && Objects.equals(this.externalId, contactListContactsQueryParameters.externalId) + && Objects.equals(this.channel, contactListContactsQueryParameters.channel) + && Objects.equals(this.identity, contactListContactsQueryParameters.identity); + } + + @Override + public int hashCode() { + return Objects.hash(pageSize, pageToken, externalId, channel, identity); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ContactsListQueryParametersImpl {\n"); + sb.append(" pageSize: ").append(toIndentedString(pageSize)).append("\n"); + sb.append(" pageToken: ").append(toIndentedString(pageToken)).append("\n"); + sb.append(" externalId: ").append(toIndentedString(externalId)).append("\n"); + sb.append(" channel: ").append(toIndentedString(channel)).append("\n"); + sb.append(" identity: ").append(toIndentedString(identity)).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 ContactsListQueryParameters.Builder { + OptionalValue pageSize = OptionalValue.empty(); + OptionalValue pageToken = OptionalValue.empty(); + OptionalValue externalId = OptionalValue.empty(); + OptionalValue channel = OptionalValue.empty(); + OptionalValue identity = OptionalValue.empty(); + + protected Builder() {} + + protected Builder(ContactsListQueryParameters _parameters) { + if (null == _parameters) { + return; + } + ContactsListQueryParametersImpl parameters = (ContactsListQueryParametersImpl) _parameters; + this.pageSize = parameters.getPageSize(); + this.pageToken = parameters.getPageToken(); + this.externalId = parameters.getExternalId(); + this.channel = parameters.getChannel(); + this.identity = parameters.getIdentity(); + } + + public Builder setPageSize(Integer pageSize) { + this.pageSize = OptionalValue.of(pageSize); + return this; + } + + public Builder setPageToken(String pageToken) { + this.pageToken = OptionalValue.of(pageToken); + return this; + } + + public Builder setExternalId(String externalId) { + this.externalId = OptionalValue.of(externalId); + return this; + } + + public Builder setChannel(ConversationChannel channel) { + this.channel = OptionalValue.of(channel); + return this; + } + + public Builder setIdentity(String identity) { + this.identity = OptionalValue.of(identity); + return this; + } + + public ContactsListQueryParameters build() { + return new ContactsListQueryParametersImpl( + pageSize, pageToken, externalId, channel, identity); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ConversationMergeStrategy.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ConversationMergeStrategy.java similarity index 93% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ConversationMergeStrategy.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ConversationMergeStrategy.java index 69dd53809..736c9ce16 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/ConversationMergeStrategy.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/ConversationMergeStrategy.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact.request; +package com.sinch.sdk.domains.conversation.models.v1.contacts.request; import com.sinch.sdk.core.utils.EnumDynamic; import com.sinch.sdk.core.utils.EnumSupportDynamic; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/GetChannelProfileConversationChannel.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/GetChannelProfileConversationChannel.java similarity index 96% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/GetChannelProfileConversationChannel.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/GetChannelProfileConversationChannel.java index 498f6bff6..e93bad761 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/GetChannelProfileConversationChannel.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/GetChannelProfileConversationChannel.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact.request; +package com.sinch.sdk.domains.conversation.models.v1.contacts.request; import com.sinch.sdk.core.utils.EnumDynamic; import com.sinch.sdk.core.utils.EnumSupportDynamic; 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/contacts/request/GetChannelProfileRequest.java similarity index 96% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/GetChannelProfileRequest.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/GetChannelProfileRequest.java index 6def70c51..30938145b 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/contacts/request/GetChannelProfileRequest.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.contact.request; +package com.sinch.sdk.domains.conversation.models.v1.contacts.request; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.sinch.sdk.domains.conversation.models.v1.Recipient; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/GetChannelProfileRequestImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/GetChannelProfileRequestImpl.java similarity index 98% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/GetChannelProfileRequestImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/GetChannelProfileRequestImpl.java index 76e8f43b2..99bd3fc93 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/GetChannelProfileRequestImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/GetChannelProfileRequestImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact.request; +package com.sinch.sdk.domains.conversation.models.v1.contacts.request; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/IdentityConflictsListQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/IdentityConflictsListQueryParameters.java new file mode 100644 index 000000000..03a162925 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/IdentityConflictsListQueryParameters.java @@ -0,0 +1,78 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.contacts.request; + +import com.sinch.sdk.core.models.OptionalValue; + +/** IdentityConflictsListQueryParameters */ +public interface IdentityConflictsListQueryParameters { + + /** + * Get pageSize + * + * @return pageSize + */ + OptionalValue getPageSize(); + + /** + * Get pageToken + * + * @return pageToken + */ + OptionalValue getPageToken(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new IdentityConflictsListQueryParametersImpl.Builder(); + } + + /** + * Getting builder from existing instance + * + * @return New Builder instance + */ + static Builder builder(IdentityConflictsListQueryParameters parameters) { + return new IdentityConflictsListQueryParametersImpl.Builder(parameters); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param pageSize see getter + * @return Current builder + * @see #getPageSize + */ + Builder setPageSize(Integer pageSize); + + /** + * see getter + * + * @param pageToken see getter + * @return Current builder + * @see #getPageToken + */ + Builder setPageToken(String pageToken); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + IdentityConflictsListQueryParameters build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/IdentityConflictsListQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/IdentityConflictsListQueryParametersImpl.java new file mode 100644 index 000000000..b8fd8b778 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/IdentityConflictsListQueryParametersImpl.java @@ -0,0 +1,96 @@ +package com.sinch.sdk.domains.conversation.models.v1.contacts.request; + +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +public class IdentityConflictsListQueryParametersImpl + implements IdentityConflictsListQueryParameters { + + private final OptionalValue pageSize; + private final OptionalValue pageToken; + + private IdentityConflictsListQueryParametersImpl( + OptionalValue pageSize, OptionalValue pageToken) { + this.pageSize = pageSize; + this.pageToken = pageToken; + } + + public OptionalValue getPageSize() { + return pageSize; + } + + public OptionalValue getPageToken() { + return pageToken; + } + + /** Return true if this ContactListIdentityConflictsQueryParameters object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + IdentityConflictsListQueryParametersImpl contactListIdentityConflictsQueryParameters = + (IdentityConflictsListQueryParametersImpl) o; + return Objects.equals(this.pageSize, contactListIdentityConflictsQueryParameters.pageSize) + && Objects.equals(this.pageToken, contactListIdentityConflictsQueryParameters.pageToken); + } + + @Override + public int hashCode() { + return Objects.hash(pageSize, pageToken); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class IdentityConflictsListQueryParametersImpl {\n"); + sb.append(" pageSize: ").append(toIndentedString(pageSize)).append("\n"); + sb.append(" pageToken: ").append(toIndentedString(pageToken)).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 IdentityConflictsListQueryParameters.Builder { + OptionalValue pageSize = OptionalValue.empty(); + OptionalValue pageToken = OptionalValue.empty(); + + protected Builder() {} + + protected Builder(IdentityConflictsListQueryParameters _parameters) { + if (null == _parameters) { + return; + } + IdentityConflictsListQueryParametersImpl parameters = + (IdentityConflictsListQueryParametersImpl) _parameters; + this.pageSize = parameters.getPageSize(); + this.pageToken = parameters.getPageToken(); + } + + public Builder setPageSize(Integer pageSize) { + this.pageSize = OptionalValue.of(pageSize); + return this; + } + + public Builder setPageToken(String pageToken) { + this.pageToken = OptionalValue.of(pageToken); + return this; + } + + public IdentityConflictsListQueryParameters build() { + return new IdentityConflictsListQueryParametersImpl(pageSize, pageToken); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/MergeContactRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/MergeContactRequest.java similarity index 95% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/MergeContactRequest.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/MergeContactRequest.java index 27d4f7a0b..48041e119 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/MergeContactRequest.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/MergeContactRequest.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.contact.request; +package com.sinch.sdk.domains.conversation.models.v1.contacts.request; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/MergeContactRequestImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/MergeContactRequestImpl.java similarity index 98% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/MergeContactRequestImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/MergeContactRequestImpl.java index 7c69e5157..a861593c8 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/request/MergeContactRequestImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/request/MergeContactRequestImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact.request; +package com.sinch.sdk.domains.conversation.models.v1.contacts.request; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/ContactsListResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/ContactsListResponse.java new file mode 100644 index 000000000..a3337e74d --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/ContactsListResponse.java @@ -0,0 +1,63 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.contacts.response; + +import com.sinch.sdk.core.http.HttpRequest; +import com.sinch.sdk.core.models.pagination.ListResponse; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.conversation.api.v1.adapters.ContactsServiceImpl; +import com.sinch.sdk.domains.conversation.models.v1.contacts.Contact; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactsListQueryParameters; +import java.util.Collection; +import java.util.Collections; +import java.util.NoSuchElementException; + +/** Auto paginated response for list of Contact */ +public class ContactsListResponse extends ListResponse { + + private final Page page; + private final ContactsServiceImpl service; + + public ContactsListResponse( + ContactsServiceImpl service, Page page) { + this.service = service; + this.page = page; + } + + @Override + public boolean hasNextPage() { + if (null == page.getNextPageToken() || null == getContent() || getContent().isEmpty()) { + return false; + } + return true; + } + + @Override + public ContactsListResponse nextPage() { + + if (!hasNextPage()) { + throw new NoSuchElementException("Reached the last page of the API response"); + } + + return service._getContactsListPageAsListResponse( + page.getParameters(), page.getNextPageToken()); + } + + @Override + public Collection getContent() { + return page == null ? Collections.emptyList() : page.getEntities(); + } + + @Override + public String toString() { + return "ContactsListResponse {" + "page=" + page + '}'; + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/GetChannelProfileResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/GetChannelProfileResponse.java similarity index 93% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/GetChannelProfileResponse.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/GetChannelProfileResponse.java index 898c5a7d6..751d362d4 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/GetChannelProfileResponse.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/GetChannelProfileResponse.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.contact.response; +package com.sinch.sdk.domains.conversation.models.v1.contacts.response; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/GetChannelProfileResponseImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/GetChannelProfileResponseImpl.java similarity index 97% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/GetChannelProfileResponseImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/GetChannelProfileResponseImpl.java index 7cdf4b9cc..2052c1de9 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/GetChannelProfileResponseImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/GetChannelProfileResponseImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact.response; +package com.sinch.sdk.domains.conversation.models.v1.contacts.response; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/IdentityConflicts.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/IdentityConflicts.java similarity index 96% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/IdentityConflicts.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/IdentityConflicts.java index 697f02366..86e856999 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/IdentityConflicts.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/IdentityConflicts.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.contact.response; +package com.sinch.sdk.domains.conversation.models.v1.contacts.response; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/IdentityConflictsImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/IdentityConflictsImpl.java similarity index 98% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/IdentityConflictsImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/IdentityConflictsImpl.java index c5bce566c..66037c3f3 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contact/response/IdentityConflictsImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/IdentityConflictsImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact.response; +package com.sinch.sdk.domains.conversation.models.v1.contacts.response; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/IdentityConflictsListResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/IdentityConflictsListResponse.java new file mode 100644 index 000000000..afc6efc9e --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/contacts/response/IdentityConflictsListResponse.java @@ -0,0 +1,63 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.contacts.response; + +import com.sinch.sdk.core.http.HttpRequest; +import com.sinch.sdk.core.models.pagination.ListResponse; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.conversation.api.v1.adapters.ContactsServiceImpl; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.IdentityConflictsListQueryParameters; +import java.util.Collection; +import java.util.Collections; +import java.util.NoSuchElementException; + +/** Auto paginated response for list of IdentityConflicts */ +public class IdentityConflictsListResponse extends ListResponse { + + private final Page page; + private final ContactsServiceImpl service; + + public IdentityConflictsListResponse( + ContactsServiceImpl service, + Page page) { + this.service = service; + this.page = page; + } + + @Override + public boolean hasNextPage() { + if (null == page.getNextPageToken() || null == getContent() || getContent().isEmpty()) { + return false; + } + return true; + } + + @Override + public IdentityConflictsListResponse nextPage() { + + if (!hasNextPage()) { + throw new NoSuchElementException("Reached the last page of the API response"); + } + + return service._getIdentityConflictsListPageAsListResponse( + page.getParameters(), page.getNextPageToken()); + } + + @Override + public Collection getContent() { + return page == null ? Collections.emptyList() : page.getEntities(); + } + + @Override + public String toString() { + return "IdentityConflictsListResponse {" + "page=" + page + '}'; + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/Conversation.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/Conversation.java similarity index 99% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/Conversation.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/Conversation.java index 1b60ffd36..d552c094a 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/Conversation.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/Conversation.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.conversation; +package com.sinch.sdk.domains.conversation.models.v1.conversations; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/ConversationImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/ConversationImpl.java similarity index 99% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/ConversationImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/ConversationImpl.java index 8d8645f77..9d4ce54be 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/ConversationImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/ConversationImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.conversation; +package com.sinch.sdk.domains.conversation.models.v1.conversations; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/internal/ListConversationsResponseInternal.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/internal/ConversationsListResponseInternal.java similarity index 86% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/internal/ListConversationsResponseInternal.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/internal/ConversationsListResponseInternal.java index ac09cae2c..f5c972a1a 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/internal/ListConversationsResponseInternal.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/internal/ConversationsListResponseInternal.java @@ -8,15 +8,15 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.conversation.internal; +package com.sinch.sdk.domains.conversation.models.v1.conversations.internal; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.sinch.sdk.domains.conversation.models.v1.conversation.Conversation; +import com.sinch.sdk.domains.conversation.models.v1.conversations.Conversation; import java.util.List; -/** ListConversationsResponseInternal */ -@JsonDeserialize(builder = ListConversationsResponseInternalImpl.Builder.class) -public interface ListConversationsResponseInternal { +/** ConversationsListResponseInternal */ +@JsonDeserialize(builder = ConversationsListResponseInternalImpl.Builder.class) +public interface ConversationsListResponseInternal { /** * List of conversations matching the search query. @@ -46,7 +46,7 @@ public interface ListConversationsResponseInternal { * @return New Builder instance */ static Builder builder() { - return new ListConversationsResponseInternalImpl.Builder(); + return new ConversationsListResponseInternalImpl.Builder(); } /** Dedicated Builder */ @@ -85,6 +85,6 @@ interface Builder { * * @return The instance build with current builder values */ - ListConversationsResponseInternal build(); + ConversationsListResponseInternal build(); } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/internal/ListConversationsResponseInternalImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/internal/ConversationsListResponseInternalImpl.java similarity index 84% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/internal/ListConversationsResponseInternalImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/internal/ConversationsListResponseInternalImpl.java index 9968e72f9..e5889ebfb 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/internal/ListConversationsResponseInternalImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/internal/ConversationsListResponseInternalImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.conversation.internal; +package com.sinch.sdk.domains.conversation.models.v1.conversations.internal; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -7,18 +7,18 @@ 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.conversation.Conversation; +import com.sinch.sdk.domains.conversation.models.v1.conversations.Conversation; import java.util.List; import java.util.Objects; @JsonPropertyOrder({ - ListConversationsResponseInternalImpl.JSON_PROPERTY_CONVERSATIONS, - ListConversationsResponseInternalImpl.JSON_PROPERTY_NEXT_PAGE_TOKEN, - ListConversationsResponseInternalImpl.JSON_PROPERTY_TOTAL_SIZE + ConversationsListResponseInternalImpl.JSON_PROPERTY_CONVERSATIONS, + ConversationsListResponseInternalImpl.JSON_PROPERTY_NEXT_PAGE_TOKEN, + ConversationsListResponseInternalImpl.JSON_PROPERTY_TOTAL_SIZE }) @JsonFilter("uninitializedFilter") @JsonInclude(value = JsonInclude.Include.CUSTOM) -public class ListConversationsResponseInternalImpl implements ListConversationsResponseInternal { +public class ConversationsListResponseInternalImpl implements ConversationsListResponseInternal { private static final long serialVersionUID = 1L; public static final String JSON_PROPERTY_CONVERSATIONS = "conversations"; @@ -33,9 +33,9 @@ public class ListConversationsResponseInternalImpl implements ListConversationsR private OptionalValue totalSize; - public ListConversationsResponseInternalImpl() {} + public ConversationsListResponseInternalImpl() {} - protected ListConversationsResponseInternalImpl( + protected ConversationsListResponseInternalImpl( OptionalValue> conversations, OptionalValue nextPageToken, OptionalValue totalSize) { @@ -85,8 +85,8 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) { return false; } - ListConversationsResponseInternalImpl listConversationsResponse = - (ListConversationsResponseInternalImpl) o; + ConversationsListResponseInternalImpl listConversationsResponse = + (ConversationsListResponseInternalImpl) o; return Objects.equals(this.conversations, listConversationsResponse.conversations) && Objects.equals(this.nextPageToken, listConversationsResponse.nextPageToken) && Objects.equals(this.totalSize, listConversationsResponse.totalSize); @@ -100,7 +100,7 @@ public int hashCode() { @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("class ListConversationsResponseInternalImpl {\n"); + sb.append("class ConversationsListResponseInternalImpl {\n"); sb.append(" conversations: ").append(toIndentedString(conversations)).append("\n"); sb.append(" nextPageToken: ").append(toIndentedString(nextPageToken)).append("\n"); sb.append(" totalSize: ").append(toIndentedString(totalSize)).append("\n"); @@ -119,7 +119,7 @@ private String toIndentedString(Object o) { } @JsonPOJOBuilder(withPrefix = "set") - static class Builder implements ListConversationsResponseInternal.Builder { + static class Builder implements ConversationsListResponseInternal.Builder { OptionalValue> conversations = OptionalValue.empty(); OptionalValue nextPageToken = OptionalValue.empty(); OptionalValue totalSize = OptionalValue.empty(); @@ -142,8 +142,8 @@ public Builder setTotalSize(Integer totalSize) { return this; } - public ListConversationsResponseInternal build() { - return new ListConversationsResponseInternalImpl(conversations, nextPageToken, totalSize); + public ConversationsListResponseInternal build() { + return new ConversationsListResponseInternalImpl(conversations, nextPageToken, totalSize); } } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/internal/ListRecentConversationsResponseInternal.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/internal/RecentConversationsListResponseInternal.java similarity index 83% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/internal/ListRecentConversationsResponseInternal.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/internal/RecentConversationsListResponseInternal.java index d219789a0..3564722b2 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/internal/ListRecentConversationsResponseInternal.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/internal/RecentConversationsListResponseInternal.java @@ -8,15 +8,15 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.conversation.internal; +package com.sinch.sdk.domains.conversation.models.v1.conversations.internal; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.sinch.sdk.domains.conversation.models.v1.conversation.response.ConversationRecentMessage; +import com.sinch.sdk.domains.conversation.models.v1.conversations.response.ConversationRecentMessage; import java.util.List; -/** ListRecentConversationsResponseInternal */ -@JsonDeserialize(builder = ListRecentConversationsResponseInternalImpl.Builder.class) -public interface ListRecentConversationsResponseInternal { +/** RecentConversationsListResponseInternal */ +@JsonDeserialize(builder = RecentConversationsListResponseInternalImpl.Builder.class) +public interface RecentConversationsListResponseInternal { /** * List of recent conversations @@ -45,7 +45,7 @@ public interface ListRecentConversationsResponseInternal { * @return New Builder instance */ static Builder builder() { - return new ListRecentConversationsResponseInternalImpl.Builder(); + return new RecentConversationsListResponseInternalImpl.Builder(); } /** Dedicated Builder */ @@ -83,6 +83,6 @@ interface Builder { * * @return The instance build with current builder values */ - ListRecentConversationsResponseInternal build(); + RecentConversationsListResponseInternal build(); } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/internal/ListRecentConversationsResponseInternalImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/internal/RecentConversationsListResponseInternalImpl.java similarity index 84% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/internal/ListRecentConversationsResponseInternalImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/internal/RecentConversationsListResponseInternalImpl.java index 107dc2b94..b68de80a3 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/internal/ListRecentConversationsResponseInternalImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/internal/RecentConversationsListResponseInternalImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.conversation.internal; +package com.sinch.sdk.domains.conversation.models.v1.conversations.internal; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -7,19 +7,19 @@ 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.conversation.response.ConversationRecentMessage; +import com.sinch.sdk.domains.conversation.models.v1.conversations.response.ConversationRecentMessage; import java.util.List; import java.util.Objects; @JsonPropertyOrder({ - ListRecentConversationsResponseInternalImpl.JSON_PROPERTY_CONVERSATIONS, - ListRecentConversationsResponseInternalImpl.JSON_PROPERTY_NEXT_PAGE_TOKEN, - ListRecentConversationsResponseInternalImpl.JSON_PROPERTY_TOTAL_SIZE + RecentConversationsListResponseInternalImpl.JSON_PROPERTY_CONVERSATIONS, + RecentConversationsListResponseInternalImpl.JSON_PROPERTY_NEXT_PAGE_TOKEN, + RecentConversationsListResponseInternalImpl.JSON_PROPERTY_TOTAL_SIZE }) @JsonFilter("uninitializedFilter") @JsonInclude(value = JsonInclude.Include.CUSTOM) -public class ListRecentConversationsResponseInternalImpl - implements ListRecentConversationsResponseInternal { +public class RecentConversationsListResponseInternalImpl + implements RecentConversationsListResponseInternal { private static final long serialVersionUID = 1L; public static final String JSON_PROPERTY_CONVERSATIONS = "conversations"; @@ -34,9 +34,9 @@ public class ListRecentConversationsResponseInternalImpl private OptionalValue totalSize; - public ListRecentConversationsResponseInternalImpl() {} + public RecentConversationsListResponseInternalImpl() {} - protected ListRecentConversationsResponseInternalImpl( + protected RecentConversationsListResponseInternalImpl( OptionalValue> conversations, OptionalValue nextPageToken, OptionalValue totalSize) { @@ -87,8 +87,8 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) { return false; } - ListRecentConversationsResponseInternalImpl listRecentConversationsResponse = - (ListRecentConversationsResponseInternalImpl) o; + RecentConversationsListResponseInternalImpl listRecentConversationsResponse = + (RecentConversationsListResponseInternalImpl) o; return Objects.equals(this.conversations, listRecentConversationsResponse.conversations) && Objects.equals(this.nextPageToken, listRecentConversationsResponse.nextPageToken) && Objects.equals(this.totalSize, listRecentConversationsResponse.totalSize); @@ -102,7 +102,7 @@ public int hashCode() { @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("class ListRecentConversationsResponseInternalImpl {\n"); + sb.append("class RecentConversationsListResponseInternalImpl {\n"); sb.append(" conversations: ").append(toIndentedString(conversations)).append("\n"); sb.append(" nextPageToken: ").append(toIndentedString(nextPageToken)).append("\n"); sb.append(" totalSize: ").append(toIndentedString(totalSize)).append("\n"); @@ -121,7 +121,7 @@ private String toIndentedString(Object o) { } @JsonPOJOBuilder(withPrefix = "set") - static class Builder implements ListRecentConversationsResponseInternal.Builder { + static class Builder implements RecentConversationsListResponseInternal.Builder { OptionalValue> conversations = OptionalValue.empty(); OptionalValue nextPageToken = OptionalValue.empty(); OptionalValue totalSize = OptionalValue.empty(); @@ -144,8 +144,8 @@ public Builder setTotalSize(Integer totalSize) { return this; } - public ListRecentConversationsResponseInternal build() { - return new ListRecentConversationsResponseInternalImpl( + public RecentConversationsListResponseInternal build() { + return new RecentConversationsListResponseInternalImpl( conversations, nextPageToken, totalSize); } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListQueryParameters.java new file mode 100644 index 000000000..b901781be --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListQueryParameters.java @@ -0,0 +1,143 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.conversations.request; + +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; + +/** ConversationsListQueryParameters */ +public interface ConversationsListQueryParameters { + + /** + * Get appId + * + * @return appId + */ + OptionalValue getAppId(); + + /** + * Get contactId + * + * @return contactId + */ + OptionalValue getContactId(); + + /** + * Get onlyActive + * + * @return onlyActive + */ + OptionalValue getOnlyActive(); + + /** + * Get pageSize + * + * @return pageSize + */ + OptionalValue getPageSize(); + + /** + * Get pageToken + * + * @return pageToken + */ + OptionalValue getPageToken(); + + /** + * Get activeChannel + * + * @return activeChannel + */ + OptionalValue getActiveChannel(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new ConversationsListQueryParametersImpl.Builder(); + } + + /** + * Getting builder from existing instance + * + * @return New Builder instance + */ + static Builder builder(ConversationsListQueryParameters parameters) { + return new ConversationsListQueryParametersImpl.Builder(parameters); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param appId see getter + * @return Current builder + * @see #getAppId + */ + Builder setAppId(String appId); + + /** + * see getter + * + * @param contactId see getter + * @return Current builder + * @see #getContactId + */ + Builder setContactId(String contactId); + + /** + * see getter + * + * @param onlyActive see getter + * @return Current builder + * @see #getOnlyActive + */ + Builder setOnlyActive(Boolean onlyActive); + + /** + * see getter + * + * @param pageSize see getter + * @return Current builder + * @see #getPageSize + */ + Builder setPageSize(Integer pageSize); + + /** + * see getter + * + * @param pageToken see getter + * @return Current builder + * @see #getPageToken + */ + Builder setPageToken(String pageToken); + + /** + * see getter + * + * @param activeChannel see getter + * @return Current builder + * @see #getActiveChannel + */ + Builder setActiveChannel(ConversationChannel activeChannel); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + ConversationsListQueryParameters build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListQueryParametersImpl.java new file mode 100644 index 000000000..da46330a0 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsListQueryParametersImpl.java @@ -0,0 +1,163 @@ +package com.sinch.sdk.domains.conversation.models.v1.conversations.request; + +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; +import java.util.Objects; + +public class ConversationsListQueryParametersImpl implements ConversationsListQueryParameters { + + private final OptionalValue appId; + private final OptionalValue contactId; + private final OptionalValue onlyActive; + private final OptionalValue pageSize; + private final OptionalValue pageToken; + private final OptionalValue activeChannel; + + private ConversationsListQueryParametersImpl( + OptionalValue appId, + OptionalValue contactId, + OptionalValue onlyActive, + OptionalValue pageSize, + OptionalValue pageToken, + OptionalValue activeChannel) { + this.appId = appId; + this.contactId = contactId; + this.onlyActive = onlyActive; + this.pageSize = pageSize; + this.pageToken = pageToken; + this.activeChannel = activeChannel; + } + + public OptionalValue getAppId() { + return appId; + } + + public OptionalValue getContactId() { + return contactId; + } + + public OptionalValue getOnlyActive() { + return onlyActive; + } + + public OptionalValue getPageSize() { + return pageSize; + } + + public OptionalValue getPageToken() { + return pageToken; + } + + public OptionalValue getActiveChannel() { + return activeChannel; + } + + /** Return true if this ConversationListConversationsQueryParameters object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ConversationsListQueryParametersImpl conversationListConversationsQueryParameters = + (ConversationsListQueryParametersImpl) o; + return Objects.equals(this.appId, conversationListConversationsQueryParameters.appId) + && Objects.equals(this.contactId, conversationListConversationsQueryParameters.contactId) + && Objects.equals(this.onlyActive, conversationListConversationsQueryParameters.onlyActive) + && Objects.equals(this.pageSize, conversationListConversationsQueryParameters.pageSize) + && Objects.equals(this.pageToken, conversationListConversationsQueryParameters.pageToken) + && Objects.equals( + this.activeChannel, conversationListConversationsQueryParameters.activeChannel); + } + + @Override + public int hashCode() { + return Objects.hash(appId, contactId, onlyActive, pageSize, pageToken, activeChannel); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ConversationsListQueryParametersImpl {\n"); + sb.append(" appId: ").append(toIndentedString(appId)).append("\n"); + sb.append(" contactId: ").append(toIndentedString(contactId)).append("\n"); + sb.append(" onlyActive: ").append(toIndentedString(onlyActive)).append("\n"); + sb.append(" pageSize: ").append(toIndentedString(pageSize)).append("\n"); + sb.append(" pageToken: ").append(toIndentedString(pageToken)).append("\n"); + sb.append(" activeChannel: ").append(toIndentedString(activeChannel)).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 ConversationsListQueryParameters.Builder { + OptionalValue appId = OptionalValue.empty(); + OptionalValue contactId = OptionalValue.empty(); + OptionalValue onlyActive = OptionalValue.empty(); + OptionalValue pageSize = OptionalValue.empty(); + OptionalValue pageToken = OptionalValue.empty(); + OptionalValue activeChannel = OptionalValue.empty(); + + protected Builder() {} + + protected Builder(ConversationsListQueryParameters _parameters) { + if (null == _parameters) { + return; + } + ConversationsListQueryParametersImpl parameters = + (ConversationsListQueryParametersImpl) _parameters; + this.appId = parameters.getAppId(); + this.contactId = parameters.getContactId(); + this.onlyActive = parameters.getOnlyActive(); + this.pageSize = parameters.getPageSize(); + this.pageToken = parameters.getPageToken(); + this.activeChannel = parameters.getActiveChannel(); + } + + public Builder setAppId(String appId) { + this.appId = OptionalValue.of(appId); + return this; + } + + public Builder setContactId(String contactId) { + this.contactId = OptionalValue.of(contactId); + return this; + } + + public Builder setOnlyActive(Boolean onlyActive) { + this.onlyActive = OptionalValue.of(onlyActive); + return this; + } + + public Builder setPageSize(Integer pageSize) { + this.pageSize = OptionalValue.of(pageSize); + return this; + } + + public Builder setPageToken(String pageToken) { + this.pageToken = OptionalValue.of(pageToken); + return this; + } + + public Builder setActiveChannel(ConversationChannel activeChannel) { + this.activeChannel = OptionalValue.of(activeChannel); + return this; + } + + public ConversationsListQueryParameters build() { + return new ConversationsListQueryParametersImpl( + appId, contactId, onlyActive, pageSize, pageToken, activeChannel); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsUpdateQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsUpdateQueryParameters.java new file mode 100644 index 000000000..d92e2a6ed --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsUpdateQueryParameters.java @@ -0,0 +1,63 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.conversations.request; + +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.conversation.models.v1.request.MetadataUpdateStrategy; + +/** ConversationsUpdateQueryParameters */ +public interface ConversationsUpdateQueryParameters { + + /** + * Get metadataUpdateStrategy + * + * @return metadataUpdateStrategy + */ + OptionalValue getMetadataUpdateStrategy(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new ConversationsUpdateQueryParametersImpl.Builder(); + } + + /** + * Getting builder from existing instance + * + * @return New Builder instance + */ + static Builder builder(ConversationsUpdateQueryParameters parameters) { + return new ConversationsUpdateQueryParametersImpl.Builder(parameters); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param metadataUpdateStrategy see getter + * @return Current builder + * @see #getMetadataUpdateStrategy + */ + Builder setMetadataUpdateStrategy(MetadataUpdateStrategy metadataUpdateStrategy); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + ConversationsUpdateQueryParameters build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsUpdateQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsUpdateQueryParametersImpl.java new file mode 100644 index 000000000..b71c63b1d --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/ConversationsUpdateQueryParametersImpl.java @@ -0,0 +1,85 @@ +package com.sinch.sdk.domains.conversation.models.v1.conversations.request; + +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.conversation.models.v1.request.MetadataUpdateStrategy; +import java.util.Objects; + +public class ConversationsUpdateQueryParametersImpl implements ConversationsUpdateQueryParameters { + + private final OptionalValue metadataUpdateStrategy; + + private ConversationsUpdateQueryParametersImpl( + OptionalValue metadataUpdateStrategy) { + this.metadataUpdateStrategy = metadataUpdateStrategy; + } + + public OptionalValue getMetadataUpdateStrategy() { + return metadataUpdateStrategy; + } + + /** Return true if this ConversationUpdateConversationQueryParameters object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ConversationsUpdateQueryParametersImpl conversationUpdateConversationQueryParameters = + (ConversationsUpdateQueryParametersImpl) o; + return Objects.equals( + this.metadataUpdateStrategy, + conversationUpdateConversationQueryParameters.metadataUpdateStrategy); + } + + @Override + public int hashCode() { + return Objects.hash(metadataUpdateStrategy); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ConversationsUpdateQueryParametersImpl {\n"); + sb.append(" metadataUpdateStrategy: ") + .append(toIndentedString(metadataUpdateStrategy)) + .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 ConversationsUpdateQueryParameters.Builder { + OptionalValue metadataUpdateStrategy = OptionalValue.empty(); + + protected Builder() {} + + protected Builder(ConversationsUpdateQueryParameters _parameters) { + if (null == _parameters) { + return; + } + ConversationsUpdateQueryParametersImpl parameters = + (ConversationsUpdateQueryParametersImpl) _parameters; + this.metadataUpdateStrategy = parameters.getMetadataUpdateStrategy(); + } + + public Builder setMetadataUpdateStrategy(MetadataUpdateStrategy metadataUpdateStrategy) { + this.metadataUpdateStrategy = OptionalValue.of(metadataUpdateStrategy); + return this; + } + + public ConversationsUpdateQueryParameters build() { + return new ConversationsUpdateQueryParametersImpl(metadataUpdateStrategy); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/CreateConversationRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/CreateConversationRequest.java similarity index 99% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/CreateConversationRequest.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/CreateConversationRequest.java index 8eca47632..fa1c7c06c 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/CreateConversationRequest.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/CreateConversationRequest.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.conversation.request; +package com.sinch.sdk.domains.conversation.models.v1.conversations.request; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/CreateConversationRequestImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/CreateConversationRequestImpl.java similarity index 99% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/CreateConversationRequestImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/CreateConversationRequestImpl.java index 88137d70d..5178b060b 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/CreateConversationRequestImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/CreateConversationRequestImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.conversation.request; +package com.sinch.sdk.domains.conversation.models.v1.conversations.request; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectEventRequest.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectEventRequest.java similarity index 99% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectEventRequest.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectEventRequest.java index 343bf83d4..79df2777a 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectEventRequest.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectEventRequest.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.conversation.request; +package com.sinch.sdk.domains.conversation.models.v1.conversations.request; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.sinch.sdk.domains.conversation.models.v1.ChannelIdentity; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectEventRequestImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectEventRequestImpl.java similarity index 99% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectEventRequestImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectEventRequestImpl.java index 7d33f224b..ceadb249b 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectEventRequestImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectEventRequestImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.conversation.request; +package com.sinch.sdk.domains.conversation.models.v1.conversations.request; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectMessageRequestBase.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectMessageRequestBase.java similarity index 99% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectMessageRequestBase.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectMessageRequestBase.java index 7caba7fd2..e212d2547 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectMessageRequestBase.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectMessageRequestBase.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.conversation.request; +package com.sinch.sdk.domains.conversation.models.v1.conversations.request; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.sinch.sdk.domains.conversation.models.v1.ChannelIdentity; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectMessageRequestBaseImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectMessageRequestBaseImpl.java similarity index 99% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectMessageRequestBaseImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectMessageRequestBaseImpl.java index fe03e41ed..ec6e4ef32 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/request/InjectMessageRequestBaseImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectMessageRequestBaseImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.conversation.request; +package com.sinch.sdk.domains.conversation.models.v1.conversations.request; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/RecentConversationsListQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/RecentConversationsListQueryParameters.java new file mode 100644 index 000000000..799523df9 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/RecentConversationsListQueryParameters.java @@ -0,0 +1,155 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.conversations.request; + +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.stream.Stream; + +/** RecentConversationsListQueryParameters */ +public interface RecentConversationsListQueryParameters { + + /** + * Get appId + * + * @return appId + */ + OptionalValue getAppId(); + + /** + * Get onlyActive + * + * @return onlyActive + */ + OptionalValue getOnlyActive(); + + /** + * Get pageSize + * + * @return pageSize + */ + OptionalValue getPageSize(); + + /** + * Get pageToken + * + * @return pageToken + */ + OptionalValue getPageToken(); + + /** Gets or Sets order */ + public class OrderEnum extends EnumDynamic { + public static final OrderEnum ASC = new OrderEnum("ASC"); + public static final OrderEnum DESC = new OrderEnum("DESC"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>(OrderEnum.class, OrderEnum::new, Arrays.asList(ASC, DESC)); + + private OrderEnum(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static OrderEnum from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(OrderEnum e) { + return ENUM_SUPPORT.valueOf(e); + } + } + + /** + * Get order + * + * @return order + */ + OptionalValue getOrder(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new RecentConversationsListQueryParametersImpl.Builder(); + } + + /** + * Getting builder from existing instance + * + * @return New Builder instance + */ + static Builder builder(RecentConversationsListQueryParameters parameters) { + return new RecentConversationsListQueryParametersImpl.Builder(parameters); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param appId see getter + * @return Current builder + * @see #getAppId + */ + Builder setAppId(String appId); + + /** + * see getter + * + * @param onlyActive see getter + * @return Current builder + * @see #getOnlyActive + */ + Builder setOnlyActive(Boolean onlyActive); + + /** + * see getter + * + * @param pageSize see getter + * @return Current builder + * @see #getPageSize + */ + Builder setPageSize(Integer pageSize); + + /** + * see getter + * + * @param pageToken see getter + * @return Current builder + * @see #getPageToken + */ + Builder setPageToken(String pageToken); + + /** + * see getter + * + * @param order see getter + * @return Current builder + * @see #getOrder + */ + Builder setOrder(OrderEnum order); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + RecentConversationsListQueryParameters build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/RecentConversationsListQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/RecentConversationsListQueryParametersImpl.java new file mode 100644 index 000000000..dcd9ab56b --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/request/RecentConversationsListQueryParametersImpl.java @@ -0,0 +1,151 @@ +package com.sinch.sdk.domains.conversation.models.v1.conversations.request; + +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +public class RecentConversationsListQueryParametersImpl + implements RecentConversationsListQueryParameters { + + private final OptionalValue appId; + private final OptionalValue onlyActive; + private final OptionalValue pageSize; + private final OptionalValue pageToken; + private final OptionalValue order; + + private RecentConversationsListQueryParametersImpl( + OptionalValue appId, + OptionalValue onlyActive, + OptionalValue pageSize, + OptionalValue pageToken, + OptionalValue order) { + this.appId = appId; + this.onlyActive = onlyActive; + this.pageSize = pageSize; + this.pageToken = pageToken; + this.order = order; + } + + public OptionalValue getAppId() { + return appId; + } + + public OptionalValue getOnlyActive() { + return onlyActive; + } + + public OptionalValue getPageSize() { + return pageSize; + } + + public OptionalValue getPageToken() { + return pageToken; + } + + public OptionalValue getOrder() { + return order; + } + + /** + * Return true if this ConversationListRecentConversationsQueryParameters object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RecentConversationsListQueryParametersImpl conversationListRecentConversationsQueryParameters = + (RecentConversationsListQueryParametersImpl) o; + return Objects.equals(this.appId, conversationListRecentConversationsQueryParameters.appId) + && Objects.equals( + this.onlyActive, conversationListRecentConversationsQueryParameters.onlyActive) + && Objects.equals( + this.pageSize, conversationListRecentConversationsQueryParameters.pageSize) + && Objects.equals( + this.pageToken, conversationListRecentConversationsQueryParameters.pageToken) + && Objects.equals(this.order, conversationListRecentConversationsQueryParameters.order); + } + + @Override + public int hashCode() { + return Objects.hash(appId, onlyActive, pageSize, pageToken, order); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RecentConversationsListQueryParametersImpl {\n"); + sb.append(" appId: ").append(toIndentedString(appId)).append("\n"); + sb.append(" onlyActive: ").append(toIndentedString(onlyActive)).append("\n"); + sb.append(" pageSize: ").append(toIndentedString(pageSize)).append("\n"); + sb.append(" pageToken: ").append(toIndentedString(pageToken)).append("\n"); + sb.append(" order: ").append(toIndentedString(order)).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 RecentConversationsListQueryParameters.Builder { + OptionalValue appId = OptionalValue.empty(); + OptionalValue onlyActive = OptionalValue.empty(); + OptionalValue pageSize = OptionalValue.empty(); + OptionalValue pageToken = OptionalValue.empty(); + OptionalValue order = OptionalValue.empty(); + + protected Builder() {} + + protected Builder(RecentConversationsListQueryParameters _parameters) { + if (null == _parameters) { + return; + } + RecentConversationsListQueryParametersImpl parameters = + (RecentConversationsListQueryParametersImpl) _parameters; + this.appId = parameters.getAppId(); + this.onlyActive = parameters.getOnlyActive(); + this.pageSize = parameters.getPageSize(); + this.pageToken = parameters.getPageToken(); + this.order = parameters.getOrder(); + } + + public Builder setAppId(String appId) { + this.appId = OptionalValue.of(appId); + return this; + } + + public Builder setOnlyActive(Boolean onlyActive) { + this.onlyActive = OptionalValue.of(onlyActive); + return this; + } + + public Builder setPageSize(Integer pageSize) { + this.pageSize = OptionalValue.of(pageSize); + return this; + } + + public Builder setPageToken(String pageToken) { + this.pageToken = OptionalValue.of(pageToken); + return this; + } + + public Builder setOrder(OrderEnum order) { + this.order = OptionalValue.of(order); + return this; + } + + public RecentConversationsListQueryParameters build() { + return new RecentConversationsListQueryParametersImpl( + appId, onlyActive, pageSize, pageToken, order); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/ConversationRecentMessage.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/ConversationRecentMessage.java similarity index 98% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/ConversationRecentMessage.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/ConversationRecentMessage.java index fe83b349f..cb9c7b922 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/ConversationRecentMessage.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/ConversationRecentMessage.java @@ -8,10 +8,10 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.conversation.response; +package com.sinch.sdk.domains.conversation.models.v1.conversations.response; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.sinch.sdk.domains.conversation.models.v1.conversation.Conversation; +import com.sinch.sdk.domains.conversation.models.v1.conversations.Conversation; import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessage; /** ConversationRecentMessage */ diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/ConversationRecentMessageImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/ConversationRecentMessageImpl.java similarity index 99% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/ConversationRecentMessageImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/ConversationRecentMessageImpl.java index e4ac4bc8b..fdc351ae7 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/ConversationRecentMessageImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/ConversationRecentMessageImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.conversation.response; +package com.sinch.sdk.domains.conversation.models.v1.conversations.response; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -7,7 +7,7 @@ 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.conversation.Conversation; +import com.sinch.sdk.domains.conversation.models.v1.conversations.Conversation; import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessage; import java.util.Objects; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/ConversationsListResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/ConversationsListResponse.java new file mode 100644 index 000000000..a697b756f --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/ConversationsListResponse.java @@ -0,0 +1,64 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.conversations.response; + +import com.sinch.sdk.core.http.HttpRequest; +import com.sinch.sdk.core.models.pagination.ListResponse; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.conversation.api.v1.adapters.ConversationsServiceImpl; +import com.sinch.sdk.domains.conversation.models.v1.conversations.Conversation; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.ConversationsListQueryParameters; +import java.util.Collection; +import java.util.Collections; +import java.util.NoSuchElementException; + +/** Auto paginated response for list of Conversation */ +public class ConversationsListResponse extends ListResponse { + + private final Page page; + private final ConversationsServiceImpl service; + + public ConversationsListResponse( + ConversationsServiceImpl service, + Page page) { + this.service = service; + this.page = page; + } + + @Override + public boolean hasNextPage() { + if (null == page.getNextPageToken() || null == getContent() || getContent().isEmpty()) { + return false; + } + return true; + } + + @Override + public ConversationsListResponse nextPage() { + + if (!hasNextPage()) { + throw new NoSuchElementException("Reached the last page of the API response"); + } + + return service._getConversationsListPageAsListResponse( + page.getParameters(), page.getNextPageToken()); + } + + @Override + public Collection getContent() { + return page == null ? Collections.emptyList() : page.getEntities(); + } + + @Override + public String toString() { + return "ConversationsListResponse {" + "page=" + page + '}'; + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/InjectEventResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/InjectEventResponse.java similarity index 99% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/InjectEventResponse.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/InjectEventResponse.java index 5dbf3fb0e..0acffeb62 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/InjectEventResponse.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/InjectEventResponse.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.conversation.response; +package com.sinch.sdk.domains.conversation.models.v1.conversations.response; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import java.time.Instant; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/InjectEventResponseImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/InjectEventResponseImpl.java similarity index 99% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/InjectEventResponseImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/InjectEventResponseImpl.java index b67d8e50a..c0c760d25 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversation/response/InjectEventResponseImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/InjectEventResponseImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.conversation.response; +package com.sinch.sdk.domains.conversation.models.v1.conversations.response; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/RecentConversationsListResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/RecentConversationsListResponse.java new file mode 100644 index 000000000..07edd33af --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/conversations/response/RecentConversationsListResponse.java @@ -0,0 +1,64 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.conversations.response; + +import com.sinch.sdk.core.http.HttpRequest; +import com.sinch.sdk.core.models.pagination.ListResponse; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.conversation.api.v1.adapters.ConversationsServiceImpl; +import com.sinch.sdk.domains.conversation.models.v1.conversations.request.RecentConversationsListQueryParameters; +import java.util.Collection; +import java.util.Collections; +import java.util.NoSuchElementException; + +/** Auto paginated response for list of ConversationRecentMessage */ +public class RecentConversationsListResponse extends ListResponse { + + private final Page + page; + private final ConversationsServiceImpl service; + + public RecentConversationsListResponse( + ConversationsServiceImpl service, + Page page) { + this.service = service; + this.page = page; + } + + @Override + public boolean hasNextPage() { + if (null == page.getNextPageToken() || null == getContent() || getContent().isEmpty()) { + return false; + } + return true; + } + + @Override + public RecentConversationsListResponse nextPage() { + + if (!hasNextPage()) { + throw new NoSuchElementException("Reached the last page of the API response"); + } + + return service._getRecentConversationsListPageAsListResponse( + page.getParameters(), page.getNextPageToken()); + } + + @Override + public Collection getContent() { + return page == null ? Collections.emptyList() : page.getEntities(); + } + + @Override + public String toString() { + return "RecentConversationsListResponse {" + "page=" + page + '}'; + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/credentials/ConversationChannelCredentials.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/credentials/ConversationChannelCredentials.java index 6d761b9d5..72fcaa573 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/credentials/ConversationChannelCredentials.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/credentials/ConversationChannelCredentials.java @@ -16,9 +16,9 @@ /** * Enables access to the underlying messaging channel. * - *

Use the {@link - * com.sinch.sdk.domains.conversation.models.v1.credentials.ConversationChannelCredentialsBuilderFactory} - * factory builder helper to create credentials related to channel + *

Use the{@link + * com.sinch.sdk.domains.conversation.models.v1.credentials.ConversationChannelCredentialsBuilderFactory}factory + * builder helper to create credentials related to channel * * @see * com.sinch.sdk.domains.conversation.models.v1.credentials.ConversationChannelCredentialsBuilderFactory diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/internal/ListEventsResponseInternal.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/internal/EventsListResponseInternal.java similarity index 86% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/internal/ListEventsResponseInternal.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/internal/EventsListResponseInternal.java index 4a0c714b9..4263fc6c9 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/internal/ListEventsResponseInternal.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/internal/EventsListResponseInternal.java @@ -14,9 +14,9 @@ import com.sinch.sdk.domains.conversation.models.v1.events.ConversationEvent; import java.util.List; -/** ListEventsResponseInternal */ -@JsonDeserialize(builder = ListEventsResponseInternalImpl.Builder.class) -public interface ListEventsResponseInternal { +/** EventsListResponseInternal */ +@JsonDeserialize(builder = EventsListResponseInternalImpl.Builder.class) +public interface EventsListResponseInternal { /** * List of ConversationsEvents. @@ -39,7 +39,7 @@ public interface ListEventsResponseInternal { * @return New Builder instance */ static Builder builder() { - return new ListEventsResponseInternalImpl.Builder(); + return new EventsListResponseInternalImpl.Builder(); } /** Dedicated Builder */ @@ -69,6 +69,6 @@ interface Builder { * * @return The instance build with current builder values */ - ListEventsResponseInternal build(); + EventsListResponseInternal build(); } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/internal/ListEventsResponseInternalImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/internal/EventsListResponseInternalImpl.java similarity index 84% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/internal/ListEventsResponseInternalImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/internal/EventsListResponseInternalImpl.java index 6d2084ce7..226076f80 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/internal/ListEventsResponseInternalImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/internal/EventsListResponseInternalImpl.java @@ -12,12 +12,12 @@ import java.util.Objects; @JsonPropertyOrder({ - ListEventsResponseInternalImpl.JSON_PROPERTY_EVENTS, - ListEventsResponseInternalImpl.JSON_PROPERTY_NEXT_PAGE_TOKEN + EventsListResponseInternalImpl.JSON_PROPERTY_EVENTS, + EventsListResponseInternalImpl.JSON_PROPERTY_NEXT_PAGE_TOKEN }) @JsonFilter("uninitializedFilter") @JsonInclude(value = JsonInclude.Include.CUSTOM) -public class ListEventsResponseInternalImpl implements ListEventsResponseInternal { +public class EventsListResponseInternalImpl implements EventsListResponseInternal { private static final long serialVersionUID = 1L; public static final String JSON_PROPERTY_EVENTS = "events"; @@ -28,9 +28,9 @@ public class ListEventsResponseInternalImpl implements ListEventsResponseInterna private OptionalValue nextPageToken; - public ListEventsResponseInternalImpl() {} + public EventsListResponseInternalImpl() {} - protected ListEventsResponseInternalImpl( + protected EventsListResponseInternalImpl( OptionalValue> events, OptionalValue nextPageToken) { this.events = events; this.nextPageToken = nextPageToken; @@ -66,7 +66,7 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) { return false; } - ListEventsResponseInternalImpl listEventsResponse = (ListEventsResponseInternalImpl) o; + EventsListResponseInternalImpl listEventsResponse = (EventsListResponseInternalImpl) o; return Objects.equals(this.events, listEventsResponse.events) && Objects.equals(this.nextPageToken, listEventsResponse.nextPageToken); } @@ -79,7 +79,7 @@ public int hashCode() { @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("class ListEventsResponseInternalImpl {\n"); + sb.append("class EventsListResponseInternalImpl {\n"); sb.append(" events: ").append(toIndentedString(events)).append("\n"); sb.append(" nextPageToken: ").append(toIndentedString(nextPageToken)).append("\n"); sb.append("}"); @@ -97,7 +97,7 @@ private String toIndentedString(Object o) { } @JsonPOJOBuilder(withPrefix = "set") - static class Builder implements ListEventsResponseInternal.Builder { + static class Builder implements EventsListResponseInternal.Builder { OptionalValue> events = OptionalValue.empty(); OptionalValue nextPageToken = OptionalValue.empty(); @@ -113,8 +113,8 @@ public Builder setNextPageToken(String nextPageToken) { return this; } - public ListEventsResponseInternal build() { - return new ListEventsResponseInternalImpl(events, nextPageToken); + public EventsListResponseInternal build() { + return new EventsListResponseInternalImpl(events, nextPageToken); } } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/request/EventsListQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/request/EventsListQueryParameters.java new file mode 100644 index 000000000..71b949202 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/request/EventsListQueryParameters.java @@ -0,0 +1,110 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.events.request; + +import com.sinch.sdk.core.models.OptionalValue; + +/** EventsListQueryParameters */ +public interface EventsListQueryParameters { + + /** + * Get conversationId + * + * @return conversationId + */ + OptionalValue getConversationId(); + + /** + * Get contactId + * + * @return contactId + */ + OptionalValue getContactId(); + + /** + * Get pageSize + * + * @return pageSize + */ + OptionalValue getPageSize(); + + /** + * Get pageToken + * + * @return pageToken + */ + OptionalValue getPageToken(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new EventsListQueryParametersImpl.Builder(); + } + + /** + * Getting builder from existing instance + * + * @return New Builder instance + */ + static Builder builder(EventsListQueryParameters parameters) { + return new EventsListQueryParametersImpl.Builder(parameters); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param conversationId see getter + * @return Current builder + * @see #getConversationId + */ + Builder setConversationId(String conversationId); + + /** + * see getter + * + * @param contactId see getter + * @return Current builder + * @see #getContactId + */ + Builder setContactId(String contactId); + + /** + * see getter + * + * @param pageSize see getter + * @return Current builder + * @see #getPageSize + */ + Builder setPageSize(Integer pageSize); + + /** + * see getter + * + * @param pageToken see getter + * @return Current builder + * @see #getPageToken + */ + Builder setPageToken(String pageToken); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + EventsListQueryParameters build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/request/EventsListQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/request/EventsListQueryParametersImpl.java new file mode 100644 index 000000000..8489f771b --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/request/EventsListQueryParametersImpl.java @@ -0,0 +1,127 @@ +package com.sinch.sdk.domains.conversation.models.v1.events.request; + +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +public class EventsListQueryParametersImpl implements EventsListQueryParameters { + + private final OptionalValue conversationId; + private final OptionalValue contactId; + private final OptionalValue pageSize; + private final OptionalValue pageToken; + + private EventsListQueryParametersImpl( + OptionalValue conversationId, + OptionalValue contactId, + OptionalValue pageSize, + OptionalValue pageToken) { + this.conversationId = conversationId; + this.contactId = contactId; + this.pageSize = pageSize; + this.pageToken = pageToken; + } + + public OptionalValue getConversationId() { + return conversationId; + } + + public OptionalValue getContactId() { + return contactId; + } + + public OptionalValue getPageSize() { + return pageSize; + } + + public OptionalValue getPageToken() { + return pageToken; + } + + /** Return true if this EventsListEventsQueryParameters object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + EventsListQueryParametersImpl eventsListEventsQueryParameters = + (EventsListQueryParametersImpl) o; + return Objects.equals(this.conversationId, eventsListEventsQueryParameters.conversationId) + && Objects.equals(this.contactId, eventsListEventsQueryParameters.contactId) + && Objects.equals(this.pageSize, eventsListEventsQueryParameters.pageSize) + && Objects.equals(this.pageToken, eventsListEventsQueryParameters.pageToken); + } + + @Override + public int hashCode() { + return Objects.hash(conversationId, contactId, pageSize, pageToken); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class EventsListQueryParametersImpl {\n"); + sb.append(" conversationId: ").append(toIndentedString(conversationId)).append("\n"); + sb.append(" contactId: ").append(toIndentedString(contactId)).append("\n"); + sb.append(" pageSize: ").append(toIndentedString(pageSize)).append("\n"); + sb.append(" pageToken: ").append(toIndentedString(pageToken)).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 EventsListQueryParameters.Builder { + OptionalValue conversationId = OptionalValue.empty(); + OptionalValue contactId = OptionalValue.empty(); + OptionalValue pageSize = OptionalValue.empty(); + OptionalValue pageToken = OptionalValue.empty(); + + protected Builder() {} + + protected Builder(EventsListQueryParameters _parameters) { + if (null == _parameters) { + return; + } + EventsListQueryParametersImpl parameters = (EventsListQueryParametersImpl) _parameters; + this.conversationId = parameters.getConversationId(); + this.contactId = parameters.getContactId(); + this.pageSize = parameters.getPageSize(); + this.pageToken = parameters.getPageToken(); + } + + public Builder setConversationId(String conversationId) { + this.conversationId = OptionalValue.of(conversationId); + return this; + } + + public Builder setContactId(String contactId) { + this.contactId = OptionalValue.of(contactId); + return this; + } + + public Builder setPageSize(Integer pageSize) { + this.pageSize = OptionalValue.of(pageSize); + return this; + } + + public Builder setPageToken(String pageToken) { + this.pageToken = OptionalValue.of(pageToken); + return this; + } + + public EventsListQueryParameters build() { + return new EventsListQueryParametersImpl(conversationId, contactId, pageSize, pageToken); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/response/EventsListResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/response/EventsListResponse.java new file mode 100644 index 000000000..e93f6c00e --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/events/response/EventsListResponse.java @@ -0,0 +1,63 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.events.response; + +import com.sinch.sdk.core.http.HttpRequest; +import com.sinch.sdk.core.models.pagination.ListResponse; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.conversation.api.v1.adapters.EventsServiceImpl; +import com.sinch.sdk.domains.conversation.models.v1.events.ConversationEvent; +import com.sinch.sdk.domains.conversation.models.v1.events.request.EventsListQueryParameters; +import java.util.Collection; +import java.util.Collections; +import java.util.NoSuchElementException; + +/** Auto paginated response for list of ConversationEvent */ +public class EventsListResponse extends ListResponse { + + private final Page page; + private final EventsServiceImpl service; + + public EventsListResponse( + EventsServiceImpl service, + Page page) { + this.service = service; + this.page = page; + } + + @Override + public boolean hasNextPage() { + if (null == page.getNextPageToken() || null == getContent() || getContent().isEmpty()) { + return false; + } + return true; + } + + @Override + public EventsListResponse nextPage() { + + if (!hasNextPage()) { + throw new NoSuchElementException("Reached the last page of the API response"); + } + + return service._getEventsListPageAsListResponse(page.getParameters(), page.getNextPageToken()); + } + + @Override + public Collection getContent() { + return page == null ? Collections.emptyList() : page.getEntities(); + } + + @Override + public String toString() { + return "EventsListResponse {" + "page=" + page + '}'; + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ListMessagesResponseInternal.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/MessagesListResponseInternal.java similarity index 86% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ListMessagesResponseInternal.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/MessagesListResponseInternal.java index 778c6dd01..b26261634 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ListMessagesResponseInternal.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/MessagesListResponseInternal.java @@ -14,9 +14,9 @@ import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessage; import java.util.Collection; -/** ListMessagesResponseInternal */ -@JsonDeserialize(builder = ListMessagesResponseInternalImpl.Builder.class) -public interface ListMessagesResponseInternal { +/** MessagesListResponseInternal */ +@JsonDeserialize(builder = MessagesListResponseInternalImpl.Builder.class) +public interface MessagesListResponseInternal { /** * List of messages associated to the referenced conversation. @@ -39,7 +39,7 @@ public interface ListMessagesResponseInternal { * @return New Builder instance */ static Builder builder() { - return new ListMessagesResponseInternalImpl.Builder(); + return new MessagesListResponseInternalImpl.Builder(); } /** Dedicated Builder */ @@ -69,6 +69,6 @@ interface Builder { * * @return The instance build with current builder values */ - ListMessagesResponseInternal build(); + MessagesListResponseInternal build(); } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ListMessagesResponseInternalImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/MessagesListResponseInternalImpl.java similarity index 84% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ListMessagesResponseInternalImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/MessagesListResponseInternalImpl.java index 39a5d0f4c..64ae7cd92 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ListMessagesResponseInternalImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/MessagesListResponseInternalImpl.java @@ -12,12 +12,12 @@ import java.util.Objects; @JsonPropertyOrder({ - ListMessagesResponseInternalImpl.JSON_PROPERTY_MESSAGES, - ListMessagesResponseInternalImpl.JSON_PROPERTY_NEXT_PAGE_TOKEN + MessagesListResponseInternalImpl.JSON_PROPERTY_MESSAGES, + MessagesListResponseInternalImpl.JSON_PROPERTY_NEXT_PAGE_TOKEN }) @JsonFilter("uninitializedFilter") @JsonInclude(value = JsonInclude.Include.CUSTOM) -public class ListMessagesResponseInternalImpl implements ListMessagesResponseInternal { +public class MessagesListResponseInternalImpl implements MessagesListResponseInternal { private static final long serialVersionUID = 1L; public static final String JSON_PROPERTY_MESSAGES = "messages"; @@ -28,9 +28,9 @@ public class ListMessagesResponseInternalImpl implements ListMessagesResponseInt private OptionalValue nextPageToken; - public ListMessagesResponseInternalImpl() {} + public MessagesListResponseInternalImpl() {} - protected ListMessagesResponseInternalImpl( + protected MessagesListResponseInternalImpl( OptionalValue> messages, OptionalValue nextPageToken) { this.messages = messages; @@ -67,7 +67,7 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) { return false; } - ListMessagesResponseInternalImpl listMessagesResponse = (ListMessagesResponseInternalImpl) o; + MessagesListResponseInternalImpl listMessagesResponse = (MessagesListResponseInternalImpl) o; return Objects.equals(this.messages, listMessagesResponse.messages) && Objects.equals(this.nextPageToken, listMessagesResponse.nextPageToken); } @@ -80,7 +80,7 @@ public int hashCode() { @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("class ListMessagesResponseInternalImpl {\n"); + sb.append("class MessagesListResponseInternalImpl {\n"); sb.append(" messages: ").append(toIndentedString(messages)).append("\n"); sb.append(" nextPageToken: ").append(toIndentedString(nextPageToken)).append("\n"); sb.append("}"); @@ -98,7 +98,7 @@ private String toIndentedString(Object o) { } @JsonPOJOBuilder(withPrefix = "set") - static class Builder implements ListMessagesResponseInternal.Builder { + static class Builder implements MessagesListResponseInternal.Builder { OptionalValue> messages = OptionalValue.empty(); OptionalValue nextPageToken = OptionalValue.empty(); @@ -114,8 +114,8 @@ public Builder setNextPageToken(String nextPageToken) { return this; } - public ListMessagesResponseInternal build() { - return new ListMessagesResponseInternalImpl(messages, nextPageToken); + public MessagesListResponseInternal build() { + return new MessagesListResponseInternalImpl(messages, nextPageToken); } } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesDeleteQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesDeleteQueryParameters.java new file mode 100644 index 000000000..499f32e34 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesDeleteQueryParameters.java @@ -0,0 +1,62 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.messages.request; + +import com.sinch.sdk.core.models.OptionalValue; + +/** MessagesDeleteQueryParameters */ +public interface MessagesDeleteQueryParameters { + + /** + * Get messagesSource + * + * @return messagesSource + */ + OptionalValue getMessagesSource(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new MessagesDeleteQueryParametersImpl.Builder(); + } + + /** + * Getting builder from existing instance + * + * @return New Builder instance + */ + static Builder builder(MessagesDeleteQueryParameters parameters) { + return new MessagesDeleteQueryParametersImpl.Builder(parameters); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param messagesSource see getter + * @return Current builder + * @see #getMessagesSource + */ + Builder setMessagesSource(MessagesSource messagesSource); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + MessagesDeleteQueryParameters build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesDeleteQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesDeleteQueryParametersImpl.java new file mode 100644 index 000000000..2890ff591 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesDeleteQueryParametersImpl.java @@ -0,0 +1,79 @@ +package com.sinch.sdk.domains.conversation.models.v1.messages.request; + +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +public class MessagesDeleteQueryParametersImpl implements MessagesDeleteQueryParameters { + + private final OptionalValue messagesSource; + + private MessagesDeleteQueryParametersImpl(OptionalValue messagesSource) { + this.messagesSource = messagesSource; + } + + public OptionalValue getMessagesSource() { + return messagesSource; + } + + /** Return true if this MessagesDeleteMessageQueryParameters object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MessagesDeleteQueryParametersImpl messagesDeleteMessageQueryParameters = + (MessagesDeleteQueryParametersImpl) o; + return Objects.equals(this.messagesSource, messagesDeleteMessageQueryParameters.messagesSource); + } + + @Override + public int hashCode() { + return Objects.hash(messagesSource); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class MessagesDeleteQueryParametersImpl {\n"); + sb.append(" messagesSource: ").append(toIndentedString(messagesSource)).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 MessagesDeleteQueryParameters.Builder { + OptionalValue messagesSource = OptionalValue.empty(); + + protected Builder() {} + + protected Builder(MessagesDeleteQueryParameters _parameters) { + if (null == _parameters) { + return; + } + MessagesDeleteQueryParametersImpl parameters = + (MessagesDeleteQueryParametersImpl) _parameters; + this.messagesSource = parameters.getMessagesSource(); + } + + public Builder setMessagesSource(MessagesSource messagesSource) { + this.messagesSource = OptionalValue.of(messagesSource); + return this; + } + + public MessagesDeleteQueryParameters build() { + return new MessagesDeleteQueryParametersImpl(messagesSource); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesGetQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesGetQueryParameters.java new file mode 100644 index 000000000..afd7edd25 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesGetQueryParameters.java @@ -0,0 +1,62 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.messages.request; + +import com.sinch.sdk.core.models.OptionalValue; + +/** MessagesGetQueryParameters */ +public interface MessagesGetQueryParameters { + + /** + * Get messagesSource + * + * @return messagesSource + */ + OptionalValue getMessagesSource(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new MessagesGetQueryParametersImpl.Builder(); + } + + /** + * Getting builder from existing instance + * + * @return New Builder instance + */ + static Builder builder(MessagesGetQueryParameters parameters) { + return new MessagesGetQueryParametersImpl.Builder(parameters); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param messagesSource see getter + * @return Current builder + * @see #getMessagesSource + */ + Builder setMessagesSource(MessagesSource messagesSource); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + MessagesGetQueryParameters build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesGetQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesGetQueryParametersImpl.java new file mode 100644 index 000000000..648a05ed5 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesGetQueryParametersImpl.java @@ -0,0 +1,78 @@ +package com.sinch.sdk.domains.conversation.models.v1.messages.request; + +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +public class MessagesGetQueryParametersImpl implements MessagesGetQueryParameters { + + private final OptionalValue messagesSource; + + private MessagesGetQueryParametersImpl(OptionalValue messagesSource) { + this.messagesSource = messagesSource; + } + + public OptionalValue getMessagesSource() { + return messagesSource; + } + + /** Return true if this MessagesGetMessageQueryParameters object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MessagesGetQueryParametersImpl messagesGetMessageQueryParameters = + (MessagesGetQueryParametersImpl) o; + return Objects.equals(this.messagesSource, messagesGetMessageQueryParameters.messagesSource); + } + + @Override + public int hashCode() { + return Objects.hash(messagesSource); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class MessagesGetQueryParametersImpl {\n"); + sb.append(" messagesSource: ").append(toIndentedString(messagesSource)).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 MessagesGetQueryParameters.Builder { + OptionalValue messagesSource = OptionalValue.empty(); + + protected Builder() {} + + protected Builder(MessagesGetQueryParameters _parameters) { + if (null == _parameters) { + return; + } + MessagesGetQueryParametersImpl parameters = (MessagesGetQueryParametersImpl) _parameters; + this.messagesSource = parameters.getMessagesSource(); + } + + public Builder setMessagesSource(MessagesSource messagesSource) { + this.messagesSource = OptionalValue.of(messagesSource); + return this; + } + + public MessagesGetQueryParameters build() { + return new MessagesGetQueryParametersImpl(messagesSource); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListQueryParameters.java new file mode 100644 index 000000000..a4f2f79e8 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListQueryParameters.java @@ -0,0 +1,240 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.messages.request; + +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; +import java.time.Instant; + +/** MessagesListQueryParameters */ +public interface MessagesListQueryParameters { + + /** + * Get conversationId + * + * @return conversationId + */ + OptionalValue getConversationId(); + + /** + * Get contactId + * + * @return contactId + */ + OptionalValue getContactId(); + + /** + * Get appId + * + * @return appId + */ + OptionalValue getAppId(); + + /** + * Get channelIdentity + * + * @return channelIdentity + */ + OptionalValue getChannelIdentity(); + + /** + * Get startTime + * + * @return startTime + */ + OptionalValue getStartTime(); + + /** + * Get endTime + * + * @return endTime + */ + OptionalValue getEndTime(); + + /** + * Get pageSize + * + * @return pageSize + */ + OptionalValue getPageSize(); + + /** + * Get pageToken + * + * @return pageToken + */ + OptionalValue getPageToken(); + + /** + * Get view + * + * @return view + */ + OptionalValue getView(); + + /** + * Get messagesSource + * + * @return messagesSource + */ + OptionalValue getMessagesSource(); + + /** + * Get onlyRecipientOriginated + * + * @return onlyRecipientOriginated + */ + OptionalValue getOnlyRecipientOriginated(); + + /** + * Get channel + * + * @return channel + */ + OptionalValue getChannel(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new MessagesListQueryParametersImpl.Builder(); + } + + /** + * Getting builder from existing instance + * + * @return New Builder instance + */ + static Builder builder(MessagesListQueryParameters parameters) { + return new MessagesListQueryParametersImpl.Builder(parameters); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param conversationId see getter + * @return Current builder + * @see #getConversationId + */ + Builder setConversationId(String conversationId); + + /** + * see getter + * + * @param contactId see getter + * @return Current builder + * @see #getContactId + */ + Builder setContactId(String contactId); + + /** + * see getter + * + * @param appId see getter + * @return Current builder + * @see #getAppId + */ + Builder setAppId(String appId); + + /** + * see getter + * + * @param channelIdentity see getter + * @return Current builder + * @see #getChannelIdentity + */ + Builder setChannelIdentity(String channelIdentity); + + /** + * see getter + * + * @param startTime see getter + * @return Current builder + * @see #getStartTime + */ + Builder setStartTime(Instant startTime); + + /** + * see getter + * + * @param endTime see getter + * @return Current builder + * @see #getEndTime + */ + Builder setEndTime(Instant endTime); + + /** + * see getter + * + * @param pageSize see getter + * @return Current builder + * @see #getPageSize + */ + Builder setPageSize(Integer pageSize); + + /** + * see getter + * + * @param pageToken see getter + * @return Current builder + * @see #getPageToken + */ + Builder setPageToken(String pageToken); + + /** + * see getter + * + * @param view see getter + * @return Current builder + * @see #getView + */ + Builder setView(ConversationMessagesView view); + + /** + * see getter + * + * @param messagesSource see getter + * @return Current builder + * @see #getMessagesSource + */ + Builder setMessagesSource(MessagesSource messagesSource); + + /** + * see getter + * + * @param onlyRecipientOriginated see getter + * @return Current builder + * @see #getOnlyRecipientOriginated + */ + Builder setOnlyRecipientOriginated(Boolean onlyRecipientOriginated); + + /** + * see getter + * + * @param channel see getter + * @return Current builder + * @see #getChannel + */ + Builder setChannel(ConversationChannel channel); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + MessagesListQueryParameters build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListQueryParametersImpl.java new file mode 100644 index 000000000..0e21dec72 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListQueryParametersImpl.java @@ -0,0 +1,285 @@ +package com.sinch.sdk.domains.conversation.models.v1.messages.request; + +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; +import java.time.Instant; +import java.util.Objects; + +public class MessagesListQueryParametersImpl implements MessagesListQueryParameters { + + private final OptionalValue conversationId; + private final OptionalValue contactId; + private final OptionalValue appId; + private final OptionalValue channelIdentity; + private final OptionalValue startTime; + private final OptionalValue endTime; + private final OptionalValue pageSize; + private final OptionalValue pageToken; + private final OptionalValue view; + private final OptionalValue messagesSource; + private final OptionalValue onlyRecipientOriginated; + private final OptionalValue channel; + + private MessagesListQueryParametersImpl( + OptionalValue conversationId, + OptionalValue contactId, + OptionalValue appId, + OptionalValue channelIdentity, + OptionalValue startTime, + OptionalValue endTime, + OptionalValue pageSize, + OptionalValue pageToken, + OptionalValue view, + OptionalValue messagesSource, + OptionalValue onlyRecipientOriginated, + OptionalValue channel) { + this.conversationId = conversationId; + this.contactId = contactId; + this.appId = appId; + this.channelIdentity = channelIdentity; + this.startTime = startTime; + this.endTime = endTime; + this.pageSize = pageSize; + this.pageToken = pageToken; + this.view = view; + this.messagesSource = messagesSource; + this.onlyRecipientOriginated = onlyRecipientOriginated; + this.channel = channel; + } + + public OptionalValue getConversationId() { + return conversationId; + } + + public OptionalValue getContactId() { + return contactId; + } + + public OptionalValue getAppId() { + return appId; + } + + public OptionalValue getChannelIdentity() { + return channelIdentity; + } + + public OptionalValue getStartTime() { + return startTime; + } + + public OptionalValue getEndTime() { + return endTime; + } + + public OptionalValue getPageSize() { + return pageSize; + } + + public OptionalValue getPageToken() { + return pageToken; + } + + public OptionalValue getView() { + return view; + } + + public OptionalValue getMessagesSource() { + return messagesSource; + } + + public OptionalValue getOnlyRecipientOriginated() { + return onlyRecipientOriginated; + } + + public OptionalValue getChannel() { + return channel; + } + + /** Return true if this MessagesListMessagesQueryParameters object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MessagesListQueryParametersImpl messagesListMessagesQueryParameters = + (MessagesListQueryParametersImpl) o; + return Objects.equals(this.conversationId, messagesListMessagesQueryParameters.conversationId) + && Objects.equals(this.contactId, messagesListMessagesQueryParameters.contactId) + && Objects.equals(this.appId, messagesListMessagesQueryParameters.appId) + && Objects.equals(this.channelIdentity, messagesListMessagesQueryParameters.channelIdentity) + && Objects.equals(this.startTime, messagesListMessagesQueryParameters.startTime) + && Objects.equals(this.endTime, messagesListMessagesQueryParameters.endTime) + && Objects.equals(this.pageSize, messagesListMessagesQueryParameters.pageSize) + && Objects.equals(this.pageToken, messagesListMessagesQueryParameters.pageToken) + && Objects.equals(this.view, messagesListMessagesQueryParameters.view) + && Objects.equals(this.messagesSource, messagesListMessagesQueryParameters.messagesSource) + && Objects.equals( + this.onlyRecipientOriginated, + messagesListMessagesQueryParameters.onlyRecipientOriginated) + && Objects.equals(this.channel, messagesListMessagesQueryParameters.channel); + } + + @Override + public int hashCode() { + return Objects.hash( + conversationId, + contactId, + appId, + channelIdentity, + startTime, + endTime, + pageSize, + pageToken, + view, + messagesSource, + onlyRecipientOriginated, + channel); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class MessagesListQueryParametersImpl {\n"); + sb.append(" conversationId: ").append(toIndentedString(conversationId)).append("\n"); + sb.append(" contactId: ").append(toIndentedString(contactId)).append("\n"); + sb.append(" appId: ").append(toIndentedString(appId)).append("\n"); + sb.append(" channelIdentity: ").append(toIndentedString(channelIdentity)).append("\n"); + sb.append(" startTime: ").append(toIndentedString(startTime)).append("\n"); + sb.append(" endTime: ").append(toIndentedString(endTime)).append("\n"); + sb.append(" pageSize: ").append(toIndentedString(pageSize)).append("\n"); + sb.append(" pageToken: ").append(toIndentedString(pageToken)).append("\n"); + sb.append(" view: ").append(toIndentedString(view)).append("\n"); + sb.append(" messagesSource: ").append(toIndentedString(messagesSource)).append("\n"); + sb.append(" onlyRecipientOriginated: ") + .append(toIndentedString(onlyRecipientOriginated)) + .append("\n"); + sb.append(" channel: ").append(toIndentedString(channel)).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 MessagesListQueryParameters.Builder { + OptionalValue conversationId = OptionalValue.empty(); + OptionalValue contactId = OptionalValue.empty(); + OptionalValue appId = OptionalValue.empty(); + OptionalValue channelIdentity = OptionalValue.empty(); + OptionalValue startTime = OptionalValue.empty(); + OptionalValue endTime = OptionalValue.empty(); + OptionalValue pageSize = OptionalValue.empty(); + OptionalValue pageToken = OptionalValue.empty(); + OptionalValue view = OptionalValue.empty(); + OptionalValue messagesSource = OptionalValue.empty(); + OptionalValue onlyRecipientOriginated = OptionalValue.empty(); + OptionalValue channel = OptionalValue.empty(); + + protected Builder() {} + + protected Builder(MessagesListQueryParameters _parameters) { + if (null == _parameters) { + return; + } + MessagesListQueryParametersImpl parameters = (MessagesListQueryParametersImpl) _parameters; + this.conversationId = parameters.getConversationId(); + this.contactId = parameters.getContactId(); + this.appId = parameters.getAppId(); + this.channelIdentity = parameters.getChannelIdentity(); + this.startTime = parameters.getStartTime(); + this.endTime = parameters.getEndTime(); + this.pageSize = parameters.getPageSize(); + this.pageToken = parameters.getPageToken(); + this.view = parameters.getView(); + this.messagesSource = parameters.getMessagesSource(); + this.onlyRecipientOriginated = parameters.getOnlyRecipientOriginated(); + this.channel = parameters.getChannel(); + } + + public Builder setConversationId(String conversationId) { + this.conversationId = OptionalValue.of(conversationId); + return this; + } + + public Builder setContactId(String contactId) { + this.contactId = OptionalValue.of(contactId); + return this; + } + + public Builder setAppId(String appId) { + this.appId = OptionalValue.of(appId); + return this; + } + + public Builder setChannelIdentity(String channelIdentity) { + this.channelIdentity = OptionalValue.of(channelIdentity); + return this; + } + + public Builder setStartTime(Instant startTime) { + this.startTime = OptionalValue.of(startTime); + return this; + } + + public Builder setEndTime(Instant endTime) { + this.endTime = OptionalValue.of(endTime); + return this; + } + + public Builder setPageSize(Integer pageSize) { + this.pageSize = OptionalValue.of(pageSize); + return this; + } + + public Builder setPageToken(String pageToken) { + this.pageToken = OptionalValue.of(pageToken); + return this; + } + + public Builder setView(ConversationMessagesView view) { + this.view = OptionalValue.of(view); + return this; + } + + public Builder setMessagesSource(MessagesSource messagesSource) { + this.messagesSource = OptionalValue.of(messagesSource); + return this; + } + + public Builder setOnlyRecipientOriginated(Boolean onlyRecipientOriginated) { + this.onlyRecipientOriginated = OptionalValue.of(onlyRecipientOriginated); + return this; + } + + public Builder setChannel(ConversationChannel channel) { + this.channel = OptionalValue.of(channel); + return this; + } + + public MessagesListQueryParameters build() { + return new MessagesListQueryParametersImpl( + conversationId, + contactId, + appId, + channelIdentity, + startTime, + endTime, + pageSize, + pageToken, + view, + messagesSource, + onlyRecipientOriginated, + channel); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesSource.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesSource.java new file mode 100644 index 000000000..1715e63f4 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesSource.java @@ -0,0 +1,45 @@ +package com.sinch.sdk.domains.conversation.models.v1.messages.request; + +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import java.util.Arrays; +import java.util.stream.Stream; + +/** Gets or Sets messages_source */ +public class MessagesSource extends EnumDynamic { + + /** + * The default messages source. Retrieves messages sent in the CONVERSATION + * processing mode, which associates the messages with a specific conversation and contact. + */ + public static final MessagesSource CONVERSATION_SOURCE = + new MessagesSource("CONVERSATION_SOURCE"); + + /** + * Retrieves messages sent in the DISPATCH processing mode. These types of messages + * are not associated with any conversation or contact. + */ + public static final MessagesSource DISPATCH_SOURCE = new MessagesSource("DISPATCH_SOURCE"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>( + MessagesSource.class, + MessagesSource::new, + Arrays.asList(CONVERSATION_SOURCE, DISPATCH_SOURCE)); + + private MessagesSource(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static MessagesSource from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(MessagesSource e) { + return ENUM_SUPPORT.valueOf(e); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesUpdateQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesUpdateQueryParameters.java new file mode 100644 index 000000000..6304d4a43 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesUpdateQueryParameters.java @@ -0,0 +1,62 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.messages.request; + +import com.sinch.sdk.core.models.OptionalValue; + +/** MessagesUpdateQueryParameters */ +public interface MessagesUpdateQueryParameters { + + /** + * Get messagesSource + * + * @return messagesSource + */ + OptionalValue getMessagesSource(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new MessagesUpdateQueryParametersImpl.Builder(); + } + + /** + * Getting builder from existing instance + * + * @return New Builder instance + */ + static Builder builder(MessagesUpdateQueryParameters parameters) { + return new MessagesUpdateQueryParametersImpl.Builder(parameters); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param messagesSource see getter + * @return Current builder + * @see #getMessagesSource + */ + Builder setMessagesSource(MessagesSource messagesSource); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + MessagesUpdateQueryParameters build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesUpdateQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesUpdateQueryParametersImpl.java new file mode 100644 index 000000000..f176b87f8 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesUpdateQueryParametersImpl.java @@ -0,0 +1,80 @@ +package com.sinch.sdk.domains.conversation.models.v1.messages.request; + +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +public class MessagesUpdateQueryParametersImpl implements MessagesUpdateQueryParameters { + + private final OptionalValue messagesSource; + + private MessagesUpdateQueryParametersImpl(OptionalValue messagesSource) { + this.messagesSource = messagesSource; + } + + public OptionalValue getMessagesSource() { + return messagesSource; + } + + /** Return true if this MessagesUpdateMessageMetadataQueryParameters object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MessagesUpdateQueryParametersImpl messagesUpdateMessageMetadataQueryParameters = + (MessagesUpdateQueryParametersImpl) o; + return Objects.equals( + this.messagesSource, messagesUpdateMessageMetadataQueryParameters.messagesSource); + } + + @Override + public int hashCode() { + return Objects.hash(messagesSource); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class MessagesUpdateQueryParametersImpl {\n"); + sb.append(" messagesSource: ").append(toIndentedString(messagesSource)).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 MessagesUpdateQueryParameters.Builder { + OptionalValue messagesSource = OptionalValue.empty(); + + protected Builder() {} + + protected Builder(MessagesUpdateQueryParameters _parameters) { + if (null == _parameters) { + return; + } + MessagesUpdateQueryParametersImpl parameters = + (MessagesUpdateQueryParametersImpl) _parameters; + this.messagesSource = parameters.getMessagesSource(); + } + + public Builder setMessagesSource(MessagesSource messagesSource) { + this.messagesSource = OptionalValue.of(messagesSource); + return this; + } + + public MessagesUpdateQueryParameters build() { + return new MessagesUpdateQueryParametersImpl(messagesSource); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/response/MessagesListResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/response/MessagesListResponse.java new file mode 100644 index 000000000..c82485be1 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/response/MessagesListResponse.java @@ -0,0 +1,64 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.messages.response; + +import com.sinch.sdk.core.http.HttpRequest; +import com.sinch.sdk.core.models.pagination.ListResponse; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.conversation.api.v1.adapters.MessagesServiceImpl; +import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesListQueryParameters; +import java.util.Collection; +import java.util.Collections; +import java.util.NoSuchElementException; + +/** Auto paginated response for list of ConversationMessage */ +public class MessagesListResponse extends ListResponse { + + private final Page page; + private final MessagesServiceImpl service; + + public MessagesListResponse( + MessagesServiceImpl service, + Page page) { + this.service = service; + this.page = page; + } + + @Override + public boolean hasNextPage() { + if (null == page.getNextPageToken() || null == getContent() || getContent().isEmpty()) { + return false; + } + return true; + } + + @Override + public MessagesListResponse nextPage() { + + if (!hasNextPage()) { + throw new NoSuchElementException("Reached the last page of the API response"); + } + + return service._getMessagesListPageAsListResponse( + page.getParameters(), page.getNextPageToken()); + } + + @Override + public Collection getContent() { + return page == null ? Collections.emptyList() : page.getEntities(); + } + + @Override + public String toString() { + return "MessagesListResponse {" + "page=" + page + '}'; + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/contactinfo/ContactInfoMessageImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/contactinfo/ContactInfoMessageImpl.java index d1f62b45f..45d0918b4 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/contactinfo/ContactInfoMessageImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/contactinfo/ContactInfoMessageImpl.java @@ -13,6 +13,8 @@ import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.internal.ContactInfoMessageInternal; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.internal.ContactInfoMessageInternalImpl; import java.io.IOException; import java.time.LocalDate; import java.util.List; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/contactinfo/ContactInfoMessageInternal.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/internal/ContactInfoMessageInternal.java similarity index 84% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/contactinfo/ContactInfoMessageInternal.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/internal/ContactInfoMessageInternal.java index 68a07b2c9..f3484c7d9 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/contactinfo/ContactInfoMessageInternal.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/internal/ContactInfoMessageInternal.java @@ -8,9 +8,15 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo; +package com.sinch.sdk.domains.conversation.models.v1.messages.types.internal; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo.AddressInfo; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo.EmailInfo; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo.NameInfo; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo.OrganizationInfo; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo.PhoneNumberInfo; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo.UrlInfo; import java.time.LocalDate; import java.util.List; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/contactinfo/ContactInfoMessageInternalImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/internal/ContactInfoMessageInternalImpl.java similarity index 93% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/contactinfo/ContactInfoMessageInternalImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/internal/ContactInfoMessageInternalImpl.java index 90dedbb3e..4d7b07e74 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/contactinfo/ContactInfoMessageInternalImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/internal/ContactInfoMessageInternalImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo; +package com.sinch.sdk.domains.conversation.models.v1.messages.types.internal; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -7,6 +7,12 @@ 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.contactinfo.AddressInfo; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo.EmailInfo; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo.NameInfo; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo.OrganizationInfo; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo.PhoneNumberInfo; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.contactinfo.UrlInfo; import java.time.LocalDate; import java.util.List; import java.util.Objects; diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactMergeEventNotification.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactMergeEventNotification.java index dab7defc9..59a4dfca3 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactMergeEventNotification.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactMergeEventNotification.java @@ -11,7 +11,7 @@ package com.sinch.sdk.domains.conversation.models.v1.webhooks.events.contact; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; +import com.sinch.sdk.domains.conversation.models.v1.contacts.Contact; /** ContactMergeEventNotification */ @JsonDeserialize(builder = ContactMergeEventNotificationImpl.Builder.class) diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactMergeEventNotificationImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactMergeEventNotificationImpl.java index 324f0d9e8..937f118a6 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactMergeEventNotificationImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactMergeEventNotificationImpl.java @@ -7,7 +7,7 @@ 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.contact.Contact; +import com.sinch.sdk.domains.conversation.models.v1.contacts.Contact; import java.util.Objects; @JsonPropertyOrder({ diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactNotification.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactNotification.java index 04c99ac24..3f61cea32 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactNotification.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactNotification.java @@ -11,7 +11,7 @@ package com.sinch.sdk.domains.conversation.models.v1.webhooks.events.contact; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; +import com.sinch.sdk.domains.conversation.models.v1.contacts.Contact; /** ContactNotification */ @JsonDeserialize(builder = ContactNotificationImpl.Builder.class) diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactNotificationImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactNotificationImpl.java index 654759adc..a96ea58bf 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactNotificationImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactNotificationImpl.java @@ -7,7 +7,7 @@ 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.contact.Contact; +import com.sinch.sdk.domains.conversation.models.v1.contacts.Contact; import java.util.Objects; @JsonPropertyOrder({ContactNotificationImpl.JSON_PROPERTY_CONTACT}) diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/conversation/ConversationNotification.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/conversation/ConversationNotification.java index b011f0ee9..46e934c6f 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/conversation/ConversationNotification.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/conversation/ConversationNotification.java @@ -11,7 +11,7 @@ package com.sinch.sdk.domains.conversation.models.v1.webhooks.events.conversation; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.sinch.sdk.domains.conversation.models.v1.conversation.Conversation; +import com.sinch.sdk.domains.conversation.models.v1.conversations.Conversation; /** Object containing the details of the started / stopped / deleted conversation */ @JsonDeserialize(builder = ConversationNotificationImpl.Builder.class) diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/conversation/ConversationNotificationImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/conversation/ConversationNotificationImpl.java index e9ed6cffe..79cf62cdb 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/conversation/ConversationNotificationImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/conversation/ConversationNotificationImpl.java @@ -7,7 +7,7 @@ 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.conversation.Conversation; +import com.sinch.sdk.domains.conversation.models.v1.conversations.Conversation; import java.util.Objects; @JsonPropertyOrder({ConversationNotificationImpl.JSON_PROPERTY_CONVERSATION}) diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/response/ListWebhooksResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/internal/WebhooksListResponseInternal.java similarity index 74% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/response/ListWebhooksResponse.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/internal/WebhooksListResponseInternal.java index 0db8120fa..a260c17df 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/response/ListWebhooksResponse.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/internal/WebhooksListResponseInternal.java @@ -8,15 +8,15 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.webhooks.response; +package com.sinch.sdk.domains.conversation.models.v1.webhooks.internal; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; import java.util.List; -/** ListWebhooksResponse */ -@JsonDeserialize(builder = ListWebhooksResponseImpl.Builder.class) -public interface ListWebhooksResponse { +/** WebhooksListResponseInternal */ +@JsonDeserialize(builder = WebhooksListResponseInternalImpl.Builder.class) +public interface WebhooksListResponseInternal { /** * List of webhooks belonging to a specific project ID and app ID @@ -31,7 +31,7 @@ public interface ListWebhooksResponse { * @return New Builder instance */ static Builder builder() { - return new ListWebhooksResponseImpl.Builder(); + return new WebhooksListResponseInternalImpl.Builder(); } /** Dedicated Builder */ @@ -51,6 +51,6 @@ interface Builder { * * @return The instance build with current builder values */ - ListWebhooksResponse build(); + WebhooksListResponseInternal build(); } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/response/ListWebhooksResponseImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/internal/WebhooksListResponseInternalImpl.java similarity index 75% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/response/ListWebhooksResponseImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/internal/WebhooksListResponseInternalImpl.java index fa89a0071..817241e4e 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/response/ListWebhooksResponseImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/internal/WebhooksListResponseInternalImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.webhooks.response; +package com.sinch.sdk.domains.conversation.models.v1.webhooks.internal; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -11,19 +11,19 @@ import java.util.List; import java.util.Objects; -@JsonPropertyOrder({ListWebhooksResponseImpl.JSON_PROPERTY_WEBHOOKS}) +@JsonPropertyOrder({WebhooksListResponseInternalImpl.JSON_PROPERTY_WEBHOOKS}) @JsonFilter("uninitializedFilter") @JsonInclude(value = JsonInclude.Include.CUSTOM) -public class ListWebhooksResponseImpl implements ListWebhooksResponse { +public class WebhooksListResponseInternalImpl implements WebhooksListResponseInternal { private static final long serialVersionUID = 1L; public static final String JSON_PROPERTY_WEBHOOKS = "webhooks"; private OptionalValue> webhooks; - public ListWebhooksResponseImpl() {} + public WebhooksListResponseInternalImpl() {} - protected ListWebhooksResponseImpl(OptionalValue> webhooks) { + protected WebhooksListResponseInternalImpl(OptionalValue> webhooks) { this.webhooks = webhooks; } @@ -47,7 +47,7 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) { return false; } - ListWebhooksResponseImpl listWebhooksResponse = (ListWebhooksResponseImpl) o; + WebhooksListResponseInternalImpl listWebhooksResponse = (WebhooksListResponseInternalImpl) o; return Objects.equals(this.webhooks, listWebhooksResponse.webhooks); } @@ -59,7 +59,7 @@ public int hashCode() { @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("class ListWebhooksResponseImpl {\n"); + sb.append("class WebhooksListResponseInternalImpl {\n"); sb.append(" webhooks: ").append(toIndentedString(webhooks)).append("\n"); sb.append("}"); return sb.toString(); @@ -76,7 +76,7 @@ private String toIndentedString(Object o) { } @JsonPOJOBuilder(withPrefix = "set") - static class Builder implements ListWebhooksResponse.Builder { + static class Builder implements WebhooksListResponseInternal.Builder { OptionalValue> webhooks = OptionalValue.empty(); @JsonProperty(JSON_PROPERTY_WEBHOOKS) @@ -85,8 +85,8 @@ public Builder setWebhooks(List webhooks) { return this; } - public ListWebhooksResponse build() { - return new ListWebhooksResponseImpl(webhooks); + public WebhooksListResponseInternal build() { + return new WebhooksListResponseInternalImpl(webhooks); } } } 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/request/CreateWebhookRequest.java similarity index 90% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/internal/CreateWebhookRequestInternal.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/request/CreateWebhookRequest.java index a2a2e859c..09c11453e 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/request/CreateWebhookRequest.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.models.v1.webhooks.internal; +package com.sinch.sdk.domains.conversation.models.v1.webhooks.request; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.sinch.sdk.domains.conversation.models.v1.webhooks.ClientCredentials; @@ -16,9 +16,9 @@ import com.sinch.sdk.domains.conversation.models.v1.webhooks.WebhookTrigger; import java.util.List; -/** CreateWebhookRequestInternal */ -@JsonDeserialize(builder = CreateWebhookRequestInternalImpl.Builder.class) -public interface CreateWebhookRequestInternal { +/** CreateWebhookRequest */ +@JsonDeserialize(builder = CreateWebhookRequestImpl.Builder.class) +public interface CreateWebhookRequest { /** * The app that this webhook belongs to. @@ -85,7 +85,7 @@ public interface CreateWebhookRequestInternal { * @return New Builder instance */ static Builder builder() { - return new CreateWebhookRequestInternalImpl.Builder(); + return new CreateWebhookRequestImpl.Builder(); } /** Dedicated Builder */ @@ -150,6 +150,6 @@ interface Builder { * * @return The instance build with current builder values */ - CreateWebhookRequestInternal build(); + CreateWebhookRequest build(); } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/internal/CreateWebhookRequestInternalImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/request/CreateWebhookRequestImpl.java similarity index 88% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/internal/CreateWebhookRequestInternalImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/request/CreateWebhookRequestImpl.java index 86281f4b7..25636aa60 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/internal/CreateWebhookRequestInternalImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/request/CreateWebhookRequestImpl.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.webhooks.internal; +package com.sinch.sdk.domains.conversation.models.v1.webhooks.request; import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -14,17 +14,17 @@ import java.util.Objects; @JsonPropertyOrder({ - CreateWebhookRequestInternalImpl.JSON_PROPERTY_APP_ID, - CreateWebhookRequestInternalImpl.JSON_PROPERTY_CLIENT_CREDENTIALS, - CreateWebhookRequestInternalImpl.JSON_PROPERTY_ID, - CreateWebhookRequestInternalImpl.JSON_PROPERTY_SECRET, - CreateWebhookRequestInternalImpl.JSON_PROPERTY_TARGET, - CreateWebhookRequestInternalImpl.JSON_PROPERTY_TARGET_TYPE, - CreateWebhookRequestInternalImpl.JSON_PROPERTY_TRIGGERS + CreateWebhookRequestImpl.JSON_PROPERTY_APP_ID, + CreateWebhookRequestImpl.JSON_PROPERTY_CLIENT_CREDENTIALS, + CreateWebhookRequestImpl.JSON_PROPERTY_ID, + CreateWebhookRequestImpl.JSON_PROPERTY_SECRET, + CreateWebhookRequestImpl.JSON_PROPERTY_TARGET, + CreateWebhookRequestImpl.JSON_PROPERTY_TARGET_TYPE, + CreateWebhookRequestImpl.JSON_PROPERTY_TRIGGERS }) @JsonFilter("uninitializedFilter") @JsonInclude(value = JsonInclude.Include.CUSTOM) -public class CreateWebhookRequestInternalImpl implements CreateWebhookRequestInternal { +public class CreateWebhookRequestImpl implements CreateWebhookRequest { private static final long serialVersionUID = 1L; public static final String JSON_PROPERTY_APP_ID = "app_id"; @@ -55,9 +55,9 @@ public class CreateWebhookRequestInternalImpl implements CreateWebhookRequestInt private OptionalValue> triggers; - public CreateWebhookRequestInternalImpl() {} + public CreateWebhookRequestImpl() {} - protected CreateWebhookRequestInternalImpl( + protected CreateWebhookRequestImpl( OptionalValue appId, OptionalValue clientCredentials, OptionalValue id, @@ -159,8 +159,7 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) { return false; } - CreateWebhookRequestInternalImpl webhooksCreateWebhookRequest = - (CreateWebhookRequestInternalImpl) o; + CreateWebhookRequestImpl webhooksCreateWebhookRequest = (CreateWebhookRequestImpl) o; return Objects.equals(this.appId, webhooksCreateWebhookRequest.appId) && Objects.equals(this.clientCredentials, webhooksCreateWebhookRequest.clientCredentials) && Objects.equals(this.id, webhooksCreateWebhookRequest.id) @@ -178,7 +177,7 @@ public int hashCode() { @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("class CreateWebhookRequestInternalImpl {\n"); + sb.append("class CreateWebhookRequestImpl {\n"); sb.append(" appId: ").append(toIndentedString(appId)).append("\n"); sb.append(" clientCredentials: ").append(toIndentedString(clientCredentials)).append("\n"); sb.append(" id: ").append(toIndentedString(id)).append("\n"); @@ -201,7 +200,7 @@ private String toIndentedString(Object o) { } @JsonPOJOBuilder(withPrefix = "set") - static class Builder implements CreateWebhookRequestInternal.Builder { + static class Builder implements CreateWebhookRequest.Builder { OptionalValue appId = OptionalValue.empty(); OptionalValue clientCredentials = OptionalValue.empty(); OptionalValue id = OptionalValue.empty(); @@ -252,8 +251,8 @@ public Builder setTriggers(List triggers) { return this; } - public CreateWebhookRequestInternal build() { - return new CreateWebhookRequestInternalImpl( + public CreateWebhookRequest build() { + return new CreateWebhookRequestImpl( appId, clientCredentials, id, secret, target, targetType, triggers); } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/response/WebhooksListResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/response/WebhooksListResponse.java new file mode 100644 index 000000000..cab215c98 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/webhooks/response/WebhooksListResponse.java @@ -0,0 +1,48 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * 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.conversation.models.v1.webhooks.response; + +import com.sinch.sdk.core.models.pagination.ListResponse; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; +import java.util.Collection; +import java.util.Collections; + +/** Auto paginated response for list of Webhook */ +public class WebhooksListResponse extends ListResponse { + + private final Page page; + + public WebhooksListResponse(Page page) { + this.page = page; + } + + @Override + public boolean hasNextPage() { + return false; + } + + @Override + public WebhooksListResponse nextPage() { + + return null; + } + + @Override + public Collection getContent() { + return page == null ? Collections.emptyList() : page.getEntities(); + } + + @Override + public String toString() { + return "WebhooksListResponse {" + "page=" + page + '}'; + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/api/internal/V1Api.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/api/internal/V1Api.java deleted file mode 100644 index fe8cfaf0d..000000000 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/api/internal/V1Api.java +++ /dev/null @@ -1,471 +0,0 @@ -/* - * Template Management API - * - * OpenAPI document version: 1.0 - * 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.conversation.templates.api.internal; - -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.URLPathUtils; -import com.sinch.sdk.core.models.ServerConfiguration; -import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateV1; -import com.sinch.sdk.domains.conversation.templates.models.v1.internal.V1ListTemplatesResponseInternal; -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 V1Api { - - private static final Logger LOGGER = Logger.getLogger(V1Api.class.getName()); - private HttpClient httpClient; - private ServerConfiguration serverConfiguration; - private Map authManagersByOasSecuritySchemes; - private HttpMapper mapper; - - public V1Api( - HttpClient httpClient, - ServerConfiguration serverConfiguration, - Map authManagersByOasSecuritySchemes, - HttpMapper mapper) { - this.httpClient = httpClient; - this.serverConfiguration = serverConfiguration; - this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; - this.mapper = mapper; - } - - /** - * Creates a template - * - * @param projectId Required. The project ID. (required) - * @param templateV1 Required. The template to create. (required) - * @return TemplateV1 - * @throws ApiException if fails to make API call - * @deprecated - */ - @Deprecated - public TemplateV1 templatesCreateTemplate(String projectId, TemplateV1 templateV1) - throws ApiException { - - LOGGER.finest( - "[templatesCreateTemplate]" - + " " - + "projectId: " - + projectId - + ", " - + "templateV1: " - + templateV1); - - HttpRequest httpRequest = templatesCreateTemplateRequestBuilder(projectId, templateV1); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 templatesCreateTemplateRequestBuilder(String projectId, TemplateV1 templateV1) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling templatesCreateTemplate"); - } - // verify the required parameter 'templateV1' is set - if (templateV1 == null) { - throw new ApiException( - 400, "Missing the required parameter 'templateV1' when calling templatesCreateTemplate"); - } - - String localVarPath = - "/v1/projects/{project_id}/templates" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.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("Basic", "oAuth2"); - final String serializedBody = mapper.serialize(localVarContentTypes, templateV1); - - return new HttpRequest( - localVarPath, - HttpMethod.POST, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Delete a template. - * - * @param projectId Required. The project ID. (required) - * @param templateId Required. The ID of the template to fetch. (required) - * @return Object - * @throws ApiException if fails to make API call - * @deprecated - */ - @Deprecated - public Object templatesDeleteTemplate(String projectId, String templateId) throws ApiException { - - LOGGER.finest( - "[templatesDeleteTemplate]" - + " " - + "projectId: " - + projectId - + ", " - + "templateId: " - + templateId); - - HttpRequest httpRequest = templatesDeleteTemplateRequestBuilder(projectId, templateId); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 templatesDeleteTemplateRequestBuilder(String projectId, String templateId) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling templatesDeleteTemplate"); - } - // verify the required parameter 'templateId' is set - if (templateId == null) { - throw new ApiException( - 400, "Missing the required parameter 'templateId' when calling templatesDeleteTemplate"); - } - - String localVarPath = - "/v1/projects/{project_id}/templates/{template_id}" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll( - "\\{" + "template_id" + "\\}", - URLPathUtils.encodePathSegment(templateId.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("Basic", "oAuth2"); - final String serializedBody = null; - - return new HttpRequest( - localVarPath, - HttpMethod.DELETE, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Get a template - * - * @param projectId Required. The project ID. (required) - * @param templateId Required. The ID of the template to fetch. (required) - * @return TemplateV1 - * @throws ApiException if fails to make API call - * @deprecated - */ - @Deprecated - public TemplateV1 templatesGetTemplate(String projectId, String templateId) throws ApiException { - - LOGGER.finest( - "[templatesGetTemplate]" - + " " - + "projectId: " - + projectId - + ", " - + "templateId: " - + templateId); - - HttpRequest httpRequest = templatesGetTemplateRequestBuilder(projectId, templateId); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 templatesGetTemplateRequestBuilder(String projectId, String templateId) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling templatesGetTemplate"); - } - // verify the required parameter 'templateId' is set - if (templateId == null) { - throw new ApiException( - 400, "Missing the required parameter 'templateId' when calling templatesGetTemplate"); - } - - String localVarPath = - "/v1/projects/{project_id}/templates/{template_id}" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll( - "\\{" + "template_id" + "\\}", - URLPathUtils.encodePathSegment(templateId.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("Basic", "oAuth2"); - final String serializedBody = null; - - return new HttpRequest( - localVarPath, - HttpMethod.GET, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * List all templates belonging to a project ID. - * - * @param projectId Required. The project ID. (required) - * @return V1ListTemplatesResponseInternal - * @throws ApiException if fails to make API call - * @deprecated - */ - @Deprecated - public V1ListTemplatesResponseInternal templatesListTemplates(String projectId) - throws ApiException { - - LOGGER.finest("[templatesListTemplates]" + " " + "projectId: " + projectId); - - HttpRequest httpRequest = templatesListTemplatesRequestBuilder(projectId); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 templatesListTemplatesRequestBuilder(String projectId) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling templatesListTemplates"); - } - - String localVarPath = - "/v1/projects/{project_id}/templates" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.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("Basic", "oAuth2"); - final String serializedBody = null; - - return new HttpRequest( - localVarPath, - HttpMethod.GET, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } - - /** - * Updates a template. - * - * @param projectId Required. The project ID. (required) - * @param templateId The id of the template to be updated. Specified or automatically generated - * during template creation. Unique per project. (required) - * @param templateV1 Required. The updated template. (required) - * @param updateMask The set of field mask paths. (optional - * @return TemplateV1 - * @throws ApiException if fails to make API call - * @deprecated - */ - @Deprecated - public TemplateV1 templatesUpdateTemplate( - String projectId, String templateId, TemplateV1 templateV1, List updateMask) - throws ApiException { - - LOGGER.finest( - "[templatesUpdateTemplate]" - + " " - + "projectId: " - + projectId - + ", " - + "templateId: " - + templateId - + ", " - + "templateV1: " - + templateV1 - + ", " - + "updateMask: " - + updateMask); - - HttpRequest httpRequest = - templatesUpdateTemplateRequestBuilder(projectId, templateId, templateV1, updateMask); - HttpResponse response = - httpClient.invokeAPI( - this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); - - if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); - } - // 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 templatesUpdateTemplateRequestBuilder( - String projectId, String templateId, TemplateV1 templateV1, List updateMask) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling templatesUpdateTemplate"); - } - // verify the required parameter 'templateId' is set - if (templateId == null) { - throw new ApiException( - 400, "Missing the required parameter 'templateId' when calling templatesUpdateTemplate"); - } - // verify the required parameter 'templateV1' is set - if (templateV1 == null) { - throw new ApiException( - 400, "Missing the required parameter 'templateV1' when calling templatesUpdateTemplate"); - } - - String localVarPath = - "/v1/projects/{project_id}/templates/{template_id}" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) - .replaceAll( - "\\{" + "template_id" + "\\}", - URLPathUtils.encodePathSegment(templateId.toString())); - - List localVarQueryParams = new ArrayList<>(); - - if (null != updateMask) { - localVarQueryParams.add( - new URLParameter( - "update_mask", updateMask, URLParameter.STYLE.valueOf("form".toUpperCase()), true)); - } - - Map localVarHeaderParams = new HashMap<>(); - - final Collection localVarAccepts = Arrays.asList("application/json"); - - final Collection localVarContentTypes = Arrays.asList("application/json"); - - final Collection localVarAuthNames = Arrays.asList("Basic", "oAuth2"); - final String serializedBody = mapper.serialize(localVarContentTypes, templateV1); - - return new HttpRequest( - localVarPath, - HttpMethod.PATCH, - localVarQueryParams, - serializedBody, - localVarHeaderParams, - localVarAccepts, - localVarContentTypes, - localVarAuthNames); - } -} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/api/v2/TemplatesV2Service.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/api/v2/TemplatesV2Service.java new file mode 100644 index 000000000..ca3d93423 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/api/v2/TemplatesV2Service.java @@ -0,0 +1,86 @@ +/* + * Template Management API + * + * OpenAPI document version: 1.0 + * 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.conversation.templates.api.v2; + +import com.sinch.sdk.core.exceptions.ApiException; +import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2; +import com.sinch.sdk.domains.conversation.templates.models.v2.request.ListTranslationsQueryParameters; +import com.sinch.sdk.domains.conversation.templates.models.v2.response.TemplatesV2ListResponse; +import com.sinch.sdk.domains.conversation.templates.models.v2.response.TranslationsV2ListResponse; + +/** Templates V2 Service */ +public interface TemplatesV2Service { + + /** + * List all templates belonging to a project ID. + * + * @return TemplatesV2ListResponse + * @throws ApiException if fails to make API call + */ + TemplatesV2ListResponse list() throws ApiException; + + /** + * Creates a template + * + * @param templateV2 Required. The template to create. (required) + * @return TemplateV2 + * @throws ApiException if fails to make API call + */ + TemplateV2 create(TemplateV2 templateV2) throws ApiException; + + /** + * Delete a template. + * + * @param templateId Required. The ID of the template to delete. (required) + * @throws ApiException if fails to make API call + */ + void delete(String templateId) throws ApiException; + + /** + * Get a template + * + * @param templateId Required. The ID of the template to fetch. (required) + * @return TemplateV2 + * @throws ApiException if fails to make API call + */ + TemplateV2 get(String templateId) throws ApiException; + + /** + * List translations for a template (using default parameters) + * + * @param templateId Required. The ID of the template to fetch. (required) + * @return TranslationsV2ListResponse + * @throws ApiException if fails to make API call + */ + TranslationsV2ListResponse listTranslations(String templateId) throws ApiException; + + /** + * List translations for a template + * + * @param templateId Required. The ID of the template to fetch. (required) + * @param queryParameter (optional) + * @return TranslationsV2ListResponse + * @throws ApiException if fails to make API call + */ + TranslationsV2ListResponse listTranslations( + String templateId, ListTranslationsQueryParameters queryParameter) throws ApiException; + + /** + * Updates a template. + * + * @param templateId The id of the template to be updated. Specified or automatically generated + * during template creation. Unique per project. (required) + * @param templateV2 Required. The updated template. (required) + * @return TemplateV2 + * @throws ApiException if fails to make API call + */ + TemplateV2 update(String templateId, TemplateV2 templateV2) throws ApiException; +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/api/internal/V2Api.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/api/v2/adapters/TemplatesV2ServiceImpl.java similarity index 54% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/api/internal/V2Api.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/api/v2/adapters/TemplatesV2ServiceImpl.java index f69d8a957..ac6631289 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/api/internal/V2Api.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/api/v2/adapters/TemplatesV2ServiceImpl.java @@ -8,7 +8,7 @@ * Do not edit the class manually. */ -package com.sinch.sdk.domains.conversation.templates.api.internal; +package com.sinch.sdk.domains.conversation.templates.api.v2.adapters; import com.fasterxml.jackson.core.type.TypeReference; import com.sinch.sdk.core.exceptions.ApiException; @@ -21,11 +21,16 @@ 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.conversation.templates.models.v2.TemplateV2; -import com.sinch.sdk.domains.conversation.templates.models.v2.internal.V2ListTemplatesResponseInternal; -import com.sinch.sdk.domains.conversation.templates.models.v2.internal.V2ListTranslationsResponseInternal; +import com.sinch.sdk.domains.conversation.templates.models.v2.internal.ListTemplatesResponseInternal; +import com.sinch.sdk.domains.conversation.templates.models.v2.internal.ListTranslationsResponseInternal; +import com.sinch.sdk.domains.conversation.templates.models.v2.request.ListTranslationsQueryParameters; +import com.sinch.sdk.domains.conversation.templates.models.v2.response.TemplatesV2ListResponse; +import com.sinch.sdk.domains.conversation.templates.models.v2.response.TranslationsV2ListResponse; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -34,53 +39,46 @@ import java.util.Map; import java.util.logging.Logger; -public class V2Api { +public class TemplatesV2ServiceImpl + implements com.sinch.sdk.domains.conversation.templates.api.v2.TemplatesV2Service { - private static final Logger LOGGER = Logger.getLogger(V2Api.class.getName()); - private HttpClient httpClient; - private ServerConfiguration serverConfiguration; - private Map authManagersByOasSecuritySchemes; - private HttpMapper mapper; + private static final Logger LOGGER = Logger.getLogger(TemplatesV2ServiceImpl.class.getName()); + private final HttpClient httpClient; + private final ServerConfiguration serverConfiguration; + private final Map authManagersByOasSecuritySchemes; + private final HttpMapper mapper; - public V2Api( + private final String projectId; + + public TemplatesV2ServiceImpl( HttpClient httpClient, ServerConfiguration serverConfiguration, Map authManagersByOasSecuritySchemes, - HttpMapper mapper) { + HttpMapper mapper, + String projectId) { this.httpClient = httpClient; this.serverConfiguration = serverConfiguration; this.authManagersByOasSecuritySchemes = authManagersByOasSecuritySchemes; this.mapper = mapper; + this.projectId = projectId; } - /** - * Creates a template - * - * @param projectId Required. The project ID. (required) - * @param templateV2 Required. The template to create. (required) - * @return TemplateV2 - * @throws ApiException if fails to make API call - */ - public TemplateV2 templatesV2CreateTemplate(String projectId, TemplateV2 templateV2) - throws ApiException { + @Override + public TemplatesV2ListResponse list() throws ApiException { - LOGGER.finest( - "[templatesV2CreateTemplate]" - + " " - + "projectId: " - + projectId - + ", " - + "templateV2: " - + templateV2); + LOGGER.finest("[list]" + " "); - HttpRequest httpRequest = templatesV2CreateTemplateRequestBuilder(projectId, templateV2); + HttpRequest httpRequest = listRequestBuilder(); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + + ListTemplatesResponseInternal deserialized = + mapper.deserialize(response, new TypeReference() {}); + + return new TemplatesV2ListResponse(new Page<>(null, deserialized.getTemplates(), null)); } // fallback to default errors handling: // all error cases definition are not required from specs: will try some "hardcoded" content @@ -91,24 +89,18 @@ public TemplateV2 templatesV2CreateTemplate(String projectId, TemplateV2 templat mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest templatesV2CreateTemplateRequestBuilder( - String projectId, TemplateV2 templateV2) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { - throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling templatesV2CreateTemplate"); - } - // verify the required parameter 'templateV2' is set - if (templateV2 == null) { + private HttpRequest listRequestBuilder() throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, - "Missing the required parameter 'templateV2' when calling templatesV2CreateTemplate"); + 400, "Missing the required parameter 'this.projectId' when calling list"); } String localVarPath = "/v2/projects/{project_id}/templates" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); List localVarQueryParams = new ArrayList<>(); @@ -116,14 +108,14 @@ private HttpRequest templatesV2CreateTemplateRequestBuilder( final Collection localVarAccepts = Arrays.asList("application/json"); - final Collection localVarContentTypes = Arrays.asList("application/json"); + final Collection localVarContentTypes = Arrays.asList(); final Collection localVarAuthNames = Arrays.asList("Basic", "oAuth2"); - final String serializedBody = mapper.serialize(localVarContentTypes, templateV2); + final String serializedBody = null; return new HttpRequest( localVarPath, - HttpMethod.POST, + HttpMethod.GET, localVarQueryParams, serializedBody, localVarHeaderParams, @@ -132,33 +124,18 @@ private HttpRequest templatesV2CreateTemplateRequestBuilder( localVarAuthNames); } - /** - * Delete a template. - * - * @param projectId Required. The project ID. (required) - * @param templateId Required. The ID of the template to delete. (required) - * @return Object - * @throws ApiException if fails to make API call - */ - public Object templatesV2DeleteTemplate(String projectId, String templateId) throws ApiException { + @Override + public TemplateV2 create(TemplateV2 templateV2) throws ApiException { - LOGGER.finest( - "[templatesV2DeleteTemplate]" - + " " - + "projectId: " - + projectId - + ", " - + "templateId: " - + templateId); + LOGGER.finest("[create]" + " " + "templateV2: " + templateV2); - HttpRequest httpRequest = templatesV2DeleteTemplateRequestBuilder(projectId, templateId); + HttpRequest httpRequest = createRequestBuilder(templateV2); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + 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 @@ -169,27 +146,23 @@ public Object templatesV2DeleteTemplate(String projectId, String templateId) thr mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest templatesV2DeleteTemplateRequestBuilder(String projectId, String templateId) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest createRequestBuilder(TemplateV2 templateV2) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling templatesV2DeleteTemplate"); + 400, "Missing the required parameter 'this.projectId' when calling create"); } - // verify the required parameter 'templateId' is set - if (templateId == null) { + // verify the required parameter 'templateV2' is set + if (templateV2 == null) { throw new ApiException( - 400, - "Missing the required parameter 'templateId' when calling templatesV2DeleteTemplate"); + 400, "Missing the required parameter 'templateV2' when calling create"); } String localVarPath = - "/v2/projects/{project_id}/templates/{template_id}" - .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) + "/v2/projects/{project_id}/templates" .replaceAll( - "\\{" + "template_id" + "\\}", - URLPathUtils.encodePathSegment(templateId.toString())); + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())); List localVarQueryParams = new ArrayList<>(); @@ -197,14 +170,14 @@ private HttpRequest templatesV2DeleteTemplateRequestBuilder(String projectId, St final Collection localVarAccepts = Arrays.asList("application/json"); - final Collection localVarContentTypes = Arrays.asList(); + final Collection localVarContentTypes = Arrays.asList("application/json"); final Collection localVarAuthNames = Arrays.asList("Basic", "oAuth2"); - final String serializedBody = null; + final String serializedBody = mapper.serialize(localVarContentTypes, templateV2); return new HttpRequest( localVarPath, - HttpMethod.DELETE, + HttpMethod.POST, localVarQueryParams, serializedBody, localVarHeaderParams, @@ -213,34 +186,18 @@ private HttpRequest templatesV2DeleteTemplateRequestBuilder(String projectId, St localVarAuthNames); } - /** - * Get a template - * - * @param projectId Required. The project ID. (required) - * @param templateId Required. The ID of the template to fetch. (required) - * @return TemplateV2 - * @throws ApiException if fails to make API call - */ - public TemplateV2 templatesV2GetTemplate(String projectId, String templateId) - throws ApiException { + @Override + public void delete(String templateId) throws ApiException { - LOGGER.finest( - "[templatesV2GetTemplate]" - + " " - + "projectId: " - + projectId - + ", " - + "templateId: " - + templateId); + LOGGER.finest("[delete]" + " " + "templateId: " + templateId); - HttpRequest httpRequest = templatesV2GetTemplateRequestBuilder(projectId, templateId); + HttpRequest httpRequest = deleteRequestBuilder(templateId); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + return; } // fallback to default errors handling: // all error cases definition are not required from specs: will try some "hardcoded" content @@ -251,23 +208,23 @@ public TemplateV2 templatesV2GetTemplate(String projectId, String templateId) mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest templatesV2GetTemplateRequestBuilder(String projectId, String templateId) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest deleteRequestBuilder(String templateId) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling templatesV2GetTemplate"); + 400, "Missing the required parameter 'this.projectId' when calling delete"); } // verify the required parameter 'templateId' is set if (templateId == null) { throw new ApiException( - 400, "Missing the required parameter 'templateId' when calling templatesV2GetTemplate"); + 400, "Missing the required parameter 'templateId' when calling delete"); } String localVarPath = "/v2/projects/{project_id}/templates/{template_id}" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) .replaceAll( "\\{" + "template_id" + "\\}", URLPathUtils.encodePathSegment(templateId.toString())); @@ -285,7 +242,7 @@ private HttpRequest templatesV2GetTemplateRequestBuilder(String projectId, Strin return new HttpRequest( localVarPath, - HttpMethod.GET, + HttpMethod.DELETE, localVarQueryParams, serializedBody, localVarHeaderParams, @@ -294,27 +251,18 @@ private HttpRequest templatesV2GetTemplateRequestBuilder(String projectId, Strin localVarAuthNames); } - /** - * List all templates belonging to a project ID. - * - * @param projectId Required. The project ID. (required) - * @return V2ListTemplatesResponseInternal - * @throws ApiException if fails to make API call - */ - public V2ListTemplatesResponseInternal templatesV2ListTemplates(String projectId) - throws ApiException { + @Override + public TemplateV2 get(String templateId) throws ApiException { - LOGGER.finest("[templatesV2ListTemplates]" + " " + "projectId: " + projectId); + LOGGER.finest("[get]" + " " + "templateId: " + templateId); - HttpRequest httpRequest = templatesV2ListTemplatesRequestBuilder(projectId); + HttpRequest httpRequest = getRequestBuilder(templateId); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + 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 @@ -325,17 +273,25 @@ public V2ListTemplatesResponseInternal templatesV2ListTemplates(String projectId mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest templatesV2ListTemplatesRequestBuilder(String projectId) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest getRequestBuilder(String templateId) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling templatesV2ListTemplates"); + 400, "Missing the required parameter 'this.projectId' when calling get"); + } + // verify the required parameter 'templateId' is set + if (templateId == null) { + throw new ApiException(400, "Missing the required parameter 'templateId' when calling get"); } String localVarPath = - "/v2/projects/{project_id}/templates" + "/v2/projects/{project_id}/templates/{template_id}" + .replaceAll( + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())); + "\\{" + "template_id" + "\\}", + URLPathUtils.encodePathSegment(templateId.toString())); List localVarQueryParams = new ArrayList<>(); @@ -359,46 +315,36 @@ private HttpRequest templatesV2ListTemplatesRequestBuilder(String projectId) thr localVarAuthNames); } - /** - * List translations for a template - * - * @param projectId Required. The project ID. (required) - * @param templateId Required. The ID of the template to fetch. (required) - * @param languageCode Optional. The translation's language code. (optional) - * @param translationVersion Optional. The translation's version. (optional) - * @return V2ListTranslationsResponseInternal - * @throws ApiException if fails to make API call - */ - public V2ListTranslationsResponseInternal templatesV2ListTranslations( - String projectId, String templateId, String languageCode, String translationVersion) - throws ApiException { + @Override + public TranslationsV2ListResponse listTranslations(String templateId) throws ApiException { + + return listTranslations(templateId, (ListTranslationsQueryParameters) null); + } + + @Override + public TranslationsV2ListResponse listTranslations( + String templateId, ListTranslationsQueryParameters queryParameter) throws ApiException { LOGGER.finest( - "[templatesV2ListTranslations]" + "[listTranslations]" + " " - + "projectId: " - + projectId - + ", " + "templateId: " + templateId + ", " - + "languageCode: " - + languageCode - + ", " - + "translationVersion: " - + translationVersion); + + "queryParameter: " + + queryParameter); - HttpRequest httpRequest = - templatesV2ListTranslationsRequestBuilder( - projectId, templateId, languageCode, translationVersion); + HttpRequest httpRequest = listTranslationsRequestBuilder(templateId, queryParameter); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = - new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + + ListTranslationsResponseInternal deserialized = + mapper.deserialize(response, new TypeReference() {}); + + return new TranslationsV2ListResponse(new Page<>(null, deserialized.getTranslations(), null)); } // fallback to default errors handling: // all error cases definition are not required from specs: will try some "hardcoded" content @@ -409,48 +355,46 @@ public V2ListTranslationsResponseInternal templatesV2ListTranslations( mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest templatesV2ListTranslationsRequestBuilder( - String projectId, String templateId, String languageCode, String translationVersion) - throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest listTranslationsRequestBuilder( + String templateId, ListTranslationsQueryParameters queryParameter) throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, - "Missing the required parameter 'projectId' when calling templatesV2ListTranslations"); + 400, "Missing the required parameter 'this.projectId' when calling listTranslations"); } // verify the required parameter 'templateId' is set if (templateId == null) { throw new ApiException( - 400, - "Missing the required parameter 'templateId' when calling templatesV2ListTranslations"); + 400, "Missing the required parameter 'templateId' when calling listTranslations"); } String localVarPath = "/v2/projects/{project_id}/templates/{template_id}/translations" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) .replaceAll( "\\{" + "template_id" + "\\}", URLPathUtils.encodePathSegment(templateId.toString())); List localVarQueryParams = new ArrayList<>(); - - if (null != languageCode) { - localVarQueryParams.add( - new URLParameter( - "language_code", - languageCode, - URLParameter.STYLE.valueOf("form".toUpperCase()), - true)); - } - - if (null != translationVersion) { - localVarQueryParams.add( - new URLParameter( - "translation_version", - translationVersion, - URLParameter.STYLE.valueOf("form".toUpperCase()), - true)); + if (null != queryParameter) { + + URLParameterUtils.addQueryParam( + queryParameter.getLanguageCode(), + "language_code", + URLParameter.form, + null, + localVarQueryParams, + true); + + URLParameterUtils.addQueryParam( + queryParameter.getTranslationVersion(), + "translation_version", + URLParameter.form, + null, + localVarQueryParams, + true); } Map localVarHeaderParams = new HashMap<>(); @@ -473,40 +417,19 @@ private HttpRequest templatesV2ListTranslationsRequestBuilder( localVarAuthNames); } - /** - * Updates a template. - * - * @param projectId Required. The project ID. (required) - * @param templateId The id of the template to be updated. Specified or automatically generated - * during template creation. Unique per project. (required) - * @param templateV2 Required. The updated template. (required) - * @return TemplateV2 - * @throws ApiException if fails to make API call - */ - public TemplateV2 templatesV2UpdateTemplate( - String projectId, String templateId, TemplateV2 templateV2) throws ApiException { + @Override + public TemplateV2 update(String templateId, TemplateV2 templateV2) throws ApiException { LOGGER.finest( - "[templatesV2UpdateTemplate]" - + " " - + "projectId: " - + projectId - + ", " - + "templateId: " - + templateId - + ", " - + "templateV2: " - + templateV2); + "[update]" + " " + "templateId: " + templateId + ", " + "templateV2: " + templateV2); - HttpRequest httpRequest = - templatesV2UpdateTemplateRequestBuilder(projectId, templateId, templateV2); + HttpRequest httpRequest = updateRequestBuilder(templateId, templateV2); HttpResponse response = httpClient.invokeAPI( this.serverConfiguration, this.authManagersByOasSecuritySchemes, httpRequest); if (HttpStatus.isSuccessfulStatus(response.getCode())) { - TypeReference localVarReturnType = new TypeReference() {}; - return mapper.deserialize(response, localVarReturnType); + 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 @@ -517,30 +440,29 @@ public TemplateV2 templatesV2UpdateTemplate( mapper.deserialize(response, new TypeReference>() {})); } - private HttpRequest templatesV2UpdateTemplateRequestBuilder( - String projectId, String templateId, TemplateV2 templateV2) throws ApiException { - // verify the required parameter 'projectId' is set - if (projectId == null) { + private HttpRequest updateRequestBuilder(String templateId, TemplateV2 templateV2) + throws ApiException { + // verify the required parameter 'this.projectId' is set + if (this.projectId == null) { throw new ApiException( - 400, "Missing the required parameter 'projectId' when calling templatesV2UpdateTemplate"); + 400, "Missing the required parameter 'this.projectId' when calling update"); } // verify the required parameter 'templateId' is set if (templateId == null) { throw new ApiException( - 400, - "Missing the required parameter 'templateId' when calling templatesV2UpdateTemplate"); + 400, "Missing the required parameter 'templateId' when calling update"); } // verify the required parameter 'templateV2' is set if (templateV2 == null) { throw new ApiException( - 400, - "Missing the required parameter 'templateV2' when calling templatesV2UpdateTemplate"); + 400, "Missing the required parameter 'templateV2' when calling update"); } String localVarPath = "/v2/projects/{project_id}/templates/{template_id}" .replaceAll( - "\\{" + "project_id" + "\\}", URLPathUtils.encodePathSegment(projectId.toString())) + "\\{" + "project_id" + "\\}", + URLPathUtils.encodePathSegment(this.projectId.toString())) .replaceAll( "\\{" + "template_id" + "\\}", URLPathUtils.encodePathSegment(templateId.toString())); diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/TemplateChannel.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/TemplateChannel.java deleted file mode 100644 index 0bd68b8a3..000000000 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/TemplateChannel.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.sinch.sdk.domains.conversation.templates.models.v1; - -import com.sinch.sdk.core.utils.EnumDynamic; -import com.sinch.sdk.core.utils.EnumSupportDynamic; -import java.util.Arrays; -import java.util.stream.Stream; - -/** Gets or Sets typeChannel */ -public class TemplateChannel extends EnumDynamic { - - /** Unspecified channel. */ - public static final TemplateChannel UNSPECIFIED = new TemplateChannel("UNSPECIFIED"); - - /** Conversation channel. */ - public static final TemplateChannel CONVERSATION = new TemplateChannel("CONVERSATION"); - - /** The Facebook Messenger channel. */ - public static final TemplateChannel MESSENGER = new TemplateChannel("MESSENGER"); - - /** The WhatsApp channel. */ - public static final TemplateChannel WHATSAPP = new TemplateChannel("WHATSAPP"); - - /** The RCS channel. */ - public static final TemplateChannel RCS = new TemplateChannel("RCS"); - - /** The SMS channel. */ - public static final TemplateChannel SMS = new TemplateChannel("SMS"); - - /** The Viber Business Messages channel. */ - public static final TemplateChannel VIBERBM = new TemplateChannel("VIBERBM"); - - /** The Telegram channel. */ - public static final TemplateChannel TELEGRAM = new TemplateChannel("TELEGRAM"); - - /** The Instagram channel. */ - public static final TemplateChannel INSTAGRAM = new TemplateChannel("INSTAGRAM"); - - /** The KakaoTalk channel. */ - public static final TemplateChannel KAKAOTALK = new TemplateChannel("KAKAOTALK"); - - /** The Apple Messages for Business channel. */ - public static final TemplateChannel APPLEBC = new TemplateChannel("APPLEBC"); - - private static final EnumSupportDynamic ENUM_SUPPORT = - new EnumSupportDynamic<>( - TemplateChannel.class, - TemplateChannel::new, - Arrays.asList( - UNSPECIFIED, - CONVERSATION, - MESSENGER, - WHATSAPP, - RCS, - SMS, - VIBERBM, - TELEGRAM, - INSTAGRAM, - KAKAOTALK, - APPLEBC)); - - private TemplateChannel(String value) { - super(value); - } - - public static Stream values() { - return ENUM_SUPPORT.values(); - } - - public static TemplateChannel from(String value) { - return ENUM_SUPPORT.from(value); - } - - public static String valueOf(TemplateChannel e) { - return ENUM_SUPPORT.valueOf(e); - } -} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/TemplateTranslation.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/TemplateTranslation.java deleted file mode 100644 index 8f5d5e1f6..000000000 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/TemplateTranslation.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Template Management API - * - * OpenAPI document version: 1.0 - * 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.conversation.templates.models.v1; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.sinch.sdk.domains.conversation.templates.models.TemplateVariable; -import java.time.Instant; -import java.util.List; - -/** TemplateTranslation */ -@JsonDeserialize(builder = TemplateTranslationImpl.Builder.class) -public interface TemplateTranslation { - - /** - * This is the definition of the template with the language specified in the language_code field. - * - * @return content - */ - String getContent(); - - /** - * Timestamp when the translation was created. - * - * @return createTime - */ - Instant getCreateTime(); - - /** - * The BCP-47 language code, such as en-US or sr-Latn. For more - * information, see https://www.unicode.org/reports/tr35/#Unicode_locale_identifier. - * - * @return languageCode - */ - String getLanguageCode(); - - /** - * Timestamp of when the translation was updated. - * - * @return updateTime - */ - Instant getUpdateTime(); - - /** - * List of expected variables. Can be used for request validation. - * - * @return variables - */ - List getVariables(); - - /** - * The version of template. - * - * @return version - */ - String getVersion(); - - /** - * Getting builder - * - * @return New Builder instance - */ - static Builder builder() { - return new TemplateTranslationImpl.Builder(); - } - - /** Dedicated Builder */ - interface Builder { - - /** - * see getter - * - * @param content see getter - * @return Current builder - * @see #getContent - */ - Builder setContent(String content); - - /** - * see getter - * - * @param createTime see getter - * @return Current builder - * @see #getCreateTime - */ - Builder setCreateTime(Instant createTime); - - /** - * see getter - * - * @param languageCode see getter - * @return Current builder - * @see #getLanguageCode - */ - Builder setLanguageCode(String languageCode); - - /** - * see getter - * - * @param updateTime see getter - * @return Current builder - * @see #getUpdateTime - */ - Builder setUpdateTime(Instant updateTime); - - /** - * see getter - * - * @param variables see getter - * @return Current builder - * @see #getVariables - */ - Builder setVariables(List variables); - - /** - * see getter - * - * @param version see getter - * @return Current builder - * @see #getVersion - */ - Builder setVersion(String version); - - /** - * Create instance - * - * @return The instance build with current builder values - */ - TemplateTranslation build(); - } -} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/TemplateTranslationImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/TemplateTranslationImpl.java deleted file mode 100644 index a14b1016f..000000000 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/TemplateTranslationImpl.java +++ /dev/null @@ -1,232 +0,0 @@ -package com.sinch.sdk.domains.conversation.templates.models.v1; - -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.conversation.templates.models.TemplateVariable; -import java.time.Instant; -import java.util.List; -import java.util.Objects; - -@JsonPropertyOrder({ - TemplateTranslationImpl.JSON_PROPERTY_CONTENT, - TemplateTranslationImpl.JSON_PROPERTY_CREATE_TIME, - TemplateTranslationImpl.JSON_PROPERTY_LANGUAGE_CODE, - TemplateTranslationImpl.JSON_PROPERTY_UPDATE_TIME, - TemplateTranslationImpl.JSON_PROPERTY_VARIABLES, - TemplateTranslationImpl.JSON_PROPERTY_VERSION -}) -@JsonFilter("uninitializedFilter") -@JsonInclude(value = JsonInclude.Include.CUSTOM) -public class TemplateTranslationImpl implements TemplateTranslation { - private static final long serialVersionUID = 1L; - - public static final String JSON_PROPERTY_CONTENT = "content"; - - private OptionalValue content; - - public static final String JSON_PROPERTY_CREATE_TIME = "create_time"; - - private OptionalValue createTime; - - public static final String JSON_PROPERTY_LANGUAGE_CODE = "language_code"; - - private OptionalValue languageCode; - - public static final String JSON_PROPERTY_UPDATE_TIME = "update_time"; - - private OptionalValue updateTime; - - public static final String JSON_PROPERTY_VARIABLES = "variables"; - - private OptionalValue> variables; - - public static final String JSON_PROPERTY_VERSION = "version"; - - private OptionalValue version; - - public TemplateTranslationImpl() {} - - protected TemplateTranslationImpl( - OptionalValue content, - OptionalValue createTime, - OptionalValue languageCode, - OptionalValue updateTime, - OptionalValue> variables, - OptionalValue version) { - this.content = content; - this.createTime = createTime; - this.languageCode = languageCode; - this.updateTime = updateTime; - this.variables = variables; - this.version = version; - } - - @JsonIgnore - public String getContent() { - return content.orElse(null); - } - - @JsonProperty(JSON_PROPERTY_CONTENT) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public OptionalValue content() { - return content; - } - - @JsonIgnore - public Instant getCreateTime() { - return createTime.orElse(null); - } - - @JsonProperty(JSON_PROPERTY_CREATE_TIME) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public OptionalValue createTime() { - return createTime; - } - - @JsonIgnore - public String getLanguageCode() { - return languageCode.orElse(null); - } - - @JsonProperty(JSON_PROPERTY_LANGUAGE_CODE) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public OptionalValue languageCode() { - return languageCode; - } - - @JsonIgnore - public Instant getUpdateTime() { - return updateTime.orElse(null); - } - - @JsonProperty(JSON_PROPERTY_UPDATE_TIME) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public OptionalValue updateTime() { - return updateTime; - } - - @JsonIgnore - public List getVariables() { - return variables.orElse(null); - } - - @JsonProperty(JSON_PROPERTY_VARIABLES) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public OptionalValue> variables() { - return variables; - } - - @JsonIgnore - public String getVersion() { - return version.orElse(null); - } - - @JsonProperty(JSON_PROPERTY_VERSION) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public OptionalValue version() { - return version; - } - - /** Return true if this typeTemplateTranslation object is equal to o. */ - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - TemplateTranslationImpl typeTemplateTranslation = (TemplateTranslationImpl) o; - return Objects.equals(this.content, typeTemplateTranslation.content) - && Objects.equals(this.createTime, typeTemplateTranslation.createTime) - && Objects.equals(this.languageCode, typeTemplateTranslation.languageCode) - && Objects.equals(this.updateTime, typeTemplateTranslation.updateTime) - && Objects.equals(this.variables, typeTemplateTranslation.variables) - && Objects.equals(this.version, typeTemplateTranslation.version); - } - - @Override - public int hashCode() { - return Objects.hash(content, createTime, languageCode, updateTime, variables, version); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class TemplateTranslationImpl {\n"); - sb.append(" content: ").append(toIndentedString(content)).append("\n"); - sb.append(" createTime: ").append(toIndentedString(createTime)).append("\n"); - sb.append(" languageCode: ").append(toIndentedString(languageCode)).append("\n"); - sb.append(" updateTime: ").append(toIndentedString(updateTime)).append("\n"); - sb.append(" variables: ").append(toIndentedString(variables)).append("\n"); - sb.append(" version: ").append(toIndentedString(version)).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 TemplateTranslation.Builder { - OptionalValue content = OptionalValue.empty(); - OptionalValue createTime = OptionalValue.empty(); - OptionalValue languageCode = OptionalValue.empty(); - OptionalValue updateTime = OptionalValue.empty(); - OptionalValue> variables = OptionalValue.empty(); - OptionalValue version = OptionalValue.empty(); - - @JsonProperty(JSON_PROPERTY_CONTENT) - public Builder setContent(String content) { - this.content = OptionalValue.of(content); - return this; - } - - @JsonProperty(JSON_PROPERTY_CREATE_TIME) - public Builder setCreateTime(Instant createTime) { - this.createTime = OptionalValue.of(createTime); - return this; - } - - @JsonProperty(JSON_PROPERTY_LANGUAGE_CODE) - public Builder setLanguageCode(String languageCode) { - this.languageCode = OptionalValue.of(languageCode); - return this; - } - - @JsonProperty(JSON_PROPERTY_UPDATE_TIME) - public Builder setUpdateTime(Instant updateTime) { - this.updateTime = OptionalValue.of(updateTime); - return this; - } - - @JsonProperty(JSON_PROPERTY_VARIABLES) - public Builder setVariables(List variables) { - this.variables = OptionalValue.of(variables); - return this; - } - - @JsonProperty(JSON_PROPERTY_VERSION) - public Builder setVersion(String version) { - this.version = OptionalValue.of(version); - return this; - } - - public TemplateTranslation build() { - return new TemplateTranslationImpl( - content, createTime, languageCode, updateTime, variables, version); - } - } -} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/TemplateV1.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/TemplateV1.java deleted file mode 100644 index 2f5c89395..000000000 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/TemplateV1.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Template Management API - * - * OpenAPI document version: 1.0 - * 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.conversation.templates.models.v1; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import java.time.Instant; -import java.util.List; - -/** TemplateV1 */ -@JsonDeserialize(builder = TemplateV1Impl.Builder.class) -public interface TemplateV1 { - - /** - * Get channel - * - * @return channel - */ - TemplateChannel getChannel(); - - /** - * Timestamp when the template was created. - * - * @return createTime - */ - Instant getCreateTime(); - - /** - * The default translation to use if not specified. Specified as a BCP-47 language_code - * and the language_code must exist in the translations list. - * - * @return defaultTranslation - */ - String getDefaultTranslation(); - - /** - * The description of the template. - * - * @return description - */ - String getDescription(); - - /** - * The id of the template. Specify this yourself during creation otherwise we will generate an ID - * for you. This has to be unique for a given project. - * - * @return id - */ - String getId(); - - /** - * List of translations for the template. - * - * @return translations - */ - List getTranslations(); - - /** - * Timestamp when the template was updated. - * - * @return updateTime - */ - Instant getUpdateTime(); - - /** - * Getting builder - * - * @return New Builder instance - */ - static Builder builder() { - return new TemplateV1Impl.Builder(); - } - - /** Dedicated Builder */ - interface Builder { - - /** - * see getter - * - * @param channel see getter - * @return Current builder - * @see #getChannel - */ - Builder setChannel(TemplateChannel channel); - - /** - * see getter - * - * @param createTime see getter - * @return Current builder - * @see #getCreateTime - */ - Builder setCreateTime(Instant createTime); - - /** - * see getter - * - * @param defaultTranslation see getter - * @return Current builder - * @see #getDefaultTranslation - */ - Builder setDefaultTranslation(String defaultTranslation); - - /** - * see getter - * - * @param description see getter - * @return Current builder - * @see #getDescription - */ - Builder setDescription(String description); - - /** - * see getter - * - * @param id see getter - * @return Current builder - * @see #getId - */ - Builder setId(String id); - - /** - * see getter - * - * @param translations see getter - * @return Current builder - * @see #getTranslations - */ - Builder setTranslations(List translations); - - /** - * see getter - * - * @param updateTime see getter - * @return Current builder - * @see #getUpdateTime - */ - Builder setUpdateTime(Instant updateTime); - - /** - * Create instance - * - * @return The instance build with current builder values - */ - TemplateV1 build(); - } -} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/TemplateV1Impl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/TemplateV1Impl.java deleted file mode 100644 index 2429a6912..000000000 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/TemplateV1Impl.java +++ /dev/null @@ -1,259 +0,0 @@ -package com.sinch.sdk.domains.conversation.templates.models.v1; - -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.List; -import java.util.Objects; - -@JsonPropertyOrder({ - TemplateV1Impl.JSON_PROPERTY_CHANNEL, - TemplateV1Impl.JSON_PROPERTY_CREATE_TIME, - TemplateV1Impl.JSON_PROPERTY_DEFAULT_TRANSLATION, - TemplateV1Impl.JSON_PROPERTY_DESCRIPTION, - TemplateV1Impl.JSON_PROPERTY_ID, - TemplateV1Impl.JSON_PROPERTY_TRANSLATIONS, - TemplateV1Impl.JSON_PROPERTY_UPDATE_TIME -}) -@JsonFilter("uninitializedFilter") -@JsonInclude(value = JsonInclude.Include.CUSTOM) -public class TemplateV1Impl implements TemplateV1 { - private static final long serialVersionUID = 1L; - - public static final String JSON_PROPERTY_CHANNEL = "channel"; - - private OptionalValue channel; - - public static final String JSON_PROPERTY_CREATE_TIME = "create_time"; - - private OptionalValue createTime; - - public static final String JSON_PROPERTY_DEFAULT_TRANSLATION = "default_translation"; - - private OptionalValue defaultTranslation; - - public static final String JSON_PROPERTY_DESCRIPTION = "description"; - - private OptionalValue description; - - public static final String JSON_PROPERTY_ID = "id"; - - private OptionalValue id; - - public static final String JSON_PROPERTY_TRANSLATIONS = "translations"; - - private OptionalValue> translations; - - public static final String JSON_PROPERTY_UPDATE_TIME = "update_time"; - - private OptionalValue updateTime; - - public TemplateV1Impl() {} - - protected TemplateV1Impl( - OptionalValue channel, - OptionalValue createTime, - OptionalValue defaultTranslation, - OptionalValue description, - OptionalValue id, - OptionalValue> translations, - OptionalValue updateTime) { - this.channel = channel; - this.createTime = createTime; - this.defaultTranslation = defaultTranslation; - this.description = description; - this.id = id; - this.translations = translations; - this.updateTime = updateTime; - } - - @JsonIgnore - public TemplateChannel getChannel() { - return channel.orElse(null); - } - - @JsonProperty(JSON_PROPERTY_CHANNEL) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public OptionalValue channel() { - return channel; - } - - @JsonIgnore - public Instant getCreateTime() { - return createTime.orElse(null); - } - - @JsonProperty(JSON_PROPERTY_CREATE_TIME) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public OptionalValue createTime() { - return createTime; - } - - @JsonIgnore - public String getDefaultTranslation() { - return defaultTranslation.orElse(null); - } - - @JsonProperty(JSON_PROPERTY_DEFAULT_TRANSLATION) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public OptionalValue defaultTranslation() { - return defaultTranslation; - } - - @JsonIgnore - public String getDescription() { - return description.orElse(null); - } - - @JsonProperty(JSON_PROPERTY_DESCRIPTION) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public OptionalValue description() { - return description; - } - - @JsonIgnore - public String getId() { - return id.orElse(null); - } - - @JsonProperty(JSON_PROPERTY_ID) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public OptionalValue id() { - return id; - } - - @JsonIgnore - public List getTranslations() { - return translations.orElse(null); - } - - @JsonProperty(JSON_PROPERTY_TRANSLATIONS) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public OptionalValue> translations() { - return translations; - } - - @JsonIgnore - public Instant getUpdateTime() { - return updateTime.orElse(null); - } - - @JsonProperty(JSON_PROPERTY_UPDATE_TIME) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public OptionalValue updateTime() { - return updateTime; - } - - /** Return true if this typeTemplate object is equal to o. */ - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - TemplateV1Impl typeTemplate = (TemplateV1Impl) o; - return Objects.equals(this.channel, typeTemplate.channel) - && Objects.equals(this.createTime, typeTemplate.createTime) - && Objects.equals(this.defaultTranslation, typeTemplate.defaultTranslation) - && Objects.equals(this.description, typeTemplate.description) - && Objects.equals(this.id, typeTemplate.id) - && Objects.equals(this.translations, typeTemplate.translations) - && Objects.equals(this.updateTime, typeTemplate.updateTime); - } - - @Override - public int hashCode() { - return Objects.hash( - channel, createTime, defaultTranslation, description, id, translations, updateTime); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class TemplateV1Impl {\n"); - sb.append(" channel: ").append(toIndentedString(channel)).append("\n"); - sb.append(" createTime: ").append(toIndentedString(createTime)).append("\n"); - sb.append(" defaultTranslation: ").append(toIndentedString(defaultTranslation)).append("\n"); - sb.append(" description: ").append(toIndentedString(description)).append("\n"); - sb.append(" id: ").append(toIndentedString(id)).append("\n"); - sb.append(" translations: ").append(toIndentedString(translations)).append("\n"); - sb.append(" updateTime: ").append(toIndentedString(updateTime)).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 TemplateV1.Builder { - OptionalValue channel = OptionalValue.empty(); - OptionalValue createTime = OptionalValue.empty(); - OptionalValue defaultTranslation = OptionalValue.empty(); - OptionalValue description = OptionalValue.empty(); - OptionalValue id = OptionalValue.empty(); - OptionalValue> translations = OptionalValue.empty(); - OptionalValue updateTime = OptionalValue.empty(); - - @JsonProperty(JSON_PROPERTY_CHANNEL) - public Builder setChannel(TemplateChannel channel) { - this.channel = OptionalValue.of(channel); - return this; - } - - @JsonProperty(JSON_PROPERTY_CREATE_TIME) - public Builder setCreateTime(Instant createTime) { - this.createTime = OptionalValue.of(createTime); - return this; - } - - @JsonProperty(JSON_PROPERTY_DEFAULT_TRANSLATION) - public Builder setDefaultTranslation(String defaultTranslation) { - this.defaultTranslation = OptionalValue.of(defaultTranslation); - return this; - } - - @JsonProperty(JSON_PROPERTY_DESCRIPTION) - public Builder setDescription(String description) { - this.description = OptionalValue.of(description); - return this; - } - - @JsonProperty(JSON_PROPERTY_ID) - public Builder setId(String id) { - this.id = OptionalValue.of(id); - return this; - } - - @JsonProperty(JSON_PROPERTY_TRANSLATIONS) - public Builder setTranslations(List translations) { - this.translations = OptionalValue.of(translations); - return this; - } - - @JsonProperty(JSON_PROPERTY_UPDATE_TIME) - public Builder setUpdateTime(Instant updateTime) { - this.updateTime = OptionalValue.of(updateTime); - return this; - } - - public TemplateV1 build() { - return new TemplateV1Impl( - channel, createTime, defaultTranslation, description, id, translations, updateTime); - } - } -} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/internal/V1ListTemplatesResponseInternal.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/internal/V1ListTemplatesResponseInternal.java deleted file mode 100644 index aedd053ea..000000000 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/internal/V1ListTemplatesResponseInternal.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Template Management API - * - * OpenAPI document version: 1.0 - * 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.conversation.templates.models.v1.internal; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateV1; -import java.util.List; - -/** V1ListTemplatesResponseInternal */ -@JsonDeserialize(builder = V1ListTemplatesResponseInternalImpl.Builder.class) -public interface V1ListTemplatesResponseInternal { - - /** - * Get templates - * - * @return templates - */ - List getTemplates(); - - /** - * Getting builder - * - * @return New Builder instance - */ - static Builder builder() { - return new V1ListTemplatesResponseInternalImpl.Builder(); - } - - /** Dedicated Builder */ - interface Builder { - - /** - * see getter - * - * @param templates see getter - * @return Current builder - * @see #getTemplates - */ - Builder setTemplates(List templates); - - /** - * Create instance - * - * @return The instance build with current builder values - */ - V1ListTemplatesResponseInternal build(); - } -} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/internal/V1ListTemplatesResponseInternalImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/internal/V1ListTemplatesResponseInternalImpl.java deleted file mode 100644 index c8f9b4919..000000000 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v1/internal/V1ListTemplatesResponseInternalImpl.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.sinch.sdk.domains.conversation.templates.models.v1.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.conversation.templates.models.v1.TemplateV1; -import java.util.List; -import java.util.Objects; - -@JsonPropertyOrder({V1ListTemplatesResponseInternalImpl.JSON_PROPERTY_TEMPLATES}) -@JsonFilter("uninitializedFilter") -@JsonInclude(value = JsonInclude.Include.CUSTOM) -public class V1ListTemplatesResponseInternalImpl implements V1ListTemplatesResponseInternal { - private static final long serialVersionUID = 1L; - - public static final String JSON_PROPERTY_TEMPLATES = "templates"; - - private OptionalValue> templates; - - public V1ListTemplatesResponseInternalImpl() {} - - protected V1ListTemplatesResponseInternalImpl(OptionalValue> templates) { - this.templates = templates; - } - - @JsonIgnore - public List getTemplates() { - return templates.orElse(null); - } - - @JsonProperty(JSON_PROPERTY_TEMPLATES) - @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public OptionalValue> templates() { - return templates; - } - - /** Return true if this v1ListTemplatesResponse object is equal to o. */ - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - V1ListTemplatesResponseInternalImpl v1ListTemplatesResponse = - (V1ListTemplatesResponseInternalImpl) o; - return Objects.equals(this.templates, v1ListTemplatesResponse.templates); - } - - @Override - public int hashCode() { - return Objects.hash(templates); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class V1ListTemplatesResponseInternalImpl {\n"); - sb.append(" templates: ").append(toIndentedString(templates)).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 V1ListTemplatesResponseInternal.Builder { - OptionalValue> templates = OptionalValue.empty(); - - @JsonProperty(JSON_PROPERTY_TEMPLATES) - public Builder setTemplates(List templates) { - this.templates = OptionalValue.of(templates); - return this; - } - - public V1ListTemplatesResponseInternal build() { - return new V1ListTemplatesResponseInternalImpl(templates); - } - } -} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/V2ListTemplatesResponseInternal.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/ListTemplatesResponseInternal.java similarity index 78% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/V2ListTemplatesResponseInternal.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/ListTemplatesResponseInternal.java index 7d641f5c3..dc718b171 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/V2ListTemplatesResponseInternal.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/ListTemplatesResponseInternal.java @@ -14,9 +14,9 @@ import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2; import java.util.List; -/** V2ListTemplatesResponseInternal */ -@JsonDeserialize(builder = V2ListTemplatesResponseInternalImpl.Builder.class) -public interface V2ListTemplatesResponseInternal { +/** ListTemplatesResponseInternal */ +@JsonDeserialize(builder = ListTemplatesResponseInternalImpl.Builder.class) +public interface ListTemplatesResponseInternal { /** * Get templates @@ -31,7 +31,7 @@ public interface V2ListTemplatesResponseInternal { * @return New Builder instance */ static Builder builder() { - return new V2ListTemplatesResponseInternalImpl.Builder(); + return new ListTemplatesResponseInternalImpl.Builder(); } /** Dedicated Builder */ @@ -51,6 +51,6 @@ interface Builder { * * @return The instance build with current builder values */ - V2ListTemplatesResponseInternal build(); + ListTemplatesResponseInternal build(); } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/V2ListTemplatesResponseInternalImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/ListTemplatesResponseInternalImpl.java similarity index 77% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/V2ListTemplatesResponseInternalImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/ListTemplatesResponseInternalImpl.java index 3226a8f02..dac96aba4 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/V2ListTemplatesResponseInternalImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/ListTemplatesResponseInternalImpl.java @@ -11,19 +11,19 @@ import java.util.List; import java.util.Objects; -@JsonPropertyOrder({V2ListTemplatesResponseInternalImpl.JSON_PROPERTY_TEMPLATES}) +@JsonPropertyOrder({ListTemplatesResponseInternalImpl.JSON_PROPERTY_TEMPLATES}) @JsonFilter("uninitializedFilter") @JsonInclude(value = JsonInclude.Include.CUSTOM) -public class V2ListTemplatesResponseInternalImpl implements V2ListTemplatesResponseInternal { +public class ListTemplatesResponseInternalImpl implements ListTemplatesResponseInternal { private static final long serialVersionUID = 1L; public static final String JSON_PROPERTY_TEMPLATES = "templates"; private OptionalValue> templates; - public V2ListTemplatesResponseInternalImpl() {} + public ListTemplatesResponseInternalImpl() {} - protected V2ListTemplatesResponseInternalImpl(OptionalValue> templates) { + protected ListTemplatesResponseInternalImpl(OptionalValue> templates) { this.templates = templates; } @@ -47,8 +47,8 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) { return false; } - V2ListTemplatesResponseInternalImpl v2ListTemplatesResponse = - (V2ListTemplatesResponseInternalImpl) o; + ListTemplatesResponseInternalImpl v2ListTemplatesResponse = + (ListTemplatesResponseInternalImpl) o; return Objects.equals(this.templates, v2ListTemplatesResponse.templates); } @@ -60,7 +60,7 @@ public int hashCode() { @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("class V2ListTemplatesResponseInternalImpl {\n"); + sb.append("class ListTemplatesResponseInternalImpl {\n"); sb.append(" templates: ").append(toIndentedString(templates)).append("\n"); sb.append("}"); return sb.toString(); @@ -77,7 +77,7 @@ private String toIndentedString(Object o) { } @JsonPOJOBuilder(withPrefix = "set") - static class Builder implements V2ListTemplatesResponseInternal.Builder { + static class Builder implements ListTemplatesResponseInternal.Builder { OptionalValue> templates = OptionalValue.empty(); @JsonProperty(JSON_PROPERTY_TEMPLATES) @@ -86,8 +86,8 @@ public Builder setTemplates(List templates) { return this; } - public V2ListTemplatesResponseInternal build() { - return new V2ListTemplatesResponseInternalImpl(templates); + public ListTemplatesResponseInternal build() { + return new ListTemplatesResponseInternalImpl(templates); } } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/V2ListTranslationsResponseInternal.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/ListTranslationsResponseInternal.java similarity index 68% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/V2ListTranslationsResponseInternal.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/ListTranslationsResponseInternal.java index 1af1e86d5..e8cbab1c2 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/V2ListTranslationsResponseInternal.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/ListTranslationsResponseInternal.java @@ -11,19 +11,19 @@ package com.sinch.sdk.domains.conversation.templates.models.v2.internal; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslationBase; +import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslation; import java.util.List; -/** V2ListTranslationsResponseInternal */ -@JsonDeserialize(builder = V2ListTranslationsResponseInternalImpl.Builder.class) -public interface V2ListTranslationsResponseInternal { +/** ListTranslationsResponseInternal */ +@JsonDeserialize(builder = ListTranslationsResponseInternalImpl.Builder.class) +public interface ListTranslationsResponseInternal { /** * Get translations * * @return translations */ - List getTranslations(); + List getTranslations(); /** * Getting builder @@ -31,7 +31,7 @@ public interface V2ListTranslationsResponseInternal { * @return New Builder instance */ static Builder builder() { - return new V2ListTranslationsResponseInternalImpl.Builder(); + return new ListTranslationsResponseInternalImpl.Builder(); } /** Dedicated Builder */ @@ -44,13 +44,13 @@ interface Builder { * @return Current builder * @see #getTranslations */ - Builder setTranslations(List translations); + Builder setTranslations(List translations); /** * Create instance * * @return The instance build with current builder values */ - V2ListTranslationsResponseInternal build(); + ListTranslationsResponseInternal build(); } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/V2ListTranslationsResponseInternalImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/ListTranslationsResponseInternalImpl.java similarity index 64% rename from openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/V2ListTranslationsResponseInternalImpl.java rename to openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/ListTranslationsResponseInternalImpl.java index f7304a72f..76ab063bf 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/V2ListTranslationsResponseInternalImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/internal/ListTranslationsResponseInternalImpl.java @@ -7,35 +7,35 @@ 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.templates.models.v2.TemplateTranslationBase; +import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslation; import java.util.List; import java.util.Objects; -@JsonPropertyOrder({V2ListTranslationsResponseInternalImpl.JSON_PROPERTY_TRANSLATIONS}) +@JsonPropertyOrder({ListTranslationsResponseInternalImpl.JSON_PROPERTY_TRANSLATIONS}) @JsonFilter("uninitializedFilter") @JsonInclude(value = JsonInclude.Include.CUSTOM) -public class V2ListTranslationsResponseInternalImpl implements V2ListTranslationsResponseInternal { +public class ListTranslationsResponseInternalImpl implements ListTranslationsResponseInternal { private static final long serialVersionUID = 1L; public static final String JSON_PROPERTY_TRANSLATIONS = "translations"; - private OptionalValue> translations; + private OptionalValue> translations; - public V2ListTranslationsResponseInternalImpl() {} + public ListTranslationsResponseInternalImpl() {} - protected V2ListTranslationsResponseInternalImpl( - OptionalValue> translations) { + protected ListTranslationsResponseInternalImpl( + OptionalValue> translations) { this.translations = translations; } @JsonIgnore - public List getTranslations() { + public List getTranslations() { return translations.orElse(null); } @JsonProperty(JSON_PROPERTY_TRANSLATIONS) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public OptionalValue> translations() { + public OptionalValue> translations() { return translations; } @@ -48,8 +48,8 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) { return false; } - V2ListTranslationsResponseInternalImpl v2ListTranslationsResponse = - (V2ListTranslationsResponseInternalImpl) o; + ListTranslationsResponseInternalImpl v2ListTranslationsResponse = + (ListTranslationsResponseInternalImpl) o; return Objects.equals(this.translations, v2ListTranslationsResponse.translations); } @@ -61,7 +61,7 @@ public int hashCode() { @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("class V2ListTranslationsResponseInternalImpl {\n"); + sb.append("class ListTranslationsResponseInternalImpl {\n"); sb.append(" translations: ").append(toIndentedString(translations)).append("\n"); sb.append("}"); return sb.toString(); @@ -78,17 +78,17 @@ private String toIndentedString(Object o) { } @JsonPOJOBuilder(withPrefix = "set") - static class Builder implements V2ListTranslationsResponseInternal.Builder { - OptionalValue> translations = OptionalValue.empty(); + static class Builder implements ListTranslationsResponseInternal.Builder { + OptionalValue> translations = OptionalValue.empty(); @JsonProperty(JSON_PROPERTY_TRANSLATIONS) - public Builder setTranslations(List translations) { + public Builder setTranslations(List translations) { this.translations = OptionalValue.of(translations); return this; } - public V2ListTranslationsResponseInternal build() { - return new V2ListTranslationsResponseInternalImpl(translations); + public ListTranslationsResponseInternal build() { + return new ListTranslationsResponseInternalImpl(translations); } } } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/request/ListTranslationsQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/request/ListTranslationsQueryParameters.java new file mode 100644 index 000000000..6d387dda1 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/request/ListTranslationsQueryParameters.java @@ -0,0 +1,78 @@ +/* + * Template Management API + * + * OpenAPI document version: 1.0 + * 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.conversation.templates.models.v2.request; + +import com.sinch.sdk.core.models.OptionalValue; + +/** ListTranslationsQueryParameters */ +public interface ListTranslationsQueryParameters { + + /** + * Get languageCode + * + * @return languageCode + */ + OptionalValue getLanguageCode(); + + /** + * Get translationVersion + * + * @return translationVersion + */ + OptionalValue getTranslationVersion(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new ListTranslationsQueryParametersImpl.Builder(); + } + + /** + * Getting builder from existing instance + * + * @return New Builder instance + */ + static Builder builder(ListTranslationsQueryParameters parameters) { + return new ListTranslationsQueryParametersImpl.Builder(parameters); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param languageCode see getter + * @return Current builder + * @see #getLanguageCode + */ + Builder setLanguageCode(String languageCode); + + /** + * see getter + * + * @param translationVersion see getter + * @return Current builder + * @see #getTranslationVersion + */ + Builder setTranslationVersion(String translationVersion); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + ListTranslationsQueryParameters build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/request/ListTranslationsQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/request/ListTranslationsQueryParametersImpl.java new file mode 100644 index 000000000..2dfaef9e9 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/request/ListTranslationsQueryParametersImpl.java @@ -0,0 +1,97 @@ +package com.sinch.sdk.domains.conversation.templates.models.v2.request; + +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +public class ListTranslationsQueryParametersImpl implements ListTranslationsQueryParameters { + + private final OptionalValue languageCode; + private final OptionalValue translationVersion; + + private ListTranslationsQueryParametersImpl( + OptionalValue languageCode, OptionalValue translationVersion) { + this.languageCode = languageCode; + this.translationVersion = translationVersion; + } + + public OptionalValue getLanguageCode() { + return languageCode; + } + + public OptionalValue getTranslationVersion() { + return translationVersion; + } + + /** Return true if this TemplatesV2ListTranslationsQueryParameters object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ListTranslationsQueryParametersImpl templatesV2ListTranslationsQueryParameters = + (ListTranslationsQueryParametersImpl) o; + return Objects.equals( + this.languageCode, templatesV2ListTranslationsQueryParameters.languageCode) + && Objects.equals( + this.translationVersion, templatesV2ListTranslationsQueryParameters.translationVersion); + } + + @Override + public int hashCode() { + return Objects.hash(languageCode, translationVersion); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ListTranslationsQueryParametersImpl {\n"); + sb.append(" languageCode: ").append(toIndentedString(languageCode)).append("\n"); + sb.append(" translationVersion: ").append(toIndentedString(translationVersion)).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 ListTranslationsQueryParameters.Builder { + OptionalValue languageCode = OptionalValue.empty(); + OptionalValue translationVersion = OptionalValue.empty(); + + protected Builder() {} + + protected Builder(ListTranslationsQueryParameters _parameters) { + if (null == _parameters) { + return; + } + ListTranslationsQueryParametersImpl parameters = + (ListTranslationsQueryParametersImpl) _parameters; + this.languageCode = parameters.getLanguageCode(); + this.translationVersion = parameters.getTranslationVersion(); + } + + public Builder setLanguageCode(String languageCode) { + this.languageCode = OptionalValue.of(languageCode); + return this; + } + + public Builder setTranslationVersion(String translationVersion) { + this.translationVersion = OptionalValue.of(translationVersion); + return this; + } + + public ListTranslationsQueryParameters build() { + return new ListTranslationsQueryParametersImpl(languageCode, translationVersion); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/response/TemplatesV2ListResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/response/TemplatesV2ListResponse.java new file mode 100644 index 000000000..4d428bb58 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/response/TemplatesV2ListResponse.java @@ -0,0 +1,48 @@ +/* + * Template Management API + * + * OpenAPI document version: 1.0 + * 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.conversation.templates.models.v2.response; + +import com.sinch.sdk.core.models.pagination.ListResponse; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2; +import java.util.Collection; +import java.util.Collections; + +/** Auto paginated response for list of TemplateV2 */ +public class TemplatesV2ListResponse extends ListResponse { + + private final Page page; + + public TemplatesV2ListResponse(Page page) { + this.page = page; + } + + @Override + public boolean hasNextPage() { + return false; + } + + @Override + public TemplatesV2ListResponse nextPage() { + + return null; + } + + @Override + public Collection getContent() { + return page == null ? Collections.emptyList() : page.getEntities(); + } + + @Override + public String toString() { + return "TemplatesV2ListResponse {" + "page=" + page + '}'; + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/response/TranslationsV2ListResponse.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/response/TranslationsV2ListResponse.java new file mode 100644 index 000000000..c091d6cf4 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/templates/models/v2/response/TranslationsV2ListResponse.java @@ -0,0 +1,48 @@ +/* + * Template Management API + * + * OpenAPI document version: 1.0 + * 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.conversation.templates.models.v2.response; + +import com.sinch.sdk.core.models.pagination.ListResponse; +import com.sinch.sdk.core.models.pagination.Page; +import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslation; +import java.util.Collection; +import java.util.Collections; + +/** Auto paginated response for list of TemplateTranslation */ +public class TranslationsV2ListResponse extends ListResponse { + + private final Page page; + + public TranslationsV2ListResponse(Page page) { + this.page = page; + } + + @Override + public boolean hasNextPage() { + return false; + } + + @Override + public TranslationsV2ListResponse nextPage() { + + return null; + } + + @Override + public Collection getContent() { + return page == null ? Collections.emptyList() : page.getEntities(); + } + + @Override + public String toString() { + return "TranslationsV2ListResponse {" + "page=" + page + '}'; + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v1/TemplateTranslationDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v1/TemplateTranslationDtoTest.java deleted file mode 100644 index 29d89660d..000000000 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v1/TemplateTranslationDtoTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.sinch.sdk.domains.conversation.models.templates.v1; - -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.templates.adapters.TemplatesBaseTest; -import com.sinch.sdk.domains.conversation.models.templates.TemplateVariableDtoTest; -import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateTranslation; -import java.time.Instant; -import java.util.Arrays; -import org.json.JSONException; -import org.junit.jupiter.api.Test; -import org.skyscreamer.jsonassert.JSONAssert; - -@TestWithResources -public class TemplateTranslationDtoTest extends TemplatesBaseTest { - - public static TemplateTranslation expectedDto = - TemplateTranslation.builder() - .setLanguageCode("fr-FR") - .setContent("{\"text_message\":{\"text\":\"Message from a template v1.\"}}") - .setVersion("1") - .setCreateTime(Instant.parse("2024-07-07T02:59:59Z")) - .setUpdateTime(Instant.parse("2024-07-07T06:07:44Z")) - .setVariables(Arrays.asList(TemplateVariableDtoTest.expectedDto)) - .build(); - - @GivenTextResource("/domains/conversation/templates/v1/TemplateTranslationDto.json") - String json; - - @Test - void serialize() throws JsonProcessingException, JSONException { - String serializedString = objectMapper.writeValueAsString(expectedDto); - - JSONAssert.assertEquals(json, serializedString, true); - } - - @Test - void deserialize() throws JsonProcessingException { - Object deserialized = objectMapper.readValue(json, TemplateTranslation.class); - - TestHelpers.recursiveEquals(deserialized, expectedDto); - } -} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v1/TemplateV1DtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v1/TemplateV1DtoTest.java deleted file mode 100644 index bb078ad52..000000000 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v1/TemplateV1DtoTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.sinch.sdk.domains.conversation.models.templates.v1; - -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.templates.adapters.TemplatesBaseTest; -import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateChannel; -import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateV1; -import java.time.Instant; -import java.util.Arrays; -import org.json.JSONException; -import org.junit.jupiter.api.Test; -import org.skyscreamer.jsonassert.JSONAssert; - -@TestWithResources -public class TemplateV1DtoTest extends TemplatesBaseTest { - - public static TemplateV1 expectedDto = - TemplateV1.builder() - .setChannel(TemplateChannel.RCS) - .setCreateTime(Instant.parse("2024-08-26T06:00:00Z")) - .setDefaultTranslation("fr-FR") - .setDescription("template description value") - .setId("id value") - .setTranslations(Arrays.asList(TemplateTranslationDtoTest.expectedDto)) - .setUpdateTime(Instant.parse("2024-08-26T06:07:44Z")) - .build(); - - @GivenTextResource("/domains/conversation/templates/v1/TemplateV1Dto.json") - String json; - - @Test - void serialize() throws JsonProcessingException, JSONException { - String serializedString = objectMapper.writeValueAsString(expectedDto); - - JSONAssert.assertEquals(json, serializedString, true); - } - - @Test - void deserialize() throws JsonProcessingException { - Object deserialized = objectMapper.readValue(json, TemplateV1.class); - - TestHelpers.recursiveEquals(deserialized, expectedDto); - } -} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v1/internal/V1ListTemplatesResponseInternalDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v1/internal/V1ListTemplatesResponseInternalDtoTest.java deleted file mode 100644 index 6dfb25651..000000000 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v1/internal/V1ListTemplatesResponseInternalDtoTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.sinch.sdk.domains.conversation.models.templates.v1.internal; - -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.templates.adapters.TemplatesBaseTest; -import com.sinch.sdk.domains.conversation.models.templates.v1.TemplateV1DtoTest; -import com.sinch.sdk.domains.conversation.templates.models.v1.internal.V1ListTemplatesResponseInternal; -import java.util.Arrays; -import org.json.JSONException; -import org.junit.jupiter.api.Test; -import org.skyscreamer.jsonassert.JSONAssert; - -@TestWithResources -public class V1ListTemplatesResponseInternalDtoTest extends TemplatesBaseTest { - - public static V1ListTemplatesResponseInternal expectedDto = - V1ListTemplatesResponseInternal.builder() - .setTemplates(Arrays.asList(TemplateV1DtoTest.expectedDto)) - .build(); - - @GivenTextResource( - "/domains/conversation/templates/v1/internal/V1ListTemplatesResponseInternalDto.json") - String json; - - @Test - void serialize() throws JsonProcessingException, JSONException { - String serializedString = objectMapper.writeValueAsString(expectedDto); - - JSONAssert.assertEquals(json, serializedString, true); - } - - @Test - void deserialize() throws JsonProcessingException { - Object deserialized = objectMapper.readValue(json, V1ListTemplatesResponseInternal.class); - - TestHelpers.recursiveEquals(deserialized, expectedDto); - } -} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v2/internal/V2ListTemplatesResponseInternalDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v2/internal/V2ListTemplatesResponseInternalDtoTest.java deleted file mode 100644 index beff9c9c1..000000000 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v2/internal/V2ListTemplatesResponseInternalDtoTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.sinch.sdk.domains.conversation.models.templates.v2.internal; - -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.templates.adapters.TemplatesBaseTest; -import com.sinch.sdk.domains.conversation.models.templates.v2.TemplateV2DtoTest; -import com.sinch.sdk.domains.conversation.templates.models.v2.internal.V2ListTemplatesResponseInternal; -import java.util.Arrays; -import org.junit.jupiter.api.Test; - -@TestWithResources -public class V2ListTemplatesResponseInternalDtoTest extends TemplatesBaseTest { - - public static V2ListTemplatesResponseInternal expectedDto = - V2ListTemplatesResponseInternal.builder() - .setTemplates(Arrays.asList(TemplateV2DtoTest.expectedResponseDto)) - .build(); - - @GivenTextResource( - "/domains/conversation/templates/v2/internal/V2ListTemplatesResponseInternalDto.json") - String json; - - @Test - void deserialize() throws JsonProcessingException { - Object deserialized = objectMapper.readValue(json, V2ListTemplatesResponseInternal.class); - - TestHelpers.recursiveEquals(deserialized, expectedDto); - } -} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/AppDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/apps/AppDtoTest.java similarity index 79% rename from openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/AppDtoTest.java rename to openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/apps/AppDtoTest.java index 5a4b2de99..f224a9f07 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/AppDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/apps/AppDtoTest.java @@ -1,24 +1,19 @@ -package com.sinch.sdk.domains.conversation.models.v1; +package com.sinch.sdk.domains.conversation.models.v1.apps; 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.domains.conversation.models.v1.app.CallbackSettings; -import com.sinch.sdk.domains.conversation.models.v1.app.ConversationMetadataReportView; -import com.sinch.sdk.domains.conversation.models.v1.app.DeliveryReportBasedFallback; -import com.sinch.sdk.domains.conversation.models.v1.app.DispatchRetentionPolicy; -import com.sinch.sdk.domains.conversation.models.v1.app.DispatchRetentionPolicyType; -import com.sinch.sdk.domains.conversation.models.v1.app.RetentionPolicy; -import com.sinch.sdk.domains.conversation.models.v1.app.RetentionPolicyType; -import com.sinch.sdk.domains.conversation.models.v1.app.SmartConversation; -import com.sinch.sdk.domains.conversation.models.v1.app.request.AppCreateRequest; -import com.sinch.sdk.domains.conversation.models.v1.app.request.AppUpdateRequest; -import com.sinch.sdk.domains.conversation.models.v1.app.response.AppResponse; -import com.sinch.sdk.domains.conversation.models.v1.app.response.ListAppsResponse; -import com.sinch.sdk.domains.conversation.models.v1.app.response.QueueStats; -import com.sinch.sdk.domains.conversation.models.v1.app.response.RateLimits; +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; +import com.sinch.sdk.domains.conversation.models.v1.ProcessingMode; +import com.sinch.sdk.domains.conversation.models.v1.apps.internal.AppsListResponseInternal; +import com.sinch.sdk.domains.conversation.models.v1.apps.request.AppCreateRequest; +import com.sinch.sdk.domains.conversation.models.v1.apps.request.AppUpdateRequest; +import com.sinch.sdk.domains.conversation.models.v1.apps.response.AppResponse; +import com.sinch.sdk.domains.conversation.models.v1.apps.response.QueueStats; +import com.sinch.sdk.domains.conversation.models.v1.apps.response.RateLimits; import com.sinch.sdk.domains.conversation.models.v1.credentials.ChannelIntegrationState; import com.sinch.sdk.domains.conversation.models.v1.credentials.ChannelIntegrationStatus; import com.sinch.sdk.domains.conversation.models.v1.credentials.ConversationChannelCredentials; @@ -26,7 +21,6 @@ import com.sinch.sdk.domains.conversation.models.v1.credentials.StaticTokenCredentials; import java.util.Arrays; import java.util.Collections; -import org.assertj.core.api.Assertions; import org.json.JSONException; import org.junit.jupiter.api.Test; import org.skyscreamer.jsonassert.JSONAssert; @@ -34,6 +28,18 @@ @TestWithResources public class AppDtoTest extends BaseTest { + @GivenJsonResource("/domains/conversation/v1/apps/AppListResponseDto.json") + AppsListResponseInternal loadedListAppsResponseDto; + + @GivenJsonResource("/domains/conversation/v1/apps/AppResponseDto.json") + AppResponse loadedAppsResponseDto; + + @GivenTextResource("/domains/conversation/v1/apps/AppCreateRequestDto.json") + String jsonAppCreateRequestDto; + + @GivenTextResource("/domains/conversation/v1/apps/AppUpdateRequestDto.json") + String jsonAppUpdateRequestDto; + public static AppResponse expectedAppResponseDto = AppResponse.builder() .setId("an app id") @@ -67,8 +73,6 @@ public class AppDtoTest extends BaseTest { .build()) .setSmartConversation(SmartConversation.builder().setEnabled(true).build()) .setQueueStats(QueueStats.builder().setOutboundLimit(500000L).setOutboundSize(0L).build()) - // .setPersistMessageStatus(new AppResponsePersistMessageStatusDto().enabled(false)) - // .setMessageSearch(new AppResponseMessageSearchDto().enabled(true)) .setCallbackSettings( CallbackSettings.builder().setSecretForOverriddenCallbackUrls("my secret").build()) .setDeliveryReportBasedFallback( @@ -78,8 +82,10 @@ public class AppDtoTest extends BaseTest { .build()) .setMessageRetrySettings(null) .build(); - public static ListAppsResponse expectedListAppsResponseDto = - ListAppsResponse.builder().setApps(Collections.singletonList(expectedAppResponseDto)).build(); + public static AppsListResponseInternal expectedListAppsResponseDto = + AppsListResponseInternal.builder() + .setApps(Collections.singletonList(expectedAppResponseDto)) + .build(); public static AppCreateRequest appCreateRequestDto = AppCreateRequest.builder() .setChannelCredentials( @@ -151,20 +157,14 @@ public class AppDtoTest extends BaseTest { CallbackSettings.builder().setSecretForOverriddenCallbackUrls("my secret").build()) .build(); - @GivenJsonResource("/domains/conversation/v1/AppListResponseDto.json") - ListAppsResponse loadedListAppsResponseDto; - - @GivenTextResource("/domains/conversation/v1/AppCreateRequestDto.json") - String jsonAppCreateRequestDto; - - @GivenTextResource("/domains/conversation/v1/AppUpdateRequestDto.json") - String jsonAppUpdateRequestDto; + @Test + void deserializeAppResponseDto() { + TestHelpers.recursiveEquals(loadedAppsResponseDto, expectedAppResponseDto); + } @Test void deserializeListAppsResponseDto() { - Assertions.assertThat(loadedListAppsResponseDto) - .usingRecursiveComparison() - .isEqualTo(expectedListAppsResponseDto); + TestHelpers.recursiveEquals(loadedListAppsResponseDto, expectedListAppsResponseDto); } @Test diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/capability/response/QueryCapabilityResponseDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/capability/response/QueryCapabilityResponseDtoTest.java index 3219b3c52..f3cd3ca93 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/capability/response/QueryCapabilityResponseDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/capability/response/QueryCapabilityResponseDtoTest.java @@ -14,7 +14,7 @@ public class QueryCapabilityResponseDtoTest extends ConversationBaseTest { @GivenTextResource("domains/conversation/v1/capability/response/QueryCapabilityResponseDto.json") - String jsonTranscodeMessageResponseDto; + String jsonQueryCapabilityResponseDto; public static QueryCapabilityResponse expectedQueryCapabilityResponseDto = QueryCapabilityResponse.builder() @@ -31,7 +31,7 @@ public class QueryCapabilityResponseDtoTest extends ConversationBaseTest { @Test void deserializeDto() throws JsonProcessingException { Object deserialized = - objectMapper.readValue(jsonTranscodeMessageResponseDto, QueryCapabilityResponse.class); + objectMapper.readValue(jsonQueryCapabilityResponseDto, QueryCapabilityResponse.class); TestHelpers.recursiveEquals(deserialized, expectedQueryCapabilityResponseDto); } diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/contact/ContactDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/contacts/ContactDtoTest.java similarity index 66% rename from openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/contact/ContactDtoTest.java rename to openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/contacts/ContactDtoTest.java index 5fbd8ed8a..f5bba3e92 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/contact/ContactDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/contacts/ContactDtoTest.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.models.v1.contact; +package com.sinch.sdk.domains.conversation.models.v1.contacts; import com.adelean.inject.resources.junit.jupiter.GivenJsonResource; import com.adelean.inject.resources.junit.jupiter.GivenTextResource; @@ -11,13 +11,15 @@ import com.sinch.sdk.domains.conversation.models.v1.ChannelRecipientIdentity; import com.sinch.sdk.domains.conversation.models.v1.ContactId; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactCreateRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.GetChannelProfileConversationChannel; -import com.sinch.sdk.domains.conversation.models.v1.contact.request.GetChannelProfileRequest; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.GetChannelProfileResponse; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.IdentityConflicts; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.ListContactsResponse; -import com.sinch.sdk.domains.conversation.models.v1.contact.response.ListIdentityConflictsResponse; +import com.sinch.sdk.domains.conversation.models.v1.contacts.internal.ContactsListResponseInternal; +import com.sinch.sdk.domains.conversation.models.v1.contacts.internal.IdentityConflictsListResponseInternal; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ContactCreateRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.ConversationMergeStrategy; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.GetChannelProfileConversationChannel; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.GetChannelProfileRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.request.MergeContactRequest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.response.GetChannelProfileResponse; +import com.sinch.sdk.domains.conversation.models.v1.contacts.response.IdentityConflicts; import java.util.Arrays; import java.util.Collections; import org.json.JSONException; @@ -27,6 +29,44 @@ @TestWithResources public class ContactDtoTest extends ConversationBaseTest { + @GivenJsonResource("/domains/conversation/v1/contacts/ContactListResponseDtoPage0.json") + ContactsListResponseInternal loadedContactListResponseDtoPage0; + + @GivenJsonResource("/domains/conversation/v1/contacts/ContactListResponseDtoPage1.json") + ContactsListResponseInternal loadedContactListResponseDtoPage1; + + @GivenTextResource("/domains/conversation/v1/contacts/ContactCreateRequestDto.json") + String jsonContactCreateRequestDto; + + @GivenTextResource("/domains/conversation/v1/contacts/ContactUpdateRequestDto.json") + String jsonContactUpdateRequestDto; + + @GivenTextResource("/domains/conversation/v1/contacts/ContactMergeRequestDto.json") + String jsonContactMergeRequestDto; + + @GivenJsonResource("/domains/conversation/v1/contacts/ContactDto.json") + Contact loadedContactResponseDto; + + @GivenTextResource( + "/domains/conversation/v1/contacts/ContactGetChannelProfileByChannelRequestDto.json") + String jsonContactGetChannelProfileByChannelRequestDto; + + @GivenTextResource( + "/domains/conversation/v1/contacts/ContactGetChannelProfileByContactRequestDto.json") + String jsonContactGetChannelProfileByContactRequestDto; + + @GivenJsonResource("/domains/conversation/v1/contacts/ContactGetChannelResponseDto.json") + GetChannelProfileResponse loadedContactGetChannelResponseDto; + + @GivenJsonResource("/domains/conversation/v1/contacts/IdentityConflictsDto.json") + IdentityConflicts loadedIdentityConflictsDto0; + + @GivenJsonResource("/domains/conversation/v1/contacts/ListIdentityConflictsResponseDtoPage0.json") + IdentityConflictsListResponseInternal loadedListIdentityConflictsResponseDtoPage0; + + @GivenJsonResource("/domains/conversation/v1/contacts/ListIdentityConflictsResponseDtoPage1.json") + IdentityConflictsListResponseInternal loadedListIdentityConflictsResponseDtoPage1; + public static Contact updateContactRequestDto = Contact.builder() .setChannelIdentities( @@ -43,7 +83,7 @@ public class ContactDtoTest extends ConversationBaseTest { .setMetadata("metadata value") .setLanguage(ContactLanguage.from("UNSPECIFIED")) .build(); - public static Contact expectedContactResponseDto = + public static Contact expectedContactsListItemResponseDto = Contact.builder() .setId("a contact id") .setChannelIdentities( @@ -80,7 +120,14 @@ public class ContactDtoTest extends ConversationBaseTest { .setMetadata("metadata value") .setLanguage(ContactLanguage.AR) .build(); - public static Contact expectedCreatedContactResponseDto = + + public static MergeContactRequest mergeContactRequestDto = + MergeContactRequest.builder() + .setSourceId("foo 2") + .setStrategy(ConversationMergeStrategy.MERGE) + .build(); + + public static Contact expectedContactResponseDto = Contact.builder() .setId("my created contact ID") .setChannelIdentities( @@ -101,13 +148,13 @@ public class ContactDtoTest extends ConversationBaseTest { .setMetadata("metadata value") .setLanguage(ContactLanguage.AR) .build(); - public static ListContactsResponse expectedContactListResponseDtoPage0 = - ListContactsResponse.builder() - .setContacts(Collections.singletonList(expectedContactResponseDto)) + public static ContactsListResponseInternal expectedContactListResponseDtoPage0 = + ContactsListResponseInternal.builder() + .setContacts(Collections.singletonList(expectedContactsListItemResponseDto)) .setNextPageToken("the next page token value") .build(); - public static ListContactsResponse expectedContactListResponseDtoPage1 = - ListContactsResponse.builder() + public static ContactsListResponseInternal expectedContactListResponseDtoPage1 = + ContactsListResponseInternal.builder() .setContacts(Collections.emptyList()) .setNextPageToken("") .build(); @@ -139,48 +186,18 @@ public class ContactDtoTest extends ConversationBaseTest { Arrays.asList("01W4FFL35P4NC4K35CONTACT001", "01W4FFL35P4NC4K35CONTACT002")) .build(); - public static ListIdentityConflictsResponse expectedListIdentityConflictsResponseDtoPage0 = - ListIdentityConflictsResponse.builder() - .setConflicts(Collections.singletonList(expectedIdentityConflictsDto0)) - .setNextPageToken("the next page token value") - .build(); - public static ListIdentityConflictsResponse expectedListIdentityConflictsResponseDtoPage1 = - ListIdentityConflictsResponse.builder() - .setConflicts(Collections.emptyList()) - .setNextPageToken("") - .build(); - - @GivenJsonResource("/domains/conversation/v1/contact/ContactListResponseDtoPage0.json") - ListContactsResponse loadedContactListResponseDtoPage0; - - @GivenJsonResource("/domains/conversation/v1/contact/ContactListResponseDtoPage1.json") - ListContactsResponse loadedContactListResponseDtoPage1; - - @GivenTextResource("/domains/conversation/v1/contact/ContactCreateRequestDto.json") - String jsonContactCreateRequestDto; - - @GivenJsonResource("/domains/conversation/v1/contact/ContactDto.json") - Contact loadedContactCreateResponseDto; - - @GivenTextResource( - "/domains/conversation/v1/contact/ContactGetChannelProfileByChannelRequestDto.json") - String jsonContactGetChannelProfileByChannelRequestDto; - - @GivenTextResource( - "/domains/conversation/v1/contact/ContactGetChannelProfileByContactRequestDto.json") - String jsonContactGetChannelProfileByContactRequestDto; - - @GivenJsonResource("/domains/conversation/v1/contact/ContactGetChannelResponseDto.json") - GetChannelProfileResponse loadedContactGetChannelResponseDto; - - @GivenJsonResource("/domains/conversation/v1/contact/IdentityConflictsDto.json") - IdentityConflicts loadedIdentityConflictsDto0; - - @GivenJsonResource("/domains/conversation/v1/contact/ListIdentityConflictsResponseDtoPage0.json") - ListIdentityConflictsResponse loadedListIdentityConflictsResponseDtoPage0; - - @GivenJsonResource("/domains/conversation/v1/contact/ListIdentityConflictsResponseDtoPage1.json") - ListIdentityConflictsResponse loadedListIdentityConflictsResponseDtoPage1; + public static IdentityConflictsListResponseInternal + expectedListIdentityConflictsResponseDtoPage0 = + IdentityConflictsListResponseInternal.builder() + .setConflicts(Collections.singletonList(expectedIdentityConflictsDto0)) + .setNextPageToken("the next page token value") + .build(); + public static IdentityConflictsListResponseInternal + expectedListIdentityConflictsResponseDtoPage1 = + IdentityConflictsListResponseInternal.builder() + .setConflicts(Collections.emptyList()) + .setNextPageToken("") + .build(); @Test void deserializeContactListResponseDtoPage0() { @@ -196,7 +213,7 @@ void deserializeContactListResponseDtoPage1() { @Test void deserializeContactCreateResponseDto() { - TestHelpers.recursiveEquals(loadedContactCreateResponseDto, expectedCreatedContactResponseDto); + TestHelpers.recursiveEquals(loadedContactResponseDto, expectedContactResponseDto); } @Test @@ -206,6 +223,20 @@ void serializeContactCreateRequestDto() throws JsonProcessingException, JSONExce JSONAssert.assertEquals(jsonContactCreateRequestDto, serializedString, true); } + @Test + void serializeContactUpdateRequestDto() throws JsonProcessingException, JSONException { + String serializedString = objectMapper.writeValueAsString(updateContactRequestDto); + + JSONAssert.assertEquals(jsonContactUpdateRequestDto, serializedString, true); + } + + @Test + void serializeContactMergeRequestDto() throws JsonProcessingException, JSONException { + String serializedString = objectMapper.writeValueAsString(mergeContactRequestDto); + + JSONAssert.assertEquals(jsonContactMergeRequestDto, serializedString, true); + } + @Test void serializeContactGetChannelProfileByChannelRequestDto() throws JsonProcessingException, JSONException { diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/ConversationDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/ConversationDtoTest.java index e792e56d0..068ecfa9d 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/ConversationDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/ConversationDtoTest.java @@ -6,7 +6,6 @@ import com.sinch.sdk.core.TestHelpers; import com.sinch.sdk.domains.conversation.api.v1.adapters.ConversationBaseTest; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; -import com.sinch.sdk.domains.conversation.models.v1.conversation.Conversation; import java.time.Instant; import java.util.Collections; import org.json.JSONException; diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/request/CreateConversationRequestTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/request/CreateConversationRequestTest.java index ddf9b00a9..3d75f276d 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/request/CreateConversationRequestTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/request/CreateConversationRequestTest.java @@ -5,7 +5,6 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.sinch.sdk.domains.conversation.api.v1.adapters.ConversationBaseTest; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.CreateConversationRequest; import com.sinch.sdk.domains.conversation.models.v1.messages.types.text.TextMessage; import java.util.Collections; import org.json.JSONException; diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectEventDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectEventDtoTest.java index 309e0435a..717e1d076 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectEventDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectEventDtoTest.java @@ -6,7 +6,6 @@ import com.sinch.sdk.domains.conversation.api.v1.adapters.ConversationBaseTest; import com.sinch.sdk.domains.conversation.models.v1.ChannelIdentityDtoTest; import com.sinch.sdk.domains.conversation.models.v1.ProcessingMode; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.InjectEventRequest; import com.sinch.sdk.domains.conversation.models.v1.events.types.GenericEventDtoTest; import java.time.Instant; import org.json.JSONException; diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectMessageDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectMessageDtoTest.java index 936b7d545..2a9482b6a 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectMessageDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/request/InjectMessageDtoTest.java @@ -7,7 +7,6 @@ import com.sinch.sdk.domains.conversation.models.v1.ChannelIdentityDtoTest; import com.sinch.sdk.domains.conversation.models.v1.ConversationDirection; import com.sinch.sdk.domains.conversation.models.v1.ProcessingMode; -import com.sinch.sdk.domains.conversation.models.v1.conversation.request.InjectMessageRequest; import com.sinch.sdk.domains.conversation.models.v1.messages.AppMessageDtoTest; import com.sinch.sdk.domains.conversation.models.v1.messages.ContactMessageDtoTest; import java.time.Instant; @@ -18,6 +17,14 @@ @TestWithResources public class InjectMessageDtoTest extends ConversationBaseTest { + @GivenTextResource( + "/domains/conversation/v1/conversations/request/InjectAppMessageRequestDto.json") + static String jsonInjectAppMessageRequestDto; + + @GivenTextResource( + "/domains/conversation/v1/conversations/request/InjectContactMessageRequestDto.json") + static String jsonInjectContactMessageRequestDto; + public static InjectMessageRequest injectAppMessage = InjectMessageRequest.builder() .setBody(AppMessageDtoTest.appTextMessageDto) @@ -43,14 +50,6 @@ public class InjectMessageDtoTest extends ConversationBaseTest { .setMetadata("metdata value") .build(); - @GivenTextResource( - "/domains/conversation/v1/conversations/request/InjectAppMessageRequestDto.json") - static String jsonInjectAppMessageRequestDto; - - @GivenTextResource( - "/domains/conversation/v1/conversations/request/InjectContactMessageRequestDto.json") - static String jsonInjectContactMessageRequestDto; - @Test void serializeInjectAppMessageRequestDtoDto() throws JsonProcessingException, JSONException { String serializedString = objectMapper.writeValueAsString(injectAppMessage); diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/response/ConversationRecentMessageDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/response/ConversationRecentMessageDtoTest.java index aba331a06..3f76996f8 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/response/ConversationRecentMessageDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/conversations/response/ConversationRecentMessageDtoTest.java @@ -5,7 +5,6 @@ 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.conversation.response.ConversationRecentMessage; import com.sinch.sdk.domains.conversation.models.v1.conversations.ConversationDtoTest; import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessageDtoTest; import org.junit.jupiter.api.Test; diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/events/request/SendEventRequestDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/events/request/SendEventRequestDtoTest.java index 25102e098..9c4cc2c53 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/events/request/SendEventRequestDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/events/request/SendEventRequestDtoTest.java @@ -34,7 +34,7 @@ public class SendEventRequestDtoTest extends ConversationBaseTest { .build(); @GivenTextResource("/domains/conversation/v1/events/request/SendEventRequestDto.json") - static String jsonSendEventDto; + String jsonSendEventDto; @Test void serializeDto() throws JsonProcessingException, JSONException { diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/events/response/SendEventResponseDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/events/response/SendEventResponseDtoTest.java new file mode 100644 index 000000000..24b7298f2 --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/events/response/SendEventResponseDtoTest.java @@ -0,0 +1,26 @@ +package com.sinch.sdk.domains.conversation.models.v1.events.response; + +import com.adelean.inject.resources.junit.jupiter.GivenJsonResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.conversation.api.v1.adapters.ConversationBaseTest; +import java.time.Instant; +import org.junit.jupiter.api.Test; + +@TestWithResources +public class SendEventResponseDtoTest extends ConversationBaseTest { + + @GivenJsonResource("domains/conversation/v1/events/response/SendEventResponseDto.json") + SendEventResponse sendEventResponseDto; + + public static SendEventResponse expectedResponse = + SendEventResponse.builder() + .setEventId("event id") + .setAcceptedTime(Instant.parse("2024-06-18T12:34:56Z")) + .build(); + + @Test + void deserializeSendEventResponseDto() { + TestHelpers.recursiveEquals(sendEventResponseDto, expectedResponse); + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/request/UpdateMessageDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/request/UpdateMessageDtoTest.java new file mode 100644 index 000000000..908b9e801 --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/request/UpdateMessageDtoTest.java @@ -0,0 +1,26 @@ +package com.sinch.sdk.domains.conversation.models.v1.messages.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.domains.conversation.api.v1.adapters.ConversationBaseTest; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.skyscreamer.jsonassert.JSONAssert; + +@TestWithResources +public class UpdateMessageDtoTest extends ConversationBaseTest { + + @GivenTextResource("/domains/conversation/v1/messages/request/MessageUpdateRequestDto.json") + String jsonMessageUpdateRequestDto; + + public static MessageUpdateRequest updateMessageRequestDto = + MessageUpdateRequest.builder().setMetadata("metadata value").build(); + + @Test + void serializeMessageUpdateRequestDto() throws JsonProcessingException, JSONException { + String serializedString = objectMapper.writeValueAsString(updateMessageRequestDto); + + JSONAssert.assertEquals(jsonMessageUpdateRequestDto, serializedString, true); + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/response/SendMessageResponseDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/response/SendMessageResponseDtoTest.java new file mode 100644 index 000000000..930b8ef78 --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/response/SendMessageResponseDtoTest.java @@ -0,0 +1,26 @@ +package com.sinch.sdk.domains.conversation.models.v1.messages.response; + +import com.adelean.inject.resources.junit.jupiter.GivenJsonResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.conversation.api.v1.adapters.ConversationBaseTest; +import java.time.Instant; +import org.junit.jupiter.api.Test; + +@TestWithResources +public class SendMessageResponseDtoTest extends ConversationBaseTest { + + @GivenJsonResource("domains/conversation/v1/messages/response/SendMessageResponseDto.json") + SendMessageResponse sendMessageResponseDto; + + public static SendMessageResponse expectedResponse = + SendMessageResponse.builder() + .setMessageId("message id") + .setAcceptedTime(Instant.parse("2024-06-18T12:34:56Z")) + .build(); + + @Test + void deserializeSendMessageResponseDto() { + TestHelpers.recursiveEquals(sendMessageResponseDto, expectedResponse); + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/transcoding/request/TranscodeMessageRequestDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/transcoding/request/TranscodeMessageRequestDtoTest.java index 336af19ce..6346e8cb2 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/transcoding/request/TranscodeMessageRequestDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/transcoding/request/TranscodeMessageRequestDtoTest.java @@ -24,7 +24,7 @@ public class TranscodeMessageRequestDtoTest extends ConversationBaseTest { .build(); @GivenTextResource("/domains/conversation/v1/transcoding/request/TranscodeMessageRequestDto.json") - static String jsonTranscodeMessageRequestDto; + String jsonTranscodeMessageRequestDto; @Test void serializeDto() throws JsonProcessingException, JSONException { diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/WebhookDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/WebhookDtoTest.java index 840e8a40e..1d8aba96d 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/WebhookDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/WebhookDtoTest.java @@ -5,6 +5,7 @@ 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.webhooks.request.CreateWebhookRequest; import java.util.Arrays; import org.json.JSONException; import org.junit.jupiter.api.Test; @@ -13,8 +14,8 @@ @TestWithResources public class WebhookDtoTest extends ConversationBaseTest { - public static Webhook expectedRequestDto = - Webhook.builder() + public static CreateWebhookRequest expectedRequestDto = + CreateWebhookRequest.builder() .setAppId("an app id") .setTarget("https://fake.url/ConversationEvent") .setTargetType(WebhookTargetType.HTTP) diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactCreateEventDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactCreateEventDtoTest.java index 6355f20a6..2a8309234 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactCreateEventDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactCreateEventDtoTest.java @@ -4,7 +4,7 @@ import com.adelean.inject.resources.junit.jupiter.TestWithResources; import com.sinch.sdk.core.TestHelpers; import com.sinch.sdk.domains.conversation.api.v1.adapters.ConversationBaseTest; -import com.sinch.sdk.domains.conversation.models.v1.contact.ContactDtoTest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.ContactDtoTest; import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.internal.ConversationEventInternal; import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.internal.ConversationEventInternalImpl; import java.time.Instant; @@ -28,7 +28,7 @@ public class ContactCreateEventDtoTest extends ConversationBaseTest { .setCorrelationId("correlation id value") .setNotification( ContactNotification.builder() - .setContact(ContactDtoTest.expectedCreatedContactResponseDto) + .setContact(ContactDtoTest.expectedContactResponseDto) .build()) .build()); diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactDeleteEventDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactDeleteEventDtoTest.java index 22aa61bb1..b538aa3ea 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactDeleteEventDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactDeleteEventDtoTest.java @@ -4,7 +4,7 @@ import com.adelean.inject.resources.junit.jupiter.TestWithResources; import com.sinch.sdk.core.TestHelpers; import com.sinch.sdk.domains.conversation.api.v1.adapters.ConversationBaseTest; -import com.sinch.sdk.domains.conversation.models.v1.contact.ContactDtoTest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.ContactDtoTest; import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.internal.ConversationEventInternal; import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.internal.ConversationEventInternalImpl; import java.time.Instant; @@ -28,7 +28,7 @@ public class ContactDeleteEventDtoTest extends ConversationBaseTest { .setCorrelationId("correlation id value") .setNotification( ContactNotification.builder() - .setContact(ContactDtoTest.expectedCreatedContactResponseDto) + .setContact(ContactDtoTest.expectedContactResponseDto) .build()) .build()); diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactMergeEventDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactMergeEventDtoTest.java index 52fe8e961..56803b709 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactMergeEventDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactMergeEventDtoTest.java @@ -4,7 +4,7 @@ import com.adelean.inject.resources.junit.jupiter.TestWithResources; import com.sinch.sdk.core.TestHelpers; import com.sinch.sdk.domains.conversation.api.v1.adapters.ConversationBaseTest; -import com.sinch.sdk.domains.conversation.models.v1.contact.ContactDtoTest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.ContactDtoTest; import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.internal.ConversationEventInternal; import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.internal.ConversationEventInternalImpl; import java.time.Instant; @@ -28,8 +28,8 @@ public class ContactMergeEventDtoTest extends ConversationBaseTest { .setCorrelationId("correlation id value") .setNotification( ContactMergeEventNotification.builder() - .setPreservedContact(ContactDtoTest.expectedContactResponseDto) - .setDeletedContact(ContactDtoTest.expectedCreatedContactResponseDto) + .setPreservedContact(ContactDtoTest.expectedContactsListItemResponseDto) + .setDeletedContact(ContactDtoTest.expectedContactResponseDto) .build()) .build()); diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactUpdateEventDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactUpdateEventDtoTest.java index 04d90b258..4b7525b19 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactUpdateEventDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/events/contact/ContactUpdateEventDtoTest.java @@ -4,7 +4,7 @@ import com.adelean.inject.resources.junit.jupiter.TestWithResources; import com.sinch.sdk.core.TestHelpers; import com.sinch.sdk.domains.conversation.api.v1.adapters.ConversationBaseTest; -import com.sinch.sdk.domains.conversation.models.v1.contact.ContactDtoTest; +import com.sinch.sdk.domains.conversation.models.v1.contacts.ContactDtoTest; import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.internal.ConversationEventInternal; import com.sinch.sdk.domains.conversation.models.v1.webhooks.events.internal.ConversationEventInternalImpl; import java.time.Instant; @@ -28,7 +28,7 @@ public class ContactUpdateEventDtoTest extends ConversationBaseTest { .setCorrelationId("correlation id value") .setNotification( ContactNotification.builder() - .setContact(ContactDtoTest.expectedCreatedContactResponseDto) + .setContact(ContactDtoTest.expectedContactResponseDto) .build()) .build()); diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/response/ListWebhookResponseDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/response/ListWebhookResponseDtoTest.java index 5ce8b9f79..623043549 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/response/ListWebhookResponseDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/webhooks/response/ListWebhookResponseDtoTest.java @@ -1,41 +1,24 @@ package com.sinch.sdk.domains.conversation.models.v1.webhooks.response; 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.core.TestHelpers; import com.sinch.sdk.domains.conversation.api.v1.adapters.ConversationBaseTest; import com.sinch.sdk.domains.conversation.models.v1.webhooks.WebhookDtoTest; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.internal.WebhooksListResponseInternal; import java.util.Arrays; -import org.json.JSONException; import org.junit.jupiter.api.Test; -import org.skyscreamer.jsonassert.JSONAssert; @TestWithResources public class ListWebhookResponseDtoTest extends ConversationBaseTest { - public static ListWebhooksResponse expectedRequestDto = - ListWebhooksResponse.builder() - .setWebhooks(Arrays.asList(WebhookDtoTest.expectedRequestDto)) - .build(); - public static ListWebhooksResponse expectedResponseDto = - ListWebhooksResponse.builder() - .setWebhooks(Arrays.asList(WebhookDtoTest.expectedResponseDto)) - .build(); - @GivenJsonResource("domains/conversation/v1/webhooks/response/ListWebhooksResponseDto.json") - ListWebhooksResponse dto; - - @GivenTextResource("/domains/conversation/v1/webhooks/response/ListWebhooksRequestDto.json") - String json; + WebhooksListResponseInternal dto; - @Test - void serialize() throws JsonProcessingException, JSONException { - String serializedString = objectMapper.writeValueAsString(expectedRequestDto); - - JSONAssert.assertEquals(json, serializedString, true); - } + public static WebhooksListResponseInternal expectedResponseDto = + WebhooksListResponseInternal.builder() + .setWebhooks(Arrays.asList(WebhookDtoTest.expectedResponseDto)) + .build(); @Test void deserialize() { diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/TemplatesBaseTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/api/adapters/TemplatesBaseTest.java similarity index 77% rename from openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/TemplatesBaseTest.java rename to openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/api/adapters/TemplatesBaseTest.java index 3f5bd0098..29bf21e37 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/api/templates/adapters/TemplatesBaseTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/api/adapters/TemplatesBaseTest.java @@ -1,4 +1,4 @@ -package com.sinch.sdk.domains.conversation.api.templates.adapters; +package com.sinch.sdk.domains.conversation.templates.api.adapters; import com.sinch.sdk.BaseTest; diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/TemplateVariableDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/TemplateVariableDtoTest.java similarity index 84% rename from openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/TemplateVariableDtoTest.java rename to openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/TemplateVariableDtoTest.java index a3533bc00..75b7a368d 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/TemplateVariableDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/TemplateVariableDtoTest.java @@ -1,11 +1,10 @@ -package com.sinch.sdk.domains.conversation.models.templates; +package com.sinch.sdk.domains.conversation.templates.models; 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.templates.adapters.TemplatesBaseTest; -import com.sinch.sdk.domains.conversation.templates.models.TemplateVariable; +import com.sinch.sdk.domains.conversation.templates.api.adapters.TemplatesBaseTest; import org.json.JSONException; import org.junit.jupiter.api.Test; import org.skyscreamer.jsonassert.JSONAssert; diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v2/ChannelTemplateOverrideDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/v2/ChannelTemplateOverrideDtoTest.java similarity index 91% rename from openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v2/ChannelTemplateOverrideDtoTest.java rename to openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/v2/ChannelTemplateOverrideDtoTest.java index 599f940b9..8bfdac3f2 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v2/ChannelTemplateOverrideDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/v2/ChannelTemplateOverrideDtoTest.java @@ -1,12 +1,11 @@ -package com.sinch.sdk.domains.conversation.models.templates.v2; +package com.sinch.sdk.domains.conversation.templates.models.v2; 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.templates.adapters.TemplatesBaseTest; import com.sinch.sdk.domains.conversation.models.v1.TemplateReferenceDtoTest; -import com.sinch.sdk.domains.conversation.templates.models.v2.ChannelTemplateOverride; +import com.sinch.sdk.domains.conversation.templates.api.adapters.TemplatesBaseTest; import java.util.Collections; import org.json.JSONException; import org.junit.jupiter.api.Test; diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v2/TemplateTranslationDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/v2/TemplateTranslationDtoTest.java similarity index 87% rename from openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v2/TemplateTranslationDtoTest.java rename to openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/v2/TemplateTranslationDtoTest.java index ab7be4249..b993ba5d5 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v2/TemplateTranslationDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/v2/TemplateTranslationDtoTest.java @@ -1,14 +1,13 @@ -package com.sinch.sdk.domains.conversation.models.templates.v2; +package com.sinch.sdk.domains.conversation.templates.models.v2; 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.templates.adapters.TemplatesBaseTest; -import com.sinch.sdk.domains.conversation.models.templates.TemplateVariableDtoTest; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; import com.sinch.sdk.domains.conversation.models.v1.messages.types.template.TemplateMessageDtoTest; -import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslation; +import com.sinch.sdk.domains.conversation.templates.api.adapters.TemplatesBaseTest; +import com.sinch.sdk.domains.conversation.templates.models.TemplateVariableDtoTest; import java.time.Instant; import java.util.Arrays; import java.util.Collections; diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v2/TemplateV2DtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/v2/TemplateV2DtoTest.java similarity index 64% rename from openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v2/TemplateV2DtoTest.java rename to openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/v2/TemplateV2DtoTest.java index f59b00c49..88fb8800e 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v2/TemplateV2DtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/v2/TemplateV2DtoTest.java @@ -1,11 +1,10 @@ -package com.sinch.sdk.domains.conversation.models.templates.v2; +package com.sinch.sdk.domains.conversation.templates.models.v2; 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.templates.adapters.TemplatesBaseTest; -import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2; +import com.sinch.sdk.domains.conversation.templates.api.adapters.TemplatesBaseTest; import java.time.Instant; import java.util.Arrays; import org.json.JSONException; @@ -15,16 +14,13 @@ @TestWithResources public class TemplateV2DtoTest extends TemplatesBaseTest { - public static TemplateV2 expectedRequestDto = - TemplateV2.builder() - .setId("template ID") - .setTranslations(Arrays.asList(TemplateTranslationDtoTest.expectedDto)) - .setDefaultTranslation("fr-FR") - .setDescription("template description value") - .setVersion(1) - .build(); + @GivenTextResource("/domains/conversation/templates/v2/request/TemplateV2RequestDto.json") + String requestJSON; + + @GivenTextResource("/domains/conversation/templates/v2/TemplateV2Dto.json") + String responseSON; - public static TemplateV2 expectedResponseDto = + public static TemplateV2 expectedDto = TemplateV2.builder() .setId("template ID") .setTranslations(Arrays.asList(TemplateTranslationDtoTest.expectedDto)) @@ -35,15 +31,9 @@ public class TemplateV2DtoTest extends TemplatesBaseTest { .setUpdateTime(Instant.parse("2024-08-26T06:07:44Z")) .build(); - @GivenTextResource("/domains/conversation/templates/v2/TemplateV2RequestDto.json") - String requestJSON; - - @GivenTextResource("/domains/conversation/templates/v2/TemplateV2ResponseDto.json") - String responseSON; - @Test void serialize() throws JsonProcessingException, JSONException { - String serializedString = objectMapper.writeValueAsString(expectedRequestDto); + String serializedString = objectMapper.writeValueAsString(expectedDto); JSONAssert.assertEquals(requestJSON, serializedString, true); } @@ -52,6 +42,6 @@ void serialize() throws JsonProcessingException, JSONException { void deserialize() throws JsonProcessingException { Object deserialized = objectMapper.readValue(responseSON, TemplateV2.class); - TestHelpers.recursiveEquals(deserialized, expectedResponseDto); + TestHelpers.recursiveEquals(deserialized, expectedDto); } } diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/v2/response/TemplatesV2ListResponseDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/v2/response/TemplatesV2ListResponseDtoTest.java new file mode 100644 index 000000000..13f169c23 --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/v2/response/TemplatesV2ListResponseDtoTest.java @@ -0,0 +1,30 @@ +package com.sinch.sdk.domains.conversation.templates.models.v2.response; + +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.templates.api.adapters.TemplatesBaseTest; +import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2DtoTest; +import com.sinch.sdk.domains.conversation.templates.models.v2.internal.ListTemplatesResponseInternal; +import java.util.Arrays; +import org.junit.jupiter.api.Test; + +@TestWithResources +public class TemplatesV2ListResponseDtoTest extends TemplatesBaseTest { + + public static ListTemplatesResponseInternal expectedDto = + ListTemplatesResponseInternal.builder() + .setTemplates(Arrays.asList(TemplateV2DtoTest.expectedDto)) + .build(); + + @GivenTextResource("/domains/conversation/templates/v2/response/TemplatesV2ListResponseDto.json") + String json; + + @Test + void deserialize() throws JsonProcessingException { + Object deserialized = objectMapper.readValue(json, ListTemplatesResponseInternal.class); + + TestHelpers.recursiveEquals(deserialized, expectedDto); + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v2/internal/V2ListTranslationsResponseInternalDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/v2/response/TranslationsV2ListResponseDtoTest.java similarity index 60% rename from openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v2/internal/V2ListTranslationsResponseInternalDtoTest.java rename to openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/v2/response/TranslationsV2ListResponseDtoTest.java index a9c40ec90..d9d17bf74 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/templates/v2/internal/V2ListTranslationsResponseInternalDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/templates/models/v2/response/TranslationsV2ListResponseDtoTest.java @@ -1,27 +1,27 @@ -package com.sinch.sdk.domains.conversation.models.templates.v2.internal; +package com.sinch.sdk.domains.conversation.templates.models.v2.response; 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.templates.adapters.TemplatesBaseTest; -import com.sinch.sdk.domains.conversation.models.templates.v2.TemplateTranslationDtoTest; -import com.sinch.sdk.domains.conversation.templates.models.v2.internal.V2ListTranslationsResponseInternal; +import com.sinch.sdk.domains.conversation.templates.api.adapters.TemplatesBaseTest; +import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslationDtoTest; +import com.sinch.sdk.domains.conversation.templates.models.v2.internal.ListTranslationsResponseInternal; import java.util.Arrays; import org.json.JSONException; import org.junit.jupiter.api.Test; import org.skyscreamer.jsonassert.JSONAssert; @TestWithResources -public class V2ListTranslationsResponseInternalDtoTest extends TemplatesBaseTest { +public class TranslationsV2ListResponseDtoTest extends TemplatesBaseTest { - public static V2ListTranslationsResponseInternal expectedDto = - V2ListTranslationsResponseInternal.builder() + public static ListTranslationsResponseInternal expectedDto = + ListTranslationsResponseInternal.builder() .setTranslations(Arrays.asList(TemplateTranslationDtoTest.expectedDto)) .build(); @GivenTextResource( - "/domains/conversation/templates/v2/internal/V2ListTranslationsResponseInternalDto.json") + "/domains/conversation/templates/v2/response/TranslationsV2ListResponseDto.json") String json; @Test @@ -33,7 +33,7 @@ void serialize() throws JsonProcessingException, JSONException { @Test void deserialize() throws JsonProcessingException { - Object deserialized = objectMapper.readValue(json, V2ListTranslationsResponseInternal.class); + Object deserialized = objectMapper.readValue(json, ListTranslationsResponseInternal.class); TestHelpers.recursiveEquals(deserialized, expectedDto); } diff --git a/openapi-contracts/src/test/resources/domains/conversation/templates/v1/TemplateTranslationDto.json b/openapi-contracts/src/test/resources/domains/conversation/templates/v1/TemplateTranslationDto.json deleted file mode 100644 index 30ff08493..000000000 --- a/openapi-contracts/src/test/resources/domains/conversation/templates/v1/TemplateTranslationDto.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "language_code": "fr-FR", - "content": "{\"text_message\":{\"text\":\"Message from a template v1.\"}}", - "version": "1", - "create_time": "2024-07-07T02:59:59Z", - "update_time": "2024-07-07T06:07:44Z", - "variables": [ - { - "key": "key value", - "preview_value": "preview value" - } - ] -} diff --git a/openapi-contracts/src/test/resources/domains/conversation/templates/v1/TemplateV1Dto.json b/openapi-contracts/src/test/resources/domains/conversation/templates/v1/TemplateV1Dto.json deleted file mode 100644 index b565faf6a..000000000 --- a/openapi-contracts/src/test/resources/domains/conversation/templates/v1/TemplateV1Dto.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": "id value", - "description": "template description value", - "translations": [ - { - "language_code": "fr-FR", - "content": "{\"text_message\":{\"text\":\"Message from a template v1.\"}}", - "version": "1", - "create_time": "2024-07-07T02:59:59Z", - "update_time": "2024-07-07T06:07:44Z", - "variables": [ - { - "key": "key value", - "preview_value": "preview value" - } - ] - } - ], - "default_translation": "fr-FR", - "create_time": "2024-08-26T06:00:00Z", - "update_time": "2024-08-26T06:07:44Z", - "channel": "RCS" -} diff --git a/openapi-contracts/src/test/resources/domains/conversation/templates/v1/internal/V1ListTemplatesResponseInternalDto.json b/openapi-contracts/src/test/resources/domains/conversation/templates/v1/internal/V1ListTemplatesResponseInternalDto.json deleted file mode 100644 index 05ff26eb0..000000000 --- a/openapi-contracts/src/test/resources/domains/conversation/templates/v1/internal/V1ListTemplatesResponseInternalDto.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "templates": [ - { - "id": "id value", - "description": "template description value", - "translations": [ - { - "language_code": "fr-FR", - "content": "{\"text_message\":{\"text\":\"Message from a template v1.\"}}", - "version": "1", - "create_time": "2024-07-07T02:59:59Z", - "update_time": "2024-07-07T06:07:44Z", - "variables": [ - { - "key": "key value", - "preview_value": "preview value" - } - ] - } - ], - "default_translation": "fr-FR", - "create_time": "2024-08-26T06:00:00Z", - "update_time": "2024-08-26T06:07:44Z", - "channel": "RCS" - } - - ] -} diff --git a/openapi-contracts/src/test/resources/domains/conversation/templates/v2/TemplateV2ResponseDto.json b/openapi-contracts/src/test/resources/domains/conversation/templates/v2/TemplateV2Dto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/conversation/templates/v2/TemplateV2ResponseDto.json rename to openapi-contracts/src/test/resources/domains/conversation/templates/v2/TemplateV2Dto.json diff --git a/openapi-contracts/src/test/resources/domains/conversation/templates/v2/TemplateV2RequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/templates/v2/request/TemplateV2RequestDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/conversation/templates/v2/TemplateV2RequestDto.json rename to openapi-contracts/src/test/resources/domains/conversation/templates/v2/request/TemplateV2RequestDto.json diff --git a/openapi-contracts/src/test/resources/domains/conversation/templates/v2/internal/V2ListTemplatesResponseInternalDto.json b/openapi-contracts/src/test/resources/domains/conversation/templates/v2/response/TemplatesV2ListResponseDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/conversation/templates/v2/internal/V2ListTemplatesResponseInternalDto.json rename to openapi-contracts/src/test/resources/domains/conversation/templates/v2/response/TemplatesV2ListResponseDto.json diff --git a/openapi-contracts/src/test/resources/domains/conversation/templates/v2/internal/V2ListTranslationsResponseInternalDto.json b/openapi-contracts/src/test/resources/domains/conversation/templates/v2/response/TranslationsV2ListResponseDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/conversation/templates/v2/internal/V2ListTranslationsResponseInternalDto.json rename to openapi-contracts/src/test/resources/domains/conversation/templates/v2/response/TranslationsV2ListResponseDto.json diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/AppCreateRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/apps/AppCreateRequestDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/conversation/v1/AppCreateRequestDto.json rename to openapi-contracts/src/test/resources/domains/conversation/v1/apps/AppCreateRequestDto.json diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/AppListResponseDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/apps/AppListResponseDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/conversation/v1/AppListResponseDto.json rename to openapi-contracts/src/test/resources/domains/conversation/v1/apps/AppListResponseDto.json diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/apps/AppResponseDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/apps/AppResponseDto.json new file mode 100644 index 000000000..b7105b400 --- /dev/null +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/apps/AppResponseDto.json @@ -0,0 +1,54 @@ +{ + "id": "an app id", + "channel_credentials": [ + { + "channel": "MESSENGER", + "static_token": { + "token": "my token" + }, + "callback_secret": "foo value", + "state": { + "status": "ACTIVE", + "description": "" + }, + "channel_known_id": "a channel id" + } + ], + "conversation_metadata_report_view": "NONE", + "display_name": "Brazil App", + "rate_limits": { + "outbound": 20, + "inbound": 100, + "webhooks": 200 + }, + "retention_policy": { + "retention_type": "CONVERSATION_EXPIRE_POLICY", + "ttl_days": 180 + }, + "dispatch_retention_policy": { + "retention_type": "MESSAGE_EXPIRE_POLICY", + "ttl_days": 0 + }, + "processing_mode": "DISPATCH", + "smart_conversation": { + "enabled": true + }, + "queue_stats": { + "outbound_size": 0, + "outbound_limit": 500000 + }, + "persist_message_status": { + "enabled": false + }, + "message_search": { + "enabled": true + }, + "callback_settings": { + "secret_for_overridden_callback_urls": "my secret" + }, + "delivery_report_based_fallback": { + "enabled": true, + "delivery_report_waiting_time": 455 + }, + "message_retry_settings": null +} diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/AppUpdateRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/apps/AppUpdateRequestDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/conversation/v1/AppUpdateRequestDto.json rename to openapi-contracts/src/test/resources/domains/conversation/v1/apps/AppUpdateRequestDto.json diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/contact/ContactCreateRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactCreateRequestDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/conversation/v1/contact/ContactCreateRequestDto.json rename to openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactCreateRequestDto.json diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/contact/ContactDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/conversation/v1/contact/ContactDto.json rename to openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactDto.json diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/contact/ContactGetChannelProfileByChannelRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactGetChannelProfileByChannelRequestDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/conversation/v1/contact/ContactGetChannelProfileByChannelRequestDto.json rename to openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactGetChannelProfileByChannelRequestDto.json diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/contact/ContactGetChannelProfileByContactRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactGetChannelProfileByContactRequestDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/conversation/v1/contact/ContactGetChannelProfileByContactRequestDto.json rename to openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactGetChannelProfileByContactRequestDto.json diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/contact/ContactGetChannelResponseDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactGetChannelResponseDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/conversation/v1/contact/ContactGetChannelResponseDto.json rename to openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactGetChannelResponseDto.json diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/contact/ContactListResponseDtoPage0.json b/openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactListResponseDtoPage0.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/conversation/v1/contact/ContactListResponseDtoPage0.json rename to openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactListResponseDtoPage0.json diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/contact/ContactListResponseDtoPage1.json b/openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactListResponseDtoPage1.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/conversation/v1/contact/ContactListResponseDtoPage1.json rename to openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactListResponseDtoPage1.json diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactMergeRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactMergeRequestDto.json new file mode 100644 index 000000000..4d41ba1a4 --- /dev/null +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactMergeRequestDto.json @@ -0,0 +1,4 @@ +{ + "source_id": "foo 2", + "strategy": "MERGE" +} diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactUpdateRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactUpdateRequestDto.json new file mode 100644 index 000000000..468b2eca6 --- /dev/null +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ContactUpdateRequestDto.json @@ -0,0 +1,17 @@ +{ + "channel_identities": [ + { + "channel": "SMS", + "identity": "a channel identity", + "app_id": "an app id" + } + ], + "channel_priority": [ + "SMS" + ], + "display_name": "a display name", + "email": "an email", + "external_id": "an external id", + "metadata": "metadata value", + "language": "UNSPECIFIED" +} diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/contact/IdentityConflictsDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/contacts/IdentityConflictsDto.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/conversation/v1/contact/IdentityConflictsDto.json rename to openapi-contracts/src/test/resources/domains/conversation/v1/contacts/IdentityConflictsDto.json diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/contact/ListIdentityConflictsResponseDtoPage0.json b/openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ListIdentityConflictsResponseDtoPage0.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/conversation/v1/contact/ListIdentityConflictsResponseDtoPage0.json rename to openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ListIdentityConflictsResponseDtoPage0.json diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/contact/ListIdentityConflictsResponseDtoPage1.json b/openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ListIdentityConflictsResponseDtoPage1.json similarity index 100% rename from openapi-contracts/src/test/resources/domains/conversation/v1/contact/ListIdentityConflictsResponseDtoPage1.json rename to openapi-contracts/src/test/resources/domains/conversation/v1/contacts/ListIdentityConflictsResponseDtoPage1.json diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/events/response/SendEventResponseDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/events/response/SendEventResponseDto.json new file mode 100644 index 000000000..53ca4a905 --- /dev/null +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/events/response/SendEventResponseDto.json @@ -0,0 +1,4 @@ +{ + "event_id": "event id", + "accepted_time": "2024-06-18T12:34:56Z" +} diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/MessageUpdateRequestDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/MessageUpdateRequestDto.json new file mode 100644 index 000000000..2548c30f6 --- /dev/null +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/request/MessageUpdateRequestDto.json @@ -0,0 +1,3 @@ +{ + "metadata": "metadata value" +} \ No newline at end of file diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/response/SendMessageResponseDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/response/SendMessageResponseDto.json new file mode 100644 index 000000000..2e582ee60 --- /dev/null +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/response/SendMessageResponseDto.json @@ -0,0 +1,4 @@ +{ + "message_id": "message id", + "accepted_time": "2024-06-18T12:34:56Z" +} diff --git a/sample-app/src/main/java/com/sinch/sample/conversation/projectsettings/Create.java b/sample-app/src/main/java/com/sinch/sample/conversation/projectsettings/Create.java deleted file mode 100644 index 1a77bf12d..000000000 --- a/sample-app/src/main/java/com/sinch/sample/conversation/projectsettings/Create.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.sinch.sample.conversation.projectsettings; - -import com.sinch.sample.BaseApplication; -import com.sinch.sdk.domains.conversation.api.v1.ProjectSettingsService; -import com.sinch.sdk.domains.conversation.models.v1.projectsettings.ContactSettings; -import com.sinch.sdk.domains.conversation.models.v1.projectsettings.request.ProjectSettingsRequest; -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() { - - ProjectSettingsService service = client.conversation().v1().projectSettings(); - - LOGGER.info("Create conversation project settings"); - - var contactSettings = ContactSettings.builder().setUnifiedContactIdEnabled(false).build(); - - var parameters = ProjectSettingsRequest.builder().setContactSettings(contactSettings).build(); - var result = service.create(parameters); - - LOGGER.info("Response: " + result); - } -} diff --git a/sample-app/src/main/java/com/sinch/sample/conversation/projectsettings/Delete.java b/sample-app/src/main/java/com/sinch/sample/conversation/projectsettings/Delete.java deleted file mode 100644 index 4e0567412..000000000 --- a/sample-app/src/main/java/com/sinch/sample/conversation/projectsettings/Delete.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.sinch.sample.conversation.projectsettings; - -import com.sinch.sample.BaseApplication; -import com.sinch.sdk.domains.conversation.api.v1.ProjectSettingsService; -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() { - - ProjectSettingsService service = client.conversation().v1().projectSettings(); - - LOGGER.info("Delete conversation project settings"); - - service.delete(); - - LOGGER.info("Deletion done."); - } -} diff --git a/sample-app/src/main/java/com/sinch/sample/conversation/projectsettings/Get.java b/sample-app/src/main/java/com/sinch/sample/conversation/projectsettings/Get.java deleted file mode 100644 index 66118acff..000000000 --- a/sample-app/src/main/java/com/sinch/sample/conversation/projectsettings/Get.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.sinch.sample.conversation.projectsettings; - -import com.sinch.sample.BaseApplication; -import com.sinch.sdk.domains.conversation.api.v1.ProjectSettingsService; -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() { - - ProjectSettingsService service = client.conversation().v1().projectSettings(); - - LOGGER.info("Get conversation project settings"); - - var result = service.get(); - - LOGGER.info("Response: " + result); - } -} diff --git a/sample-app/src/main/java/com/sinch/sample/conversation/projectsettings/Update.java b/sample-app/src/main/java/com/sinch/sample/conversation/projectsettings/Update.java deleted file mode 100644 index 6b9550c8b..000000000 --- a/sample-app/src/main/java/com/sinch/sample/conversation/projectsettings/Update.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.sinch.sample.conversation.projectsettings; - -import com.sinch.sample.BaseApplication; -import com.sinch.sdk.domains.conversation.api.v1.ProjectSettingsService; -import com.sinch.sdk.domains.conversation.models.v1.projectsettings.ContactSettings; -import com.sinch.sdk.domains.conversation.models.v1.projectsettings.request.ProjectSettingsRequest; -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() { - - ProjectSettingsService service = client.conversation().v1().projectSettings(); - - LOGGER.info("conversation project settings"); - - var contactSettings = ContactSettings.builder().setUnifiedContactIdEnabled(false).build(); - - var parameters = ProjectSettingsRequest.builder().setContactSettings(contactSettings).build(); - - var result = service.update(parameters); - - LOGGER.info("Response: " + result); - } -}