diff --git a/src/Integration.Hub/IntegrationBase.cs b/src/Integration.Hub/IntegrationBase.cs index b4929a6..e2f3bde 100644 --- a/src/Integration.Hub/IntegrationBase.cs +++ b/src/Integration.Hub/IntegrationBase.cs @@ -6,11 +6,24 @@ namespace Integration.Hub; public class IntegrationBase { protected static readonly HttpClient _httpClient; + protected static JsonSerializerOptions _options = default!; static IntegrationBase() { _httpClient = new HttpClient(); } + protected void IntializeDefaultHeaders(Dictionary headers) + { + // Add default headers to the request + foreach (var header in headers) + _httpClient.DefaultRequestHeaders.Add(header.Key, header.Value); + } + + protected void SetSerializerOptions(JsonSerializerOptions options) + { + _options = options; + } + public async Task InvokeRequestAsync(Func> httpRequest) where TResponse : IResponseModel { var response = await httpRequest.Invoke(_httpClient); @@ -19,7 +32,7 @@ public async Task InvokeRequestAsync(Func(responseAsString)!; + return JsonSerializer.Deserialize(responseAsString, _options)!; } public async Task InvokeRequestAsync(Func> httpRequest) @@ -43,7 +56,7 @@ public async Task InvokeRequestAsync(Func(responseAsString)!; + return JsonSerializer.Deserialize(responseAsString, _options)!; } public async Task InvokeRequestAsync(Func> httpRequest, IRequestModel requestModel) diff --git a/src/Marketplaces/Integration.Marketplaces.Hepsiburada/Infrastructure/HepsiburadaIntegration.cs b/src/Marketplaces/Integration.Marketplaces.Hepsiburada/Infrastructure/HepsiburadaIntegration.cs index ac641d4..1ed49b7 100644 --- a/src/Marketplaces/Integration.Marketplaces.Hepsiburada/Infrastructure/HepsiburadaIntegration.cs +++ b/src/Marketplaces/Integration.Marketplaces.Hepsiburada/Infrastructure/HepsiburadaIntegration.cs @@ -1,3 +1,5 @@ +using System.Text; +using System.Text.Json; using Integration.Hub; namespace Integration.Marketplaces.Trendyol.Infrastructure; @@ -14,6 +16,17 @@ public HepsiburadaIntegrationBase(string username, string password, bool isInPro _username = username ?? throw new ArgumentNullException(nameof(username)); _password = password ?? throw new ArgumentNullException(nameof(password)); _isInProduction = isInProduction; + + IntializeDefaultHeaders(new Dictionary + { + { "Accept", "application/json" }, + { "Authorization", $"Basic {Convert.ToBase64String(Encoding.ASCII.GetBytes($"{_username}:{_password}"))}"} + }); + + SetSerializerOptions(new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + }); } public string GetBaseUrl() => _isInProduction ? ProdBaseUrl : StageBaseUrl; diff --git a/src/Marketplaces/Integration.Marketplaces.Hepsiburada/Infrastructure/ProductIntegration/HepsiburadaProductIntegration.cs b/src/Marketplaces/Integration.Marketplaces.Hepsiburada/Infrastructure/ProductIntegration/HepsiburadaProductIntegration.cs index ecda96c..7d8ca54 100644 --- a/src/Marketplaces/Integration.Marketplaces.Hepsiburada/Infrastructure/ProductIntegration/HepsiburadaProductIntegration.cs +++ b/src/Marketplaces/Integration.Marketplaces.Hepsiburada/Infrastructure/ProductIntegration/HepsiburadaProductIntegration.cs @@ -6,9 +6,9 @@ namespace Integration.Marketplaces.Hepsiburada.Infrastructure.ProductIntegration public class HepsiburadaProductIntegration : HepsiburadaIntegrationBase, IHepsiburadaProductIntegration, IMarketplaceIntegration { - private string GetCategoriesUrl() => $"{GetBaseUrl}product/api/categories/get-all-categories"; - private string GetCategoryAttributesUrl(int categoryId) => $"{GetBaseUrl}product/api/categories/{categoryId}/attributes"; - private string GetCategoryAttributeValueUrl(int categoryId, string attributeId) => $"{GetBaseUrl}product/api/categories/{categoryId}/attribute/{attributeId}/v"; + private string GetCategoriesUrl() => $"{GetBaseUrl()}product/api/categories/get-all-categories"; + private string GetCategoryAttributesUrl(int categoryId) => $"{GetBaseUrl()}product/api/categories/{categoryId}/attributes"; + private string GetCategoryAttributeValueUrl(int categoryId, string attributeId) => $"{GetBaseUrl()}product/api/categories/{categoryId}/attribute/{attributeId}/v"; public HepsiburadaProductIntegration(string username, string password, bool isInProduction = true) : base(username, password, isInProduction) { diff --git a/src/Marketplaces/Integration.Marketplaces.Trendyol/Infrastructure/ClaimIntegration/TrendyolClaimIntegration.cs b/src/Marketplaces/Integration.Marketplaces.Trendyol/Infrastructure/ClaimIntegration/TrendyolClaimIntegration.cs index 11c4f7f..f4ba81a 100644 --- a/src/Marketplaces/Integration.Marketplaces.Trendyol/Infrastructure/ClaimIntegration/TrendyolClaimIntegration.cs +++ b/src/Marketplaces/Integration.Marketplaces.Trendyol/Infrastructure/ClaimIntegration/TrendyolClaimIntegration.cs @@ -6,9 +6,9 @@ public class TrendyolClaimIntegration : TrendyolIntegrationBase, ITrendyolClaimIntegration, IMarketplaceIntegration { - private string GetClaimsUrl() => $"{GetBaseUrl}suppliers/{_supplierId}/claims"; - private string GetCreateClaimUrl() => $"{GetBaseUrl}suppliers/{_supplierId}/claims/create"; - private string GetApproveClaimLineItemUrl(string claimId) => $"{GetBaseUrl}claims/{claimId}/items/approve"; + private string GetClaimsUrl() => $"{GetBaseUrl()}suppliers/{_supplierId}/claims"; + private string GetCreateClaimUrl() => $"{GetBaseUrl()}suppliers/{_supplierId}/claims/create"; + private string GetApproveClaimLineItemUrl(string claimId) => $"{GetBaseUrl()}claims/{claimId}/items/approve"; public TrendyolClaimIntegration(string supplierId, string apiKey, string apiSecret, bool isInProduction, string entegratorFirm) : base(supplierId, apiKey, apiSecret, isInProduction, entegratorFirm) { } diff --git a/src/Marketplaces/Integration.Marketplaces.Trendyol/Infrastructure/PackageIntegration/TrendyolPackageIntegration.cs b/src/Marketplaces/Integration.Marketplaces.Trendyol/Infrastructure/PackageIntegration/TrendyolPackageIntegration.cs index 2cb4673..33bd78e 100644 --- a/src/Marketplaces/Integration.Marketplaces.Trendyol/Infrastructure/PackageIntegration/TrendyolPackageIntegration.cs +++ b/src/Marketplaces/Integration.Marketplaces.Trendyol/Infrastructure/PackageIntegration/TrendyolPackageIntegration.cs @@ -6,16 +6,16 @@ namespace Integration.Marketplaces.Trendyol.Infrastructure.ProductIntegration; public class TrendyolPackageIntegration : TrendyolIntegrationBase, ITrendyolPackageIntegration, IMarketplaceIntegration { - private string GetShipmentPackagesUrl() => $"{GetBaseUrl}suppliers/{_supplierId}/orders"; - private string GetUpdateTrackingNumberUrl(long shipmentPackageId) => $"{GetBaseUrl}suppliers/{_supplierId}/{shipmentPackageId}/update-tracking-number"; - private string GetUpdatePackageUrl(long shipmentPackageId) => $"{GetBaseUrl}suppliers/{_supplierId}//shipment-packages/{shipmentPackageId}"; - private string GetAddInvoiceLinkUrl() => $"{GetBaseUrl}suppliers/{_supplierId}/supplier-invoice-links"; - private string GetDeleteInvoiceLinkUrl() => $"{GetBaseUrl}suppliers/{_supplierId}/supplier-invoice-links/delete"; - private string GetSplitMultiPackageByQuantityUrl(long _shipmentPackageId) => $"{GetBaseUrl}suppliers/{_supplierId}/shipment-packages/{_shipmentPackageId}/split-packages"; - private string GetSplitMultiShipmentPackageUrl(long _shipmentPackageId) => $"{GetBaseUrl}suppliers/{_supplierId}/shipment-packages/{_shipmentPackageId}/split"; - private string GetSplitShipmentPackageUrl(long _shipmentPackageId) => $"{GetBaseUrl}suppliers/{_supplierId}/shipment-packages/{_shipmentPackageId}/multi-split"; - private string GetSplitShipmentPackageByQuantityUrl(long _shipmentPackageId) => $"{GetBaseUrl}suppliers/{_supplierId}/shipment-packages/{_shipmentPackageId}/quantity-split"; - private string GetUpdateBoxInfoUrl(long _shipmentPackageId) => $"{GetBaseUrl}suppliers/{_supplierId}/shipment-packages/{_shipmentPackageId}/box-info"; + private string GetShipmentPackagesUrl() => $"{GetBaseUrl()}suppliers/{_supplierId}/orders"; + private string GetUpdateTrackingNumberUrl(long shipmentPackageId) => $"{GetBaseUrl()}suppliers/{_supplierId}/{shipmentPackageId}/update-tracking-number"; + private string GetUpdatePackageUrl(long shipmentPackageId) => $"{GetBaseUrl()}suppliers/{_supplierId}//shipment-packages/{shipmentPackageId}"; + private string GetAddInvoiceLinkUrl() => $"{GetBaseUrl()}suppliers/{_supplierId}/supplier-invoice-links"; + private string GetDeleteInvoiceLinkUrl() => $"{GetBaseUrl()}suppliers/{_supplierId}/supplier-invoice-links/delete"; + private string GetSplitMultiPackageByQuantityUrl(long _shipmentPackageId) => $"{GetBaseUrl()}suppliers/{_supplierId}/shipment-packages/{_shipmentPackageId}/split-packages"; + private string GetSplitMultiShipmentPackageUrl(long _shipmentPackageId) => $"{GetBaseUrl()}suppliers/{_supplierId}/shipment-packages/{_shipmentPackageId}/split"; + private string GetSplitShipmentPackageUrl(long _shipmentPackageId) => $"{GetBaseUrl()}suppliers/{_supplierId}/shipment-packages/{_shipmentPackageId}/multi-split"; + private string GetSplitShipmentPackageByQuantityUrl(long _shipmentPackageId) => $"{GetBaseUrl()}suppliers/{_supplierId}/shipment-packages/{_shipmentPackageId}/quantity-split"; + private string GetUpdateBoxInfoUrl(long _shipmentPackageId) => $"{GetBaseUrl()}suppliers/{_supplierId}/shipment-packages/{_shipmentPackageId}/box-info"; public TrendyolPackageIntegration(string supplierId, string apiKey, string apiSecret, bool isInProduction, string entegratorFirm) : base(supplierId, apiKey, apiSecret, isInProduction, entegratorFirm) { } diff --git a/src/Marketplaces/Integration.Marketplaces.Trendyol/Infrastructure/ProductIntegration/TrendyolProductIntegration.cs b/src/Marketplaces/Integration.Marketplaces.Trendyol/Infrastructure/ProductIntegration/TrendyolProductIntegration.cs index c76c2c2..e41467d 100644 --- a/src/Marketplaces/Integration.Marketplaces.Trendyol/Infrastructure/ProductIntegration/TrendyolProductIntegration.cs +++ b/src/Marketplaces/Integration.Marketplaces.Trendyol/Infrastructure/ProductIntegration/TrendyolProductIntegration.cs @@ -7,16 +7,16 @@ namespace Integration.Marketplaces.Trendyol.Infrastructure.ProductIntegration; public class TrendyolProductIntegration : TrendyolIntegrationBase, ITrendyolProductIntegration, IMarketplaceIntegration { - private string GetCreateProducsUrl() => $"{GetBaseUrl}suppliers/{_supplierId}/v2/products"; - private string GetSupplierAddressUrl() => $"{GetBaseUrl}suppliers/{_supplierId}/addresses"; - private string GetBrandsUrl() => $"{GetBaseUrl}brands"; - private string GetCategoryTreeUrl() => $"{GetBaseUrl}product-categories"; - private string GetCategoryAttributesUrl(int categoryId) => $"{GetBaseUrl}product-categories/{categoryId}/attributes"; - private string GetUpdateProductUrl() => $"{GetBaseUrl}suppliers/{_supplierId}/v2/products"; - private string GetUpdatePriceAndStockUrl() => $"{GetBaseUrl}suppliers/{_supplierId}/products/price-and-inventory"; - private string GetDeleteProductUrl() => $"{GetBaseUrl}suppliers/{_supplierId}/v2/products"; - private string GetBatchRequestResultUrl(string batchRequestId) => $"{GetBaseUrl}suppliers/{_supplierId}/products/batch-requests/{batchRequestId}"; - private string GetFilterProductsUrl() => $"{GetBaseUrl}suppliers/{_supplierId}/products"; + private string GetCreateProducsUrl() => $"{GetBaseUrl()}suppliers/{_supplierId}/v2/products"; + private string GetSupplierAddressUrl() => $"{GetBaseUrl()}suppliers/{_supplierId}/addresses"; + private string GetBrandsUrl() => $"{GetBaseUrl()}brands"; + private string GetCategoryTreeUrl() => $"{GetBaseUrl()}product-categories"; + private string GetCategoryAttributesUrl(int categoryId) => $"{GetBaseUrl()}product-categories/{categoryId}/attributes"; + private string GetUpdateProductUrl() => $"{GetBaseUrl()}suppliers/{_supplierId}/v2/products"; + private string GetUpdatePriceAndStockUrl() => $"{GetBaseUrl()}suppliers/{_supplierId}/products/price-and-inventory"; + private string GetDeleteProductUrl() => $"{GetBaseUrl()}suppliers/{_supplierId}/v2/products"; + private string GetBatchRequestResultUrl(string batchRequestId) => $"{GetBaseUrl()}suppliers/{_supplierId}/products/batch-requests/{batchRequestId}"; + private string GetFilterProductsUrl() => $"{GetBaseUrl()}suppliers/{_supplierId}/products"; public TrendyolProductIntegration(string supplierId, string apiKey, string apiSecret, bool isInProduction, string entegratorFirm) : base(supplierId, apiKey, apiSecret, isInProduction, entegratorFirm) { } diff --git a/src/Marketplaces/Integration.Marketplaces.Trendyol/Infrastructure/TrendyolIntegration.cs b/src/Marketplaces/Integration.Marketplaces.Trendyol/Infrastructure/TrendyolIntegration.cs index ae7df70..bf1dcaa 100644 --- a/src/Marketplaces/Integration.Marketplaces.Trendyol/Infrastructure/TrendyolIntegration.cs +++ b/src/Marketplaces/Integration.Marketplaces.Trendyol/Infrastructure/TrendyolIntegration.cs @@ -1,3 +1,5 @@ +using System.Text; +using System.Text.Json; using Integration.Hub; namespace Integration.Marketplaces.Trendyol.Infrastructure; @@ -18,6 +20,18 @@ public TrendyolIntegrationBase(string supplierId, string apiKey, string apiSecre _apiSecret = apiSecret ?? throw new ArgumentNullException(nameof(apiSecret)); _isInProduction = isInProduction; _entegratorFirm = entegratorFirm; + + IntializeDefaultHeaders(new Dictionary + { + { "Accept", "application/json" }, + { "User-Agent", $"{_supplierId} - {_entegratorFirm}" }, + { "Authorization", $"Basic {Convert.ToBase64String(Encoding.ASCII.GetBytes($"{_apiKey}:{_apiSecret}"))}"} + }); + + SetSerializerOptions(new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + }); } public string GetBaseUrl() => _isInProduction ? ProdBaseUrl : StageBaseUrl;