From 66903abc7096ba041ad0d9a1db359b027861822c Mon Sep 17 00:00:00 2001 From: Arkadiy Date: Wed, 16 Apr 2025 14:16:58 +0400 Subject: [PATCH 1/8] ECWID-161269 - add a new modified RequestKind to replace ApiCredentials --- .../com/ecwid/apiclient/v3/ApiClientHelper.kt | 38 +++++++++++++++++-- .../v3/config/ApiV3AppRequestKind.kt | 20 ++++++++++ .../v3/config/ApiV3InstantSiteRequestKind.kt | 14 +++++++ .../v3/config/ApiV3StoreRequestKind.kt | 14 +++++++ .../ecwid/apiclient/v3/config/RequestKind.kt | 6 +++ 5 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3AppRequestKind.kt create mode 100644 src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3InstantSiteRequestKind.kt create mode 100644 src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3StoreRequestKind.kt create mode 100644 src/main/kotlin/com/ecwid/apiclient/v3/config/RequestKind.kt diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt b/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt index eb33c9fc0..cf10db013 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt @@ -43,7 +43,8 @@ class ApiClientHelper private constructor( private val credentials: ApiCredentials, private val loggingSettings: LoggingSettings, val httpTransport: HttpTransport, - val jsonTransformer: JsonTransformer + val jsonTransformer: JsonTransformer, + private val requestKind: RequestKind? = null, ) { private val log = Logger.getLogger(this::class.qualifiedName) @@ -76,6 +77,22 @@ class ApiClientHelper private constructor( jsonTransformer = jsonTransformerProvider.build(createPolymorphicTypeList()) ) + constructor( + apiServerDomain: ApiServerDomain, + credentials: ApiCredentials, + loggingSettings: LoggingSettings, + httpTransport: HttpTransport, + jsonTransformerProvider: JsonTransformerProvider, + requestKind: RequestKind?, + ) : this( + apiServerDomain = apiServerDomain, + credentials = credentials, + loggingSettings = loggingSettings, + httpTransport = httpTransport, + jsonTransformer = jsonTransformerProvider.build(createPolymorphicTypeList()), + requestKind = requestKind, + ) + @PublishedApi internal fun makeRequestInt(request: ApiRequest, responseParser: ResponseParser, responseFieldsOverride: ResponseFields? = null): V { val requestId = generateRequestId() @@ -260,7 +277,12 @@ class ApiClientHelper private constructor( internal fun RequestInfo.toHttpRequest(requestId: String, responseFieldsOverride: ResponseFields?): HttpRequest { val uri = createApiEndpointUri(pathSegments) val params = if (responseFieldsOverride != null) params.withResponseFieldsParam(responseFieldsOverride) else params - val headers = headers.withRequestId(requestId).withCredentials(credentials) + val headers = headers.withRequestId(requestId) + if (requestKind != null) { + headers.withRequestKind(requestKind) + } else { + headers.withCredentials(credentials) + } return when (method) { HttpMethod.GET -> HttpRequest.HttpGetRequest( @@ -302,7 +324,12 @@ class ApiClientHelper private constructor( null, null ) - val encodedPath = buildBaseEndpointPath(credentials) + "/" + buildEndpointPath(pathSegments) + + val encodedPath = if (requestKind != null) { + requestKind.buildBaseEndpointPath() + "/" + buildEndpointPath(pathSegments) + } else { + buildBaseEndpointPath(credentials) + "/" + buildEndpointPath(pathSegments) + } return uri.toString() + encodedPath } @@ -443,6 +470,11 @@ internal fun Map.withCredentials(credentials: ApiCredentials) = is ApiAppCredentials -> withAppCredentialsHeaders(credentials) } +@PublishedApi +internal fun Map.withRequestKind(requestKind: RequestKind) = toMutableMap().apply { + putAll(requestKind.buildHeaders()) +} + internal fun Map.withResponseFieldsParam(responseFields: ResponseFields): Map { return if (responseFields.isAll()) { this - RESPONSE_FIELDS_PARAM_NAME diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3AppRequestKind.kt b/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3AppRequestKind.kt new file mode 100644 index 000000000..a56728894 --- /dev/null +++ b/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3AppRequestKind.kt @@ -0,0 +1,20 @@ +package com.ecwid.apiclient.v3.config + +private const val APP_CLIENT_ID_HEADER_NAME = "X-Ecwid-App-Client-Id" +private const val APP_CLIENT_SECRET_HEADER_NAME = "X-Ecwid-App-Secret-Key" + +class ApiV3AppRequestKind( + private val clientId: String, + private val clientSecret: String, +) : RequestKind() { + override fun buildBaseEndpointPath(): String { + return "/api/v3" + } + + override fun buildHeaders(): Map { + return mapOf( + APP_CLIENT_ID_HEADER_NAME to clientId, + APP_CLIENT_SECRET_HEADER_NAME to clientSecret + ) + } +} diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3InstantSiteRequestKind.kt b/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3InstantSiteRequestKind.kt new file mode 100644 index 000000000..537c40e81 --- /dev/null +++ b/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3InstantSiteRequestKind.kt @@ -0,0 +1,14 @@ +package com.ecwid.apiclient.v3.config + +class ApiV3InstantSiteRequestKind( + private val storeId: Long, + private val apiToken: String, +) : RequestKind() { + override fun buildBaseEndpointPath(): String { + return "/instantsite/api/v1/$storeId" + } + + override fun buildHeaders(): Map { + return mapOf("Authorization" to "Bearer $apiToken") + } +} diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3StoreRequestKind.kt b/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3StoreRequestKind.kt new file mode 100644 index 000000000..8c6a79c62 --- /dev/null +++ b/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3StoreRequestKind.kt @@ -0,0 +1,14 @@ +package com.ecwid.apiclient.v3.config + +class ApiV3StoreRequestKind( + private val storeId: Long, + private val apiToken: String, +) : RequestKind() { + override fun buildBaseEndpointPath(): String { + return "/api/v3/$storeId" + } + + override fun buildHeaders(): Map { + return mapOf("Authorization" to "Bearer $apiToken") + } +} diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/config/RequestKind.kt b/src/main/kotlin/com/ecwid/apiclient/v3/config/RequestKind.kt new file mode 100644 index 000000000..c30d448c0 --- /dev/null +++ b/src/main/kotlin/com/ecwid/apiclient/v3/config/RequestKind.kt @@ -0,0 +1,6 @@ +package com.ecwid.apiclient.v3.config + +abstract class RequestKind { + abstract fun buildBaseEndpointPath(): String + abstract fun buildHeaders(): Map +} From 97886a1c61e326e108c8c949ae4ca93cde650fd1 Mon Sep 17 00:00:00 2001 From: Arkadiy Date: Thu, 17 Apr 2025 12:18:18 +0400 Subject: [PATCH 2/8] ECWID-161269 - fix addition value to map --- .../kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt b/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt index cf10db013..4a5a6c48b 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt @@ -277,13 +277,13 @@ class ApiClientHelper private constructor( internal fun RequestInfo.toHttpRequest(requestId: String, responseFieldsOverride: ResponseFields?): HttpRequest { val uri = createApiEndpointUri(pathSegments) val params = if (responseFieldsOverride != null) params.withResponseFieldsParam(responseFieldsOverride) else params - val headers = headers.withRequestId(requestId) - if (requestKind != null) { - headers.withRequestKind(requestKind) - } else { - headers.withCredentials(credentials) + val headers = headers.withRequestId(requestId).let { + if (requestKind != null) { + it.withRequestKind(requestKind) + } else { + it.withCredentials(credentials) + } } - return when (method) { HttpMethod.GET -> HttpRequest.HttpGetRequest( uri = uri, From 6e73cbb0ee9ca095cd7a3dce534a71ab219c7f79 Mon Sep 17 00:00:00 2001 From: Arkadiy Date: Thu, 17 Apr 2025 14:18:08 +0400 Subject: [PATCH 3/8] ECWID-161269 - delete url from general info in profile --- .../kotlin/com/ecwid/apiclient/v3/entity/BaseEntityTest.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/test/kotlin/com/ecwid/apiclient/v3/entity/BaseEntityTest.kt b/src/test/kotlin/com/ecwid/apiclient/v3/entity/BaseEntityTest.kt index a4693b1ed..241ef7af3 100644 --- a/src/test/kotlin/com/ecwid/apiclient/v3/entity/BaseEntityTest.kt +++ b/src/test/kotlin/com/ecwid/apiclient/v3/entity/BaseEntityTest.kt @@ -70,9 +70,7 @@ abstract class BaseEntityTest { protected fun initStoreProfile() { val expectedProfile = UpdatedStoreProfile( - generalInfo = UpdatedStoreProfile.GeneralInfo( - storeUrl = "" - ), + generalInfo = UpdatedStoreProfile.GeneralInfo(), formatsAndUnits = UpdatedStoreProfile.FormatsAndUnits( orderNumberPrefix = "", orderNumberSuffix = "" From 55b0e8e3ade06a873ebbeb636fbe4edfe46b9d04 Mon Sep 17 00:00:00 2001 From: Arkadiy Date: Fri, 18 Apr 2025 12:52:08 +0400 Subject: [PATCH 4/8] ECWID-161269 - delete storeId from buildBaseEndpointPath --- .../ecwid/apiclient/v3/config/ApiV3InstantSiteRequestKind.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3InstantSiteRequestKind.kt b/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3InstantSiteRequestKind.kt index 537c40e81..f91dc3f5d 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3InstantSiteRequestKind.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3InstantSiteRequestKind.kt @@ -1,11 +1,10 @@ package com.ecwid.apiclient.v3.config class ApiV3InstantSiteRequestKind( - private val storeId: Long, private val apiToken: String, ) : RequestKind() { override fun buildBaseEndpointPath(): String { - return "/instantsite/api/v1/$storeId" + return "/instantsite/api/v1" } override fun buildHeaders(): Map { From 812da36984cb92d272432c6e40c891546be4d7c2 Mon Sep 17 00:00:00 2001 From: Arkadiy Date: Mon, 21 Apr 2025 14:29:33 +0400 Subject: [PATCH 5/8] ECWID-161269 - made the field `credentials` temporarily optional --- .../com/ecwid/apiclient/v3/ApiClientHelper.kt | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt b/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt index 4a5a6c48b..0c60918bf 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt @@ -40,7 +40,7 @@ private val REQUEST_ID_CHARACTERS = ('a'..'z') + ('A'..'Z') + ('0'..'9') class ApiClientHelper private constructor( private val apiServerDomain: ApiServerDomain, - private val credentials: ApiCredentials, + private val credentials: ApiCredentials?, private val loggingSettings: LoggingSettings, val httpTransport: HttpTransport, val jsonTransformer: JsonTransformer, @@ -51,7 +51,7 @@ class ApiClientHelper private constructor( constructor( apiServerDomain: ApiServerDomain, - storeCredentials: ApiStoreCredentials, + storeCredentials: ApiStoreCredentials?, loggingSettings: LoggingSettings, httpTransport: HttpTransport, jsonTransformerProvider: JsonTransformerProvider @@ -65,7 +65,7 @@ class ApiClientHelper private constructor( constructor( apiServerDomain: ApiServerDomain, - credentials: ApiCredentials, + credentials: ApiCredentials?, loggingSettings: LoggingSettings, httpTransport: HttpTransport, jsonTransformerProvider: JsonTransformerProvider @@ -79,7 +79,7 @@ class ApiClientHelper private constructor( constructor( apiServerDomain: ApiServerDomain, - credentials: ApiCredentials, + credentials: ApiCredentials?, loggingSettings: LoggingSettings, httpTransport: HttpTransport, jsonTransformerProvider: JsonTransformerProvider, @@ -281,7 +281,11 @@ class ApiClientHelper private constructor( if (requestKind != null) { it.withRequestKind(requestKind) } else { - it.withCredentials(credentials) + if (credentials != null) { + it.withCredentials(credentials) + } else { + it + } } } return when (method) { @@ -328,7 +332,7 @@ class ApiClientHelper private constructor( val encodedPath = if (requestKind != null) { requestKind.buildBaseEndpointPath() + "/" + buildEndpointPath(pathSegments) } else { - buildBaseEndpointPath(credentials) + "/" + buildEndpointPath(pathSegments) + credentials?.let { buildBaseEndpointPath(it) } + "/" + buildEndpointPath(pathSegments) } return uri.toString() + encodedPath } From 33f6dc635517b4e996340567c2640b7033a17f9f Mon Sep 17 00:00:00 2001 From: Arkadiy Date: Mon, 21 Apr 2025 14:43:31 +0400 Subject: [PATCH 6/8] ECWID-161269 - set default value --- src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt b/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt index 0c60918bf..7570f285c 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt @@ -40,7 +40,7 @@ private val REQUEST_ID_CHARACTERS = ('a'..'z') + ('A'..'Z') + ('0'..'9') class ApiClientHelper private constructor( private val apiServerDomain: ApiServerDomain, - private val credentials: ApiCredentials?, + private val credentials: ApiCredentials? = null, private val loggingSettings: LoggingSettings, val httpTransport: HttpTransport, val jsonTransformer: JsonTransformer, From 145386182e754e9e375f598701daf8d6610c0759 Mon Sep 17 00:00:00 2001 From: Arkadiy Date: Mon, 21 Apr 2025 15:01:40 +0400 Subject: [PATCH 7/8] ECWID-161269 - add default null value to public constructor --- src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt b/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt index 7570f285c..647a6fff3 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt @@ -40,7 +40,7 @@ private val REQUEST_ID_CHARACTERS = ('a'..'z') + ('A'..'Z') + ('0'..'9') class ApiClientHelper private constructor( private val apiServerDomain: ApiServerDomain, - private val credentials: ApiCredentials? = null, + private val credentials: ApiCredentials?, private val loggingSettings: LoggingSettings, val httpTransport: HttpTransport, val jsonTransformer: JsonTransformer, @@ -51,7 +51,7 @@ class ApiClientHelper private constructor( constructor( apiServerDomain: ApiServerDomain, - storeCredentials: ApiStoreCredentials?, + storeCredentials: ApiStoreCredentials? = null, loggingSettings: LoggingSettings, httpTransport: HttpTransport, jsonTransformerProvider: JsonTransformerProvider @@ -65,7 +65,7 @@ class ApiClientHelper private constructor( constructor( apiServerDomain: ApiServerDomain, - credentials: ApiCredentials?, + credentials: ApiCredentials? = null, loggingSettings: LoggingSettings, httpTransport: HttpTransport, jsonTransformerProvider: JsonTransformerProvider @@ -79,7 +79,7 @@ class ApiClientHelper private constructor( constructor( apiServerDomain: ApiServerDomain, - credentials: ApiCredentials?, + credentials: ApiCredentials? = null, loggingSettings: LoggingSettings, httpTransport: HttpTransport, jsonTransformerProvider: JsonTransformerProvider, From 3df038bf9f9cd175a30ca7dd4c1c19401cb6739f Mon Sep 17 00:00:00 2001 From: Arkadiy Date: Wed, 23 Apr 2025 00:44:43 +0400 Subject: [PATCH 8/8] ECWID-161269 - delete RequestKind implementations --- .../v3/config/ApiV3AppRequestKind.kt | 20 ------------------- .../v3/config/ApiV3InstantSiteRequestKind.kt | 13 ------------ .../v3/config/ApiV3StoreRequestKind.kt | 14 ------------- 3 files changed, 47 deletions(-) delete mode 100644 src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3AppRequestKind.kt delete mode 100644 src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3InstantSiteRequestKind.kt delete mode 100644 src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3StoreRequestKind.kt diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3AppRequestKind.kt b/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3AppRequestKind.kt deleted file mode 100644 index a56728894..000000000 --- a/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3AppRequestKind.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.ecwid.apiclient.v3.config - -private const val APP_CLIENT_ID_HEADER_NAME = "X-Ecwid-App-Client-Id" -private const val APP_CLIENT_SECRET_HEADER_NAME = "X-Ecwid-App-Secret-Key" - -class ApiV3AppRequestKind( - private val clientId: String, - private val clientSecret: String, -) : RequestKind() { - override fun buildBaseEndpointPath(): String { - return "/api/v3" - } - - override fun buildHeaders(): Map { - return mapOf( - APP_CLIENT_ID_HEADER_NAME to clientId, - APP_CLIENT_SECRET_HEADER_NAME to clientSecret - ) - } -} diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3InstantSiteRequestKind.kt b/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3InstantSiteRequestKind.kt deleted file mode 100644 index f91dc3f5d..000000000 --- a/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3InstantSiteRequestKind.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.ecwid.apiclient.v3.config - -class ApiV3InstantSiteRequestKind( - private val apiToken: String, -) : RequestKind() { - override fun buildBaseEndpointPath(): String { - return "/instantsite/api/v1" - } - - override fun buildHeaders(): Map { - return mapOf("Authorization" to "Bearer $apiToken") - } -} diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3StoreRequestKind.kt b/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3StoreRequestKind.kt deleted file mode 100644 index 8c6a79c62..000000000 --- a/src/main/kotlin/com/ecwid/apiclient/v3/config/ApiV3StoreRequestKind.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.ecwid.apiclient.v3.config - -class ApiV3StoreRequestKind( - private val storeId: Long, - private val apiToken: String, -) : RequestKind() { - override fun buildBaseEndpointPath(): String { - return "/api/v3/$storeId" - } - - override fun buildHeaders(): Map { - return mapOf("Authorization" to "Bearer $apiToken") - } -}