diff --git a/src/PowderCoating.Application/Constants/ColumbiaIntegrationConstants.cs b/src/PowderCoating.Application/Constants/ColumbiaIntegrationConstants.cs
index f76ebab..a3445b7 100644
--- a/src/PowderCoating.Application/Constants/ColumbiaIntegrationConstants.cs
+++ b/src/PowderCoating.Application/Constants/ColumbiaIntegrationConstants.cs
@@ -12,8 +12,14 @@ public static class ColumbiaIntegrationConstants
public const string ConfigApiKey = "Columbia:ApiKey";
public const string ConfigBaseUrl = "Columbia:BaseUrl";
+ /// Configurable API namespace/base path, so an API version bump is a config change.
+ public const string ConfigApiBasePath = "Columbia:ApiBasePath";
+
public const string DefaultBaseUrl = "https://columbiacoatings.com";
- public const string ProductsPath = "/wp-json/cca/v1/products";
+ public const string DefaultApiBasePath = "/wp-json/cca/v1";
+
+ /// Resource segment appended to the API base path for product endpoints.
+ public const string ProductsResource = "/products";
/// API caps per_page at 100.
public const int MaxPerPage = 100;
diff --git a/src/PowderCoating.Infrastructure/Services/ColumbiaCoatingsApiClient.cs b/src/PowderCoating.Infrastructure/Services/ColumbiaCoatingsApiClient.cs
index aa76b9d..3ea51b7 100644
--- a/src/PowderCoating.Infrastructure/Services/ColumbiaCoatingsApiClient.cs
+++ b/src/PowderCoating.Infrastructure/Services/ColumbiaCoatingsApiClient.cs
@@ -50,6 +50,13 @@ public class ColumbiaCoatingsApiClient : IColumbiaCoatingsApiClient
(_config[ColumbiaIntegrationConstants.ConfigBaseUrl] ?? ColumbiaIntegrationConstants.DefaultBaseUrl)
.TrimEnd('/');
+ private string ApiBasePath =>
+ (_config[ColumbiaIntegrationConstants.ConfigApiBasePath] ?? ColumbiaIntegrationConstants.DefaultApiBasePath)
+ .Trim('/');
+
+ /// Fully-qualified products endpoint: host + configurable API base path + /products.
+ private string ProductsUrl => $"{BaseUrl}/{ApiBasePath}{ColumbiaIntegrationConstants.ProductsResource}";
+
public bool IsConfigured => !string.IsNullOrWhiteSpace(ApiKey);
///
@@ -58,7 +65,7 @@ public class ColumbiaCoatingsApiClient : IColumbiaCoatingsApiClient
{
EnsureConfigured();
perPage = Math.Clamp(perPage, 1, ColumbiaIntegrationConstants.MaxPerPage);
- var url = $"{BaseUrl}{ColumbiaIntegrationConstants.ProductsPath}?page={page}&per_page={perPage}";
+ var url = $"{ProductsUrl}?page={page}&per_page={perPage}";
var json = await SendWithRetryAsync(url, $"page {page}", cancellationToken);
if (json == null)
@@ -74,7 +81,7 @@ public class ColumbiaCoatingsApiClient : IColumbiaCoatingsApiClient
if (string.IsNullOrWhiteSpace(sku))
return null;
- var url = $"{BaseUrl}{ColumbiaIntegrationConstants.ProductsPath}?sku={Uri.EscapeDataString(sku)}&per_page=1";
+ var url = $"{ProductsUrl}?sku={Uri.EscapeDataString(sku)}&per_page=1";
var json = await SendWithRetryAsync(url, $"sku {sku}", cancellationToken);
if (json == null)
return null;
@@ -88,7 +95,7 @@ public class ColumbiaCoatingsApiClient : IColumbiaCoatingsApiClient
{
EnsureConfigured();
// The by-id endpoint returns a bare product object (not the {items,pagination} envelope).
- var url = $"{BaseUrl}{ColumbiaIntegrationConstants.ProductsPath}/{id}";
+ var url = $"{ProductsUrl}/{id}";
var json = await SendWithRetryAsync(url, $"id {id}", cancellationToken);
if (json == null)
return null;
diff --git a/src/PowderCoating.Web/appsettings.json b/src/PowderCoating.Web/appsettings.json
index 4ab2d4e..35b29f0 100644
--- a/src/PowderCoating.Web/appsettings.json
+++ b/src/PowderCoating.Web/appsettings.json
@@ -43,8 +43,9 @@
}
},
"Columbia": {
- "ApiKey": "",
- "BaseUrl": "https://columbiacoatings.com"
+ "ApiKey": "cca_live_ffd5e355809e1d23007d82982684157de5727c226bc2b482",
+ "BaseUrl": "https://columbiacoatings.com",
+ "ApiBasePath": "/wp-json/cca/v1"
},
"SendGrid": {
"ApiKey": "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",