From 7bbd650bfb371a63c8fc40d5ab5f06df135cea26 Mon Sep 17 00:00:00 2001 From: OleS Date: Tue, 25 Nov 2025 14:35:29 +0200 Subject: [PATCH] - Feature: Added Service Environment configurations --- .../Sources/Internal/API/APIEndpoints.swift | 18 ++++++++++++++---- Virtusize/Sources/Models/VirtusizeParams.swift | 8 ++++++-- .../Models/VirtusizeParamsBuilder.swift | 7 +++++++ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/Virtusize/Sources/Internal/API/APIEndpoints.swift b/Virtusize/Sources/Internal/API/APIEndpoints.swift index 394d5157..98492497 100644 --- a/Virtusize/Sources/Internal/API/APIEndpoints.swift +++ b/Virtusize/Sources/Internal/API/APIEndpoints.swift @@ -48,8 +48,16 @@ internal enum APIEndpoints { // MARK: - Properties var hostname: String { switch self { - case .productCheck, .productTypes, .storeProducts: - return Virtusize.environment.servicesUrl() + case .productCheck: + return Virtusize.environment.servicesUrl() + + case .productTypes, .storeProducts: + if Virtusize.params?.serviceEnvironment == true { + return Virtusize.environment.servicesUrl() + } else { + return Virtusize.environment.rawValue + } + case .getItemSizeRecommendation: return Virtusize.environment.getSizeUrl() case .getShoeSizeRecommendation: @@ -120,14 +128,16 @@ internal enum APIEndpoints { case .storeProducts(let productId): // Store local copy to avoid repeated access during string interpolation let isProd = Virtusize.environment.isProdEnv - let envPathForServicesAPI = isProd ? "" : "/stg" + let hasServiceEnvironment = Virtusize.params?.serviceEnvironment == true + let envPathForServicesAPI = !isProd && hasServiceEnvironment ? "/stg" : "" components.path = "\(envPathForServicesAPI)/a/api/v3/store-products/\(productId)" components.queryItems = jsonFormatQueryItems() case .productTypes: // Store local copy to avoid repeated access during string interpolation let isProd = Virtusize.environment.isProdEnv - let envPathForServicesAPI = isProd ? "" : "/stg" + let hasServiceEnvironment = Virtusize.params?.serviceEnvironment == true + let envPathForServicesAPI = !isProd && hasServiceEnvironment ? "/stg" : "" components.path = "\(envPathForServicesAPI)/a/api/v3/product-types" case .sessions: diff --git a/Virtusize/Sources/Models/VirtusizeParams.swift b/Virtusize/Sources/Models/VirtusizeParams.swift index 6e4b0081..735b28ab 100644 --- a/Virtusize/Sources/Models/VirtusizeParams.swift +++ b/Virtusize/Sources/Models/VirtusizeParams.swift @@ -41,9 +41,11 @@ public class VirtusizeParams { internal let showSNSButtons: Bool /// The branch name of testing environment. When specified, overrides the default endpoint of the Virtusize web app. internal let branch: String? + /// The Boolean value to determine whether to use or not services.virtusize.com url + internal let serviceEnvironment: Bool /// The Boolean value to determine whether to show or hide the privacy policy internal let showPrivacyPolicy: Bool - + /// Initializes the VirtusizeParams class init( region: VirtusizeRegion, @@ -53,7 +55,8 @@ public class VirtusizeParams { detailsPanelCards: [VirtusizeInfoCategory], showSNSButtons: Bool, branch: String?, - showPrivacyPolicy: Bool + serviceEnvironment: Bool, + showPrivacyPolicy: Bool, ) { self.region = region self.language = language @@ -63,6 +66,7 @@ public class VirtusizeParams { self.showSNSButtons = showSNSButtons self.branch = branch self.showPrivacyPolicy = showPrivacyPolicy + self.serviceEnvironment = serviceEnvironment } /// Gets the script in JavaScript to be called to pass params to the Virtusize web app diff --git a/Virtusize/Sources/Models/VirtusizeParamsBuilder.swift b/Virtusize/Sources/Models/VirtusizeParamsBuilder.swift index 04ae7d0d..f7b0de3a 100644 --- a/Virtusize/Sources/Models/VirtusizeParamsBuilder.swift +++ b/Virtusize/Sources/Models/VirtusizeParamsBuilder.swift @@ -32,6 +32,7 @@ public class VirtusizeParamsBuilder { private var detailsPanelCards: [VirtusizeInfoCategory] = VirtusizeInfoCategory.allCases private var showSNSButtons: Bool = true private var showPrivacyPolicy: Bool = true + private var serviceEnvironment: Bool = true private var branch: String? public init() {} @@ -71,6 +72,11 @@ public class VirtusizeParamsBuilder { return self } + public func setServiceEnvironment(_ value: Bool) -> VirtusizeParamsBuilder { + serviceEnvironment = value + return self + } + public func build() -> VirtusizeParams { /// Assigns the region value to a default one corresponding the Virtusize environment region = Virtusize.environment.virtusizeRegion() @@ -82,6 +88,7 @@ public class VirtusizeParamsBuilder { detailsPanelCards: detailsPanelCards, showSNSButtons: showSNSButtons, branch: branch, + serviceEnvironment: serviceEnvironment, showPrivacyPolicy: showPrivacyPolicy ) }