From 1515ce4b1d0568e2ed9b4f949cee34933286cf92 Mon Sep 17 00:00:00 2001 From: Martin Foukal Date: Tue, 7 May 2024 17:40:59 +0200 Subject: [PATCH 01/25] Order service - update, order detail and statuses, integration tests for orders. --- .../Controllers/TestController.cs | 31 ++++ .../Orders/IOrderService.cs | 20 +++ .../Orders/OrderListRequest.cs | 5 + .../Orders/OrderService.cs | 9 ++ .../StoreApi/swagger.json | 146 +++++++++++++++++- .../Currencies/KCurrency.cs | 3 +- .../Mapping/StoreApiMappingProfile.cs | 24 ++- .../Orders/KOrder.cs | 17 +- .../Orders/OrderController.cs | 84 +++++++++- .../Orders/OrderListRequest.cs | 2 + .../xperience-by-kentico-ecommerce-common | 2 +- .../StoreApiOrderTests.cs | 85 ++++++++++ 12 files changed, 404 insertions(+), 24 deletions(-) create mode 100644 test/Kentico.Xperience.K13Ecommerce.IntegrationTests/StoreApiOrderTests.cs diff --git a/examples/DancingGoat-K13Ecommerce/Controllers/TestController.cs b/examples/DancingGoat-K13Ecommerce/Controllers/TestController.cs index 9afa6500..380c8191 100644 --- a/examples/DancingGoat-K13Ecommerce/Controllers/TestController.cs +++ b/examples/DancingGoat-K13Ecommerce/Controllers/TestController.cs @@ -29,5 +29,36 @@ public async Task TestSetCurrency(string currencyCode) public async Task TestOrders([FromServices] IOrderService orderService) => Json(await orderService.GetOrderList(new OrderListRequest { Page = 1, PageSize = 10, OrderBy = "OrderID DESC" })); + + public async Task TestOrderStatuses([FromServices] IOrderService orderService) + { + var statuses = await orderService.GetOrderStatuses(); + return Json(statuses); + } + + public async Task TestUpdateOrder([FromServices] IOrderService orderService) + { + var orders = + await orderService.GetOrderList(new OrderListRequest { Page = 1, PageSize = 10, OrderBy = "OrderID DESC" }); + + var order = orders.Orders.First(o => o.OrderId == 25); + + order.OrderGrandTotal = 999; + order.OrderIsPaid = true; + var newStatus = (await orderService.GetOrderStatuses()).First(o => o.StatusName == "Completed"); + order.OrderStatus = newStatus; + + order.OrderBillingAddress.AddressLine1 = "123 Main St"; + order.OrderBillingAddress.AddressCity = "New York"; + + order.OrderShippingAddress.AddressZip = "10001"; + + order.OrderShippingOption = new KShippingOption { ShippingOptionId = 2 }; + order.OrderPaymentOption = new KPaymentOption { PaymentOptionId = 1 }; + + await orderService.UpdateOrder(order); + + return Ok(); + } } #endif diff --git a/src/Kentico.Xperience.K13Ecommerce/Orders/IOrderService.cs b/src/Kentico.Xperience.K13Ecommerce/Orders/IOrderService.cs index 8f2ed855..caec8d5f 100644 --- a/src/Kentico.Xperience.K13Ecommerce/Orders/IOrderService.cs +++ b/src/Kentico.Xperience.K13Ecommerce/Orders/IOrderService.cs @@ -13,4 +13,24 @@ public interface IOrderService /// Request parameters for order listing. /// Paged list of orders. Task GetOrderList(OrderListRequest request); + + + /// + /// Get order by id. + /// + /// Order ID. + Task GetOrder(int orderId); + + + /// + /// Returns list of enabled order statuses. + /// + Task> GetOrderStatuses(); + + + /// + /// Updates order. + /// + /// Order Dto, send full data for order - retrive order data first. + Task UpdateOrder(KOrder order); } diff --git a/src/Kentico.Xperience.K13Ecommerce/Orders/OrderListRequest.cs b/src/Kentico.Xperience.K13Ecommerce/Orders/OrderListRequest.cs index 5b17d59d..565e8ed7 100644 --- a/src/Kentico.Xperience.K13Ecommerce/Orders/OrderListRequest.cs +++ b/src/Kentico.Xperience.K13Ecommerce/Orders/OrderListRequest.cs @@ -19,4 +19,9 @@ public class OrderListRequest /// Order by. /// public required string OrderBy { get; set; } + + /// + /// Customer ID, leave null or zero for all customers. + /// + public int? CustomerId { get; set; } } diff --git a/src/Kentico.Xperience.K13Ecommerce/Orders/OrderService.cs b/src/Kentico.Xperience.K13Ecommerce/Orders/OrderService.cs index daf1786a..c1f2d6aa 100644 --- a/src/Kentico.Xperience.K13Ecommerce/Orders/OrderService.cs +++ b/src/Kentico.Xperience.K13Ecommerce/Orders/OrderService.cs @@ -7,4 +7,13 @@ internal class OrderService(IKenticoStoreApiClient storeApiClient) : IOrderServi /// public async Task GetOrderList(OrderListRequest request) => await storeApiClient.OrderListAsync(request.Page, request.PageSize, request.OrderBy); + + /// + public async Task GetOrder(int orderId) => await storeApiClient.OrderDetailAsync(orderId); + + /// + public async Task> GetOrderStatuses() => await storeApiClient.OrderStatusesListAsync(); + + /// + public async Task UpdateOrder(KOrder order) => await storeApiClient.UpdateOrderAsync(order); } diff --git a/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json b/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json index 64e661be..67d20f7f 100644 --- a/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json +++ b/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json @@ -205,6 +205,14 @@ "schema": { "type": "string" } + }, + { + "name": "CustomerId", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } } ], "responses": { @@ -231,6 +239,127 @@ } } }, + "/api/store/order/detail/{orderId}": { + "get": { + "tags": [ + "Order" + ], + "summary": "Returns order by ID.", + "operationId": "OrderDetail", + "parameters": [ + { + "name": "orderId", + "in": "path", + "description": "Order ID.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KOrder" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/store/order/statuses/list": { + "get": { + "tags": [ + "Order" + ], + "summary": "Endpoint for listing order statuses.", + "operationId": "OrderStatusesList", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KOrderStatus" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/store/order/update": { + "put": { + "tags": [ + "Order" + ], + "summary": "Updates order. Updates all fields on order level and addresses on sub-level. Customer data cannot be updated.", + "operationId": "UpdateOrder", + "requestBody": { + "description": "Order dto", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KOrder" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/KOrder" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/KOrder" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, "/api/store/products/test": { "get": { "tags": [ @@ -2152,6 +2281,10 @@ "KCurrency": { "type": "object", "properties": { + "currencyId": { + "type": "integer", + "format": "int32" + }, "currencyCode": { "type": "string", "nullable": true @@ -2162,7 +2295,7 @@ } }, "additionalProperties": false, - "description": "Represents currency from Store configuration." + "description": "Represents currency from Store configuration. CMS.Ecommerce.CurrencyInfo" }, "KCustomer": { "required": [ @@ -2272,6 +2405,12 @@ "description": "Dto for CMS.Ecommerce.ManufacturerInfo." }, "KOrder": { + "required": [ + "orderGrandTotal", + "orderId", + "orderTotalPrice", + "orderTotalTax" + ], "type": "object", "properties": { "orderId": { @@ -2290,9 +2429,8 @@ "type": "string", "nullable": true }, - "orderCurrencyCode": { - "type": "string", - "nullable": true + "orderCurrency": { + "$ref": "#/components/schemas/KCurrency" }, "orderShippingOption": { "$ref": "#/components/schemas/KShippingOption" diff --git a/src/Kentico.Xperience.StoreApi/Currencies/KCurrency.cs b/src/Kentico.Xperience.StoreApi/Currencies/KCurrency.cs index f261bb27..d8b0f213 100644 --- a/src/Kentico.Xperience.StoreApi/Currencies/KCurrency.cs +++ b/src/Kentico.Xperience.StoreApi/Currencies/KCurrency.cs @@ -1,10 +1,11 @@ namespace Kentico.Xperience.StoreApi.Currencies; /// -/// Represents currency from Store configuration. +/// Represents currency from Store configuration. /// public class KCurrency { + public int CurrencyId { get; set; } public string CurrencyCode { get; set; } public string CurrencyFormatString { get; set; } } diff --git a/src/Kentico.Xperience.StoreApi/Mapping/StoreApiMappingProfile.cs b/src/Kentico.Xperience.StoreApi/Mapping/StoreApiMappingProfile.cs index bb479123..2c77e7f0 100644 --- a/src/Kentico.Xperience.StoreApi/Mapping/StoreApiMappingProfile.cs +++ b/src/Kentico.Xperience.StoreApi/Mapping/StoreApiMappingProfile.cs @@ -56,18 +56,30 @@ public StoreApiMappingProfile() CreateMap() .AfterMap((source, dest, ctx) => { - dest.OrderCurrencyCode = CurrencyInfoProvider.ProviderObject.Get(source.OrderCurrencyID)?.CurrencyCode; + dest.OrderCurrency = + ctx.Mapper.Map(CurrencyInfoProvider.ProviderObject.Get(source.OrderCurrencyID)); dest.OrderCustomer = ctx.Mapper.Map(CustomerInfoProvider.ProviderObject.Get(source.OrderCustomerID)); dest.OrderShippingOption = ctx.Mapper.Map(ShippingOptionInfo.Provider.Get(source.OrderShippingOptionID)); - dest.OrderPaymentOption = ctx.Mapper.Map(PaymentOptionInfo.Provider.Get(source.OrderPaymentOptionID)); - dest.OrderItems = ctx.Mapper.Map>(OrderItemInfoProvider.GetOrderItems(source.OrderID)); - dest.OrderStatus = ctx.Mapper.Map(OrderStatusInfoProvider.ProviderObject.Get(source.OrderStatusID)); - }); + dest.OrderPaymentOption = + ctx.Mapper.Map(PaymentOptionInfo.Provider.Get(source.OrderPaymentOptionID)); + dest.OrderItems = + ctx.Mapper.Map>(OrderItemInfoProvider.GetOrderItems(source.OrderID)); + dest.OrderStatus = + ctx.Mapper.Map(OrderStatusInfoProvider.ProviderObject.Get(source.OrderStatusID)); + }) + .ReverseMap() + .ForPath(s => s.OrderCurrencyID, m => m.MapFrom(d => d.OrderCurrency.CurrencyId)) + .ForPath(s => s.OrderCustomerID, m => m.MapFrom(d => d.OrderCustomer.CustomerId)) + .ForPath(s => s.OrderShippingOptionID, m => m.MapFrom(d => d.OrderShippingOption.ShippingOptionId)) + .ForPath(s => s.OrderPaymentOptionID, m => m.MapFrom(d => d.OrderPaymentOption.PaymentOptionId)) + .ForPath(s => s.OrderStatusID, m => m.MapFrom(d => d.OrderStatus.StatusId)) + .ForPath(s => s.OrderBillingAddress, m => m.MapFrom(d => d.OrderBillingAddress)) + .ForPath(s => s.OrderShippingAddress, m => m.MapFrom(d => d.OrderShippingAddress)); CreateMap(); - CreateMap(); + CreateMap().ReverseMap(); CreateMap(); CreateMap>().ConvertUsing(); CreateMap(); diff --git a/src/Kentico.Xperience.StoreApi/Orders/KOrder.cs b/src/Kentico.Xperience.StoreApi/Orders/KOrder.cs index 4d10a332..d96e00cb 100644 --- a/src/Kentico.Xperience.StoreApi/Orders/KOrder.cs +++ b/src/Kentico.Xperience.StoreApi/Orders/KOrder.cs @@ -1,22 +1,25 @@ -using Kentico.Xperience.StoreApi.Customers; +using System.ComponentModel.DataAnnotations; + +using Kentico.Xperience.StoreApi.Currencies; +using Kentico.Xperience.StoreApi.Customers; using Kentico.Xperience.StoreApi.ShoppingCart; namespace Kentico.Xperience.StoreApi.Orders; /// -/// Dto for . +/// Dto for . /// public class KOrder { - public int OrderId { get; set; } + [Required] public int OrderId { get; set; } - public decimal OrderTotalTax { get; set; } + [Required] public decimal OrderTotalTax { get; set; } public string OrderTaxSummary { get; set; } public string OrderInvoiceNumber { get; set; } - public string OrderCurrencyCode { get; set; } + public KCurrency OrderCurrency { get; set; } public KShippingOption OrderShippingOption { get; set; } @@ -28,11 +31,11 @@ public class KOrder public KOrderStatus OrderStatus { get; set; } - public decimal OrderGrandTotal { get; set; } + [Required] public decimal OrderGrandTotal { get; set; } public decimal OrderGrandTotalInMainCurrency { get; set; } - public decimal OrderTotalPrice { get; set; } + [Required] public decimal OrderTotalPrice { get; set; } public decimal OrderTotalPriceInMainCurrency { get; set; } diff --git a/src/Kentico.Xperience.StoreApi/Orders/OrderController.cs b/src/Kentico.Xperience.StoreApi/Orders/OrderController.cs index 138796b5..c28f70d2 100644 --- a/src/Kentico.Xperience.StoreApi/Orders/OrderController.cs +++ b/src/Kentico.Xperience.StoreApi/Orders/OrderController.cs @@ -24,18 +24,24 @@ public class OrderController : ControllerBase private readonly IOrderInfoProvider orderInfoProvider; private readonly IMapper mapper; private readonly ISiteService siteService; + private readonly IOrderStatusInfoProvider orderStatusInfoProvider; - public OrderController(IOrderInfoProvider orderInfoProvider, IMapper mapper, ISiteService siteService) + public OrderController( + IOrderInfoProvider orderInfoProvider, + IMapper mapper, + ISiteService siteService, + IOrderStatusInfoProvider orderStatusInfoProvider) { this.orderInfoProvider = orderInfoProvider; this.mapper = mapper; this.siteService = siteService; + this.orderStatusInfoProvider = orderStatusInfoProvider; } /// /// Endpoint for getting list of orders based on request. /// - /// + /// Order list request. /// [HttpGet("list", Name = nameof(OrderList))] public async Task> OrderList([FromQuery] OrderListRequest request) @@ -45,18 +51,86 @@ public async Task> OrderList([FromQuery] OrderLi { request.OrderBy = $"{nameof(OrderInfo.OrderDate)} DESC"; } + var orderQuery = orderInfoProvider.Get() .OnSite(siteService.CurrentSite.SiteID) .Page(page, request.PageSize) .OrderBy(request.OrderBy); + if (request.CustomerId is > 0) + { + orderQuery = orderQuery.WhereEquals(nameof(OrderInfo.OrderCustomerID), request.CustomerId); + } + var orders = mapper.Map>(await orderQuery.GetEnumerableTypedResultAsync()); return Ok(new OrderListResponse { - Orders = orders, - Page = page + 1, - MaxPage = (orderQuery.TotalRecords / request.PageSize) + 1 + Orders = orders, Page = page + 1, MaxPage = (orderQuery.TotalRecords / request.PageSize) + 1 }); } + + /// + /// Returns order by ID. + /// + /// Order ID. + [HttpGet("detail/{orderId:int}", Name = nameof(OrderDetail))] + public async Task> OrderDetail([FromRoute] int orderId) + { + var order = await orderInfoProvider.GetAsync(orderId); + if (order == null) + { + return NotFound(); + } + + return Ok(mapper.Map(order)); + } + + + /// + /// Endpoint for listing order statuses. + /// + /// List of order statuses. + [HttpGet("statuses/list", Name = nameof(OrderStatusesList))] + public async Task>> OrderStatusesList() + { + int siteId = ECommerceHelper.GetSiteID(siteService.CurrentSite.SiteID, "CMSStoreUseGlobalOrderStatus"); + + var orderStatuses = await orderStatusInfoProvider.Get() + .OnSite(siteId, includeGlobal: siteId == 0) + .OrderBy(nameof(OrderStatusInfo.StatusOrder)) + .GetEnumerableTypedResultAsync(); + + return Ok(mapper.Map>(orderStatuses)); + } + + /// + /// Updates order. Updates all fields on order level and addresses on sub-level. Customer data and order items cannot be updated. + /// + /// Order dto + [HttpPut("update", Name = nameof(UpdateOrder))] + public async Task UpdateOrder([FromBody] KOrder order) + { + var orderInfo = await orderInfoProvider.GetAsync(order.OrderId); + if (orderInfo == null) + { + return NotFound(); + } + + orderInfo = mapper.Map(order, orderInfo); + + if (orderInfo.OrderBillingAddress.HasChanged) + { + orderInfo.OrderBillingAddress.Update(); + } + + if (orderInfo.OrderShippingAddress.HasChanged) + { + orderInfo.OrderShippingAddress.Update(); + } + + orderInfoProvider.Set(orderInfo); + + return Ok(); + } } diff --git a/src/Kentico.Xperience.StoreApi/Orders/OrderListRequest.cs b/src/Kentico.Xperience.StoreApi/Orders/OrderListRequest.cs index 795c59f2..bdcb2e2a 100644 --- a/src/Kentico.Xperience.StoreApi/Orders/OrderListRequest.cs +++ b/src/Kentico.Xperience.StoreApi/Orders/OrderListRequest.cs @@ -13,4 +13,6 @@ public class OrderListRequest public int PageSize { get; set; } public string OrderBy { get; set; } + + public int? CustomerId { get; set; } } diff --git a/submodules/xperience-by-kentico-ecommerce-common b/submodules/xperience-by-kentico-ecommerce-common index cf7540fd..91a62d6b 160000 --- a/submodules/xperience-by-kentico-ecommerce-common +++ b/submodules/xperience-by-kentico-ecommerce-common @@ -1 +1 @@ -Subproject commit cf7540fddfe1e5ca7e376aaf1467d29dce65267e +Subproject commit 91a62d6bcbcde1faa8d06d5f8d5cc0fa68fc68a4 diff --git a/test/Kentico.Xperience.K13Ecommerce.IntegrationTests/StoreApiOrderTests.cs b/test/Kentico.Xperience.K13Ecommerce.IntegrationTests/StoreApiOrderTests.cs new file mode 100644 index 00000000..8bc46856 --- /dev/null +++ b/test/Kentico.Xperience.K13Ecommerce.IntegrationTests/StoreApiOrderTests.cs @@ -0,0 +1,85 @@ +using Kentico.Xperience.K13Ecommerce.StoreApi; + +namespace Kentico.Xperience.KStore.Tests; + +/// +/// Store API order integration tests. +/// +[TestFixture] +[Category("IntegrationTests")] +public class StoreApiOrderTests : StoreApiTestBase +{ + /// + /// Test for existing order. + /// + /// Order ID. + /// Customer email. + [Test] + [TestCase(27, "automation.test@test.com")] + public async Task OrderDetail_ExistingOrder(int orderId, string customerEmail) + { + var order = await StoreApiClient.OrderDetailAsync(orderId); + + Assert.That(order.OrderId, Is.EqualTo(orderId)); + Assert.That(order.OrderItems, Has.Count.EqualTo(2)); + + Assert.That(order.OrderCustomer.CustomerEmail, Is.EqualTo(customerEmail)); + Assert.That(order.OrderBillingAddress.AddressLine1, Is.EqualTo("Automation Street 1")); + Assert.That(order.OrderBillingAddress.AddressCity, Is.EqualTo("Automation City A")); + Assert.That(order.OrderBillingAddress.AddressZip, Is.EqualTo("00001")); + Assert.That(order.OrderBillingAddress.AddressCountryId, Is.EqualTo(326)); + + Assert.That(order.OrderShippingAddress.AddressLine1, Is.EqualTo("Automation Street 2")); + Assert.That(order.OrderShippingAddress.AddressCity, Is.EqualTo("Automation City B")); + Assert.That(order.OrderShippingAddress.AddressZip, Is.EqualTo("00002")); + Assert.That(order.OrderShippingAddress.AddressCountryId, Is.EqualTo(326)); + + Assert.That(order.OrderStatus.StatusName, Is.EqualTo("New")); + Assert.That(order.OrderShippingOption.ShippingOptionName, Is.EqualTo("StandardDelivery")); + Assert.That(order.OrderPaymentOption.PaymentOptionName, Is.EqualTo("DancingGoatCore.MoneyTransfer")); + } + + /// + /// Test order detail when order does not exist. + /// + /// Order ID. + [Test] + [TestCase(99999)] + public async Task OrderDetail_NonExistingOrder(int orderId) + { + // test that exception has status code 404 + var exception = Assert.ThrowsAsync(async () => await StoreApiClient.OrderDetailAsync(orderId)); + Assert.That(exception!.StatusCode, Is.EqualTo(404)); + } + + /// + /// Test for order update. + /// + /// Order ID. + [Test] + [TestCase(27)] + public async Task OrderUpdate_ChangeStatus_And_IsPaid(int orderId) + { + var order = await StoreApiClient.OrderDetailAsync(orderId); + + order.OrderStatus = new KOrderStatus { StatusId = 2 }; + order.OrderIsPaid = true; + + await StoreApiClient.UpdateOrderAsync(order); + + var updatedOrder = await StoreApiClient.OrderDetailAsync(orderId); + + Assert.That(updatedOrder.OrderStatus.StatusName, Is.EqualTo("PaymentReceived")); + Assert.That(updatedOrder.OrderIsPaid, Is.True); + + order.OrderIsPaid = false; + order.OrderStatus = new KOrderStatus { StatusId = 3 }; + + await StoreApiClient.UpdateOrderAsync(order); + + var rollbackedOrder = await StoreApiClient.OrderDetailAsync(orderId); + + Assert.That(rollbackedOrder.OrderStatus.StatusName, Is.EqualTo("New")); + Assert.That(rollbackedOrder.OrderIsPaid, Is.False); + } +} From 9d3253189d426e6ffa0dc4f7b1be46e5507ed3aa Mon Sep 17 00:00:00 2001 From: Martin Foukal Date: Thu, 16 May 2024 10:50:46 +0200 Subject: [PATCH 02/25] Fixed formatting --- .../Orders/IOrderService.cs | 10 +++---- .../Orders/OrderController.cs | 26 ++++++++++--------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/Kentico.Xperience.K13Ecommerce/Orders/IOrderService.cs b/src/Kentico.Xperience.K13Ecommerce/Orders/IOrderService.cs index caec8d5f..3dbc0197 100644 --- a/src/Kentico.Xperience.K13Ecommerce/Orders/IOrderService.cs +++ b/src/Kentico.Xperience.K13Ecommerce/Orders/IOrderService.cs @@ -13,21 +13,21 @@ public interface IOrderService /// Request parameters for order listing. /// Paged list of orders. Task GetOrderList(OrderListRequest request); - - + + /// /// Get order by id. /// /// Order ID. Task GetOrder(int orderId); - - + + /// /// Returns list of enabled order statuses. /// Task> GetOrderStatuses(); - + /// /// Updates order. /// diff --git a/src/Kentico.Xperience.StoreApi/Orders/OrderController.cs b/src/Kentico.Xperience.StoreApi/Orders/OrderController.cs index c28f70d2..77540df9 100644 --- a/src/Kentico.Xperience.StoreApi/Orders/OrderController.cs +++ b/src/Kentico.Xperience.StoreApi/Orders/OrderController.cs @@ -66,10 +66,12 @@ public async Task> OrderList([FromQuery] OrderLi return Ok(new OrderListResponse { - Orders = orders, Page = page + 1, MaxPage = (orderQuery.TotalRecords / request.PageSize) + 1 + Orders = orders, + Page = page + 1, + MaxPage = (orderQuery.TotalRecords / request.PageSize) + 1 }); } - + /// /// Returns order by ID. /// @@ -82,11 +84,11 @@ public async Task> OrderDetail([FromRoute] int orderId) { return NotFound(); } - + return Ok(mapper.Map(order)); } - - + + /// /// Endpoint for listing order statuses. /// @@ -95,15 +97,15 @@ public async Task> OrderDetail([FromRoute] int orderId) public async Task>> OrderStatusesList() { int siteId = ECommerceHelper.GetSiteID(siteService.CurrentSite.SiteID, "CMSStoreUseGlobalOrderStatus"); - + var orderStatuses = await orderStatusInfoProvider.Get() .OnSite(siteId, includeGlobal: siteId == 0) .OrderBy(nameof(OrderStatusInfo.StatusOrder)) .GetEnumerableTypedResultAsync(); - + return Ok(mapper.Map>(orderStatuses)); } - + /// /// Updates order. Updates all fields on order level and addresses on sub-level. Customer data and order items cannot be updated. /// @@ -116,19 +118,19 @@ public async Task UpdateOrder([FromBody] KOrder order) { return NotFound(); } - + orderInfo = mapper.Map(order, orderInfo); - + if (orderInfo.OrderBillingAddress.HasChanged) { orderInfo.OrderBillingAddress.Update(); } - + if (orderInfo.OrderShippingAddress.HasChanged) { orderInfo.OrderShippingAddress.Update(); } - + orderInfoProvider.Set(orderInfo); return Ok(); From 51cc1cddf6c5bd1390f4ebd2a1cf6165eb2de35e Mon Sep 17 00:00:00 2001 From: Martin Foukal Date: Fri, 31 May 2024 17:07:42 +0200 Subject: [PATCH 03/25] order payment status --- .../Controllers/TestController.cs | 7 +++ .../StoreApi/swagger.json | 54 +++++++++++++++++++ .../Mapping/StoreApiMappingProfile.cs | 1 + .../Orders/KOrder.cs | 2 + .../Orders/KPaymentResult.cs | 28 ++++++++++ 5 files changed, 92 insertions(+) create mode 100644 src/Kentico.Xperience.StoreApi/Orders/KPaymentResult.cs diff --git a/examples/DancingGoat-K13Ecommerce/Controllers/TestController.cs b/examples/DancingGoat-K13Ecommerce/Controllers/TestController.cs index 2adfbf9f..3e4ca008 100644 --- a/examples/DancingGoat-K13Ecommerce/Controllers/TestController.cs +++ b/examples/DancingGoat-K13Ecommerce/Controllers/TestController.cs @@ -55,6 +55,13 @@ public async Task TestUpdateOrder([FromServices] IOrderService or order.OrderShippingOption = new KShippingOption { ShippingOptionId = 2 }; order.OrderPaymentOption = new KPaymentOption { PaymentOptionId = 1 }; + + order.OrderPaymentResult = new KPaymentResult + { + PaymentIsCompleted = true, + PaymentMethodName = "Test", + PaymentStatusName = "Test status" + }; await orderService.UpdateOrder(order); diff --git a/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json b/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json index 0565b90f..134ff103 100644 --- a/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json +++ b/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json @@ -2664,6 +2664,9 @@ "$ref": "#/components/schemas/KOrderItem" }, "nullable": true + }, + "orderPaymentResult": { + "$ref": "#/components/schemas/KPaymentResult" } }, "additionalProperties": false, @@ -2777,6 +2780,57 @@ "additionalProperties": false, "description": "Dto for CMS.Ecommerce.PaymentOptionInfo." }, + "KPaymentResult": { + "type": "object", + "properties": { + "paymentDate": { + "type": "string", + "nullable": true + }, + "paymentIsCompleted": { + "type": "boolean" + }, + "paymentIsFailed": { + "type": "boolean" + }, + "paymentIsAuthorized": { + "type": "boolean" + }, + "paymentDescription": { + "type": "string", + "nullable": true + }, + "paymentTransactionId": { + "type": "string", + "nullable": true + }, + "paymentAuthorizationID": { + "type": "string", + "nullable": true + }, + "paymentMethodName": { + "type": "string", + "nullable": true + }, + "paymentMethodID": { + "type": "integer", + "format": "int32" + }, + "paymentStatusValue": { + "type": "string", + "nullable": true + }, + "paymentStatusName": { + "type": "string", + "nullable": true + }, + "paymentApprovalUrl": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, "KProductCatalogPrices": { "type": "object", "properties": { diff --git a/src/Kentico.Xperience.StoreApi/Mapping/StoreApiMappingProfile.cs b/src/Kentico.Xperience.StoreApi/Mapping/StoreApiMappingProfile.cs index 2c77e7f0..04d3ffbd 100644 --- a/src/Kentico.Xperience.StoreApi/Mapping/StoreApiMappingProfile.cs +++ b/src/Kentico.Xperience.StoreApi/Mapping/StoreApiMappingProfile.cs @@ -83,6 +83,7 @@ public StoreApiMappingProfile() CreateMap(); CreateMap>().ConvertUsing(); CreateMap(); + CreateMap().ReverseMap(); CreateMap() .AfterMap((source, dest, ctx) => diff --git a/src/Kentico.Xperience.StoreApi/Orders/KOrder.cs b/src/Kentico.Xperience.StoreApi/Orders/KOrder.cs index d96e00cb..901daf44 100644 --- a/src/Kentico.Xperience.StoreApi/Orders/KOrder.cs +++ b/src/Kentico.Xperience.StoreApi/Orders/KOrder.cs @@ -70,4 +70,6 @@ public class KOrder public KAddress OrderCompanyAddress { get; set; } public IEnumerable OrderItems { get; set; } + + public KPaymentResult OrderPaymentResult { get; set; } } diff --git a/src/Kentico.Xperience.StoreApi/Orders/KPaymentResult.cs b/src/Kentico.Xperience.StoreApi/Orders/KPaymentResult.cs new file mode 100644 index 00000000..e3ff9e58 --- /dev/null +++ b/src/Kentico.Xperience.StoreApi/Orders/KPaymentResult.cs @@ -0,0 +1,28 @@ +namespace Kentico.Xperience.StoreApi.Orders; + +public class KPaymentResult +{ + public string PaymentDate { get; set; } + + public bool PaymentIsCompleted { get; set; } + + public bool PaymentIsFailed { get; set; } + + public bool PaymentIsAuthorized { get; set; } + + public string PaymentDescription { get; set; } + + public string PaymentTransactionId { get; set; } + + public string PaymentAuthorizationID { get; set; } + + public string PaymentMethodName { get; set; } + + public int PaymentMethodID { get; set; } + + public string PaymentStatusValue { get; set; } + + public string PaymentStatusName { get; set; } + + public string PaymentApprovalUrl { get; set; } +} From 089b63b601744cc47337d71abcf23511c7622cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20=C4=8Ce=C5=A1ka?= Date: Tue, 2 Jul 2024 17:45:07 +0200 Subject: [PATCH 04/25] Hotfix 29.2.0 --- Directory.Packages.props | 10 +- .../packages.lock.json | 410 +++++++++--------- .../packages.lock.json | 352 +++++++-------- .../packages.lock.json | 354 +++++++-------- .../packages.lock.json | 354 +++++++-------- .../packages.lock.json | 354 +++++++-------- 6 files changed, 872 insertions(+), 962 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 63d1b9fa..98e2b1ec 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -7,11 +7,11 @@ - - - - - + + + + + diff --git a/examples/DancingGoat-K13Ecommerce/packages.lock.json b/examples/DancingGoat-K13Ecommerce/packages.lock.json index 5d9b4a3f..18699020 100644 --- a/examples/DancingGoat-K13Ecommerce/packages.lock.json +++ b/examples/DancingGoat-K13Ecommerce/packages.lock.json @@ -4,53 +4,53 @@ "net8.0": { "Kentico.Xperience.Admin": { "type": "Direct", - "requested": "[29.0.1, )", - "resolved": "29.0.1", - "contentHash": "cd/GW+R/BG+S941TD2SVFqxqRtJ58qEirqDT5LAefqj11QcFgxlYIU5HdT+0nvVfiAQoGhhHyUVrLVcfBmIarg==", + "requested": "[29.2.0, )", + "resolved": "29.2.0", + "contentHash": "7dEcSPaO4y6pUSDSSpzv+PoFCUaLHfd2ghEJOXqH1IClBbFjeBO1DyYamDPKTAeywKfbkXUb8ZWazsi7B9qDWg==", "dependencies": { "Kentico.Aira.Client": "1.0.25", - "Kentico.Xperience.WebApp": "[29.0.1]", - "Microsoft.AspNetCore.SpaServices.Extensions": "6.0.29", - "Microsoft.Extensions.FileProviders.Embedded": "6.0.29" + "Kentico.Xperience.WebApp": "[29.2.0]", + "Microsoft.AspNetCore.SpaServices.Extensions": "6.0.31", + "Microsoft.Extensions.FileProviders.Embedded": "6.0.31" } }, "Kentico.Xperience.AzureStorage": { "type": "Direct", - "requested": "[29.0.1, )", - "resolved": "29.0.1", - "contentHash": "3P5xmHIVXowJFaGnYtXVIdOka8w+JonVYZemPaSo9JB8g1Rz+gm3ESnCkRWhytu82S9wMdze2K1gvBsQhLiKSg==", + "requested": "[29.2.0, )", + "resolved": "29.2.0", + "contentHash": "phEbE0HYmqauDih8FuyHwyPjoUAOHa1vZz0d90JVooG0skO7RzCH8xlr8zGutTgYWvD604FHE/HXVzTZOGz36w==", "dependencies": { - "Azure.Storage.Blobs": "12.19.1", - "Azure.Storage.Queues": "12.17.1", - "Kentico.Xperience.Core": "29.0.1", + "Azure.Storage.Blobs": "12.20.0", + "Azure.Storage.Queues": "12.18.0", + "Kentico.Xperience.Core": "29.2.0", "Newtonsoft.Json": "13.0.3" } }, "Kentico.Xperience.ImageProcessing": { "type": "Direct", - "requested": "[29.0.1, )", - "resolved": "29.0.1", - "contentHash": "JkSsPVKGzB+lcy+vXHMRO68z/m9njmUK9aWnoPa8sNTaYv4j0q/r+virJ6ADOIBAmQjk+JXR911pn5ealbN9Dw==", + "requested": "[29.2.0, )", + "resolved": "29.2.0", + "contentHash": "pQtoy0Xgmnn5l+Kg9jtB3f19ZBnrhuPls+tmlYETad9eYu4PeiqnduCiQldWi6UajhfA5i0HBep9WplTIXd/Yg==", "dependencies": { - "Kentico.Xperience.Core": "29.0.1", + "Kentico.Xperience.Core": "29.2.0", "SkiaSharp": "2.88.8", "SkiaSharp.NativeAssets.Linux.NoDependencies": "2.88.8" } }, "Kentico.Xperience.WebApp": { "type": "Direct", - "requested": "[29.0.1, )", - "resolved": "29.0.1", - "contentHash": "9TwUaSs+WMGCk2rlgyk0kpqSyGvJRMzcAr2rCtuEH7su+QOUk+kKY65s0DZ33JTyA1QrCYOst9O/vrL4/Endtg==", + "requested": "[29.2.0, )", + "resolved": "29.2.0", + "contentHash": "4+/rmbML2T79Hzdz3hcRGng1Wi50wEmwqGVW1O3tmb1PQsPx7kbPDJ/+S2e+l0pkBh22E6yZi4Xd04sfLMXNuQ==", "dependencies": { "CommandLineParser": "2.9.1", - "HotChocolate.AspNetCore": "13.9.0", - "HotChocolate.Data": "13.9.0", - "HtmlSanitizer": "8.0.843", - "Kentico.Xperience.Core": "[29.0.1]", + "HotChocolate.AspNetCore": "13.9.6", + "HotChocolate.Data": "13.9.6", + "HtmlSanitizer": "8.0.865", + "Kentico.Xperience.Core": "[29.2.0]", "Microsoft.Extensions.Caching.Memory": "6.0.1", - "Microsoft.Extensions.FileProviders.Embedded": "6.0.29", - "Microsoft.Extensions.Localization": "6.0.29" + "Microsoft.Extensions.FileProviders.Embedded": "6.0.31", + "Microsoft.Extensions.Localization": "6.0.31" } }, "Scrutor": { @@ -91,10 +91,11 @@ }, "Azure.Core": { "type": "Transitive", - "resolved": "1.36.0", - "contentHash": "vwqFZdHS4dzPlI7FFRkPx9ctA+aGGeRev3gnzG8lntWvKMmBhAmulABi1O9CEvS3/jzYt7yA+0pqVdxkpAd7dQ==", + "resolved": "1.39.0", + "contentHash": "9vaV4ZICtVQp+2wjOKrIAjEjMzBkUohaBbKGqqcTW993MRfHA0N4L1BszQjWynS7lRvlYQLxaFK4wh9ewNm4HQ==", "dependencies": { "Microsoft.Bcl.AsyncInterfaces": "1.1.1", + "System.ClientModel": "1.0.0", "System.Diagnostics.DiagnosticSource": "6.0.1", "System.Memory.Data": "1.0.2", "System.Numerics.Vectors": "4.5.0", @@ -105,12 +106,12 @@ }, "Azure.Identity": { "type": "Transitive", - "resolved": "1.10.3", - "contentHash": "l1Xm2MWOF2Mzcwuarlw8kWQXLZk3UeB55aQXVyjj23aBfDwOZ3gu5GP2kJ6KlmZeZv2TCzw7x4L3V36iNr3gww==", + "resolved": "1.11.3", + "contentHash": "4EsGMAr+oog5UqHs46qwA7S/lJiwpXjPBY3t9tQBmJ8nsgmT/LLnrc32eiTlfOdfKxUz4fxBD2YjSnVZacu97w==", "dependencies": { - "Azure.Core": "1.35.0", - "Microsoft.Identity.Client": "4.56.0", - "Microsoft.Identity.Client.Extensions.Msal": "4.56.0", + "Azure.Core": "1.38.0", + "Microsoft.Identity.Client": "4.60.3", + "Microsoft.Identity.Client.Extensions.Msal": "4.60.3", "System.Memory": "4.5.4", "System.Security.Cryptography.ProtectedData": "4.7.0", "System.Text.Json": "4.7.2", @@ -119,44 +120,44 @@ }, "Azure.Storage.Blobs": { "type": "Transitive", - "resolved": "12.19.1", - "contentHash": "x43hWFJ4sPQ23TD4piCwT+KlQpZT8pNDAzqj6yUCqh+WJ2qcQa17e1gh6ZOeT2QNFQTTDSuR56fm2bIV7i11/w==", + "resolved": "12.20.0", + "contentHash": "96HBFceJCwfv9Kg51F4C+MVIRhbAPtX2KupRaZqpGJW1FSWmo4JjOhi1sl3ZpZfPAiixYgTxhewMxSc/yd47/Q==", "dependencies": { - "Azure.Storage.Common": "12.18.1", + "Azure.Storage.Common": "12.19.0", "System.Text.Json": "4.7.2" } }, "Azure.Storage.Common": { "type": "Transitive", - "resolved": "12.18.1", - "contentHash": "ohCslqP9yDKIn+DVjBEOBuieB1QwsUCz+BwHYNaJ3lcIsTSiI4Evnq81HcKe8CqM8qvdModbipVQKpnxpbdWqA==", + "resolved": "12.19.0", + "contentHash": "aKW5fK4ZSQb9VjENSDbsQoKCDSG6d6mgsBA+groGoHyG2F38QCXThuwcmC7R1XLQOSIh28viE7CJw1BpNdl11A==", "dependencies": { - "Azure.Core": "1.36.0", + "Azure.Core": "1.39.0", "System.IO.Hashing": "6.0.0" } }, "Azure.Storage.Queues": { "type": "Transitive", - "resolved": "12.17.1", - "contentHash": "ziN15iQ4+h0zf9EbKzFd5Zj3LiDH21qIrCknkXhpqwftPfIvlftvdyXbKQLi9+sh8dwT6PFPi/wq4oLsKNGfcQ==", + "resolved": "12.18.0", + "contentHash": "lj1RKVqrTdQtQls9O23kQ/ZWVYDYH8NV9ImiYUdT3JkWhGJJ3LxdT1oogxgScwOOP4Q9P+3IkGnpsDsadzE1/Q==", "dependencies": { - "Azure.Storage.Common": "12.18.1", + "Azure.Storage.Common": "12.19.0", "System.Memory.Data": "1.0.2", "System.Text.Json": "4.7.2" } }, "BananaCakePop.Middleware": { "type": "Transitive", - "resolved": "13.0.0", - "contentHash": "6Zj/vfmnCXLjBG7WNdtOgZZ5ZDR3Sy1FQSshZUonIYs3OdzozmsFmqPXMd9XJ0QE9aAildgVGq/lDLpLrMI4Yw==", + "resolved": "16.0.1", + "contentHash": "i/LDG7Lw2ln1WM7GaMyNDWHExtN15/O/xgcX8lhBK6FZFPBnlq6FJW4GuS3vs0UpLB1TvX2tcOenMlXjcMZq0g==", "dependencies": { - "Yarp.ReverseProxy": "2.0.1" + "Yarp.ReverseProxy": "2.1.0" } }, "BouncyCastle.Cryptography": { "type": "Transitive", - "resolved": "2.3.0", - "contentHash": "IaVIiYxZLaBulveGDRUx/pBoW/Rc8QeXGF5u2E8xL8RWhVKCgfmtX9NUyGRbnSqnbFQU2zyP3MkXIdH+jUuQBw==" + "resolved": "2.3.1", + "contentHash": "buwoISwecYke3CmgG1AQSg+sNZjJeIb93vTAtJiHZX35hP/teYMxsfg0NDXGUKjGx6BKBTNKc77O2M3vKvlXZQ==" }, "CommandLineParser": { "type": "Transitive", @@ -179,8 +180,8 @@ }, "GreenDonut": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "T8ZYTsm0S48hi89d2symCvUEJoBkg5F+rfU+HFtkEOc7WLZsIBDStnfF3c890Vxjmx/P1tFpY5StDNTM+C6fIw==", + "resolved": "13.9.6", + "contentHash": "HDdjNimJhBKfgN6XOy74jT5UxueFV4IQuYEL2YglwnayJaP9ah34D0CXV+0axkYFzaU/xr6IW+g0KZMgKU803A==", "dependencies": { "Microsoft.Extensions.ObjectPool": "8.0.0", "System.Diagnostics.DiagnosticSource": "8.0.0", @@ -189,169 +190,169 @@ }, "HotChocolate": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "aGBAW6d9Oj1MfmKJF482yYdJ8G87yJ0rVFxU9l7lA1dg1xjc5XALLQO9jCPz4GCpQLetuAhHdkZ713imJ6WCPw==", + "resolved": "13.9.6", + "contentHash": "Jt1NCrRekNR4XHaAq9nPyL2bkk38EZtcQ7H5NrcNuqbmLzENNvZ43v4ltO9z28eRl8TrPOsAisFLcG3ZiV0yJA==", "dependencies": { - "HotChocolate.Authorization": "13.9.0", - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Fetching": "13.9.0", - "HotChocolate.Types": "13.9.0", - "HotChocolate.Types.CursorPagination": "13.9.0", - "HotChocolate.Types.Mutations": "13.9.0", - "HotChocolate.Types.OffsetPagination": "13.9.0", - "HotChocolate.Validation": "13.9.0" + "HotChocolate.Authorization": "13.9.6", + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Fetching": "13.9.6", + "HotChocolate.Types": "13.9.6", + "HotChocolate.Types.CursorPagination": "13.9.6", + "HotChocolate.Types.Mutations": "13.9.6", + "HotChocolate.Types.OffsetPagination": "13.9.6", + "HotChocolate.Validation": "13.9.6" } }, "HotChocolate.Abstractions": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "mb3IPL8V4NRL2FUefZP20fSwIMOnE7uCMLiM4d5Y5cjljYaMUVzUJnvdW9C1tUfbodP49Llk9WnBCR6S9fr8mQ==", + "resolved": "13.9.6", + "contentHash": "VcdXOcwXTMTTnUbG6epzIW0JIDWCjS8YeHginDQ2HCjUcDQmlHtc7Nv/mQbCGn6fdjc6RpbENf7biWJHvkPb2w==", "dependencies": { - "HotChocolate.Language": "13.9.0", + "HotChocolate.Language": "13.9.6", "System.Collections.Immutable": "8.0.0" } }, "HotChocolate.AspNetCore": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "RnxUdKEYOmsjzNPss473CYOug/9GIt8qlS9j8HxtZrW5TASM/9S7pDb7FthcDj4ag/D7wAwme3YxsqxH+iw5Bg==", + "resolved": "13.9.6", + "contentHash": "s1uU5iRA5PwXjHSY2pan5JXDBDV0mn7lkuBZ0+cAFkgfyIMMJUeWRNRZ8K4gnrTlbwC3YR6m2JlZ/urR1ARFyw==", "dependencies": { - "BananaCakePop.Middleware": "13.0.0", - "HotChocolate": "13.9.0", - "HotChocolate.Subscriptions.InMemory": "13.9.0", - "HotChocolate.Transport.Sockets": "13.9.0", - "HotChocolate.Types.Scalars.Upload": "13.9.0", - "HotChocolate.Utilities.DependencyInjection": "13.9.0" + "BananaCakePop.Middleware": "16.0.1", + "HotChocolate": "13.9.6", + "HotChocolate.Subscriptions.InMemory": "13.9.6", + "HotChocolate.Transport.Sockets": "13.9.6", + "HotChocolate.Types.Scalars.Upload": "13.9.6", + "HotChocolate.Utilities.DependencyInjection": "13.9.6" } }, "HotChocolate.Authorization": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "6CPA39zObNuMUmkmQ6J3zqmalukhjCiJS/klSEDPpwTtrn9HS/3edsh/7oiKzmUh6PNVKGed0lwkSdDP+DGZDQ==", + "resolved": "13.9.6", + "contentHash": "zvRHMaltJPGY9Ko6gWX2rOH5oK5KAKFzVVOsVTwLE8hUYmv+yEYuRpjZ2qABmCd4L/pDSQmuszWXBl/p04aM9A==", "dependencies": { - "HotChocolate.Execution": "13.9.0" + "HotChocolate.Execution": "13.9.6" } }, "HotChocolate.Data": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "eZI9pIipsJsqdacj55krmxx24cUTCearQ/q9wT4aa6vQ/5GwuwWJ0ZIqdcp1qPjd+BsmJixrQBbi6/OgnFXIGw==", + "resolved": "13.9.6", + "contentHash": "2UBUud2ZNfee58nodsOZ9hQXLqJta5GmSiT7FGbRmvgsqrWaXTuNyUvVvrF4igUxAsY6XSZj93h34NcfNhKM4Q==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types.CursorPagination": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types.CursorPagination": "13.9.6" } }, "HotChocolate.Execution": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "zO1aG5qx5lzbZu/iKR56g+zeOgCCCa5pICwxijd1qEap+7J5q0YsME9RByw8wYPH+tNsXCvDcKaeAEcashB4cg==", + "resolved": "13.9.6", + "contentHash": "51QfhBu+KWEDK53ZJSVw6197DqRHBuX2hf3HmkX5d5cyxl6LBLuEp4nr0F2kRdDJaSFO82akC1RwY54B7OY9zg==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", - "HotChocolate.Execution.Abstractions": "13.9.0", - "HotChocolate.Fetching": "13.9.0", - "HotChocolate.Types": "13.9.0", - "HotChocolate.Utilities.DependencyInjection": "13.9.0", - "HotChocolate.Validation": "13.9.0", + "HotChocolate.Abstractions": "13.9.6", + "HotChocolate.Execution.Abstractions": "13.9.6", + "HotChocolate.Fetching": "13.9.6", + "HotChocolate.Types": "13.9.6", + "HotChocolate.Utilities.DependencyInjection": "13.9.6", + "HotChocolate.Validation": "13.9.6", "Microsoft.Extensions.DependencyInjection": "8.0.0", "System.Threading.Channels": "8.0.0" } }, "HotChocolate.Execution.Abstractions": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "flySLPDyTtM4051tI3mh5Ue0fGrKFDuW3w0ebWmW2qjfuF4jgQzd3pK3ZxfkxAfpxQXyPaVn/Q7fae+fYQxeCg==", + "resolved": "13.9.6", + "contentHash": "ipe4vdYjWX4qRBvs2JTzBHCib37Gi2ukJbbGYg2bFKlixXWShW00VvqEpG4kg6KLEmTk5Y2PUEqDqXAt4uK4WA==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", + "HotChocolate.Abstractions": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" } }, "HotChocolate.Fetching": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "pIw7VlEABejQGLRnJGnO7iPdT40AHklf0psJp5zNXrq0IX+Vq7hRRqON73nubZv5Ofhh8fV3kugqYFKvzcptoA==", + "resolved": "13.9.6", + "contentHash": "xBXyo56H6UxQU23C19/Fc8+iP6gUKSRLqqrI8bdBSXBtKEMEM2WLfb1/4q7LuCf/fqHPyyRXgSx09gPZxRy2HA==", "dependencies": { - "GreenDonut": "13.9.0", - "HotChocolate.Types": "13.9.0" + "GreenDonut": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Language": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "M8q0XHQm8Gtab+wKgYXfVPxScjdDE+INify5yaj6g1ZDkV3sLIeX+muu1WebrNO3DgmuAi6o3aW770Ucw7k/dw==", + "resolved": "13.9.6", + "contentHash": "5XzspfAQU6pGOM0S97u45XSAip835MjKXjuqjRwwfTtFJkDXHvUWjcyhddEX2/t2itTaTkIswzz3vgjhj5mkww==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0", - "HotChocolate.Language.Utf8": "13.9.0", - "HotChocolate.Language.Visitors": "13.9.0", - "HotChocolate.Language.Web": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6", + "HotChocolate.Language.Utf8": "13.9.6", + "HotChocolate.Language.Visitors": "13.9.6", + "HotChocolate.Language.Web": "13.9.6" } }, "HotChocolate.Language.SyntaxTree": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "+vwrQ0qOiKn/yUBHn53030hQmqj45C1g0WI8sip50CPnkgs3bAPnDInUvrR3IiHbRn5spAonO4tFPtMDdJrEMA==", + "resolved": "13.9.6", + "contentHash": "VKMXjK3cjO5O9tCAxuHhEAusTlRQOliJJrejYNQ4TaT7532ZBsL9ZmD2C0IAaMYOv8Lz7A/OU1AIBMFp7//4fg==", "dependencies": { "Microsoft.Extensions.ObjectPool": "8.0.0" } }, "HotChocolate.Language.Utf8": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "IEWNYGvtwejf7+j+Xci25FaYets2UD8wkfzQ5dUCW47c1rnTAyuRdTiO8T8x6LYuZ7+SLg7UTBYgjv4ybwAUgA==", + "resolved": "13.9.6", + "contentHash": "lNx+JJZscU8eaU0Lz4G8iQflfcT5XKcrNhRmRCZNba3Sg7ZhrZ489yllrtAYIm428tE+FoQmM6HZSJRQQ3xUkw==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6" } }, "HotChocolate.Language.Visitors": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "j6mPBkfVo2fopWYLoczXCoog4PJ+KwbHItSgHfPfI1kDBcNcy9XY4oxth3Uau1uBbfHYIFjnuVc+FrGb1f9KAQ==", + "resolved": "13.9.6", + "contentHash": "PMBVDLsvUxLS9k9nJfN+qGgV5iwNfdmB2eWZ6QeVEkkhczcRspLJ6sg4lQYAMm3GyUosB99CUTD2g/f3ohKhTg==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6" } }, "HotChocolate.Language.Web": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "GI5ufbNVEoKygSC09owVnCvw1Ma2KzOtm1l6uen3wKshAdOKB4gmSVCjzf71pNL2Nt6cL4IHa70ClqjECmu9qg==", + "resolved": "13.9.6", + "contentHash": "4GiepY1mFp151rrAKy+VD38+gf0AGij8GspJntn5GvKpmvRriwvK24eOQuBZTdMBPiuscLUX0FMkZgs5BX4xYw==", "dependencies": { - "HotChocolate.Language.Utf8": "13.9.0" + "HotChocolate.Language.Utf8": "13.9.6" } }, "HotChocolate.Subscriptions": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "P3ason65NwSzkB2W9myV/pRIm4IMIWXH3RPCtpHVKx22Xw3hRJRJhjLBQZ5LCk5v3+7kKhXNBTbFNpbMyvez3Q==", + "resolved": "13.9.6", + "contentHash": "XO7d+enTaXEwATrii7Sp9r2efP6j5AopQf7iRk7Lky6+j6CCh8BL/V/qgCwAUtmraIOzswJRmy23cD5AssXlGg==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", - "HotChocolate.Execution.Abstractions": "13.9.0" + "HotChocolate.Abstractions": "13.9.6", + "HotChocolate.Execution.Abstractions": "13.9.6" } }, "HotChocolate.Subscriptions.InMemory": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "rj5U1Cd2QsjNnSNNdlSopYLtXh0kTZ1NlA1B3v02YFtj4Zu9le6QkGsl3oUljUUq46vSkkrT9ISj+e5wTCcw/Q==", + "resolved": "13.9.6", + "contentHash": "MdWWQXIBbNRdJ549kX2T/kCGMn88JsK//RuQ+9zaZSCf/Pxir0K86aWy8O3MssVmExot4k7RkQDUoC7GUOLtCQ==", "dependencies": { - "HotChocolate.Execution.Abstractions": "13.9.0", - "HotChocolate.Subscriptions": "13.9.0", + "HotChocolate.Execution.Abstractions": "13.9.6", + "HotChocolate.Subscriptions": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" } }, "HotChocolate.Transport.Sockets": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "4hPlhS2bgqT/tYCZfPtbGtPAaedULKgTbFKkTsjigrDhJcVxBA36Gr3yGM6S3NEw2JdIgiwugYV1log9zXkEjA==", + "resolved": "13.9.6", + "contentHash": "TeYEPFMGNTyjmmSyDvn8AZTy9HQR/+TMUznHWdlHDTCYXRJBwhtSQ+d8j8EbcOGhRw4TL2414+SK1mvypQvVNA==", "dependencies": { "System.IO.Pipelines": "8.0.0" } }, "HotChocolate.Types": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "VGPZePNC4sBlz/iY4x90zIRxW62MWzWNcl2yjLS3JcW+0W8KuKxh99dFLxL0WY/+Eoe8PUecmoob+FrVEvPzpg==", + "resolved": "13.9.6", + "contentHash": "/1V9ngL8AKrF8EOFeMS3AHEdPA/N4WCUNlpn5QDdV+KjVhRIm/tBJtbFZKCqD1kdtAOq19JNj0+bHMf/XBbLJg==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", - "HotChocolate.Types.Shared": "13.9.0", - "HotChocolate.Utilities": "13.9.0", + "HotChocolate.Abstractions": "13.9.6", + "HotChocolate.Types.Shared": "13.9.6", + "HotChocolate.Utilities": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "Microsoft.Extensions.ObjectPool": "8.0.0", "System.ComponentModel.Annotations": "5.0.0", @@ -360,74 +361,74 @@ }, "HotChocolate.Types.CursorPagination": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "2+w6tLrdjo+d/aIKyoNW1L/OH/p+FACMwGWHk1P4MwAspqaF7zjy71qTeNks+8QbRwG8uMleey/0sbr8sWpC6w==", + "resolved": "13.9.6", + "contentHash": "Vo/uowhYoN/YpOnk03b/PGh+GC5xw3uLTR2ZbrmND+pNv7Dzjh95Ajqt/Dl99twgf/aF4v1VOjmJ6Sp0SVR9Ag==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.Mutations": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "NX1zLkb7t19Om5RYubmkA6yRCtBbca454rqSGKSVBYjDrsiA6+4ZDvmS9Kjbw8F+cPm3VqShenrIIgfW8bzCXQ==", + "resolved": "13.9.6", + "contentHash": "hQ4wYHLgIVmhpBYLVtbJCAeASCHHJ427+FeAxGILsbp8J0ZXhlDQhFRPMXPz4bzbUWOR2oFEDTVoLvZSC9ztiQ==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.OffsetPagination": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "LIAaSVRS6FJCssP+s4ooLajhQ1/QfES78twX4OgZFJ9/UZMxXlU3K/IWeB2aXcJNkehfIZLgoiROnouB7ATepw==", + "resolved": "13.9.6", + "contentHash": "WnWKglIc+WNO9bUIcUK5pHaaMh/oNy2XK9ZBVbGiAHSa0HrhEiAWG6iCKdbRmBi0N/ZT6vdl+9we+edlbiVQsA==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.Scalars.Upload": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "hisB6PGGgsekz3a8YJwKgvbZHED98eph9+TMPg5A500tyvrZS00fbdpjRcN+rcTKAxhJ5evzHB2Fo1m62Dyo4w==", + "resolved": "13.9.6", + "contentHash": "RZ3Yu6jRGcjS4+KRXl9UEL4Wv4Kmc7Q0eIn3adAaxAn4L75mkpJmvL3vs4MVPgvlb4WkRoroRZlSBjeovuP0hA==", "dependencies": { - "HotChocolate.Types": "13.9.0" + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.Shared": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "2lhdbXU/GltPQWO9r8qePZSzDo9ryFs8Wv0aF7aQgEq3dLvwer6OpvnZhIYmGua6bXXebA1PzBAEaaxPpLx3Wg==", + "resolved": "13.9.6", + "contentHash": "ZKdal25pF7ChtHwkkDZiaQpi4AVvWLTQgrV8rP9pL34xtymUyuLpXdcCwqfHXWYnqD35JjHRXQYgVunxkPMbIw==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6" } }, "HotChocolate.Utilities": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "6zqwjROYxtuzAYjh31JnYKgM/MySRWEq4DHO64oSPFRJQ8NDgg7EvUU771yLt/6T7kUh+S6k25hVnmUipFtEnQ==" + "resolved": "13.9.6", + "contentHash": "67hAY38hEx93N3/j2xOzSwPwytBL+DNJyJBXSVSj5GGJKdr3SX69lBU8MTl1mt5MSTBA5ypFnj8AUKvQRpL6SQ==" }, "HotChocolate.Utilities.DependencyInjection": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "o1ijY8Rk0IUAo8QZYhfQ8s4/3z78JS9tyXGHzA963gkzTSJPehD4960CAmWlyC19FdE1i2KiTnYLhNOwNoL6+A==", + "resolved": "13.9.6", + "contentHash": "NPOFy3wBmZLIJx3rDmNCVWteckh+nlgJmBb0+lJ30lmPE+nLZLvGgOrC+IgYBNJvD1qjQ2dcnUFgQnNyJ5UsVw==", "dependencies": { "Microsoft.Extensions.DependencyInjection": "8.0.0" } }, "HotChocolate.Validation": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "gC7/YfOcOOmT+zV/V45CubYhK3lZI7+SmNYLGXQ1ko4cwjVRh3PzSJMAaKw3naWDcbjXbEyWwdYc0dLuoVBNEA==", + "resolved": "13.9.6", + "contentHash": "mpB90YtCC//vVi0Ekcs/EPL+DaaEtrF2jvQTd7Rlpay2962JiBf2V0fIk385ugaoryu7j2mFThOLld7ihxL8hw==", "dependencies": { - "HotChocolate.Types": "13.9.0", + "HotChocolate.Types": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "Microsoft.Extensions.Options": "8.0.0" } }, "HtmlSanitizer": { "type": "Transitive", - "resolved": "8.0.843", - "contentHash": "XfmHK4rFz9PPN0gcv7J7pc+MRpcni1mrnO04mwA+9/1zIHLgdOvLJeDwWnX5a+up4tioPvGreB+p+KljLJ32wg==", + "resolved": "8.0.865", + "contentHash": "jzgltCjgTMbTLVfeHYU3ocxJrqRDVdkXYYGTOKVBnpQffaRB/4Hr0R6jKxBBH8UudQSgACp8j3lsD46weyeDJg==", "dependencies": { "AngleSharp": "[0.17.1]", "AngleSharp.Css": "[0.17.0]", @@ -453,10 +454,10 @@ }, "MailKit": { "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "EaXHODUdIV5oPdWvBJGazwaEpKt1LI/H/S//EEozANYCsfOSKHntX+Skk2kW616lSQp+fkRTmSjk0CYxEuOyEA==", + "resolved": "4.6.0", + "contentHash": "EJ1L2AtoO9nGZz2AKl2WGGw4pLIpkgEwzpczmZWBLqX0m33ueVA+CJYd9hg52XOvvEj+w5PVzB7yy26E0WHzKQ==", "dependencies": { - "MimeKit": "4.5.0" + "MimeKit": "4.6.0" } }, "Microsoft.AspNetCore.Authentication.OpenIdConnect": { @@ -469,8 +470,8 @@ }, "Microsoft.AspNetCore.SpaServices.Extensions": { "type": "Transitive", - "resolved": "6.0.29", - "contentHash": "2LeomoSAHbVBEffWwZS4cFLAQsPw2UK4gfNcajssV/cMM5/i61d8LwAdTcGHVmgF5e0zOz/25B06fk3iymD4VA==", + "resolved": "6.0.31", + "contentHash": "jJ3O50/WiC99Kr9Hgim/9G7aJ4K2csL0XxCLzNnR0bGFrHk03A+jk2sus5zGmBdFQsVGCuKpjzdsbwHrrEvp5A==", "dependencies": { "Microsoft.Extensions.FileProviders.Physical": "6.0.0" } @@ -482,12 +483,12 @@ }, "Microsoft.Data.SqlClient": { "type": "Transitive", - "resolved": "5.2.0", - "contentHash": "3alfyqRN3ELRtdvU1dGtLBRNQqprr3TJ0WrUJfMISPwg1nPUN2P3Lelah68IKWuV27Ceb7ig95hWNHFTSXfxMg==", + "resolved": "5.2.1", + "contentHash": "ojg2XWmih4ubPPtrhRqqXk0SM6wC2ZSTkNNEAlYBhMo4IsRHjLazFc0abzcZCNfw1JyWcqY7vGutWTv8ZaFD9g==", "dependencies": { - "Azure.Identity": "1.10.3", + "Azure.Identity": "1.11.3", "Microsoft.Data.SqlClient.SNI.runtime": "5.2.0", - "Microsoft.Identity.Client": "4.56.0", + "Microsoft.Identity.Client": "4.60.3", "Microsoft.IdentityModel.JsonWebTokens": "6.35.0", "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.35.0", "Microsoft.SqlServer.Server": "1.0.0", @@ -600,8 +601,8 @@ }, "Microsoft.Extensions.FileProviders.Embedded": { "type": "Transitive", - "resolved": "6.0.29", - "contentHash": "ih7lIqCUXsG4+CNNcPs67TBOe3Yd/HMdBBVP3BhvdZkJEUilhvUK69FB7ZPsiZKel08GkOh2qFXqZsWWPa/lPQ==", + "resolved": "6.0.31", + "contentHash": "2MOwJczvLSl+jxaz6sDn0eGc1io497//fhRg9R+nZNx8ely6+tBxbB01SN29stSIxxuLG/uyTaHJ8W7zCnqy9g==", "dependencies": { "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0" } @@ -646,19 +647,19 @@ }, "Microsoft.Extensions.Localization": { "type": "Transitive", - "resolved": "6.0.29", - "contentHash": "cZ5Tx6NtTZFzk+PWW2icApat7agQiMIFIsohsmHmz/scKRfAI/5XTa9lpZMwKowQBZm+ap0RwAJmQ2/5xoL+VQ==", + "resolved": "6.0.31", + "contentHash": "Qivy1329sMhNDm/qvRRBB5M/z3a1/Zfe+nY7oSBLnFnldEwYEMmfP+O1xu1f/BCd5oRC+k3OQ9bRTrZepU0zCQ==", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Localization.Abstractions": "6.0.29", + "Microsoft.Extensions.Localization.Abstractions": "6.0.31", "Microsoft.Extensions.Logging.Abstractions": "6.0.4", "Microsoft.Extensions.Options": "6.0.0" } }, "Microsoft.Extensions.Localization.Abstractions": { "type": "Transitive", - "resolved": "6.0.29", - "contentHash": "4HVhh+V/7H2VMgFI8EP1kLgLpeRqm1kQOlXjHk4MHCVD5/pgWOTTbLEz9pdXymQQf/eRg1vNK8tG2MZstBHhlw==" + "resolved": "6.0.31", + "contentHash": "q1K9D2xGiTILwo5+ht0Hsu891QLKOIp7BCdm+v9G4Hh+HTjnXk83TrucxNElM/z/BcJwWUHhsqx/abdgTdpyRQ==" }, "Microsoft.Extensions.Logging": { "type": "Transitive", @@ -711,19 +712,19 @@ }, "Microsoft.Identity.Client": { "type": "Transitive", - "resolved": "4.56.0", - "contentHash": "rr4zbidvHy9r4NvOAs5hdd964Ao2A0pAeFBJKR95u1CJAVzbd1p6tPTXUZ+5ld0cfThiVSGvz6UHwY6JjraTpA==", + "resolved": "4.60.3", + "contentHash": "jve1RzmSpBhGlqMzPva6VfRbLMLZZc1Q8WRVZf8+iEruQkBgDTJPq8OeTehcY4GGYG1j6UB1xVofVE+n4BLDdw==", "dependencies": { - "Microsoft.IdentityModel.Abstractions": "6.22.0" + "Microsoft.IdentityModel.Abstractions": "6.35.0", + "System.Diagnostics.DiagnosticSource": "6.0.1" } }, "Microsoft.Identity.Client.Extensions.Msal": { "type": "Transitive", - "resolved": "4.56.0", - "contentHash": "H12YAzEGK55vZ+QpxUzozhW8ZZtgPDuWvgA0JbdIR9UhMUplj29JhIgE2imuH8W2Nw9D8JKygR1uxRFtpSNcrg==", + "resolved": "4.60.3", + "contentHash": "X1Cz14/RbmlLshusE5u2zfG+5ul6ttgou19BZe5Mdw1qm6fgOI9/imBB2TIsx2UD7nkgd2+MCSzhbukZf7udeg==", "dependencies": { - "Microsoft.Identity.Client": "4.56.0", - "System.IO.FileSystem.AccessControl": "5.0.0", + "Microsoft.Identity.Client": "4.60.3", "System.Security.Cryptography.ProtectedData": "4.5.0" } }, @@ -774,11 +775,6 @@ "Microsoft.IdentityModel.Logging": "7.3.1" } }, - "Microsoft.NETCore.Platforms": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==" - }, "Microsoft.SqlServer.Server": { "type": "Transitive", "resolved": "1.0.0", @@ -786,10 +782,10 @@ }, "MimeKit": { "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "OYn8b8b66J4mgtDzoImepiUtdkJOAVGoTj/ghzJ+az4wVixA5L5Z8GmgFhRvQ1btAIwZh/d9zvZLCALndQdz5w==", + "resolved": "4.6.0", + "contentHash": "M4jddPQNSClTzHE+HnfrtN93mCXSYF8KewWUTwzXgl49ajzUh8hz/UY4CAnRQR4YJF3lBY5P+r+73VXZAGKafw==", "dependencies": { - "BouncyCastle.Cryptography": "2.3.0", + "BouncyCastle.Cryptography": "2.3.1", "System.Security.Cryptography.Pkcs": "8.0.0" } }, @@ -835,6 +831,15 @@ "resolved": "4.5.1", "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==" }, + "System.ClientModel": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "I3CVkvxeqFYjIVEP59DnjbeoGNfo/+SZrCLpRz2v/g0gpCHaEMPtWSY0s9k/7jR1rAsLNg2z2u1JRB76tPjnIw==", + "dependencies": { + "System.Memory.Data": "1.0.2", + "System.Text.Json": "4.7.2" + } + }, "System.CodeDom": { "type": "Transitive", "resolved": "8.0.0", @@ -883,15 +888,6 @@ "Microsoft.IdentityModel.Tokens": "7.3.1" } }, - "System.IO.FileSystem.AccessControl": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "SxHB3nuNrpptVk+vZ/F+7OHEpoHUIKKMl02bUmYHQr1r+glbZQxs7pRtsf4ENO29TVm2TH3AEeep2fJcy92oYw==", - "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } - }, "System.IO.Hashing": { "type": "Transitive", "resolved": "7.0.0", @@ -934,15 +930,6 @@ "resolved": "6.0.0", "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" }, - "System.Security.AccessControl": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } - }, "System.Security.Cryptography.Pkcs": { "type": "Transitive", "resolved": "8.0.0", @@ -956,11 +943,6 @@ "resolved": "8.0.0", "contentHash": "+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg==" }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" - }, "System.Text.Encoding.CodePages": { "type": "Transitive", "resolved": "6.0.0", @@ -994,8 +976,8 @@ }, "Yarp.ReverseProxy": { "type": "Transitive", - "resolved": "2.0.1", - "contentHash": "op7vBwONPFeR1PYxeLw+RLqSodODDX8RWd0OinLGMVIq6yi1q9mv1j56ImuyZgiAToksiC0Dc7jbRUZ9I+jvFA==", + "resolved": "2.1.0", + "contentHash": "VgRuCBxmh5ND4VuFhvIN3AAeoxFhYkS2hNINk6AVCrOVTlpk7OwdrTXi8NHACfqfhDL+/oYCZrF9RxN+yiYnEg==", "dependencies": { "System.IO.Hashing": "7.0.0" } @@ -1012,14 +994,14 @@ "dependencies": { "Duende.AccessTokenManagement.OpenIdConnect": "[2.1.0, )", "Kentico.Xperience.Ecommerce.Common": "[1.0.0-prerelease-1, )", - "Kentico.Xperience.WebApp": "[29.0.1, )", + "Kentico.Xperience.WebApp": "[29.2.0, )", "Scrutor": "[4.2.2, )" } }, "kentico.xperience.store.rcl": { "type": "Project", "dependencies": { - "Kentico.Xperience.K13Ecommerce": "[1.0.0-prerelease-1, )" + "Kentico.Xperience.K13Ecommerce": "[0.1.0-prerelease-2, )" } }, "Duende.AccessTokenManagement.OpenIdConnect": { @@ -1034,20 +1016,20 @@ }, "Kentico.Xperience.Core": { "type": "CentralTransitive", - "requested": "[29.0.1, )", - "resolved": "29.0.1", - "contentHash": "QMmB5YGxAgIgYyGa21v0M40QJgqyWxGBLq6rjU483XhEPL1f4rhGW81XEU4kw/REBdCoH46LJT3/ATW/7pYBFA==", + "requested": "[29.2.0, )", + "resolved": "29.2.0", + "contentHash": "5gK/HD6jO4LuAzhSNyimp6cgMTfpMM89bn0D3kE7g2XZunPqnNDy8uTtbeF6edDh2vYGa+mzUZsxvPU+bzPfmg==", "dependencies": { "AngleSharp": "0.17.1", - "MailKit": "4.5.0", - "Microsoft.Data.SqlClient": "5.2.0", + "MailKit": "4.6.0", + "Microsoft.Data.SqlClient": "5.2.1", "Microsoft.Extensions.Caching.Memory": "6.0.1", "Microsoft.Extensions.Configuration": "6.0.1", "Microsoft.Extensions.Configuration.Binder": "6.0.0", "Microsoft.Extensions.DependencyInjection": "6.0.1", "Microsoft.Extensions.FileProviders.Physical": "6.0.0", "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", - "Microsoft.Extensions.Localization": "6.0.29", + "Microsoft.Extensions.Localization": "6.0.31", "Microsoft.Extensions.Options.ConfigurationExtensions": "6.0.0", "Mono.Cecil": "0.11.5", "Newtonsoft.Json": "13.0.3", diff --git a/src/Kentico.Xperience.K13Ecommerce/packages.lock.json b/src/Kentico.Xperience.K13Ecommerce/packages.lock.json index cf8d9982..0322fbd5 100644 --- a/src/Kentico.Xperience.K13Ecommerce/packages.lock.json +++ b/src/Kentico.Xperience.K13Ecommerce/packages.lock.json @@ -14,18 +14,18 @@ }, "Kentico.Xperience.WebApp": { "type": "Direct", - "requested": "[29.0.1, )", - "resolved": "29.0.1", - "contentHash": "9TwUaSs+WMGCk2rlgyk0kpqSyGvJRMzcAr2rCtuEH7su+QOUk+kKY65s0DZ33JTyA1QrCYOst9O/vrL4/Endtg==", + "requested": "[29.2.0, )", + "resolved": "29.2.0", + "contentHash": "4+/rmbML2T79Hzdz3hcRGng1Wi50wEmwqGVW1O3tmb1PQsPx7kbPDJ/+S2e+l0pkBh22E6yZi4Xd04sfLMXNuQ==", "dependencies": { "CommandLineParser": "2.9.1", - "HotChocolate.AspNetCore": "13.9.0", - "HotChocolate.Data": "13.9.0", - "HtmlSanitizer": "8.0.843", - "Kentico.Xperience.Core": "[29.0.1]", + "HotChocolate.AspNetCore": "13.9.6", + "HotChocolate.Data": "13.9.6", + "HtmlSanitizer": "8.0.865", + "Kentico.Xperience.Core": "[29.2.0]", "Microsoft.Extensions.Caching.Memory": "6.0.1", - "Microsoft.Extensions.FileProviders.Embedded": "6.0.29", - "Microsoft.Extensions.Localization": "6.0.29" + "Microsoft.Extensions.FileProviders.Embedded": "6.0.31", + "Microsoft.Extensions.Localization": "6.0.31" } }, "Microsoft.Extensions.ApiDescription.Client": { @@ -79,10 +79,11 @@ }, "Azure.Core": { "type": "Transitive", - "resolved": "1.35.0", - "contentHash": "hENcx03Jyuqv05F4RBEPbxz29UrM3Nbhnr6Wl6NQpoU9BCIbL3XLentrxDCTrH54NLS11Exxi/o8MYgT/cnKFA==", + "resolved": "1.38.0", + "contentHash": "IuEgCoVA0ef7E4pQtpC3+TkPbzaoQfa77HlfJDmfuaJUCVJmn7fT0izamZiryW5sYUFKizsftIxMkXKbgIcPMQ==", "dependencies": { "Microsoft.Bcl.AsyncInterfaces": "1.1.1", + "System.ClientModel": "1.0.0", "System.Diagnostics.DiagnosticSource": "6.0.1", "System.Memory.Data": "1.0.2", "System.Numerics.Vectors": "4.5.0", @@ -93,12 +94,12 @@ }, "Azure.Identity": { "type": "Transitive", - "resolved": "1.10.3", - "contentHash": "l1Xm2MWOF2Mzcwuarlw8kWQXLZk3UeB55aQXVyjj23aBfDwOZ3gu5GP2kJ6KlmZeZv2TCzw7x4L3V36iNr3gww==", + "resolved": "1.11.3", + "contentHash": "4EsGMAr+oog5UqHs46qwA7S/lJiwpXjPBY3t9tQBmJ8nsgmT/LLnrc32eiTlfOdfKxUz4fxBD2YjSnVZacu97w==", "dependencies": { - "Azure.Core": "1.35.0", - "Microsoft.Identity.Client": "4.56.0", - "Microsoft.Identity.Client.Extensions.Msal": "4.56.0", + "Azure.Core": "1.38.0", + "Microsoft.Identity.Client": "4.60.3", + "Microsoft.Identity.Client.Extensions.Msal": "4.60.3", "System.Memory": "4.5.4", "System.Security.Cryptography.ProtectedData": "4.7.0", "System.Text.Json": "4.7.2", @@ -107,16 +108,16 @@ }, "BananaCakePop.Middleware": { "type": "Transitive", - "resolved": "13.0.0", - "contentHash": "6Zj/vfmnCXLjBG7WNdtOgZZ5ZDR3Sy1FQSshZUonIYs3OdzozmsFmqPXMd9XJ0QE9aAildgVGq/lDLpLrMI4Yw==", + "resolved": "16.0.1", + "contentHash": "i/LDG7Lw2ln1WM7GaMyNDWHExtN15/O/xgcX8lhBK6FZFPBnlq6FJW4GuS3vs0UpLB1TvX2tcOenMlXjcMZq0g==", "dependencies": { - "Yarp.ReverseProxy": "2.0.1" + "Yarp.ReverseProxy": "2.1.0" } }, "BouncyCastle.Cryptography": { "type": "Transitive", - "resolved": "2.3.0", - "contentHash": "IaVIiYxZLaBulveGDRUx/pBoW/Rc8QeXGF5u2E8xL8RWhVKCgfmtX9NUyGRbnSqnbFQU2zyP3MkXIdH+jUuQBw==" + "resolved": "2.3.1", + "contentHash": "buwoISwecYke3CmgG1AQSg+sNZjJeIb93vTAtJiHZX35hP/teYMxsfg0NDXGUKjGx6BKBTNKc77O2M3vKvlXZQ==" }, "CommandLineParser": { "type": "Transitive", @@ -139,8 +140,8 @@ }, "GreenDonut": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "T8ZYTsm0S48hi89d2symCvUEJoBkg5F+rfU+HFtkEOc7WLZsIBDStnfF3c890Vxjmx/P1tFpY5StDNTM+C6fIw==", + "resolved": "13.9.6", + "contentHash": "HDdjNimJhBKfgN6XOy74jT5UxueFV4IQuYEL2YglwnayJaP9ah34D0CXV+0axkYFzaU/xr6IW+g0KZMgKU803A==", "dependencies": { "Microsoft.Extensions.ObjectPool": "8.0.0", "System.Diagnostics.DiagnosticSource": "8.0.0", @@ -149,169 +150,169 @@ }, "HotChocolate": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "aGBAW6d9Oj1MfmKJF482yYdJ8G87yJ0rVFxU9l7lA1dg1xjc5XALLQO9jCPz4GCpQLetuAhHdkZ713imJ6WCPw==", + "resolved": "13.9.6", + "contentHash": "Jt1NCrRekNR4XHaAq9nPyL2bkk38EZtcQ7H5NrcNuqbmLzENNvZ43v4ltO9z28eRl8TrPOsAisFLcG3ZiV0yJA==", "dependencies": { - "HotChocolate.Authorization": "13.9.0", - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Fetching": "13.9.0", - "HotChocolate.Types": "13.9.0", - "HotChocolate.Types.CursorPagination": "13.9.0", - "HotChocolate.Types.Mutations": "13.9.0", - "HotChocolate.Types.OffsetPagination": "13.9.0", - "HotChocolate.Validation": "13.9.0" + "HotChocolate.Authorization": "13.9.6", + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Fetching": "13.9.6", + "HotChocolate.Types": "13.9.6", + "HotChocolate.Types.CursorPagination": "13.9.6", + "HotChocolate.Types.Mutations": "13.9.6", + "HotChocolate.Types.OffsetPagination": "13.9.6", + "HotChocolate.Validation": "13.9.6" } }, "HotChocolate.Abstractions": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "mb3IPL8V4NRL2FUefZP20fSwIMOnE7uCMLiM4d5Y5cjljYaMUVzUJnvdW9C1tUfbodP49Llk9WnBCR6S9fr8mQ==", + "resolved": "13.9.6", + "contentHash": "VcdXOcwXTMTTnUbG6epzIW0JIDWCjS8YeHginDQ2HCjUcDQmlHtc7Nv/mQbCGn6fdjc6RpbENf7biWJHvkPb2w==", "dependencies": { - "HotChocolate.Language": "13.9.0", + "HotChocolate.Language": "13.9.6", "System.Collections.Immutable": "8.0.0" } }, "HotChocolate.AspNetCore": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "RnxUdKEYOmsjzNPss473CYOug/9GIt8qlS9j8HxtZrW5TASM/9S7pDb7FthcDj4ag/D7wAwme3YxsqxH+iw5Bg==", + "resolved": "13.9.6", + "contentHash": "s1uU5iRA5PwXjHSY2pan5JXDBDV0mn7lkuBZ0+cAFkgfyIMMJUeWRNRZ8K4gnrTlbwC3YR6m2JlZ/urR1ARFyw==", "dependencies": { - "BananaCakePop.Middleware": "13.0.0", - "HotChocolate": "13.9.0", - "HotChocolate.Subscriptions.InMemory": "13.9.0", - "HotChocolate.Transport.Sockets": "13.9.0", - "HotChocolate.Types.Scalars.Upload": "13.9.0", - "HotChocolate.Utilities.DependencyInjection": "13.9.0" + "BananaCakePop.Middleware": "16.0.1", + "HotChocolate": "13.9.6", + "HotChocolate.Subscriptions.InMemory": "13.9.6", + "HotChocolate.Transport.Sockets": "13.9.6", + "HotChocolate.Types.Scalars.Upload": "13.9.6", + "HotChocolate.Utilities.DependencyInjection": "13.9.6" } }, "HotChocolate.Authorization": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "6CPA39zObNuMUmkmQ6J3zqmalukhjCiJS/klSEDPpwTtrn9HS/3edsh/7oiKzmUh6PNVKGed0lwkSdDP+DGZDQ==", + "resolved": "13.9.6", + "contentHash": "zvRHMaltJPGY9Ko6gWX2rOH5oK5KAKFzVVOsVTwLE8hUYmv+yEYuRpjZ2qABmCd4L/pDSQmuszWXBl/p04aM9A==", "dependencies": { - "HotChocolate.Execution": "13.9.0" + "HotChocolate.Execution": "13.9.6" } }, "HotChocolate.Data": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "eZI9pIipsJsqdacj55krmxx24cUTCearQ/q9wT4aa6vQ/5GwuwWJ0ZIqdcp1qPjd+BsmJixrQBbi6/OgnFXIGw==", + "resolved": "13.9.6", + "contentHash": "2UBUud2ZNfee58nodsOZ9hQXLqJta5GmSiT7FGbRmvgsqrWaXTuNyUvVvrF4igUxAsY6XSZj93h34NcfNhKM4Q==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types.CursorPagination": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types.CursorPagination": "13.9.6" } }, "HotChocolate.Execution": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "zO1aG5qx5lzbZu/iKR56g+zeOgCCCa5pICwxijd1qEap+7J5q0YsME9RByw8wYPH+tNsXCvDcKaeAEcashB4cg==", + "resolved": "13.9.6", + "contentHash": "51QfhBu+KWEDK53ZJSVw6197DqRHBuX2hf3HmkX5d5cyxl6LBLuEp4nr0F2kRdDJaSFO82akC1RwY54B7OY9zg==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", - "HotChocolate.Execution.Abstractions": "13.9.0", - "HotChocolate.Fetching": "13.9.0", - "HotChocolate.Types": "13.9.0", - "HotChocolate.Utilities.DependencyInjection": "13.9.0", - "HotChocolate.Validation": "13.9.0", + "HotChocolate.Abstractions": "13.9.6", + "HotChocolate.Execution.Abstractions": "13.9.6", + "HotChocolate.Fetching": "13.9.6", + "HotChocolate.Types": "13.9.6", + "HotChocolate.Utilities.DependencyInjection": "13.9.6", + "HotChocolate.Validation": "13.9.6", "Microsoft.Extensions.DependencyInjection": "8.0.0", "System.Threading.Channels": "8.0.0" } }, "HotChocolate.Execution.Abstractions": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "flySLPDyTtM4051tI3mh5Ue0fGrKFDuW3w0ebWmW2qjfuF4jgQzd3pK3ZxfkxAfpxQXyPaVn/Q7fae+fYQxeCg==", + "resolved": "13.9.6", + "contentHash": "ipe4vdYjWX4qRBvs2JTzBHCib37Gi2ukJbbGYg2bFKlixXWShW00VvqEpG4kg6KLEmTk5Y2PUEqDqXAt4uK4WA==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", + "HotChocolate.Abstractions": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" } }, "HotChocolate.Fetching": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "pIw7VlEABejQGLRnJGnO7iPdT40AHklf0psJp5zNXrq0IX+Vq7hRRqON73nubZv5Ofhh8fV3kugqYFKvzcptoA==", + "resolved": "13.9.6", + "contentHash": "xBXyo56H6UxQU23C19/Fc8+iP6gUKSRLqqrI8bdBSXBtKEMEM2WLfb1/4q7LuCf/fqHPyyRXgSx09gPZxRy2HA==", "dependencies": { - "GreenDonut": "13.9.0", - "HotChocolate.Types": "13.9.0" + "GreenDonut": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Language": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "M8q0XHQm8Gtab+wKgYXfVPxScjdDE+INify5yaj6g1ZDkV3sLIeX+muu1WebrNO3DgmuAi6o3aW770Ucw7k/dw==", + "resolved": "13.9.6", + "contentHash": "5XzspfAQU6pGOM0S97u45XSAip835MjKXjuqjRwwfTtFJkDXHvUWjcyhddEX2/t2itTaTkIswzz3vgjhj5mkww==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0", - "HotChocolate.Language.Utf8": "13.9.0", - "HotChocolate.Language.Visitors": "13.9.0", - "HotChocolate.Language.Web": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6", + "HotChocolate.Language.Utf8": "13.9.6", + "HotChocolate.Language.Visitors": "13.9.6", + "HotChocolate.Language.Web": "13.9.6" } }, "HotChocolate.Language.SyntaxTree": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "+vwrQ0qOiKn/yUBHn53030hQmqj45C1g0WI8sip50CPnkgs3bAPnDInUvrR3IiHbRn5spAonO4tFPtMDdJrEMA==", + "resolved": "13.9.6", + "contentHash": "VKMXjK3cjO5O9tCAxuHhEAusTlRQOliJJrejYNQ4TaT7532ZBsL9ZmD2C0IAaMYOv8Lz7A/OU1AIBMFp7//4fg==", "dependencies": { "Microsoft.Extensions.ObjectPool": "8.0.0" } }, "HotChocolate.Language.Utf8": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "IEWNYGvtwejf7+j+Xci25FaYets2UD8wkfzQ5dUCW47c1rnTAyuRdTiO8T8x6LYuZ7+SLg7UTBYgjv4ybwAUgA==", + "resolved": "13.9.6", + "contentHash": "lNx+JJZscU8eaU0Lz4G8iQflfcT5XKcrNhRmRCZNba3Sg7ZhrZ489yllrtAYIm428tE+FoQmM6HZSJRQQ3xUkw==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6" } }, "HotChocolate.Language.Visitors": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "j6mPBkfVo2fopWYLoczXCoog4PJ+KwbHItSgHfPfI1kDBcNcy9XY4oxth3Uau1uBbfHYIFjnuVc+FrGb1f9KAQ==", + "resolved": "13.9.6", + "contentHash": "PMBVDLsvUxLS9k9nJfN+qGgV5iwNfdmB2eWZ6QeVEkkhczcRspLJ6sg4lQYAMm3GyUosB99CUTD2g/f3ohKhTg==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6" } }, "HotChocolate.Language.Web": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "GI5ufbNVEoKygSC09owVnCvw1Ma2KzOtm1l6uen3wKshAdOKB4gmSVCjzf71pNL2Nt6cL4IHa70ClqjECmu9qg==", + "resolved": "13.9.6", + "contentHash": "4GiepY1mFp151rrAKy+VD38+gf0AGij8GspJntn5GvKpmvRriwvK24eOQuBZTdMBPiuscLUX0FMkZgs5BX4xYw==", "dependencies": { - "HotChocolate.Language.Utf8": "13.9.0" + "HotChocolate.Language.Utf8": "13.9.6" } }, "HotChocolate.Subscriptions": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "P3ason65NwSzkB2W9myV/pRIm4IMIWXH3RPCtpHVKx22Xw3hRJRJhjLBQZ5LCk5v3+7kKhXNBTbFNpbMyvez3Q==", + "resolved": "13.9.6", + "contentHash": "XO7d+enTaXEwATrii7Sp9r2efP6j5AopQf7iRk7Lky6+j6CCh8BL/V/qgCwAUtmraIOzswJRmy23cD5AssXlGg==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", - "HotChocolate.Execution.Abstractions": "13.9.0" + "HotChocolate.Abstractions": "13.9.6", + "HotChocolate.Execution.Abstractions": "13.9.6" } }, "HotChocolate.Subscriptions.InMemory": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "rj5U1Cd2QsjNnSNNdlSopYLtXh0kTZ1NlA1B3v02YFtj4Zu9le6QkGsl3oUljUUq46vSkkrT9ISj+e5wTCcw/Q==", + "resolved": "13.9.6", + "contentHash": "MdWWQXIBbNRdJ549kX2T/kCGMn88JsK//RuQ+9zaZSCf/Pxir0K86aWy8O3MssVmExot4k7RkQDUoC7GUOLtCQ==", "dependencies": { - "HotChocolate.Execution.Abstractions": "13.9.0", - "HotChocolate.Subscriptions": "13.9.0", + "HotChocolate.Execution.Abstractions": "13.9.6", + "HotChocolate.Subscriptions": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" } }, "HotChocolate.Transport.Sockets": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "4hPlhS2bgqT/tYCZfPtbGtPAaedULKgTbFKkTsjigrDhJcVxBA36Gr3yGM6S3NEw2JdIgiwugYV1log9zXkEjA==", + "resolved": "13.9.6", + "contentHash": "TeYEPFMGNTyjmmSyDvn8AZTy9HQR/+TMUznHWdlHDTCYXRJBwhtSQ+d8j8EbcOGhRw4TL2414+SK1mvypQvVNA==", "dependencies": { "System.IO.Pipelines": "8.0.0" } }, "HotChocolate.Types": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "VGPZePNC4sBlz/iY4x90zIRxW62MWzWNcl2yjLS3JcW+0W8KuKxh99dFLxL0WY/+Eoe8PUecmoob+FrVEvPzpg==", + "resolved": "13.9.6", + "contentHash": "/1V9ngL8AKrF8EOFeMS3AHEdPA/N4WCUNlpn5QDdV+KjVhRIm/tBJtbFZKCqD1kdtAOq19JNj0+bHMf/XBbLJg==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", - "HotChocolate.Types.Shared": "13.9.0", - "HotChocolate.Utilities": "13.9.0", + "HotChocolate.Abstractions": "13.9.6", + "HotChocolate.Types.Shared": "13.9.6", + "HotChocolate.Utilities": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "Microsoft.Extensions.ObjectPool": "8.0.0", "System.ComponentModel.Annotations": "5.0.0", @@ -320,74 +321,74 @@ }, "HotChocolate.Types.CursorPagination": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "2+w6tLrdjo+d/aIKyoNW1L/OH/p+FACMwGWHk1P4MwAspqaF7zjy71qTeNks+8QbRwG8uMleey/0sbr8sWpC6w==", + "resolved": "13.9.6", + "contentHash": "Vo/uowhYoN/YpOnk03b/PGh+GC5xw3uLTR2ZbrmND+pNv7Dzjh95Ajqt/Dl99twgf/aF4v1VOjmJ6Sp0SVR9Ag==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.Mutations": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "NX1zLkb7t19Om5RYubmkA6yRCtBbca454rqSGKSVBYjDrsiA6+4ZDvmS9Kjbw8F+cPm3VqShenrIIgfW8bzCXQ==", + "resolved": "13.9.6", + "contentHash": "hQ4wYHLgIVmhpBYLVtbJCAeASCHHJ427+FeAxGILsbp8J0ZXhlDQhFRPMXPz4bzbUWOR2oFEDTVoLvZSC9ztiQ==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.OffsetPagination": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "LIAaSVRS6FJCssP+s4ooLajhQ1/QfES78twX4OgZFJ9/UZMxXlU3K/IWeB2aXcJNkehfIZLgoiROnouB7ATepw==", + "resolved": "13.9.6", + "contentHash": "WnWKglIc+WNO9bUIcUK5pHaaMh/oNy2XK9ZBVbGiAHSa0HrhEiAWG6iCKdbRmBi0N/ZT6vdl+9we+edlbiVQsA==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.Scalars.Upload": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "hisB6PGGgsekz3a8YJwKgvbZHED98eph9+TMPg5A500tyvrZS00fbdpjRcN+rcTKAxhJ5evzHB2Fo1m62Dyo4w==", + "resolved": "13.9.6", + "contentHash": "RZ3Yu6jRGcjS4+KRXl9UEL4Wv4Kmc7Q0eIn3adAaxAn4L75mkpJmvL3vs4MVPgvlb4WkRoroRZlSBjeovuP0hA==", "dependencies": { - "HotChocolate.Types": "13.9.0" + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.Shared": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "2lhdbXU/GltPQWO9r8qePZSzDo9ryFs8Wv0aF7aQgEq3dLvwer6OpvnZhIYmGua6bXXebA1PzBAEaaxPpLx3Wg==", + "resolved": "13.9.6", + "contentHash": "ZKdal25pF7ChtHwkkDZiaQpi4AVvWLTQgrV8rP9pL34xtymUyuLpXdcCwqfHXWYnqD35JjHRXQYgVunxkPMbIw==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6" } }, "HotChocolate.Utilities": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "6zqwjROYxtuzAYjh31JnYKgM/MySRWEq4DHO64oSPFRJQ8NDgg7EvUU771yLt/6T7kUh+S6k25hVnmUipFtEnQ==" + "resolved": "13.9.6", + "contentHash": "67hAY38hEx93N3/j2xOzSwPwytBL+DNJyJBXSVSj5GGJKdr3SX69lBU8MTl1mt5MSTBA5ypFnj8AUKvQRpL6SQ==" }, "HotChocolate.Utilities.DependencyInjection": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "o1ijY8Rk0IUAo8QZYhfQ8s4/3z78JS9tyXGHzA963gkzTSJPehD4960CAmWlyC19FdE1i2KiTnYLhNOwNoL6+A==", + "resolved": "13.9.6", + "contentHash": "NPOFy3wBmZLIJx3rDmNCVWteckh+nlgJmBb0+lJ30lmPE+nLZLvGgOrC+IgYBNJvD1qjQ2dcnUFgQnNyJ5UsVw==", "dependencies": { "Microsoft.Extensions.DependencyInjection": "8.0.0" } }, "HotChocolate.Validation": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "gC7/YfOcOOmT+zV/V45CubYhK3lZI7+SmNYLGXQ1ko4cwjVRh3PzSJMAaKw3naWDcbjXbEyWwdYc0dLuoVBNEA==", + "resolved": "13.9.6", + "contentHash": "mpB90YtCC//vVi0Ekcs/EPL+DaaEtrF2jvQTd7Rlpay2962JiBf2V0fIk385ugaoryu7j2mFThOLld7ihxL8hw==", "dependencies": { - "HotChocolate.Types": "13.9.0", + "HotChocolate.Types": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "Microsoft.Extensions.Options": "8.0.0" } }, "HtmlSanitizer": { "type": "Transitive", - "resolved": "8.0.843", - "contentHash": "XfmHK4rFz9PPN0gcv7J7pc+MRpcni1mrnO04mwA+9/1zIHLgdOvLJeDwWnX5a+up4tioPvGreB+p+KljLJ32wg==", + "resolved": "8.0.865", + "contentHash": "jzgltCjgTMbTLVfeHYU3ocxJrqRDVdkXYYGTOKVBnpQffaRB/4Hr0R6jKxBBH8UudQSgACp8j3lsD46weyeDJg==", "dependencies": { "AngleSharp": "[0.17.1]", "AngleSharp.Css": "[0.17.0]", @@ -401,10 +402,10 @@ }, "MailKit": { "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "EaXHODUdIV5oPdWvBJGazwaEpKt1LI/H/S//EEozANYCsfOSKHntX+Skk2kW616lSQp+fkRTmSjk0CYxEuOyEA==", + "resolved": "4.6.0", + "contentHash": "EJ1L2AtoO9nGZz2AKl2WGGw4pLIpkgEwzpczmZWBLqX0m33ueVA+CJYd9hg52XOvvEj+w5PVzB7yy26E0WHzKQ==", "dependencies": { - "MimeKit": "4.5.0" + "MimeKit": "4.6.0" } }, "Microsoft.AspNetCore.Authentication.OpenIdConnect": { @@ -422,12 +423,12 @@ }, "Microsoft.Data.SqlClient": { "type": "Transitive", - "resolved": "5.2.0", - "contentHash": "3alfyqRN3ELRtdvU1dGtLBRNQqprr3TJ0WrUJfMISPwg1nPUN2P3Lelah68IKWuV27Ceb7ig95hWNHFTSXfxMg==", + "resolved": "5.2.1", + "contentHash": "ojg2XWmih4ubPPtrhRqqXk0SM6wC2ZSTkNNEAlYBhMo4IsRHjLazFc0abzcZCNfw1JyWcqY7vGutWTv8ZaFD9g==", "dependencies": { - "Azure.Identity": "1.10.3", + "Azure.Identity": "1.11.3", "Microsoft.Data.SqlClient.SNI.runtime": "5.2.0", - "Microsoft.Identity.Client": "4.56.0", + "Microsoft.Identity.Client": "4.60.3", "Microsoft.IdentityModel.JsonWebTokens": "6.35.0", "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.35.0", "Microsoft.SqlServer.Server": "1.0.0", @@ -540,8 +541,8 @@ }, "Microsoft.Extensions.FileProviders.Embedded": { "type": "Transitive", - "resolved": "6.0.29", - "contentHash": "ih7lIqCUXsG4+CNNcPs67TBOe3Yd/HMdBBVP3BhvdZkJEUilhvUK69FB7ZPsiZKel08GkOh2qFXqZsWWPa/lPQ==", + "resolved": "6.0.31", + "contentHash": "2MOwJczvLSl+jxaz6sDn0eGc1io497//fhRg9R+nZNx8ely6+tBxbB01SN29stSIxxuLG/uyTaHJ8W7zCnqy9g==", "dependencies": { "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0" } @@ -586,19 +587,19 @@ }, "Microsoft.Extensions.Localization": { "type": "Transitive", - "resolved": "6.0.29", - "contentHash": "cZ5Tx6NtTZFzk+PWW2icApat7agQiMIFIsohsmHmz/scKRfAI/5XTa9lpZMwKowQBZm+ap0RwAJmQ2/5xoL+VQ==", + "resolved": "6.0.31", + "contentHash": "Qivy1329sMhNDm/qvRRBB5M/z3a1/Zfe+nY7oSBLnFnldEwYEMmfP+O1xu1f/BCd5oRC+k3OQ9bRTrZepU0zCQ==", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Localization.Abstractions": "6.0.29", + "Microsoft.Extensions.Localization.Abstractions": "6.0.31", "Microsoft.Extensions.Logging.Abstractions": "6.0.4", "Microsoft.Extensions.Options": "6.0.0" } }, "Microsoft.Extensions.Localization.Abstractions": { "type": "Transitive", - "resolved": "6.0.29", - "contentHash": "4HVhh+V/7H2VMgFI8EP1kLgLpeRqm1kQOlXjHk4MHCVD5/pgWOTTbLEz9pdXymQQf/eRg1vNK8tG2MZstBHhlw==" + "resolved": "6.0.31", + "contentHash": "q1K9D2xGiTILwo5+ht0Hsu891QLKOIp7BCdm+v9G4Hh+HTjnXk83TrucxNElM/z/BcJwWUHhsqx/abdgTdpyRQ==" }, "Microsoft.Extensions.Logging": { "type": "Transitive", @@ -651,19 +652,19 @@ }, "Microsoft.Identity.Client": { "type": "Transitive", - "resolved": "4.56.0", - "contentHash": "rr4zbidvHy9r4NvOAs5hdd964Ao2A0pAeFBJKR95u1CJAVzbd1p6tPTXUZ+5ld0cfThiVSGvz6UHwY6JjraTpA==", + "resolved": "4.60.3", + "contentHash": "jve1RzmSpBhGlqMzPva6VfRbLMLZZc1Q8WRVZf8+iEruQkBgDTJPq8OeTehcY4GGYG1j6UB1xVofVE+n4BLDdw==", "dependencies": { - "Microsoft.IdentityModel.Abstractions": "6.22.0" + "Microsoft.IdentityModel.Abstractions": "6.35.0", + "System.Diagnostics.DiagnosticSource": "6.0.1" } }, "Microsoft.Identity.Client.Extensions.Msal": { "type": "Transitive", - "resolved": "4.56.0", - "contentHash": "H12YAzEGK55vZ+QpxUzozhW8ZZtgPDuWvgA0JbdIR9UhMUplj29JhIgE2imuH8W2Nw9D8JKygR1uxRFtpSNcrg==", + "resolved": "4.60.3", + "contentHash": "X1Cz14/RbmlLshusE5u2zfG+5ul6ttgou19BZe5Mdw1qm6fgOI9/imBB2TIsx2UD7nkgd2+MCSzhbukZf7udeg==", "dependencies": { - "Microsoft.Identity.Client": "4.56.0", - "System.IO.FileSystem.AccessControl": "5.0.0", + "Microsoft.Identity.Client": "4.60.3", "System.Security.Cryptography.ProtectedData": "4.5.0" } }, @@ -714,11 +715,6 @@ "Microsoft.IdentityModel.Logging": "7.0.3" } }, - "Microsoft.NETCore.Platforms": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==" - }, "Microsoft.SqlServer.Server": { "type": "Transitive", "resolved": "1.0.0", @@ -726,10 +722,10 @@ }, "MimeKit": { "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "OYn8b8b66J4mgtDzoImepiUtdkJOAVGoTj/ghzJ+az4wVixA5L5Z8GmgFhRvQ1btAIwZh/d9zvZLCALndQdz5w==", + "resolved": "4.6.0", + "contentHash": "M4jddPQNSClTzHE+HnfrtN93mCXSYF8KewWUTwzXgl49ajzUh8hz/UY4CAnRQR4YJF3lBY5P+r+73VXZAGKafw==", "dependencies": { - "BouncyCastle.Cryptography": "2.3.0", + "BouncyCastle.Cryptography": "2.3.1", "System.Security.Cryptography.Pkcs": "8.0.0" } }, @@ -753,6 +749,15 @@ "resolved": "4.5.1", "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==" }, + "System.ClientModel": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "I3CVkvxeqFYjIVEP59DnjbeoGNfo/+SZrCLpRz2v/g0gpCHaEMPtWSY0s9k/7jR1rAsLNg2z2u1JRB76tPjnIw==", + "dependencies": { + "System.Memory.Data": "1.0.2", + "System.Text.Json": "4.7.2" + } + }, "System.CodeDom": { "type": "Transitive", "resolved": "8.0.0", @@ -801,15 +806,6 @@ "Microsoft.IdentityModel.Tokens": "7.0.3" } }, - "System.IO.FileSystem.AccessControl": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "SxHB3nuNrpptVk+vZ/F+7OHEpoHUIKKMl02bUmYHQr1r+glbZQxs7pRtsf4ENO29TVm2TH3AEeep2fJcy92oYw==", - "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } - }, "System.IO.Hashing": { "type": "Transitive", "resolved": "7.0.0", @@ -852,15 +848,6 @@ "resolved": "6.0.0", "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" }, - "System.Security.AccessControl": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } - }, "System.Security.Cryptography.Pkcs": { "type": "Transitive", "resolved": "8.0.0", @@ -874,11 +861,6 @@ "resolved": "8.0.0", "contentHash": "+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg==" }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" - }, "System.Text.Encoding.CodePages": { "type": "Transitive", "resolved": "6.0.0", @@ -912,8 +894,8 @@ }, "Yarp.ReverseProxy": { "type": "Transitive", - "resolved": "2.0.1", - "contentHash": "op7vBwONPFeR1PYxeLw+RLqSodODDX8RWd0OinLGMVIq6yi1q9mv1j56ImuyZgiAToksiC0Dc7jbRUZ9I+jvFA==", + "resolved": "2.1.0", + "contentHash": "VgRuCBxmh5ND4VuFhvIN3AAeoxFhYkS2hNINk6AVCrOVTlpk7OwdrTXi8NHACfqfhDL+/oYCZrF9RxN+yiYnEg==", "dependencies": { "System.IO.Hashing": "7.0.0" } @@ -927,20 +909,20 @@ }, "Kentico.Xperience.Core": { "type": "CentralTransitive", - "requested": "[29.0.1, )", - "resolved": "29.0.1", - "contentHash": "QMmB5YGxAgIgYyGa21v0M40QJgqyWxGBLq6rjU483XhEPL1f4rhGW81XEU4kw/REBdCoH46LJT3/ATW/7pYBFA==", + "requested": "[29.2.0, )", + "resolved": "29.2.0", + "contentHash": "5gK/HD6jO4LuAzhSNyimp6cgMTfpMM89bn0D3kE7g2XZunPqnNDy8uTtbeF6edDh2vYGa+mzUZsxvPU+bzPfmg==", "dependencies": { "AngleSharp": "0.17.1", - "MailKit": "4.5.0", - "Microsoft.Data.SqlClient": "5.2.0", + "MailKit": "4.6.0", + "Microsoft.Data.SqlClient": "5.2.1", "Microsoft.Extensions.Caching.Memory": "6.0.1", "Microsoft.Extensions.Configuration": "6.0.1", "Microsoft.Extensions.Configuration.Binder": "6.0.0", "Microsoft.Extensions.DependencyInjection": "6.0.1", "Microsoft.Extensions.FileProviders.Physical": "6.0.0", "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", - "Microsoft.Extensions.Localization": "6.0.29", + "Microsoft.Extensions.Localization": "6.0.31", "Microsoft.Extensions.Options.ConfigurationExtensions": "6.0.0", "Mono.Cecil": "0.11.5", "Newtonsoft.Json": "13.0.3", diff --git a/src/Kentico.Xperience.Store.Rcl/packages.lock.json b/src/Kentico.Xperience.Store.Rcl/packages.lock.json index 0c26d61d..41cf3159 100644 --- a/src/Kentico.Xperience.Store.Rcl/packages.lock.json +++ b/src/Kentico.Xperience.Store.Rcl/packages.lock.json @@ -27,10 +27,11 @@ }, "Azure.Core": { "type": "Transitive", - "resolved": "1.35.0", - "contentHash": "hENcx03Jyuqv05F4RBEPbxz29UrM3Nbhnr6Wl6NQpoU9BCIbL3XLentrxDCTrH54NLS11Exxi/o8MYgT/cnKFA==", + "resolved": "1.38.0", + "contentHash": "IuEgCoVA0ef7E4pQtpC3+TkPbzaoQfa77HlfJDmfuaJUCVJmn7fT0izamZiryW5sYUFKizsftIxMkXKbgIcPMQ==", "dependencies": { "Microsoft.Bcl.AsyncInterfaces": "1.1.1", + "System.ClientModel": "1.0.0", "System.Diagnostics.DiagnosticSource": "6.0.1", "System.Memory.Data": "1.0.2", "System.Numerics.Vectors": "4.5.0", @@ -41,12 +42,12 @@ }, "Azure.Identity": { "type": "Transitive", - "resolved": "1.10.3", - "contentHash": "l1Xm2MWOF2Mzcwuarlw8kWQXLZk3UeB55aQXVyjj23aBfDwOZ3gu5GP2kJ6KlmZeZv2TCzw7x4L3V36iNr3gww==", + "resolved": "1.11.3", + "contentHash": "4EsGMAr+oog5UqHs46qwA7S/lJiwpXjPBY3t9tQBmJ8nsgmT/LLnrc32eiTlfOdfKxUz4fxBD2YjSnVZacu97w==", "dependencies": { - "Azure.Core": "1.35.0", - "Microsoft.Identity.Client": "4.56.0", - "Microsoft.Identity.Client.Extensions.Msal": "4.56.0", + "Azure.Core": "1.38.0", + "Microsoft.Identity.Client": "4.60.3", + "Microsoft.Identity.Client.Extensions.Msal": "4.60.3", "System.Memory": "4.5.4", "System.Security.Cryptography.ProtectedData": "4.7.0", "System.Text.Json": "4.7.2", @@ -55,16 +56,16 @@ }, "BananaCakePop.Middleware": { "type": "Transitive", - "resolved": "13.0.0", - "contentHash": "6Zj/vfmnCXLjBG7WNdtOgZZ5ZDR3Sy1FQSshZUonIYs3OdzozmsFmqPXMd9XJ0QE9aAildgVGq/lDLpLrMI4Yw==", + "resolved": "16.0.1", + "contentHash": "i/LDG7Lw2ln1WM7GaMyNDWHExtN15/O/xgcX8lhBK6FZFPBnlq6FJW4GuS3vs0UpLB1TvX2tcOenMlXjcMZq0g==", "dependencies": { - "Yarp.ReverseProxy": "2.0.1" + "Yarp.ReverseProxy": "2.1.0" } }, "BouncyCastle.Cryptography": { "type": "Transitive", - "resolved": "2.3.0", - "contentHash": "IaVIiYxZLaBulveGDRUx/pBoW/Rc8QeXGF5u2E8xL8RWhVKCgfmtX9NUyGRbnSqnbFQU2zyP3MkXIdH+jUuQBw==" + "resolved": "2.3.1", + "contentHash": "buwoISwecYke3CmgG1AQSg+sNZjJeIb93vTAtJiHZX35hP/teYMxsfg0NDXGUKjGx6BKBTNKc77O2M3vKvlXZQ==" }, "CommandLineParser": { "type": "Transitive", @@ -87,8 +88,8 @@ }, "GreenDonut": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "T8ZYTsm0S48hi89d2symCvUEJoBkg5F+rfU+HFtkEOc7WLZsIBDStnfF3c890Vxjmx/P1tFpY5StDNTM+C6fIw==", + "resolved": "13.9.6", + "contentHash": "HDdjNimJhBKfgN6XOy74jT5UxueFV4IQuYEL2YglwnayJaP9ah34D0CXV+0axkYFzaU/xr6IW+g0KZMgKU803A==", "dependencies": { "Microsoft.Extensions.ObjectPool": "8.0.0", "System.Diagnostics.DiagnosticSource": "8.0.0", @@ -97,169 +98,169 @@ }, "HotChocolate": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "aGBAW6d9Oj1MfmKJF482yYdJ8G87yJ0rVFxU9l7lA1dg1xjc5XALLQO9jCPz4GCpQLetuAhHdkZ713imJ6WCPw==", + "resolved": "13.9.6", + "contentHash": "Jt1NCrRekNR4XHaAq9nPyL2bkk38EZtcQ7H5NrcNuqbmLzENNvZ43v4ltO9z28eRl8TrPOsAisFLcG3ZiV0yJA==", "dependencies": { - "HotChocolate.Authorization": "13.9.0", - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Fetching": "13.9.0", - "HotChocolate.Types": "13.9.0", - "HotChocolate.Types.CursorPagination": "13.9.0", - "HotChocolate.Types.Mutations": "13.9.0", - "HotChocolate.Types.OffsetPagination": "13.9.0", - "HotChocolate.Validation": "13.9.0" + "HotChocolate.Authorization": "13.9.6", + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Fetching": "13.9.6", + "HotChocolate.Types": "13.9.6", + "HotChocolate.Types.CursorPagination": "13.9.6", + "HotChocolate.Types.Mutations": "13.9.6", + "HotChocolate.Types.OffsetPagination": "13.9.6", + "HotChocolate.Validation": "13.9.6" } }, "HotChocolate.Abstractions": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "mb3IPL8V4NRL2FUefZP20fSwIMOnE7uCMLiM4d5Y5cjljYaMUVzUJnvdW9C1tUfbodP49Llk9WnBCR6S9fr8mQ==", + "resolved": "13.9.6", + "contentHash": "VcdXOcwXTMTTnUbG6epzIW0JIDWCjS8YeHginDQ2HCjUcDQmlHtc7Nv/mQbCGn6fdjc6RpbENf7biWJHvkPb2w==", "dependencies": { - "HotChocolate.Language": "13.9.0", + "HotChocolate.Language": "13.9.6", "System.Collections.Immutable": "8.0.0" } }, "HotChocolate.AspNetCore": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "RnxUdKEYOmsjzNPss473CYOug/9GIt8qlS9j8HxtZrW5TASM/9S7pDb7FthcDj4ag/D7wAwme3YxsqxH+iw5Bg==", + "resolved": "13.9.6", + "contentHash": "s1uU5iRA5PwXjHSY2pan5JXDBDV0mn7lkuBZ0+cAFkgfyIMMJUeWRNRZ8K4gnrTlbwC3YR6m2JlZ/urR1ARFyw==", "dependencies": { - "BananaCakePop.Middleware": "13.0.0", - "HotChocolate": "13.9.0", - "HotChocolate.Subscriptions.InMemory": "13.9.0", - "HotChocolate.Transport.Sockets": "13.9.0", - "HotChocolate.Types.Scalars.Upload": "13.9.0", - "HotChocolate.Utilities.DependencyInjection": "13.9.0" + "BananaCakePop.Middleware": "16.0.1", + "HotChocolate": "13.9.6", + "HotChocolate.Subscriptions.InMemory": "13.9.6", + "HotChocolate.Transport.Sockets": "13.9.6", + "HotChocolate.Types.Scalars.Upload": "13.9.6", + "HotChocolate.Utilities.DependencyInjection": "13.9.6" } }, "HotChocolate.Authorization": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "6CPA39zObNuMUmkmQ6J3zqmalukhjCiJS/klSEDPpwTtrn9HS/3edsh/7oiKzmUh6PNVKGed0lwkSdDP+DGZDQ==", + "resolved": "13.9.6", + "contentHash": "zvRHMaltJPGY9Ko6gWX2rOH5oK5KAKFzVVOsVTwLE8hUYmv+yEYuRpjZ2qABmCd4L/pDSQmuszWXBl/p04aM9A==", "dependencies": { - "HotChocolate.Execution": "13.9.0" + "HotChocolate.Execution": "13.9.6" } }, "HotChocolate.Data": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "eZI9pIipsJsqdacj55krmxx24cUTCearQ/q9wT4aa6vQ/5GwuwWJ0ZIqdcp1qPjd+BsmJixrQBbi6/OgnFXIGw==", + "resolved": "13.9.6", + "contentHash": "2UBUud2ZNfee58nodsOZ9hQXLqJta5GmSiT7FGbRmvgsqrWaXTuNyUvVvrF4igUxAsY6XSZj93h34NcfNhKM4Q==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types.CursorPagination": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types.CursorPagination": "13.9.6" } }, "HotChocolate.Execution": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "zO1aG5qx5lzbZu/iKR56g+zeOgCCCa5pICwxijd1qEap+7J5q0YsME9RByw8wYPH+tNsXCvDcKaeAEcashB4cg==", + "resolved": "13.9.6", + "contentHash": "51QfhBu+KWEDK53ZJSVw6197DqRHBuX2hf3HmkX5d5cyxl6LBLuEp4nr0F2kRdDJaSFO82akC1RwY54B7OY9zg==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", - "HotChocolate.Execution.Abstractions": "13.9.0", - "HotChocolate.Fetching": "13.9.0", - "HotChocolate.Types": "13.9.0", - "HotChocolate.Utilities.DependencyInjection": "13.9.0", - "HotChocolate.Validation": "13.9.0", + "HotChocolate.Abstractions": "13.9.6", + "HotChocolate.Execution.Abstractions": "13.9.6", + "HotChocolate.Fetching": "13.9.6", + "HotChocolate.Types": "13.9.6", + "HotChocolate.Utilities.DependencyInjection": "13.9.6", + "HotChocolate.Validation": "13.9.6", "Microsoft.Extensions.DependencyInjection": "8.0.0", "System.Threading.Channels": "8.0.0" } }, "HotChocolate.Execution.Abstractions": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "flySLPDyTtM4051tI3mh5Ue0fGrKFDuW3w0ebWmW2qjfuF4jgQzd3pK3ZxfkxAfpxQXyPaVn/Q7fae+fYQxeCg==", + "resolved": "13.9.6", + "contentHash": "ipe4vdYjWX4qRBvs2JTzBHCib37Gi2ukJbbGYg2bFKlixXWShW00VvqEpG4kg6KLEmTk5Y2PUEqDqXAt4uK4WA==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", + "HotChocolate.Abstractions": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" } }, "HotChocolate.Fetching": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "pIw7VlEABejQGLRnJGnO7iPdT40AHklf0psJp5zNXrq0IX+Vq7hRRqON73nubZv5Ofhh8fV3kugqYFKvzcptoA==", + "resolved": "13.9.6", + "contentHash": "xBXyo56H6UxQU23C19/Fc8+iP6gUKSRLqqrI8bdBSXBtKEMEM2WLfb1/4q7LuCf/fqHPyyRXgSx09gPZxRy2HA==", "dependencies": { - "GreenDonut": "13.9.0", - "HotChocolate.Types": "13.9.0" + "GreenDonut": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Language": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "M8q0XHQm8Gtab+wKgYXfVPxScjdDE+INify5yaj6g1ZDkV3sLIeX+muu1WebrNO3DgmuAi6o3aW770Ucw7k/dw==", + "resolved": "13.9.6", + "contentHash": "5XzspfAQU6pGOM0S97u45XSAip835MjKXjuqjRwwfTtFJkDXHvUWjcyhddEX2/t2itTaTkIswzz3vgjhj5mkww==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0", - "HotChocolate.Language.Utf8": "13.9.0", - "HotChocolate.Language.Visitors": "13.9.0", - "HotChocolate.Language.Web": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6", + "HotChocolate.Language.Utf8": "13.9.6", + "HotChocolate.Language.Visitors": "13.9.6", + "HotChocolate.Language.Web": "13.9.6" } }, "HotChocolate.Language.SyntaxTree": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "+vwrQ0qOiKn/yUBHn53030hQmqj45C1g0WI8sip50CPnkgs3bAPnDInUvrR3IiHbRn5spAonO4tFPtMDdJrEMA==", + "resolved": "13.9.6", + "contentHash": "VKMXjK3cjO5O9tCAxuHhEAusTlRQOliJJrejYNQ4TaT7532ZBsL9ZmD2C0IAaMYOv8Lz7A/OU1AIBMFp7//4fg==", "dependencies": { "Microsoft.Extensions.ObjectPool": "8.0.0" } }, "HotChocolate.Language.Utf8": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "IEWNYGvtwejf7+j+Xci25FaYets2UD8wkfzQ5dUCW47c1rnTAyuRdTiO8T8x6LYuZ7+SLg7UTBYgjv4ybwAUgA==", + "resolved": "13.9.6", + "contentHash": "lNx+JJZscU8eaU0Lz4G8iQflfcT5XKcrNhRmRCZNba3Sg7ZhrZ489yllrtAYIm428tE+FoQmM6HZSJRQQ3xUkw==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6" } }, "HotChocolate.Language.Visitors": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "j6mPBkfVo2fopWYLoczXCoog4PJ+KwbHItSgHfPfI1kDBcNcy9XY4oxth3Uau1uBbfHYIFjnuVc+FrGb1f9KAQ==", + "resolved": "13.9.6", + "contentHash": "PMBVDLsvUxLS9k9nJfN+qGgV5iwNfdmB2eWZ6QeVEkkhczcRspLJ6sg4lQYAMm3GyUosB99CUTD2g/f3ohKhTg==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6" } }, "HotChocolate.Language.Web": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "GI5ufbNVEoKygSC09owVnCvw1Ma2KzOtm1l6uen3wKshAdOKB4gmSVCjzf71pNL2Nt6cL4IHa70ClqjECmu9qg==", + "resolved": "13.9.6", + "contentHash": "4GiepY1mFp151rrAKy+VD38+gf0AGij8GspJntn5GvKpmvRriwvK24eOQuBZTdMBPiuscLUX0FMkZgs5BX4xYw==", "dependencies": { - "HotChocolate.Language.Utf8": "13.9.0" + "HotChocolate.Language.Utf8": "13.9.6" } }, "HotChocolate.Subscriptions": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "P3ason65NwSzkB2W9myV/pRIm4IMIWXH3RPCtpHVKx22Xw3hRJRJhjLBQZ5LCk5v3+7kKhXNBTbFNpbMyvez3Q==", + "resolved": "13.9.6", + "contentHash": "XO7d+enTaXEwATrii7Sp9r2efP6j5AopQf7iRk7Lky6+j6CCh8BL/V/qgCwAUtmraIOzswJRmy23cD5AssXlGg==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", - "HotChocolate.Execution.Abstractions": "13.9.0" + "HotChocolate.Abstractions": "13.9.6", + "HotChocolate.Execution.Abstractions": "13.9.6" } }, "HotChocolate.Subscriptions.InMemory": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "rj5U1Cd2QsjNnSNNdlSopYLtXh0kTZ1NlA1B3v02YFtj4Zu9le6QkGsl3oUljUUq46vSkkrT9ISj+e5wTCcw/Q==", + "resolved": "13.9.6", + "contentHash": "MdWWQXIBbNRdJ549kX2T/kCGMn88JsK//RuQ+9zaZSCf/Pxir0K86aWy8O3MssVmExot4k7RkQDUoC7GUOLtCQ==", "dependencies": { - "HotChocolate.Execution.Abstractions": "13.9.0", - "HotChocolate.Subscriptions": "13.9.0", + "HotChocolate.Execution.Abstractions": "13.9.6", + "HotChocolate.Subscriptions": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" } }, "HotChocolate.Transport.Sockets": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "4hPlhS2bgqT/tYCZfPtbGtPAaedULKgTbFKkTsjigrDhJcVxBA36Gr3yGM6S3NEw2JdIgiwugYV1log9zXkEjA==", + "resolved": "13.9.6", + "contentHash": "TeYEPFMGNTyjmmSyDvn8AZTy9HQR/+TMUznHWdlHDTCYXRJBwhtSQ+d8j8EbcOGhRw4TL2414+SK1mvypQvVNA==", "dependencies": { "System.IO.Pipelines": "8.0.0" } }, "HotChocolate.Types": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "VGPZePNC4sBlz/iY4x90zIRxW62MWzWNcl2yjLS3JcW+0W8KuKxh99dFLxL0WY/+Eoe8PUecmoob+FrVEvPzpg==", + "resolved": "13.9.6", + "contentHash": "/1V9ngL8AKrF8EOFeMS3AHEdPA/N4WCUNlpn5QDdV+KjVhRIm/tBJtbFZKCqD1kdtAOq19JNj0+bHMf/XBbLJg==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", - "HotChocolate.Types.Shared": "13.9.0", - "HotChocolate.Utilities": "13.9.0", + "HotChocolate.Abstractions": "13.9.6", + "HotChocolate.Types.Shared": "13.9.6", + "HotChocolate.Utilities": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "Microsoft.Extensions.ObjectPool": "8.0.0", "System.ComponentModel.Annotations": "5.0.0", @@ -268,74 +269,74 @@ }, "HotChocolate.Types.CursorPagination": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "2+w6tLrdjo+d/aIKyoNW1L/OH/p+FACMwGWHk1P4MwAspqaF7zjy71qTeNks+8QbRwG8uMleey/0sbr8sWpC6w==", + "resolved": "13.9.6", + "contentHash": "Vo/uowhYoN/YpOnk03b/PGh+GC5xw3uLTR2ZbrmND+pNv7Dzjh95Ajqt/Dl99twgf/aF4v1VOjmJ6Sp0SVR9Ag==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.Mutations": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "NX1zLkb7t19Om5RYubmkA6yRCtBbca454rqSGKSVBYjDrsiA6+4ZDvmS9Kjbw8F+cPm3VqShenrIIgfW8bzCXQ==", + "resolved": "13.9.6", + "contentHash": "hQ4wYHLgIVmhpBYLVtbJCAeASCHHJ427+FeAxGILsbp8J0ZXhlDQhFRPMXPz4bzbUWOR2oFEDTVoLvZSC9ztiQ==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.OffsetPagination": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "LIAaSVRS6FJCssP+s4ooLajhQ1/QfES78twX4OgZFJ9/UZMxXlU3K/IWeB2aXcJNkehfIZLgoiROnouB7ATepw==", + "resolved": "13.9.6", + "contentHash": "WnWKglIc+WNO9bUIcUK5pHaaMh/oNy2XK9ZBVbGiAHSa0HrhEiAWG6iCKdbRmBi0N/ZT6vdl+9we+edlbiVQsA==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.Scalars.Upload": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "hisB6PGGgsekz3a8YJwKgvbZHED98eph9+TMPg5A500tyvrZS00fbdpjRcN+rcTKAxhJ5evzHB2Fo1m62Dyo4w==", + "resolved": "13.9.6", + "contentHash": "RZ3Yu6jRGcjS4+KRXl9UEL4Wv4Kmc7Q0eIn3adAaxAn4L75mkpJmvL3vs4MVPgvlb4WkRoroRZlSBjeovuP0hA==", "dependencies": { - "HotChocolate.Types": "13.9.0" + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.Shared": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "2lhdbXU/GltPQWO9r8qePZSzDo9ryFs8Wv0aF7aQgEq3dLvwer6OpvnZhIYmGua6bXXebA1PzBAEaaxPpLx3Wg==", + "resolved": "13.9.6", + "contentHash": "ZKdal25pF7ChtHwkkDZiaQpi4AVvWLTQgrV8rP9pL34xtymUyuLpXdcCwqfHXWYnqD35JjHRXQYgVunxkPMbIw==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6" } }, "HotChocolate.Utilities": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "6zqwjROYxtuzAYjh31JnYKgM/MySRWEq4DHO64oSPFRJQ8NDgg7EvUU771yLt/6T7kUh+S6k25hVnmUipFtEnQ==" + "resolved": "13.9.6", + "contentHash": "67hAY38hEx93N3/j2xOzSwPwytBL+DNJyJBXSVSj5GGJKdr3SX69lBU8MTl1mt5MSTBA5ypFnj8AUKvQRpL6SQ==" }, "HotChocolate.Utilities.DependencyInjection": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "o1ijY8Rk0IUAo8QZYhfQ8s4/3z78JS9tyXGHzA963gkzTSJPehD4960CAmWlyC19FdE1i2KiTnYLhNOwNoL6+A==", + "resolved": "13.9.6", + "contentHash": "NPOFy3wBmZLIJx3rDmNCVWteckh+nlgJmBb0+lJ30lmPE+nLZLvGgOrC+IgYBNJvD1qjQ2dcnUFgQnNyJ5UsVw==", "dependencies": { "Microsoft.Extensions.DependencyInjection": "8.0.0" } }, "HotChocolate.Validation": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "gC7/YfOcOOmT+zV/V45CubYhK3lZI7+SmNYLGXQ1ko4cwjVRh3PzSJMAaKw3naWDcbjXbEyWwdYc0dLuoVBNEA==", + "resolved": "13.9.6", + "contentHash": "mpB90YtCC//vVi0Ekcs/EPL+DaaEtrF2jvQTd7Rlpay2962JiBf2V0fIk385ugaoryu7j2mFThOLld7ihxL8hw==", "dependencies": { - "HotChocolate.Types": "13.9.0", + "HotChocolate.Types": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "Microsoft.Extensions.Options": "8.0.0" } }, "HtmlSanitizer": { "type": "Transitive", - "resolved": "8.0.843", - "contentHash": "XfmHK4rFz9PPN0gcv7J7pc+MRpcni1mrnO04mwA+9/1zIHLgdOvLJeDwWnX5a+up4tioPvGreB+p+KljLJ32wg==", + "resolved": "8.0.865", + "contentHash": "jzgltCjgTMbTLVfeHYU3ocxJrqRDVdkXYYGTOKVBnpQffaRB/4Hr0R6jKxBBH8UudQSgACp8j3lsD46weyeDJg==", "dependencies": { "AngleSharp": "[0.17.1]", "AngleSharp.Css": "[0.17.0]", @@ -349,10 +350,10 @@ }, "MailKit": { "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "EaXHODUdIV5oPdWvBJGazwaEpKt1LI/H/S//EEozANYCsfOSKHntX+Skk2kW616lSQp+fkRTmSjk0CYxEuOyEA==", + "resolved": "4.6.0", + "contentHash": "EJ1L2AtoO9nGZz2AKl2WGGw4pLIpkgEwzpczmZWBLqX0m33ueVA+CJYd9hg52XOvvEj+w5PVzB7yy26E0WHzKQ==", "dependencies": { - "MimeKit": "4.5.0" + "MimeKit": "4.6.0" } }, "Microsoft.AspNetCore.Authentication.OpenIdConnect": { @@ -370,12 +371,12 @@ }, "Microsoft.Data.SqlClient": { "type": "Transitive", - "resolved": "5.2.0", - "contentHash": "3alfyqRN3ELRtdvU1dGtLBRNQqprr3TJ0WrUJfMISPwg1nPUN2P3Lelah68IKWuV27Ceb7ig95hWNHFTSXfxMg==", + "resolved": "5.2.1", + "contentHash": "ojg2XWmih4ubPPtrhRqqXk0SM6wC2ZSTkNNEAlYBhMo4IsRHjLazFc0abzcZCNfw1JyWcqY7vGutWTv8ZaFD9g==", "dependencies": { - "Azure.Identity": "1.10.3", + "Azure.Identity": "1.11.3", "Microsoft.Data.SqlClient.SNI.runtime": "5.2.0", - "Microsoft.Identity.Client": "4.56.0", + "Microsoft.Identity.Client": "4.60.3", "Microsoft.IdentityModel.JsonWebTokens": "6.35.0", "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.35.0", "Microsoft.SqlServer.Server": "1.0.0", @@ -488,8 +489,8 @@ }, "Microsoft.Extensions.FileProviders.Embedded": { "type": "Transitive", - "resolved": "6.0.29", - "contentHash": "ih7lIqCUXsG4+CNNcPs67TBOe3Yd/HMdBBVP3BhvdZkJEUilhvUK69FB7ZPsiZKel08GkOh2qFXqZsWWPa/lPQ==", + "resolved": "6.0.31", + "contentHash": "2MOwJczvLSl+jxaz6sDn0eGc1io497//fhRg9R+nZNx8ely6+tBxbB01SN29stSIxxuLG/uyTaHJ8W7zCnqy9g==", "dependencies": { "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0" } @@ -534,19 +535,19 @@ }, "Microsoft.Extensions.Localization": { "type": "Transitive", - "resolved": "6.0.29", - "contentHash": "cZ5Tx6NtTZFzk+PWW2icApat7agQiMIFIsohsmHmz/scKRfAI/5XTa9lpZMwKowQBZm+ap0RwAJmQ2/5xoL+VQ==", + "resolved": "6.0.31", + "contentHash": "Qivy1329sMhNDm/qvRRBB5M/z3a1/Zfe+nY7oSBLnFnldEwYEMmfP+O1xu1f/BCd5oRC+k3OQ9bRTrZepU0zCQ==", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Localization.Abstractions": "6.0.29", + "Microsoft.Extensions.Localization.Abstractions": "6.0.31", "Microsoft.Extensions.Logging.Abstractions": "6.0.4", "Microsoft.Extensions.Options": "6.0.0" } }, "Microsoft.Extensions.Localization.Abstractions": { "type": "Transitive", - "resolved": "6.0.29", - "contentHash": "4HVhh+V/7H2VMgFI8EP1kLgLpeRqm1kQOlXjHk4MHCVD5/pgWOTTbLEz9pdXymQQf/eRg1vNK8tG2MZstBHhlw==" + "resolved": "6.0.31", + "contentHash": "q1K9D2xGiTILwo5+ht0Hsu891QLKOIp7BCdm+v9G4Hh+HTjnXk83TrucxNElM/z/BcJwWUHhsqx/abdgTdpyRQ==" }, "Microsoft.Extensions.Logging": { "type": "Transitive", @@ -599,19 +600,19 @@ }, "Microsoft.Identity.Client": { "type": "Transitive", - "resolved": "4.56.0", - "contentHash": "rr4zbidvHy9r4NvOAs5hdd964Ao2A0pAeFBJKR95u1CJAVzbd1p6tPTXUZ+5ld0cfThiVSGvz6UHwY6JjraTpA==", + "resolved": "4.60.3", + "contentHash": "jve1RzmSpBhGlqMzPva6VfRbLMLZZc1Q8WRVZf8+iEruQkBgDTJPq8OeTehcY4GGYG1j6UB1xVofVE+n4BLDdw==", "dependencies": { - "Microsoft.IdentityModel.Abstractions": "6.22.0" + "Microsoft.IdentityModel.Abstractions": "6.35.0", + "System.Diagnostics.DiagnosticSource": "6.0.1" } }, "Microsoft.Identity.Client.Extensions.Msal": { "type": "Transitive", - "resolved": "4.56.0", - "contentHash": "H12YAzEGK55vZ+QpxUzozhW8ZZtgPDuWvgA0JbdIR9UhMUplj29JhIgE2imuH8W2Nw9D8JKygR1uxRFtpSNcrg==", + "resolved": "4.60.3", + "contentHash": "X1Cz14/RbmlLshusE5u2zfG+5ul6ttgou19BZe5Mdw1qm6fgOI9/imBB2TIsx2UD7nkgd2+MCSzhbukZf7udeg==", "dependencies": { - "Microsoft.Identity.Client": "4.56.0", - "System.IO.FileSystem.AccessControl": "5.0.0", + "Microsoft.Identity.Client": "4.60.3", "System.Security.Cryptography.ProtectedData": "4.5.0" } }, @@ -662,11 +663,6 @@ "Microsoft.IdentityModel.Logging": "7.0.3" } }, - "Microsoft.NETCore.Platforms": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==" - }, "Microsoft.SqlServer.Server": { "type": "Transitive", "resolved": "1.0.0", @@ -674,10 +670,10 @@ }, "MimeKit": { "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "OYn8b8b66J4mgtDzoImepiUtdkJOAVGoTj/ghzJ+az4wVixA5L5Z8GmgFhRvQ1btAIwZh/d9zvZLCALndQdz5w==", + "resolved": "4.6.0", + "contentHash": "M4jddPQNSClTzHE+HnfrtN93mCXSYF8KewWUTwzXgl49ajzUh8hz/UY4CAnRQR4YJF3lBY5P+r+73VXZAGKafw==", "dependencies": { - "BouncyCastle.Cryptography": "2.3.0", + "BouncyCastle.Cryptography": "2.3.1", "System.Security.Cryptography.Pkcs": "8.0.0" } }, @@ -696,6 +692,15 @@ "resolved": "4.5.1", "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==" }, + "System.ClientModel": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "I3CVkvxeqFYjIVEP59DnjbeoGNfo/+SZrCLpRz2v/g0gpCHaEMPtWSY0s9k/7jR1rAsLNg2z2u1JRB76tPjnIw==", + "dependencies": { + "System.Memory.Data": "1.0.2", + "System.Text.Json": "4.7.2" + } + }, "System.CodeDom": { "type": "Transitive", "resolved": "8.0.0", @@ -744,15 +749,6 @@ "Microsoft.IdentityModel.Tokens": "7.0.3" } }, - "System.IO.FileSystem.AccessControl": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "SxHB3nuNrpptVk+vZ/F+7OHEpoHUIKKMl02bUmYHQr1r+glbZQxs7pRtsf4ENO29TVm2TH3AEeep2fJcy92oYw==", - "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } - }, "System.IO.Hashing": { "type": "Transitive", "resolved": "7.0.0", @@ -795,15 +791,6 @@ "resolved": "6.0.0", "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" }, - "System.Security.AccessControl": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } - }, "System.Security.Cryptography.Pkcs": { "type": "Transitive", "resolved": "8.0.0", @@ -817,11 +804,6 @@ "resolved": "8.0.0", "contentHash": "+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg==" }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" - }, "System.Text.Encoding.CodePages": { "type": "Transitive", "resolved": "6.0.0", @@ -855,8 +837,8 @@ }, "Yarp.ReverseProxy": { "type": "Transitive", - "resolved": "2.0.1", - "contentHash": "op7vBwONPFeR1PYxeLw+RLqSodODDX8RWd0OinLGMVIq6yi1q9mv1j56ImuyZgiAToksiC0Dc7jbRUZ9I+jvFA==", + "resolved": "2.1.0", + "contentHash": "VgRuCBxmh5ND4VuFhvIN3AAeoxFhYkS2hNINk6AVCrOVTlpk7OwdrTXi8NHACfqfhDL+/oYCZrF9RxN+yiYnEg==", "dependencies": { "System.IO.Hashing": "7.0.0" } @@ -873,7 +855,7 @@ "dependencies": { "Duende.AccessTokenManagement.OpenIdConnect": "[2.1.0, )", "Kentico.Xperience.Ecommerce.Common": "[1.0.0-prerelease-1, )", - "Kentico.Xperience.WebApp": "[29.0.1, )", + "Kentico.Xperience.WebApp": "[29.2.0, )", "Scrutor": "[4.2.2, )" } }, @@ -889,20 +871,20 @@ }, "Kentico.Xperience.Core": { "type": "CentralTransitive", - "requested": "[29.0.1, )", - "resolved": "29.0.1", - "contentHash": "QMmB5YGxAgIgYyGa21v0M40QJgqyWxGBLq6rjU483XhEPL1f4rhGW81XEU4kw/REBdCoH46LJT3/ATW/7pYBFA==", + "requested": "[29.2.0, )", + "resolved": "29.2.0", + "contentHash": "5gK/HD6jO4LuAzhSNyimp6cgMTfpMM89bn0D3kE7g2XZunPqnNDy8uTtbeF6edDh2vYGa+mzUZsxvPU+bzPfmg==", "dependencies": { "AngleSharp": "0.17.1", - "MailKit": "4.5.0", - "Microsoft.Data.SqlClient": "5.2.0", + "MailKit": "4.6.0", + "Microsoft.Data.SqlClient": "5.2.1", "Microsoft.Extensions.Caching.Memory": "6.0.1", "Microsoft.Extensions.Configuration": "6.0.1", "Microsoft.Extensions.Configuration.Binder": "6.0.0", "Microsoft.Extensions.DependencyInjection": "6.0.1", "Microsoft.Extensions.FileProviders.Physical": "6.0.0", "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", - "Microsoft.Extensions.Localization": "6.0.29", + "Microsoft.Extensions.Localization": "6.0.31", "Microsoft.Extensions.Options.ConfigurationExtensions": "6.0.0", "Mono.Cecil": "0.11.5", "Newtonsoft.Json": "13.0.3", @@ -911,18 +893,18 @@ }, "Kentico.Xperience.WebApp": { "type": "CentralTransitive", - "requested": "[29.0.1, )", - "resolved": "29.0.1", - "contentHash": "9TwUaSs+WMGCk2rlgyk0kpqSyGvJRMzcAr2rCtuEH7su+QOUk+kKY65s0DZ33JTyA1QrCYOst9O/vrL4/Endtg==", + "requested": "[29.2.0, )", + "resolved": "29.2.0", + "contentHash": "4+/rmbML2T79Hzdz3hcRGng1Wi50wEmwqGVW1O3tmb1PQsPx7kbPDJ/+S2e+l0pkBh22E6yZi4Xd04sfLMXNuQ==", "dependencies": { "CommandLineParser": "2.9.1", - "HotChocolate.AspNetCore": "13.9.0", - "HotChocolate.Data": "13.9.0", - "HtmlSanitizer": "8.0.843", - "Kentico.Xperience.Core": "[29.0.1]", + "HotChocolate.AspNetCore": "13.9.6", + "HotChocolate.Data": "13.9.6", + "HtmlSanitizer": "8.0.865", + "Kentico.Xperience.Core": "[29.2.0]", "Microsoft.Extensions.Caching.Memory": "6.0.1", - "Microsoft.Extensions.FileProviders.Embedded": "6.0.29", - "Microsoft.Extensions.Localization": "6.0.29" + "Microsoft.Extensions.FileProviders.Embedded": "6.0.31", + "Microsoft.Extensions.Localization": "6.0.31" } }, "Scrutor": { diff --git a/test/Kentico.Xperience.K13Ecommerce.IntegrationTests/packages.lock.json b/test/Kentico.Xperience.K13Ecommerce.IntegrationTests/packages.lock.json index c74ac48a..2c1edf36 100644 --- a/test/Kentico.Xperience.K13Ecommerce.IntegrationTests/packages.lock.json +++ b/test/Kentico.Xperience.K13Ecommerce.IntegrationTests/packages.lock.json @@ -61,10 +61,11 @@ }, "Azure.Core": { "type": "Transitive", - "resolved": "1.35.0", - "contentHash": "hENcx03Jyuqv05F4RBEPbxz29UrM3Nbhnr6Wl6NQpoU9BCIbL3XLentrxDCTrH54NLS11Exxi/o8MYgT/cnKFA==", + "resolved": "1.38.0", + "contentHash": "IuEgCoVA0ef7E4pQtpC3+TkPbzaoQfa77HlfJDmfuaJUCVJmn7fT0izamZiryW5sYUFKizsftIxMkXKbgIcPMQ==", "dependencies": { "Microsoft.Bcl.AsyncInterfaces": "1.1.1", + "System.ClientModel": "1.0.0", "System.Diagnostics.DiagnosticSource": "6.0.1", "System.Memory.Data": "1.0.2", "System.Numerics.Vectors": "4.5.0", @@ -75,12 +76,12 @@ }, "Azure.Identity": { "type": "Transitive", - "resolved": "1.10.3", - "contentHash": "l1Xm2MWOF2Mzcwuarlw8kWQXLZk3UeB55aQXVyjj23aBfDwOZ3gu5GP2kJ6KlmZeZv2TCzw7x4L3V36iNr3gww==", + "resolved": "1.11.3", + "contentHash": "4EsGMAr+oog5UqHs46qwA7S/lJiwpXjPBY3t9tQBmJ8nsgmT/LLnrc32eiTlfOdfKxUz4fxBD2YjSnVZacu97w==", "dependencies": { - "Azure.Core": "1.35.0", - "Microsoft.Identity.Client": "4.56.0", - "Microsoft.Identity.Client.Extensions.Msal": "4.56.0", + "Azure.Core": "1.38.0", + "Microsoft.Identity.Client": "4.60.3", + "Microsoft.Identity.Client.Extensions.Msal": "4.60.3", "System.Memory": "4.5.4", "System.Security.Cryptography.ProtectedData": "4.7.0", "System.Text.Json": "4.7.2", @@ -89,16 +90,16 @@ }, "BananaCakePop.Middleware": { "type": "Transitive", - "resolved": "13.0.0", - "contentHash": "6Zj/vfmnCXLjBG7WNdtOgZZ5ZDR3Sy1FQSshZUonIYs3OdzozmsFmqPXMd9XJ0QE9aAildgVGq/lDLpLrMI4Yw==", + "resolved": "16.0.1", + "contentHash": "i/LDG7Lw2ln1WM7GaMyNDWHExtN15/O/xgcX8lhBK6FZFPBnlq6FJW4GuS3vs0UpLB1TvX2tcOenMlXjcMZq0g==", "dependencies": { - "Yarp.ReverseProxy": "2.0.1" + "Yarp.ReverseProxy": "2.1.0" } }, "BouncyCastle.Cryptography": { "type": "Transitive", - "resolved": "2.3.0", - "contentHash": "IaVIiYxZLaBulveGDRUx/pBoW/Rc8QeXGF5u2E8xL8RWhVKCgfmtX9NUyGRbnSqnbFQU2zyP3MkXIdH+jUuQBw==" + "resolved": "2.3.1", + "contentHash": "buwoISwecYke3CmgG1AQSg+sNZjJeIb93vTAtJiHZX35hP/teYMxsfg0NDXGUKjGx6BKBTNKc77O2M3vKvlXZQ==" }, "CommandLineParser": { "type": "Transitive", @@ -121,8 +122,8 @@ }, "GreenDonut": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "T8ZYTsm0S48hi89d2symCvUEJoBkg5F+rfU+HFtkEOc7WLZsIBDStnfF3c890Vxjmx/P1tFpY5StDNTM+C6fIw==", + "resolved": "13.9.6", + "contentHash": "HDdjNimJhBKfgN6XOy74jT5UxueFV4IQuYEL2YglwnayJaP9ah34D0CXV+0axkYFzaU/xr6IW+g0KZMgKU803A==", "dependencies": { "Microsoft.Extensions.ObjectPool": "8.0.0", "System.Diagnostics.DiagnosticSource": "8.0.0", @@ -131,169 +132,169 @@ }, "HotChocolate": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "aGBAW6d9Oj1MfmKJF482yYdJ8G87yJ0rVFxU9l7lA1dg1xjc5XALLQO9jCPz4GCpQLetuAhHdkZ713imJ6WCPw==", + "resolved": "13.9.6", + "contentHash": "Jt1NCrRekNR4XHaAq9nPyL2bkk38EZtcQ7H5NrcNuqbmLzENNvZ43v4ltO9z28eRl8TrPOsAisFLcG3ZiV0yJA==", "dependencies": { - "HotChocolate.Authorization": "13.9.0", - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Fetching": "13.9.0", - "HotChocolate.Types": "13.9.0", - "HotChocolate.Types.CursorPagination": "13.9.0", - "HotChocolate.Types.Mutations": "13.9.0", - "HotChocolate.Types.OffsetPagination": "13.9.0", - "HotChocolate.Validation": "13.9.0" + "HotChocolate.Authorization": "13.9.6", + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Fetching": "13.9.6", + "HotChocolate.Types": "13.9.6", + "HotChocolate.Types.CursorPagination": "13.9.6", + "HotChocolate.Types.Mutations": "13.9.6", + "HotChocolate.Types.OffsetPagination": "13.9.6", + "HotChocolate.Validation": "13.9.6" } }, "HotChocolate.Abstractions": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "mb3IPL8V4NRL2FUefZP20fSwIMOnE7uCMLiM4d5Y5cjljYaMUVzUJnvdW9C1tUfbodP49Llk9WnBCR6S9fr8mQ==", + "resolved": "13.9.6", + "contentHash": "VcdXOcwXTMTTnUbG6epzIW0JIDWCjS8YeHginDQ2HCjUcDQmlHtc7Nv/mQbCGn6fdjc6RpbENf7biWJHvkPb2w==", "dependencies": { - "HotChocolate.Language": "13.9.0", + "HotChocolate.Language": "13.9.6", "System.Collections.Immutable": "8.0.0" } }, "HotChocolate.AspNetCore": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "RnxUdKEYOmsjzNPss473CYOug/9GIt8qlS9j8HxtZrW5TASM/9S7pDb7FthcDj4ag/D7wAwme3YxsqxH+iw5Bg==", + "resolved": "13.9.6", + "contentHash": "s1uU5iRA5PwXjHSY2pan5JXDBDV0mn7lkuBZ0+cAFkgfyIMMJUeWRNRZ8K4gnrTlbwC3YR6m2JlZ/urR1ARFyw==", "dependencies": { - "BananaCakePop.Middleware": "13.0.0", - "HotChocolate": "13.9.0", - "HotChocolate.Subscriptions.InMemory": "13.9.0", - "HotChocolate.Transport.Sockets": "13.9.0", - "HotChocolate.Types.Scalars.Upload": "13.9.0", - "HotChocolate.Utilities.DependencyInjection": "13.9.0" + "BananaCakePop.Middleware": "16.0.1", + "HotChocolate": "13.9.6", + "HotChocolate.Subscriptions.InMemory": "13.9.6", + "HotChocolate.Transport.Sockets": "13.9.6", + "HotChocolate.Types.Scalars.Upload": "13.9.6", + "HotChocolate.Utilities.DependencyInjection": "13.9.6" } }, "HotChocolate.Authorization": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "6CPA39zObNuMUmkmQ6J3zqmalukhjCiJS/klSEDPpwTtrn9HS/3edsh/7oiKzmUh6PNVKGed0lwkSdDP+DGZDQ==", + "resolved": "13.9.6", + "contentHash": "zvRHMaltJPGY9Ko6gWX2rOH5oK5KAKFzVVOsVTwLE8hUYmv+yEYuRpjZ2qABmCd4L/pDSQmuszWXBl/p04aM9A==", "dependencies": { - "HotChocolate.Execution": "13.9.0" + "HotChocolate.Execution": "13.9.6" } }, "HotChocolate.Data": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "eZI9pIipsJsqdacj55krmxx24cUTCearQ/q9wT4aa6vQ/5GwuwWJ0ZIqdcp1qPjd+BsmJixrQBbi6/OgnFXIGw==", + "resolved": "13.9.6", + "contentHash": "2UBUud2ZNfee58nodsOZ9hQXLqJta5GmSiT7FGbRmvgsqrWaXTuNyUvVvrF4igUxAsY6XSZj93h34NcfNhKM4Q==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types.CursorPagination": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types.CursorPagination": "13.9.6" } }, "HotChocolate.Execution": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "zO1aG5qx5lzbZu/iKR56g+zeOgCCCa5pICwxijd1qEap+7J5q0YsME9RByw8wYPH+tNsXCvDcKaeAEcashB4cg==", + "resolved": "13.9.6", + "contentHash": "51QfhBu+KWEDK53ZJSVw6197DqRHBuX2hf3HmkX5d5cyxl6LBLuEp4nr0F2kRdDJaSFO82akC1RwY54B7OY9zg==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", - "HotChocolate.Execution.Abstractions": "13.9.0", - "HotChocolate.Fetching": "13.9.0", - "HotChocolate.Types": "13.9.0", - "HotChocolate.Utilities.DependencyInjection": "13.9.0", - "HotChocolate.Validation": "13.9.0", + "HotChocolate.Abstractions": "13.9.6", + "HotChocolate.Execution.Abstractions": "13.9.6", + "HotChocolate.Fetching": "13.9.6", + "HotChocolate.Types": "13.9.6", + "HotChocolate.Utilities.DependencyInjection": "13.9.6", + "HotChocolate.Validation": "13.9.6", "Microsoft.Extensions.DependencyInjection": "8.0.0", "System.Threading.Channels": "8.0.0" } }, "HotChocolate.Execution.Abstractions": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "flySLPDyTtM4051tI3mh5Ue0fGrKFDuW3w0ebWmW2qjfuF4jgQzd3pK3ZxfkxAfpxQXyPaVn/Q7fae+fYQxeCg==", + "resolved": "13.9.6", + "contentHash": "ipe4vdYjWX4qRBvs2JTzBHCib37Gi2ukJbbGYg2bFKlixXWShW00VvqEpG4kg6KLEmTk5Y2PUEqDqXAt4uK4WA==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", + "HotChocolate.Abstractions": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" } }, "HotChocolate.Fetching": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "pIw7VlEABejQGLRnJGnO7iPdT40AHklf0psJp5zNXrq0IX+Vq7hRRqON73nubZv5Ofhh8fV3kugqYFKvzcptoA==", + "resolved": "13.9.6", + "contentHash": "xBXyo56H6UxQU23C19/Fc8+iP6gUKSRLqqrI8bdBSXBtKEMEM2WLfb1/4q7LuCf/fqHPyyRXgSx09gPZxRy2HA==", "dependencies": { - "GreenDonut": "13.9.0", - "HotChocolate.Types": "13.9.0" + "GreenDonut": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Language": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "M8q0XHQm8Gtab+wKgYXfVPxScjdDE+INify5yaj6g1ZDkV3sLIeX+muu1WebrNO3DgmuAi6o3aW770Ucw7k/dw==", + "resolved": "13.9.6", + "contentHash": "5XzspfAQU6pGOM0S97u45XSAip835MjKXjuqjRwwfTtFJkDXHvUWjcyhddEX2/t2itTaTkIswzz3vgjhj5mkww==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0", - "HotChocolate.Language.Utf8": "13.9.0", - "HotChocolate.Language.Visitors": "13.9.0", - "HotChocolate.Language.Web": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6", + "HotChocolate.Language.Utf8": "13.9.6", + "HotChocolate.Language.Visitors": "13.9.6", + "HotChocolate.Language.Web": "13.9.6" } }, "HotChocolate.Language.SyntaxTree": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "+vwrQ0qOiKn/yUBHn53030hQmqj45C1g0WI8sip50CPnkgs3bAPnDInUvrR3IiHbRn5spAonO4tFPtMDdJrEMA==", + "resolved": "13.9.6", + "contentHash": "VKMXjK3cjO5O9tCAxuHhEAusTlRQOliJJrejYNQ4TaT7532ZBsL9ZmD2C0IAaMYOv8Lz7A/OU1AIBMFp7//4fg==", "dependencies": { "Microsoft.Extensions.ObjectPool": "8.0.0" } }, "HotChocolate.Language.Utf8": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "IEWNYGvtwejf7+j+Xci25FaYets2UD8wkfzQ5dUCW47c1rnTAyuRdTiO8T8x6LYuZ7+SLg7UTBYgjv4ybwAUgA==", + "resolved": "13.9.6", + "contentHash": "lNx+JJZscU8eaU0Lz4G8iQflfcT5XKcrNhRmRCZNba3Sg7ZhrZ489yllrtAYIm428tE+FoQmM6HZSJRQQ3xUkw==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6" } }, "HotChocolate.Language.Visitors": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "j6mPBkfVo2fopWYLoczXCoog4PJ+KwbHItSgHfPfI1kDBcNcy9XY4oxth3Uau1uBbfHYIFjnuVc+FrGb1f9KAQ==", + "resolved": "13.9.6", + "contentHash": "PMBVDLsvUxLS9k9nJfN+qGgV5iwNfdmB2eWZ6QeVEkkhczcRspLJ6sg4lQYAMm3GyUosB99CUTD2g/f3ohKhTg==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6" } }, "HotChocolate.Language.Web": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "GI5ufbNVEoKygSC09owVnCvw1Ma2KzOtm1l6uen3wKshAdOKB4gmSVCjzf71pNL2Nt6cL4IHa70ClqjECmu9qg==", + "resolved": "13.9.6", + "contentHash": "4GiepY1mFp151rrAKy+VD38+gf0AGij8GspJntn5GvKpmvRriwvK24eOQuBZTdMBPiuscLUX0FMkZgs5BX4xYw==", "dependencies": { - "HotChocolate.Language.Utf8": "13.9.0" + "HotChocolate.Language.Utf8": "13.9.6" } }, "HotChocolate.Subscriptions": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "P3ason65NwSzkB2W9myV/pRIm4IMIWXH3RPCtpHVKx22Xw3hRJRJhjLBQZ5LCk5v3+7kKhXNBTbFNpbMyvez3Q==", + "resolved": "13.9.6", + "contentHash": "XO7d+enTaXEwATrii7Sp9r2efP6j5AopQf7iRk7Lky6+j6CCh8BL/V/qgCwAUtmraIOzswJRmy23cD5AssXlGg==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", - "HotChocolate.Execution.Abstractions": "13.9.0" + "HotChocolate.Abstractions": "13.9.6", + "HotChocolate.Execution.Abstractions": "13.9.6" } }, "HotChocolate.Subscriptions.InMemory": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "rj5U1Cd2QsjNnSNNdlSopYLtXh0kTZ1NlA1B3v02YFtj4Zu9le6QkGsl3oUljUUq46vSkkrT9ISj+e5wTCcw/Q==", + "resolved": "13.9.6", + "contentHash": "MdWWQXIBbNRdJ549kX2T/kCGMn88JsK//RuQ+9zaZSCf/Pxir0K86aWy8O3MssVmExot4k7RkQDUoC7GUOLtCQ==", "dependencies": { - "HotChocolate.Execution.Abstractions": "13.9.0", - "HotChocolate.Subscriptions": "13.9.0", + "HotChocolate.Execution.Abstractions": "13.9.6", + "HotChocolate.Subscriptions": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" } }, "HotChocolate.Transport.Sockets": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "4hPlhS2bgqT/tYCZfPtbGtPAaedULKgTbFKkTsjigrDhJcVxBA36Gr3yGM6S3NEw2JdIgiwugYV1log9zXkEjA==", + "resolved": "13.9.6", + "contentHash": "TeYEPFMGNTyjmmSyDvn8AZTy9HQR/+TMUznHWdlHDTCYXRJBwhtSQ+d8j8EbcOGhRw4TL2414+SK1mvypQvVNA==", "dependencies": { "System.IO.Pipelines": "8.0.0" } }, "HotChocolate.Types": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "VGPZePNC4sBlz/iY4x90zIRxW62MWzWNcl2yjLS3JcW+0W8KuKxh99dFLxL0WY/+Eoe8PUecmoob+FrVEvPzpg==", + "resolved": "13.9.6", + "contentHash": "/1V9ngL8AKrF8EOFeMS3AHEdPA/N4WCUNlpn5QDdV+KjVhRIm/tBJtbFZKCqD1kdtAOq19JNj0+bHMf/XBbLJg==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", - "HotChocolate.Types.Shared": "13.9.0", - "HotChocolate.Utilities": "13.9.0", + "HotChocolate.Abstractions": "13.9.6", + "HotChocolate.Types.Shared": "13.9.6", + "HotChocolate.Utilities": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "Microsoft.Extensions.ObjectPool": "8.0.0", "System.ComponentModel.Annotations": "5.0.0", @@ -302,74 +303,74 @@ }, "HotChocolate.Types.CursorPagination": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "2+w6tLrdjo+d/aIKyoNW1L/OH/p+FACMwGWHk1P4MwAspqaF7zjy71qTeNks+8QbRwG8uMleey/0sbr8sWpC6w==", + "resolved": "13.9.6", + "contentHash": "Vo/uowhYoN/YpOnk03b/PGh+GC5xw3uLTR2ZbrmND+pNv7Dzjh95Ajqt/Dl99twgf/aF4v1VOjmJ6Sp0SVR9Ag==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.Mutations": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "NX1zLkb7t19Om5RYubmkA6yRCtBbca454rqSGKSVBYjDrsiA6+4ZDvmS9Kjbw8F+cPm3VqShenrIIgfW8bzCXQ==", + "resolved": "13.9.6", + "contentHash": "hQ4wYHLgIVmhpBYLVtbJCAeASCHHJ427+FeAxGILsbp8J0ZXhlDQhFRPMXPz4bzbUWOR2oFEDTVoLvZSC9ztiQ==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.OffsetPagination": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "LIAaSVRS6FJCssP+s4ooLajhQ1/QfES78twX4OgZFJ9/UZMxXlU3K/IWeB2aXcJNkehfIZLgoiROnouB7ATepw==", + "resolved": "13.9.6", + "contentHash": "WnWKglIc+WNO9bUIcUK5pHaaMh/oNy2XK9ZBVbGiAHSa0HrhEiAWG6iCKdbRmBi0N/ZT6vdl+9we+edlbiVQsA==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.Scalars.Upload": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "hisB6PGGgsekz3a8YJwKgvbZHED98eph9+TMPg5A500tyvrZS00fbdpjRcN+rcTKAxhJ5evzHB2Fo1m62Dyo4w==", + "resolved": "13.9.6", + "contentHash": "RZ3Yu6jRGcjS4+KRXl9UEL4Wv4Kmc7Q0eIn3adAaxAn4L75mkpJmvL3vs4MVPgvlb4WkRoroRZlSBjeovuP0hA==", "dependencies": { - "HotChocolate.Types": "13.9.0" + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.Shared": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "2lhdbXU/GltPQWO9r8qePZSzDo9ryFs8Wv0aF7aQgEq3dLvwer6OpvnZhIYmGua6bXXebA1PzBAEaaxPpLx3Wg==", + "resolved": "13.9.6", + "contentHash": "ZKdal25pF7ChtHwkkDZiaQpi4AVvWLTQgrV8rP9pL34xtymUyuLpXdcCwqfHXWYnqD35JjHRXQYgVunxkPMbIw==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6" } }, "HotChocolate.Utilities": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "6zqwjROYxtuzAYjh31JnYKgM/MySRWEq4DHO64oSPFRJQ8NDgg7EvUU771yLt/6T7kUh+S6k25hVnmUipFtEnQ==" + "resolved": "13.9.6", + "contentHash": "67hAY38hEx93N3/j2xOzSwPwytBL+DNJyJBXSVSj5GGJKdr3SX69lBU8MTl1mt5MSTBA5ypFnj8AUKvQRpL6SQ==" }, "HotChocolate.Utilities.DependencyInjection": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "o1ijY8Rk0IUAo8QZYhfQ8s4/3z78JS9tyXGHzA963gkzTSJPehD4960CAmWlyC19FdE1i2KiTnYLhNOwNoL6+A==", + "resolved": "13.9.6", + "contentHash": "NPOFy3wBmZLIJx3rDmNCVWteckh+nlgJmBb0+lJ30lmPE+nLZLvGgOrC+IgYBNJvD1qjQ2dcnUFgQnNyJ5UsVw==", "dependencies": { "Microsoft.Extensions.DependencyInjection": "8.0.0" } }, "HotChocolate.Validation": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "gC7/YfOcOOmT+zV/V45CubYhK3lZI7+SmNYLGXQ1ko4cwjVRh3PzSJMAaKw3naWDcbjXbEyWwdYc0dLuoVBNEA==", + "resolved": "13.9.6", + "contentHash": "mpB90YtCC//vVi0Ekcs/EPL+DaaEtrF2jvQTd7Rlpay2962JiBf2V0fIk385ugaoryu7j2mFThOLld7ihxL8hw==", "dependencies": { - "HotChocolate.Types": "13.9.0", + "HotChocolate.Types": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "Microsoft.Extensions.Options": "8.0.0" } }, "HtmlSanitizer": { "type": "Transitive", - "resolved": "8.0.843", - "contentHash": "XfmHK4rFz9PPN0gcv7J7pc+MRpcni1mrnO04mwA+9/1zIHLgdOvLJeDwWnX5a+up4tioPvGreB+p+KljLJ32wg==", + "resolved": "8.0.865", + "contentHash": "jzgltCjgTMbTLVfeHYU3ocxJrqRDVdkXYYGTOKVBnpQffaRB/4Hr0R6jKxBBH8UudQSgACp8j3lsD46weyeDJg==", "dependencies": { "AngleSharp": "[0.17.1]", "AngleSharp.Css": "[0.17.0]", @@ -383,10 +384,10 @@ }, "MailKit": { "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "EaXHODUdIV5oPdWvBJGazwaEpKt1LI/H/S//EEozANYCsfOSKHntX+Skk2kW616lSQp+fkRTmSjk0CYxEuOyEA==", + "resolved": "4.6.0", + "contentHash": "EJ1L2AtoO9nGZz2AKl2WGGw4pLIpkgEwzpczmZWBLqX0m33ueVA+CJYd9hg52XOvvEj+w5PVzB7yy26E0WHzKQ==", "dependencies": { - "MimeKit": "4.5.0" + "MimeKit": "4.6.0" } }, "Microsoft.AspNetCore.Authentication.OpenIdConnect": { @@ -409,12 +410,12 @@ }, "Microsoft.Data.SqlClient": { "type": "Transitive", - "resolved": "5.2.0", - "contentHash": "3alfyqRN3ELRtdvU1dGtLBRNQqprr3TJ0WrUJfMISPwg1nPUN2P3Lelah68IKWuV27Ceb7ig95hWNHFTSXfxMg==", + "resolved": "5.2.1", + "contentHash": "ojg2XWmih4ubPPtrhRqqXk0SM6wC2ZSTkNNEAlYBhMo4IsRHjLazFc0abzcZCNfw1JyWcqY7vGutWTv8ZaFD9g==", "dependencies": { - "Azure.Identity": "1.10.3", + "Azure.Identity": "1.11.3", "Microsoft.Data.SqlClient.SNI.runtime": "5.2.0", - "Microsoft.Identity.Client": "4.56.0", + "Microsoft.Identity.Client": "4.60.3", "Microsoft.IdentityModel.JsonWebTokens": "6.35.0", "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.35.0", "Microsoft.SqlServer.Server": "1.0.0", @@ -527,8 +528,8 @@ }, "Microsoft.Extensions.FileProviders.Embedded": { "type": "Transitive", - "resolved": "6.0.29", - "contentHash": "ih7lIqCUXsG4+CNNcPs67TBOe3Yd/HMdBBVP3BhvdZkJEUilhvUK69FB7ZPsiZKel08GkOh2qFXqZsWWPa/lPQ==", + "resolved": "6.0.31", + "contentHash": "2MOwJczvLSl+jxaz6sDn0eGc1io497//fhRg9R+nZNx8ely6+tBxbB01SN29stSIxxuLG/uyTaHJ8W7zCnqy9g==", "dependencies": { "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0" } @@ -573,19 +574,19 @@ }, "Microsoft.Extensions.Localization": { "type": "Transitive", - "resolved": "6.0.29", - "contentHash": "cZ5Tx6NtTZFzk+PWW2icApat7agQiMIFIsohsmHmz/scKRfAI/5XTa9lpZMwKowQBZm+ap0RwAJmQ2/5xoL+VQ==", + "resolved": "6.0.31", + "contentHash": "Qivy1329sMhNDm/qvRRBB5M/z3a1/Zfe+nY7oSBLnFnldEwYEMmfP+O1xu1f/BCd5oRC+k3OQ9bRTrZepU0zCQ==", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Localization.Abstractions": "6.0.29", + "Microsoft.Extensions.Localization.Abstractions": "6.0.31", "Microsoft.Extensions.Logging.Abstractions": "6.0.4", "Microsoft.Extensions.Options": "6.0.0" } }, "Microsoft.Extensions.Localization.Abstractions": { "type": "Transitive", - "resolved": "6.0.29", - "contentHash": "4HVhh+V/7H2VMgFI8EP1kLgLpeRqm1kQOlXjHk4MHCVD5/pgWOTTbLEz9pdXymQQf/eRg1vNK8tG2MZstBHhlw==" + "resolved": "6.0.31", + "contentHash": "q1K9D2xGiTILwo5+ht0Hsu891QLKOIp7BCdm+v9G4Hh+HTjnXk83TrucxNElM/z/BcJwWUHhsqx/abdgTdpyRQ==" }, "Microsoft.Extensions.Logging": { "type": "Transitive", @@ -638,19 +639,19 @@ }, "Microsoft.Identity.Client": { "type": "Transitive", - "resolved": "4.56.0", - "contentHash": "rr4zbidvHy9r4NvOAs5hdd964Ao2A0pAeFBJKR95u1CJAVzbd1p6tPTXUZ+5ld0cfThiVSGvz6UHwY6JjraTpA==", + "resolved": "4.60.3", + "contentHash": "jve1RzmSpBhGlqMzPva6VfRbLMLZZc1Q8WRVZf8+iEruQkBgDTJPq8OeTehcY4GGYG1j6UB1xVofVE+n4BLDdw==", "dependencies": { - "Microsoft.IdentityModel.Abstractions": "6.22.0" + "Microsoft.IdentityModel.Abstractions": "6.35.0", + "System.Diagnostics.DiagnosticSource": "6.0.1" } }, "Microsoft.Identity.Client.Extensions.Msal": { "type": "Transitive", - "resolved": "4.56.0", - "contentHash": "H12YAzEGK55vZ+QpxUzozhW8ZZtgPDuWvgA0JbdIR9UhMUplj29JhIgE2imuH8W2Nw9D8JKygR1uxRFtpSNcrg==", + "resolved": "4.60.3", + "contentHash": "X1Cz14/RbmlLshusE5u2zfG+5ul6ttgou19BZe5Mdw1qm6fgOI9/imBB2TIsx2UD7nkgd2+MCSzhbukZf7udeg==", "dependencies": { - "Microsoft.Identity.Client": "4.56.0", - "System.IO.FileSystem.AccessControl": "5.0.0", + "Microsoft.Identity.Client": "4.60.3", "System.Security.Cryptography.ProtectedData": "4.5.0" } }, @@ -701,11 +702,6 @@ "Microsoft.IdentityModel.Logging": "7.0.3" } }, - "Microsoft.NETCore.Platforms": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==" - }, "Microsoft.SqlServer.Server": { "type": "Transitive", "resolved": "1.0.0", @@ -731,10 +727,10 @@ }, "MimeKit": { "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "OYn8b8b66J4mgtDzoImepiUtdkJOAVGoTj/ghzJ+az4wVixA5L5Z8GmgFhRvQ1btAIwZh/d9zvZLCALndQdz5w==", + "resolved": "4.6.0", + "contentHash": "M4jddPQNSClTzHE+HnfrtN93mCXSYF8KewWUTwzXgl49ajzUh8hz/UY4CAnRQR4YJF3lBY5P+r+73VXZAGKafw==", "dependencies": { - "BouncyCastle.Cryptography": "2.3.0", + "BouncyCastle.Cryptography": "2.3.1", "System.Security.Cryptography.Pkcs": "8.0.0" } }, @@ -758,6 +754,15 @@ "resolved": "4.5.1", "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==" }, + "System.ClientModel": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "I3CVkvxeqFYjIVEP59DnjbeoGNfo/+SZrCLpRz2v/g0gpCHaEMPtWSY0s9k/7jR1rAsLNg2z2u1JRB76tPjnIw==", + "dependencies": { + "System.Memory.Data": "1.0.2", + "System.Text.Json": "4.7.2" + } + }, "System.CodeDom": { "type": "Transitive", "resolved": "8.0.0", @@ -806,15 +811,6 @@ "Microsoft.IdentityModel.Tokens": "7.0.3" } }, - "System.IO.FileSystem.AccessControl": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "SxHB3nuNrpptVk+vZ/F+7OHEpoHUIKKMl02bUmYHQr1r+glbZQxs7pRtsf4ENO29TVm2TH3AEeep2fJcy92oYw==", - "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } - }, "System.IO.Hashing": { "type": "Transitive", "resolved": "7.0.0", @@ -862,15 +858,6 @@ "resolved": "6.0.0", "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" }, - "System.Security.AccessControl": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } - }, "System.Security.Cryptography.Pkcs": { "type": "Transitive", "resolved": "8.0.0", @@ -884,11 +871,6 @@ "resolved": "8.0.0", "contentHash": "+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg==" }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" - }, "System.Text.Encoding.CodePages": { "type": "Transitive", "resolved": "6.0.0", @@ -922,8 +904,8 @@ }, "Yarp.ReverseProxy": { "type": "Transitive", - "resolved": "2.0.1", - "contentHash": "op7vBwONPFeR1PYxeLw+RLqSodODDX8RWd0OinLGMVIq6yi1q9mv1j56ImuyZgiAToksiC0Dc7jbRUZ9I+jvFA==", + "resolved": "2.1.0", + "contentHash": "VgRuCBxmh5ND4VuFhvIN3AAeoxFhYkS2hNINk6AVCrOVTlpk7OwdrTXi8NHACfqfhDL+/oYCZrF9RxN+yiYnEg==", "dependencies": { "System.IO.Hashing": "7.0.0" } @@ -940,7 +922,7 @@ "dependencies": { "Duende.AccessTokenManagement.OpenIdConnect": "[2.1.0, )", "Kentico.Xperience.Ecommerce.Common": "[1.0.0-prerelease-1, )", - "Kentico.Xperience.WebApp": "[29.0.1, )", + "Kentico.Xperience.WebApp": "[29.2.0, )", "Scrutor": "[4.2.2, )" } }, @@ -956,20 +938,20 @@ }, "Kentico.Xperience.Core": { "type": "CentralTransitive", - "requested": "[29.0.1, )", - "resolved": "29.0.1", - "contentHash": "QMmB5YGxAgIgYyGa21v0M40QJgqyWxGBLq6rjU483XhEPL1f4rhGW81XEU4kw/REBdCoH46LJT3/ATW/7pYBFA==", + "requested": "[29.2.0, )", + "resolved": "29.2.0", + "contentHash": "5gK/HD6jO4LuAzhSNyimp6cgMTfpMM89bn0D3kE7g2XZunPqnNDy8uTtbeF6edDh2vYGa+mzUZsxvPU+bzPfmg==", "dependencies": { "AngleSharp": "0.17.1", - "MailKit": "4.5.0", - "Microsoft.Data.SqlClient": "5.2.0", + "MailKit": "4.6.0", + "Microsoft.Data.SqlClient": "5.2.1", "Microsoft.Extensions.Caching.Memory": "6.0.1", "Microsoft.Extensions.Configuration": "6.0.1", "Microsoft.Extensions.Configuration.Binder": "6.0.0", "Microsoft.Extensions.DependencyInjection": "6.0.1", "Microsoft.Extensions.FileProviders.Physical": "6.0.0", "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", - "Microsoft.Extensions.Localization": "6.0.29", + "Microsoft.Extensions.Localization": "6.0.31", "Microsoft.Extensions.Options.ConfigurationExtensions": "6.0.0", "Mono.Cecil": "0.11.5", "Newtonsoft.Json": "13.0.3", @@ -978,18 +960,18 @@ }, "Kentico.Xperience.WebApp": { "type": "CentralTransitive", - "requested": "[29.0.1, )", - "resolved": "29.0.1", - "contentHash": "9TwUaSs+WMGCk2rlgyk0kpqSyGvJRMzcAr2rCtuEH7su+QOUk+kKY65s0DZ33JTyA1QrCYOst9O/vrL4/Endtg==", + "requested": "[29.2.0, )", + "resolved": "29.2.0", + "contentHash": "4+/rmbML2T79Hzdz3hcRGng1Wi50wEmwqGVW1O3tmb1PQsPx7kbPDJ/+S2e+l0pkBh22E6yZi4Xd04sfLMXNuQ==", "dependencies": { "CommandLineParser": "2.9.1", - "HotChocolate.AspNetCore": "13.9.0", - "HotChocolate.Data": "13.9.0", - "HtmlSanitizer": "8.0.843", - "Kentico.Xperience.Core": "[29.0.1]", + "HotChocolate.AspNetCore": "13.9.6", + "HotChocolate.Data": "13.9.6", + "HtmlSanitizer": "8.0.865", + "Kentico.Xperience.Core": "[29.2.0]", "Microsoft.Extensions.Caching.Memory": "6.0.1", - "Microsoft.Extensions.FileProviders.Embedded": "6.0.29", - "Microsoft.Extensions.Localization": "6.0.29" + "Microsoft.Extensions.FileProviders.Embedded": "6.0.31", + "Microsoft.Extensions.Localization": "6.0.31" } }, "Scrutor": { diff --git a/test/Kentico.Xperience.K13Ecommerce.UnitTests/packages.lock.json b/test/Kentico.Xperience.K13Ecommerce.UnitTests/packages.lock.json index c74ac48a..2c1edf36 100644 --- a/test/Kentico.Xperience.K13Ecommerce.UnitTests/packages.lock.json +++ b/test/Kentico.Xperience.K13Ecommerce.UnitTests/packages.lock.json @@ -61,10 +61,11 @@ }, "Azure.Core": { "type": "Transitive", - "resolved": "1.35.0", - "contentHash": "hENcx03Jyuqv05F4RBEPbxz29UrM3Nbhnr6Wl6NQpoU9BCIbL3XLentrxDCTrH54NLS11Exxi/o8MYgT/cnKFA==", + "resolved": "1.38.0", + "contentHash": "IuEgCoVA0ef7E4pQtpC3+TkPbzaoQfa77HlfJDmfuaJUCVJmn7fT0izamZiryW5sYUFKizsftIxMkXKbgIcPMQ==", "dependencies": { "Microsoft.Bcl.AsyncInterfaces": "1.1.1", + "System.ClientModel": "1.0.0", "System.Diagnostics.DiagnosticSource": "6.0.1", "System.Memory.Data": "1.0.2", "System.Numerics.Vectors": "4.5.0", @@ -75,12 +76,12 @@ }, "Azure.Identity": { "type": "Transitive", - "resolved": "1.10.3", - "contentHash": "l1Xm2MWOF2Mzcwuarlw8kWQXLZk3UeB55aQXVyjj23aBfDwOZ3gu5GP2kJ6KlmZeZv2TCzw7x4L3V36iNr3gww==", + "resolved": "1.11.3", + "contentHash": "4EsGMAr+oog5UqHs46qwA7S/lJiwpXjPBY3t9tQBmJ8nsgmT/LLnrc32eiTlfOdfKxUz4fxBD2YjSnVZacu97w==", "dependencies": { - "Azure.Core": "1.35.0", - "Microsoft.Identity.Client": "4.56.0", - "Microsoft.Identity.Client.Extensions.Msal": "4.56.0", + "Azure.Core": "1.38.0", + "Microsoft.Identity.Client": "4.60.3", + "Microsoft.Identity.Client.Extensions.Msal": "4.60.3", "System.Memory": "4.5.4", "System.Security.Cryptography.ProtectedData": "4.7.0", "System.Text.Json": "4.7.2", @@ -89,16 +90,16 @@ }, "BananaCakePop.Middleware": { "type": "Transitive", - "resolved": "13.0.0", - "contentHash": "6Zj/vfmnCXLjBG7WNdtOgZZ5ZDR3Sy1FQSshZUonIYs3OdzozmsFmqPXMd9XJ0QE9aAildgVGq/lDLpLrMI4Yw==", + "resolved": "16.0.1", + "contentHash": "i/LDG7Lw2ln1WM7GaMyNDWHExtN15/O/xgcX8lhBK6FZFPBnlq6FJW4GuS3vs0UpLB1TvX2tcOenMlXjcMZq0g==", "dependencies": { - "Yarp.ReverseProxy": "2.0.1" + "Yarp.ReverseProxy": "2.1.0" } }, "BouncyCastle.Cryptography": { "type": "Transitive", - "resolved": "2.3.0", - "contentHash": "IaVIiYxZLaBulveGDRUx/pBoW/Rc8QeXGF5u2E8xL8RWhVKCgfmtX9NUyGRbnSqnbFQU2zyP3MkXIdH+jUuQBw==" + "resolved": "2.3.1", + "contentHash": "buwoISwecYke3CmgG1AQSg+sNZjJeIb93vTAtJiHZX35hP/teYMxsfg0NDXGUKjGx6BKBTNKc77O2M3vKvlXZQ==" }, "CommandLineParser": { "type": "Transitive", @@ -121,8 +122,8 @@ }, "GreenDonut": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "T8ZYTsm0S48hi89d2symCvUEJoBkg5F+rfU+HFtkEOc7WLZsIBDStnfF3c890Vxjmx/P1tFpY5StDNTM+C6fIw==", + "resolved": "13.9.6", + "contentHash": "HDdjNimJhBKfgN6XOy74jT5UxueFV4IQuYEL2YglwnayJaP9ah34D0CXV+0axkYFzaU/xr6IW+g0KZMgKU803A==", "dependencies": { "Microsoft.Extensions.ObjectPool": "8.0.0", "System.Diagnostics.DiagnosticSource": "8.0.0", @@ -131,169 +132,169 @@ }, "HotChocolate": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "aGBAW6d9Oj1MfmKJF482yYdJ8G87yJ0rVFxU9l7lA1dg1xjc5XALLQO9jCPz4GCpQLetuAhHdkZ713imJ6WCPw==", + "resolved": "13.9.6", + "contentHash": "Jt1NCrRekNR4XHaAq9nPyL2bkk38EZtcQ7H5NrcNuqbmLzENNvZ43v4ltO9z28eRl8TrPOsAisFLcG3ZiV0yJA==", "dependencies": { - "HotChocolate.Authorization": "13.9.0", - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Fetching": "13.9.0", - "HotChocolate.Types": "13.9.0", - "HotChocolate.Types.CursorPagination": "13.9.0", - "HotChocolate.Types.Mutations": "13.9.0", - "HotChocolate.Types.OffsetPagination": "13.9.0", - "HotChocolate.Validation": "13.9.0" + "HotChocolate.Authorization": "13.9.6", + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Fetching": "13.9.6", + "HotChocolate.Types": "13.9.6", + "HotChocolate.Types.CursorPagination": "13.9.6", + "HotChocolate.Types.Mutations": "13.9.6", + "HotChocolate.Types.OffsetPagination": "13.9.6", + "HotChocolate.Validation": "13.9.6" } }, "HotChocolate.Abstractions": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "mb3IPL8V4NRL2FUefZP20fSwIMOnE7uCMLiM4d5Y5cjljYaMUVzUJnvdW9C1tUfbodP49Llk9WnBCR6S9fr8mQ==", + "resolved": "13.9.6", + "contentHash": "VcdXOcwXTMTTnUbG6epzIW0JIDWCjS8YeHginDQ2HCjUcDQmlHtc7Nv/mQbCGn6fdjc6RpbENf7biWJHvkPb2w==", "dependencies": { - "HotChocolate.Language": "13.9.0", + "HotChocolate.Language": "13.9.6", "System.Collections.Immutable": "8.0.0" } }, "HotChocolate.AspNetCore": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "RnxUdKEYOmsjzNPss473CYOug/9GIt8qlS9j8HxtZrW5TASM/9S7pDb7FthcDj4ag/D7wAwme3YxsqxH+iw5Bg==", + "resolved": "13.9.6", + "contentHash": "s1uU5iRA5PwXjHSY2pan5JXDBDV0mn7lkuBZ0+cAFkgfyIMMJUeWRNRZ8K4gnrTlbwC3YR6m2JlZ/urR1ARFyw==", "dependencies": { - "BananaCakePop.Middleware": "13.0.0", - "HotChocolate": "13.9.0", - "HotChocolate.Subscriptions.InMemory": "13.9.0", - "HotChocolate.Transport.Sockets": "13.9.0", - "HotChocolate.Types.Scalars.Upload": "13.9.0", - "HotChocolate.Utilities.DependencyInjection": "13.9.0" + "BananaCakePop.Middleware": "16.0.1", + "HotChocolate": "13.9.6", + "HotChocolate.Subscriptions.InMemory": "13.9.6", + "HotChocolate.Transport.Sockets": "13.9.6", + "HotChocolate.Types.Scalars.Upload": "13.9.6", + "HotChocolate.Utilities.DependencyInjection": "13.9.6" } }, "HotChocolate.Authorization": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "6CPA39zObNuMUmkmQ6J3zqmalukhjCiJS/klSEDPpwTtrn9HS/3edsh/7oiKzmUh6PNVKGed0lwkSdDP+DGZDQ==", + "resolved": "13.9.6", + "contentHash": "zvRHMaltJPGY9Ko6gWX2rOH5oK5KAKFzVVOsVTwLE8hUYmv+yEYuRpjZ2qABmCd4L/pDSQmuszWXBl/p04aM9A==", "dependencies": { - "HotChocolate.Execution": "13.9.0" + "HotChocolate.Execution": "13.9.6" } }, "HotChocolate.Data": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "eZI9pIipsJsqdacj55krmxx24cUTCearQ/q9wT4aa6vQ/5GwuwWJ0ZIqdcp1qPjd+BsmJixrQBbi6/OgnFXIGw==", + "resolved": "13.9.6", + "contentHash": "2UBUud2ZNfee58nodsOZ9hQXLqJta5GmSiT7FGbRmvgsqrWaXTuNyUvVvrF4igUxAsY6XSZj93h34NcfNhKM4Q==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types.CursorPagination": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types.CursorPagination": "13.9.6" } }, "HotChocolate.Execution": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "zO1aG5qx5lzbZu/iKR56g+zeOgCCCa5pICwxijd1qEap+7J5q0YsME9RByw8wYPH+tNsXCvDcKaeAEcashB4cg==", + "resolved": "13.9.6", + "contentHash": "51QfhBu+KWEDK53ZJSVw6197DqRHBuX2hf3HmkX5d5cyxl6LBLuEp4nr0F2kRdDJaSFO82akC1RwY54B7OY9zg==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", - "HotChocolate.Execution.Abstractions": "13.9.0", - "HotChocolate.Fetching": "13.9.0", - "HotChocolate.Types": "13.9.0", - "HotChocolate.Utilities.DependencyInjection": "13.9.0", - "HotChocolate.Validation": "13.9.0", + "HotChocolate.Abstractions": "13.9.6", + "HotChocolate.Execution.Abstractions": "13.9.6", + "HotChocolate.Fetching": "13.9.6", + "HotChocolate.Types": "13.9.6", + "HotChocolate.Utilities.DependencyInjection": "13.9.6", + "HotChocolate.Validation": "13.9.6", "Microsoft.Extensions.DependencyInjection": "8.0.0", "System.Threading.Channels": "8.0.0" } }, "HotChocolate.Execution.Abstractions": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "flySLPDyTtM4051tI3mh5Ue0fGrKFDuW3w0ebWmW2qjfuF4jgQzd3pK3ZxfkxAfpxQXyPaVn/Q7fae+fYQxeCg==", + "resolved": "13.9.6", + "contentHash": "ipe4vdYjWX4qRBvs2JTzBHCib37Gi2ukJbbGYg2bFKlixXWShW00VvqEpG4kg6KLEmTk5Y2PUEqDqXAt4uK4WA==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", + "HotChocolate.Abstractions": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" } }, "HotChocolate.Fetching": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "pIw7VlEABejQGLRnJGnO7iPdT40AHklf0psJp5zNXrq0IX+Vq7hRRqON73nubZv5Ofhh8fV3kugqYFKvzcptoA==", + "resolved": "13.9.6", + "contentHash": "xBXyo56H6UxQU23C19/Fc8+iP6gUKSRLqqrI8bdBSXBtKEMEM2WLfb1/4q7LuCf/fqHPyyRXgSx09gPZxRy2HA==", "dependencies": { - "GreenDonut": "13.9.0", - "HotChocolate.Types": "13.9.0" + "GreenDonut": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Language": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "M8q0XHQm8Gtab+wKgYXfVPxScjdDE+INify5yaj6g1ZDkV3sLIeX+muu1WebrNO3DgmuAi6o3aW770Ucw7k/dw==", + "resolved": "13.9.6", + "contentHash": "5XzspfAQU6pGOM0S97u45XSAip835MjKXjuqjRwwfTtFJkDXHvUWjcyhddEX2/t2itTaTkIswzz3vgjhj5mkww==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0", - "HotChocolate.Language.Utf8": "13.9.0", - "HotChocolate.Language.Visitors": "13.9.0", - "HotChocolate.Language.Web": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6", + "HotChocolate.Language.Utf8": "13.9.6", + "HotChocolate.Language.Visitors": "13.9.6", + "HotChocolate.Language.Web": "13.9.6" } }, "HotChocolate.Language.SyntaxTree": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "+vwrQ0qOiKn/yUBHn53030hQmqj45C1g0WI8sip50CPnkgs3bAPnDInUvrR3IiHbRn5spAonO4tFPtMDdJrEMA==", + "resolved": "13.9.6", + "contentHash": "VKMXjK3cjO5O9tCAxuHhEAusTlRQOliJJrejYNQ4TaT7532ZBsL9ZmD2C0IAaMYOv8Lz7A/OU1AIBMFp7//4fg==", "dependencies": { "Microsoft.Extensions.ObjectPool": "8.0.0" } }, "HotChocolate.Language.Utf8": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "IEWNYGvtwejf7+j+Xci25FaYets2UD8wkfzQ5dUCW47c1rnTAyuRdTiO8T8x6LYuZ7+SLg7UTBYgjv4ybwAUgA==", + "resolved": "13.9.6", + "contentHash": "lNx+JJZscU8eaU0Lz4G8iQflfcT5XKcrNhRmRCZNba3Sg7ZhrZ489yllrtAYIm428tE+FoQmM6HZSJRQQ3xUkw==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6" } }, "HotChocolate.Language.Visitors": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "j6mPBkfVo2fopWYLoczXCoog4PJ+KwbHItSgHfPfI1kDBcNcy9XY4oxth3Uau1uBbfHYIFjnuVc+FrGb1f9KAQ==", + "resolved": "13.9.6", + "contentHash": "PMBVDLsvUxLS9k9nJfN+qGgV5iwNfdmB2eWZ6QeVEkkhczcRspLJ6sg4lQYAMm3GyUosB99CUTD2g/f3ohKhTg==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6" } }, "HotChocolate.Language.Web": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "GI5ufbNVEoKygSC09owVnCvw1Ma2KzOtm1l6uen3wKshAdOKB4gmSVCjzf71pNL2Nt6cL4IHa70ClqjECmu9qg==", + "resolved": "13.9.6", + "contentHash": "4GiepY1mFp151rrAKy+VD38+gf0AGij8GspJntn5GvKpmvRriwvK24eOQuBZTdMBPiuscLUX0FMkZgs5BX4xYw==", "dependencies": { - "HotChocolate.Language.Utf8": "13.9.0" + "HotChocolate.Language.Utf8": "13.9.6" } }, "HotChocolate.Subscriptions": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "P3ason65NwSzkB2W9myV/pRIm4IMIWXH3RPCtpHVKx22Xw3hRJRJhjLBQZ5LCk5v3+7kKhXNBTbFNpbMyvez3Q==", + "resolved": "13.9.6", + "contentHash": "XO7d+enTaXEwATrii7Sp9r2efP6j5AopQf7iRk7Lky6+j6CCh8BL/V/qgCwAUtmraIOzswJRmy23cD5AssXlGg==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", - "HotChocolate.Execution.Abstractions": "13.9.0" + "HotChocolate.Abstractions": "13.9.6", + "HotChocolate.Execution.Abstractions": "13.9.6" } }, "HotChocolate.Subscriptions.InMemory": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "rj5U1Cd2QsjNnSNNdlSopYLtXh0kTZ1NlA1B3v02YFtj4Zu9le6QkGsl3oUljUUq46vSkkrT9ISj+e5wTCcw/Q==", + "resolved": "13.9.6", + "contentHash": "MdWWQXIBbNRdJ549kX2T/kCGMn88JsK//RuQ+9zaZSCf/Pxir0K86aWy8O3MssVmExot4k7RkQDUoC7GUOLtCQ==", "dependencies": { - "HotChocolate.Execution.Abstractions": "13.9.0", - "HotChocolate.Subscriptions": "13.9.0", + "HotChocolate.Execution.Abstractions": "13.9.6", + "HotChocolate.Subscriptions": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" } }, "HotChocolate.Transport.Sockets": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "4hPlhS2bgqT/tYCZfPtbGtPAaedULKgTbFKkTsjigrDhJcVxBA36Gr3yGM6S3NEw2JdIgiwugYV1log9zXkEjA==", + "resolved": "13.9.6", + "contentHash": "TeYEPFMGNTyjmmSyDvn8AZTy9HQR/+TMUznHWdlHDTCYXRJBwhtSQ+d8j8EbcOGhRw4TL2414+SK1mvypQvVNA==", "dependencies": { "System.IO.Pipelines": "8.0.0" } }, "HotChocolate.Types": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "VGPZePNC4sBlz/iY4x90zIRxW62MWzWNcl2yjLS3JcW+0W8KuKxh99dFLxL0WY/+Eoe8PUecmoob+FrVEvPzpg==", + "resolved": "13.9.6", + "contentHash": "/1V9ngL8AKrF8EOFeMS3AHEdPA/N4WCUNlpn5QDdV+KjVhRIm/tBJtbFZKCqD1kdtAOq19JNj0+bHMf/XBbLJg==", "dependencies": { - "HotChocolate.Abstractions": "13.9.0", - "HotChocolate.Types.Shared": "13.9.0", - "HotChocolate.Utilities": "13.9.0", + "HotChocolate.Abstractions": "13.9.6", + "HotChocolate.Types.Shared": "13.9.6", + "HotChocolate.Utilities": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "Microsoft.Extensions.ObjectPool": "8.0.0", "System.ComponentModel.Annotations": "5.0.0", @@ -302,74 +303,74 @@ }, "HotChocolate.Types.CursorPagination": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "2+w6tLrdjo+d/aIKyoNW1L/OH/p+FACMwGWHk1P4MwAspqaF7zjy71qTeNks+8QbRwG8uMleey/0sbr8sWpC6w==", + "resolved": "13.9.6", + "contentHash": "Vo/uowhYoN/YpOnk03b/PGh+GC5xw3uLTR2ZbrmND+pNv7Dzjh95Ajqt/Dl99twgf/aF4v1VOjmJ6Sp0SVR9Ag==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.Mutations": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "NX1zLkb7t19Om5RYubmkA6yRCtBbca454rqSGKSVBYjDrsiA6+4ZDvmS9Kjbw8F+cPm3VqShenrIIgfW8bzCXQ==", + "resolved": "13.9.6", + "contentHash": "hQ4wYHLgIVmhpBYLVtbJCAeASCHHJ427+FeAxGILsbp8J0ZXhlDQhFRPMXPz4bzbUWOR2oFEDTVoLvZSC9ztiQ==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.OffsetPagination": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "LIAaSVRS6FJCssP+s4ooLajhQ1/QfES78twX4OgZFJ9/UZMxXlU3K/IWeB2aXcJNkehfIZLgoiROnouB7ATepw==", + "resolved": "13.9.6", + "contentHash": "WnWKglIc+WNO9bUIcUK5pHaaMh/oNy2XK9ZBVbGiAHSa0HrhEiAWG6iCKdbRmBi0N/ZT6vdl+9we+edlbiVQsA==", "dependencies": { - "HotChocolate.Execution": "13.9.0", - "HotChocolate.Types": "13.9.0" + "HotChocolate.Execution": "13.9.6", + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.Scalars.Upload": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "hisB6PGGgsekz3a8YJwKgvbZHED98eph9+TMPg5A500tyvrZS00fbdpjRcN+rcTKAxhJ5evzHB2Fo1m62Dyo4w==", + "resolved": "13.9.6", + "contentHash": "RZ3Yu6jRGcjS4+KRXl9UEL4Wv4Kmc7Q0eIn3adAaxAn4L75mkpJmvL3vs4MVPgvlb4WkRoroRZlSBjeovuP0hA==", "dependencies": { - "HotChocolate.Types": "13.9.0" + "HotChocolate.Types": "13.9.6" } }, "HotChocolate.Types.Shared": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "2lhdbXU/GltPQWO9r8qePZSzDo9ryFs8Wv0aF7aQgEq3dLvwer6OpvnZhIYmGua6bXXebA1PzBAEaaxPpLx3Wg==", + "resolved": "13.9.6", + "contentHash": "ZKdal25pF7ChtHwkkDZiaQpi4AVvWLTQgrV8rP9pL34xtymUyuLpXdcCwqfHXWYnqD35JjHRXQYgVunxkPMbIw==", "dependencies": { - "HotChocolate.Language.SyntaxTree": "13.9.0" + "HotChocolate.Language.SyntaxTree": "13.9.6" } }, "HotChocolate.Utilities": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "6zqwjROYxtuzAYjh31JnYKgM/MySRWEq4DHO64oSPFRJQ8NDgg7EvUU771yLt/6T7kUh+S6k25hVnmUipFtEnQ==" + "resolved": "13.9.6", + "contentHash": "67hAY38hEx93N3/j2xOzSwPwytBL+DNJyJBXSVSj5GGJKdr3SX69lBU8MTl1mt5MSTBA5ypFnj8AUKvQRpL6SQ==" }, "HotChocolate.Utilities.DependencyInjection": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "o1ijY8Rk0IUAo8QZYhfQ8s4/3z78JS9tyXGHzA963gkzTSJPehD4960CAmWlyC19FdE1i2KiTnYLhNOwNoL6+A==", + "resolved": "13.9.6", + "contentHash": "NPOFy3wBmZLIJx3rDmNCVWteckh+nlgJmBb0+lJ30lmPE+nLZLvGgOrC+IgYBNJvD1qjQ2dcnUFgQnNyJ5UsVw==", "dependencies": { "Microsoft.Extensions.DependencyInjection": "8.0.0" } }, "HotChocolate.Validation": { "type": "Transitive", - "resolved": "13.9.0", - "contentHash": "gC7/YfOcOOmT+zV/V45CubYhK3lZI7+SmNYLGXQ1ko4cwjVRh3PzSJMAaKw3naWDcbjXbEyWwdYc0dLuoVBNEA==", + "resolved": "13.9.6", + "contentHash": "mpB90YtCC//vVi0Ekcs/EPL+DaaEtrF2jvQTd7Rlpay2962JiBf2V0fIk385ugaoryu7j2mFThOLld7ihxL8hw==", "dependencies": { - "HotChocolate.Types": "13.9.0", + "HotChocolate.Types": "13.9.6", "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", "Microsoft.Extensions.Options": "8.0.0" } }, "HtmlSanitizer": { "type": "Transitive", - "resolved": "8.0.843", - "contentHash": "XfmHK4rFz9PPN0gcv7J7pc+MRpcni1mrnO04mwA+9/1zIHLgdOvLJeDwWnX5a+up4tioPvGreB+p+KljLJ32wg==", + "resolved": "8.0.865", + "contentHash": "jzgltCjgTMbTLVfeHYU3ocxJrqRDVdkXYYGTOKVBnpQffaRB/4Hr0R6jKxBBH8UudQSgACp8j3lsD46weyeDJg==", "dependencies": { "AngleSharp": "[0.17.1]", "AngleSharp.Css": "[0.17.0]", @@ -383,10 +384,10 @@ }, "MailKit": { "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "EaXHODUdIV5oPdWvBJGazwaEpKt1LI/H/S//EEozANYCsfOSKHntX+Skk2kW616lSQp+fkRTmSjk0CYxEuOyEA==", + "resolved": "4.6.0", + "contentHash": "EJ1L2AtoO9nGZz2AKl2WGGw4pLIpkgEwzpczmZWBLqX0m33ueVA+CJYd9hg52XOvvEj+w5PVzB7yy26E0WHzKQ==", "dependencies": { - "MimeKit": "4.5.0" + "MimeKit": "4.6.0" } }, "Microsoft.AspNetCore.Authentication.OpenIdConnect": { @@ -409,12 +410,12 @@ }, "Microsoft.Data.SqlClient": { "type": "Transitive", - "resolved": "5.2.0", - "contentHash": "3alfyqRN3ELRtdvU1dGtLBRNQqprr3TJ0WrUJfMISPwg1nPUN2P3Lelah68IKWuV27Ceb7ig95hWNHFTSXfxMg==", + "resolved": "5.2.1", + "contentHash": "ojg2XWmih4ubPPtrhRqqXk0SM6wC2ZSTkNNEAlYBhMo4IsRHjLazFc0abzcZCNfw1JyWcqY7vGutWTv8ZaFD9g==", "dependencies": { - "Azure.Identity": "1.10.3", + "Azure.Identity": "1.11.3", "Microsoft.Data.SqlClient.SNI.runtime": "5.2.0", - "Microsoft.Identity.Client": "4.56.0", + "Microsoft.Identity.Client": "4.60.3", "Microsoft.IdentityModel.JsonWebTokens": "6.35.0", "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.35.0", "Microsoft.SqlServer.Server": "1.0.0", @@ -527,8 +528,8 @@ }, "Microsoft.Extensions.FileProviders.Embedded": { "type": "Transitive", - "resolved": "6.0.29", - "contentHash": "ih7lIqCUXsG4+CNNcPs67TBOe3Yd/HMdBBVP3BhvdZkJEUilhvUK69FB7ZPsiZKel08GkOh2qFXqZsWWPa/lPQ==", + "resolved": "6.0.31", + "contentHash": "2MOwJczvLSl+jxaz6sDn0eGc1io497//fhRg9R+nZNx8ely6+tBxbB01SN29stSIxxuLG/uyTaHJ8W7zCnqy9g==", "dependencies": { "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0" } @@ -573,19 +574,19 @@ }, "Microsoft.Extensions.Localization": { "type": "Transitive", - "resolved": "6.0.29", - "contentHash": "cZ5Tx6NtTZFzk+PWW2icApat7agQiMIFIsohsmHmz/scKRfAI/5XTa9lpZMwKowQBZm+ap0RwAJmQ2/5xoL+VQ==", + "resolved": "6.0.31", + "contentHash": "Qivy1329sMhNDm/qvRRBB5M/z3a1/Zfe+nY7oSBLnFnldEwYEMmfP+O1xu1f/BCd5oRC+k3OQ9bRTrZepU0zCQ==", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", - "Microsoft.Extensions.Localization.Abstractions": "6.0.29", + "Microsoft.Extensions.Localization.Abstractions": "6.0.31", "Microsoft.Extensions.Logging.Abstractions": "6.0.4", "Microsoft.Extensions.Options": "6.0.0" } }, "Microsoft.Extensions.Localization.Abstractions": { "type": "Transitive", - "resolved": "6.0.29", - "contentHash": "4HVhh+V/7H2VMgFI8EP1kLgLpeRqm1kQOlXjHk4MHCVD5/pgWOTTbLEz9pdXymQQf/eRg1vNK8tG2MZstBHhlw==" + "resolved": "6.0.31", + "contentHash": "q1K9D2xGiTILwo5+ht0Hsu891QLKOIp7BCdm+v9G4Hh+HTjnXk83TrucxNElM/z/BcJwWUHhsqx/abdgTdpyRQ==" }, "Microsoft.Extensions.Logging": { "type": "Transitive", @@ -638,19 +639,19 @@ }, "Microsoft.Identity.Client": { "type": "Transitive", - "resolved": "4.56.0", - "contentHash": "rr4zbidvHy9r4NvOAs5hdd964Ao2A0pAeFBJKR95u1CJAVzbd1p6tPTXUZ+5ld0cfThiVSGvz6UHwY6JjraTpA==", + "resolved": "4.60.3", + "contentHash": "jve1RzmSpBhGlqMzPva6VfRbLMLZZc1Q8WRVZf8+iEruQkBgDTJPq8OeTehcY4GGYG1j6UB1xVofVE+n4BLDdw==", "dependencies": { - "Microsoft.IdentityModel.Abstractions": "6.22.0" + "Microsoft.IdentityModel.Abstractions": "6.35.0", + "System.Diagnostics.DiagnosticSource": "6.0.1" } }, "Microsoft.Identity.Client.Extensions.Msal": { "type": "Transitive", - "resolved": "4.56.0", - "contentHash": "H12YAzEGK55vZ+QpxUzozhW8ZZtgPDuWvgA0JbdIR9UhMUplj29JhIgE2imuH8W2Nw9D8JKygR1uxRFtpSNcrg==", + "resolved": "4.60.3", + "contentHash": "X1Cz14/RbmlLshusE5u2zfG+5ul6ttgou19BZe5Mdw1qm6fgOI9/imBB2TIsx2UD7nkgd2+MCSzhbukZf7udeg==", "dependencies": { - "Microsoft.Identity.Client": "4.56.0", - "System.IO.FileSystem.AccessControl": "5.0.0", + "Microsoft.Identity.Client": "4.60.3", "System.Security.Cryptography.ProtectedData": "4.5.0" } }, @@ -701,11 +702,6 @@ "Microsoft.IdentityModel.Logging": "7.0.3" } }, - "Microsoft.NETCore.Platforms": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==" - }, "Microsoft.SqlServer.Server": { "type": "Transitive", "resolved": "1.0.0", @@ -731,10 +727,10 @@ }, "MimeKit": { "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "OYn8b8b66J4mgtDzoImepiUtdkJOAVGoTj/ghzJ+az4wVixA5L5Z8GmgFhRvQ1btAIwZh/d9zvZLCALndQdz5w==", + "resolved": "4.6.0", + "contentHash": "M4jddPQNSClTzHE+HnfrtN93mCXSYF8KewWUTwzXgl49ajzUh8hz/UY4CAnRQR4YJF3lBY5P+r+73VXZAGKafw==", "dependencies": { - "BouncyCastle.Cryptography": "2.3.0", + "BouncyCastle.Cryptography": "2.3.1", "System.Security.Cryptography.Pkcs": "8.0.0" } }, @@ -758,6 +754,15 @@ "resolved": "4.5.1", "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==" }, + "System.ClientModel": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "I3CVkvxeqFYjIVEP59DnjbeoGNfo/+SZrCLpRz2v/g0gpCHaEMPtWSY0s9k/7jR1rAsLNg2z2u1JRB76tPjnIw==", + "dependencies": { + "System.Memory.Data": "1.0.2", + "System.Text.Json": "4.7.2" + } + }, "System.CodeDom": { "type": "Transitive", "resolved": "8.0.0", @@ -806,15 +811,6 @@ "Microsoft.IdentityModel.Tokens": "7.0.3" } }, - "System.IO.FileSystem.AccessControl": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "SxHB3nuNrpptVk+vZ/F+7OHEpoHUIKKMl02bUmYHQr1r+glbZQxs7pRtsf4ENO29TVm2TH3AEeep2fJcy92oYw==", - "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } - }, "System.IO.Hashing": { "type": "Transitive", "resolved": "7.0.0", @@ -862,15 +858,6 @@ "resolved": "6.0.0", "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" }, - "System.Security.AccessControl": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "5.0.0", - "System.Security.Principal.Windows": "5.0.0" - } - }, "System.Security.Cryptography.Pkcs": { "type": "Transitive", "resolved": "8.0.0", @@ -884,11 +871,6 @@ "resolved": "8.0.0", "contentHash": "+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg==" }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" - }, "System.Text.Encoding.CodePages": { "type": "Transitive", "resolved": "6.0.0", @@ -922,8 +904,8 @@ }, "Yarp.ReverseProxy": { "type": "Transitive", - "resolved": "2.0.1", - "contentHash": "op7vBwONPFeR1PYxeLw+RLqSodODDX8RWd0OinLGMVIq6yi1q9mv1j56ImuyZgiAToksiC0Dc7jbRUZ9I+jvFA==", + "resolved": "2.1.0", + "contentHash": "VgRuCBxmh5ND4VuFhvIN3AAeoxFhYkS2hNINk6AVCrOVTlpk7OwdrTXi8NHACfqfhDL+/oYCZrF9RxN+yiYnEg==", "dependencies": { "System.IO.Hashing": "7.0.0" } @@ -940,7 +922,7 @@ "dependencies": { "Duende.AccessTokenManagement.OpenIdConnect": "[2.1.0, )", "Kentico.Xperience.Ecommerce.Common": "[1.0.0-prerelease-1, )", - "Kentico.Xperience.WebApp": "[29.0.1, )", + "Kentico.Xperience.WebApp": "[29.2.0, )", "Scrutor": "[4.2.2, )" } }, @@ -956,20 +938,20 @@ }, "Kentico.Xperience.Core": { "type": "CentralTransitive", - "requested": "[29.0.1, )", - "resolved": "29.0.1", - "contentHash": "QMmB5YGxAgIgYyGa21v0M40QJgqyWxGBLq6rjU483XhEPL1f4rhGW81XEU4kw/REBdCoH46LJT3/ATW/7pYBFA==", + "requested": "[29.2.0, )", + "resolved": "29.2.0", + "contentHash": "5gK/HD6jO4LuAzhSNyimp6cgMTfpMM89bn0D3kE7g2XZunPqnNDy8uTtbeF6edDh2vYGa+mzUZsxvPU+bzPfmg==", "dependencies": { "AngleSharp": "0.17.1", - "MailKit": "4.5.0", - "Microsoft.Data.SqlClient": "5.2.0", + "MailKit": "4.6.0", + "Microsoft.Data.SqlClient": "5.2.1", "Microsoft.Extensions.Caching.Memory": "6.0.1", "Microsoft.Extensions.Configuration": "6.0.1", "Microsoft.Extensions.Configuration.Binder": "6.0.0", "Microsoft.Extensions.DependencyInjection": "6.0.1", "Microsoft.Extensions.FileProviders.Physical": "6.0.0", "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", - "Microsoft.Extensions.Localization": "6.0.29", + "Microsoft.Extensions.Localization": "6.0.31", "Microsoft.Extensions.Options.ConfigurationExtensions": "6.0.0", "Mono.Cecil": "0.11.5", "Newtonsoft.Json": "13.0.3", @@ -978,18 +960,18 @@ }, "Kentico.Xperience.WebApp": { "type": "CentralTransitive", - "requested": "[29.0.1, )", - "resolved": "29.0.1", - "contentHash": "9TwUaSs+WMGCk2rlgyk0kpqSyGvJRMzcAr2rCtuEH7su+QOUk+kKY65s0DZ33JTyA1QrCYOst9O/vrL4/Endtg==", + "requested": "[29.2.0, )", + "resolved": "29.2.0", + "contentHash": "4+/rmbML2T79Hzdz3hcRGng1Wi50wEmwqGVW1O3tmb1PQsPx7kbPDJ/+S2e+l0pkBh22E6yZi4Xd04sfLMXNuQ==", "dependencies": { "CommandLineParser": "2.9.1", - "HotChocolate.AspNetCore": "13.9.0", - "HotChocolate.Data": "13.9.0", - "HtmlSanitizer": "8.0.843", - "Kentico.Xperience.Core": "[29.0.1]", + "HotChocolate.AspNetCore": "13.9.6", + "HotChocolate.Data": "13.9.6", + "HtmlSanitizer": "8.0.865", + "Kentico.Xperience.Core": "[29.2.0]", "Microsoft.Extensions.Caching.Memory": "6.0.1", - "Microsoft.Extensions.FileProviders.Embedded": "6.0.29", - "Microsoft.Extensions.Localization": "6.0.29" + "Microsoft.Extensions.FileProviders.Embedded": "6.0.31", + "Microsoft.Extensions.Localization": "6.0.31" } }, "Scrutor": { From 2ad53db8c79b59b61cf723ef17e9f56d0f45d9dc Mon Sep 17 00:00:00 2001 From: Martin Kyjac Date: Wed, 3 Jul 2024 17:19:55 +0200 Subject: [PATCH 05/25] Create endpoint to retrieve list of standalone products --- .../Products/IKProductService.cs | 9 ++++ .../Products/KProductService.cs | 50 +++++++++++++++++-- .../Products/ProductPageRequest.cs | 36 +------------ .../Products/ProductRequest.cs | 49 ++++++++++++++++++ .../Products/ProductsController.cs | 21 ++++++++ 5 files changed, 126 insertions(+), 39 deletions(-) create mode 100644 src/Kentico.Xperience.StoreApi/Products/ProductRequest.cs diff --git a/src/Kentico.Xperience.StoreApi/Products/IKProductService.cs b/src/Kentico.Xperience.StoreApi/Products/IKProductService.cs index 41fc8f5e..5a6c2643 100644 --- a/src/Kentico.Xperience.StoreApi/Products/IKProductService.cs +++ b/src/Kentico.Xperience.StoreApi/Products/IKProductService.cs @@ -1,6 +1,7 @@ using Kentico.Xperience.StoreApi.Products.Categories; using Kentico.Xperience.StoreApi.Products.Pages; using Kentico.Xperience.StoreApi.Products.Prices; +using Kentico.Xperience.StoreApi.Products.SKU; namespace Kentico.Xperience.StoreApi.Products; @@ -49,4 +50,12 @@ public interface IKProductService /// Currency code. /// Task GetProductInventoryAndPrices(int skuId, string currencyCode); + + + /// + /// Get all standalone products in specific culture. + /// + /// Standalone products parameters. + /// + Task> GetStandaloneProducts(ProductRequest request); } diff --git a/src/Kentico.Xperience.StoreApi/Products/KProductService.cs b/src/Kentico.Xperience.StoreApi/Products/KProductService.cs index cfc49d78..5e57d80d 100644 --- a/src/Kentico.Xperience.StoreApi/Products/KProductService.cs +++ b/src/Kentico.Xperience.StoreApi/Products/KProductService.cs @@ -10,6 +10,7 @@ using Kentico.Xperience.StoreApi.Products.Categories; using Kentico.Xperience.StoreApi.Products.Pages; using Kentico.Xperience.StoreApi.Products.Prices; +using Kentico.Xperience.StoreApi.Products.SKU; namespace Kentico.Xperience.StoreApi.Products; @@ -18,6 +19,7 @@ internal class KProductService : IKProductService { private readonly IPageRetriever pageRetriever; private readonly IProductPageConverter productPageConverter; + private readonly IProductSKUConverter productSKUConverter; private readonly ISKUInfoProvider skuInfoProvider; private readonly ICatalogPriceCalculatorFactory catalogPriceCalculatorFactory; private readonly ISiteService siteService; @@ -25,12 +27,14 @@ internal class KProductService : IKProductService private readonly IShoppingService shoppingService; - public KProductService(IPageRetriever pageRetriever, IProductPageConverter productPageConverter, + public KProductService( + IPageRetriever pageRetriever, IProductPageConverter productPageConverter, IProductSKUConverter productSKUConverter, ISKUInfoProvider skuInfoProvider, ICatalogPriceCalculatorFactory catalogPriceCalculatorFactory, ISiteService siteService, IMapper mapper, IShoppingService shoppingService) { this.pageRetriever = pageRetriever; this.productPageConverter = productPageConverter; + this.productSKUConverter = productSKUConverter; this.skuInfoProvider = skuInfoProvider; this.catalogPriceCalculatorFactory = catalogPriceCalculatorFactory; this.siteService = siteService; @@ -48,10 +52,7 @@ public async Task> GetProductPages(ProductPageRequest orderBy = "DocumentSKUName ASC"; } - var productTypes = (await DataClassInfoProvider.ProviderObject.Get() - .WhereTrue(nameof(DataClassInfo.ClassIsProduct)) - .Columns(nameof(DataClassInfo.ClassName), nameof(DataClassInfo.ClassFormDefinition)) - .GetEnumerableTypedResultAsync()) + var productTypes = (await GetProductDataClasses()) .Select(p => new { p.ClassName, @@ -161,6 +162,38 @@ public async Task GetProductInventoryAndPrices(int sk } + /// + public async Task> GetStandaloneProducts(ProductRequest request) + { + var (culture, currencyCode, orderBy, limit, withVariants) = request; + + string[] productTypes = (await GetProductDataClasses()) + .Select(p => p.ClassName) + .ToArray(); + + var skuInfos = skuInfoProvider.Get() + .TopN(limit) + .OrderBy(orderBy); + + if (productTypes.Length > 0) + { + var query = new MultiDocumentQuery() + .Types(productTypes) + .Column(nameof(SKUTreeNode.NodeSKUID)); + + if (!string.IsNullOrEmpty(culture)) + { + query = query.Culture(culture); + } + + skuInfos = skuInfos.WhereNotIn(nameof(SKUInfo.SKUID), query); + } + + return (await skuInfos.GetEnumerableTypedResultAsync()) + .Select(x => productSKUConverter.Convert(x, currencyCode, withVariants)); + } + + private ProductPricesResponse GetProductPrices(SKUInfo sku, string currencyCode) { var calculator = catalogPriceCalculatorFactory.GetCalculator(siteService.CurrentSite.SiteID); @@ -185,4 +218,11 @@ private ProductPricesResponse GetProductPrices(SKUInfo sku, string currencyCode) return response; } + + + private async Task> GetProductDataClasses() + => await DataClassInfoProvider.ProviderObject.Get() + .WhereTrue(nameof(DataClassInfo.ClassIsProduct)) + .Columns(nameof(DataClassInfo.ClassName), nameof(DataClassInfo.ClassFormDefinition)) + .GetEnumerableTypedResultAsync(); } diff --git a/src/Kentico.Xperience.StoreApi/Products/ProductPageRequest.cs b/src/Kentico.Xperience.StoreApi/Products/ProductPageRequest.cs index b26a1326..498203ee 100644 --- a/src/Kentico.Xperience.StoreApi/Products/ProductPageRequest.cs +++ b/src/Kentico.Xperience.StoreApi/Products/ProductPageRequest.cs @@ -1,14 +1,11 @@ -using System.ComponentModel; -using System.ComponentModel.DataAnnotations; - -using Kentico.Xperience.StoreApi.Currencies; +using System.ComponentModel.DataAnnotations; namespace Kentico.Xperience.StoreApi.Products; /// /// Model for product pages request used in API. /// -public class ProductPageRequest +public class ProductPageRequest : ProductRequest { /// /// Node alias path prefix. @@ -16,35 +13,6 @@ public class ProductPageRequest [Required] public string Path { get; set; } - /// - /// Document culture. - /// - [RegularExpression("[a-zA-Z]{2}-[a-zA-Z]{2}")] - public string Culture { get; set; } - - /// - /// Product currency. - /// - [CurrencyValidation] - public string Currency { get; set; } - - /// - /// Order by SQL expression. - /// - public string OrderBy { get; set; } - - /// - /// Limit how many products to return. - /// - [DefaultValue(12)] - [Range(1, 1000)] - public int Limit { get; set; } - - /// - /// If true variants are loaded too for products with variants (default false). - /// - public bool WithVariants { get; set; } - /// /// If true, DocumentSKUDescription is filled too (default false). /// diff --git a/src/Kentico.Xperience.StoreApi/Products/ProductRequest.cs b/src/Kentico.Xperience.StoreApi/Products/ProductRequest.cs new file mode 100644 index 00000000..7d4773c5 --- /dev/null +++ b/src/Kentico.Xperience.StoreApi/Products/ProductRequest.cs @@ -0,0 +1,49 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel; + +using Kentico.Xperience.StoreApi.Currencies; + +namespace Kentico.Xperience.StoreApi.Products; + +public class ProductRequest +{ + /// + /// To determine if product has its page, culture needs to be provided + /// so documents in the specific culture will be checked. + /// + [RegularExpression("[a-zA-Z]{2}-[a-zA-Z]{2}")] + public string Culture { get; set; } + + /// + /// Product currency. + /// + [CurrencyValidation] + public string Currency { get; set; } + + /// + /// Order by SQL expression. + /// + public string OrderBy { get; set; } + + /// + /// Limit how many products to return. + /// + [DefaultValue(12)] + [Range(1, 1000)] + public int Limit { get; set; } + + /// + /// If true variants are loaded too for products with variants (default false). + /// + public bool WithVariants { get; set; } + + public void Deconstruct(out string culture, out string currency, out string orderBy, + out int limit, out bool withVariants) + { + culture = Culture; + currency = Currency; + orderBy = OrderBy; + limit = Limit; + withVariants = WithVariants; + } +} diff --git a/src/Kentico.Xperience.StoreApi/Products/ProductsController.cs b/src/Kentico.Xperience.StoreApi/Products/ProductsController.cs index c4f32a35..e02f4ac4 100644 --- a/src/Kentico.Xperience.StoreApi/Products/ProductsController.cs +++ b/src/Kentico.Xperience.StoreApi/Products/ProductsController.cs @@ -8,6 +8,7 @@ using Kentico.Xperience.StoreApi.Products.Categories; using Kentico.Xperience.StoreApi.Products.Pages; using Kentico.Xperience.StoreApi.Products.Prices; +using Kentico.Xperience.StoreApi.Products.SKU; using Kentico.Xperience.StoreApi.Routing; using Microsoft.AspNetCore.Http; @@ -146,4 +147,24 @@ public async Task> GetInventoryPrices(in return ValidationProblem(); } } + + + /// + /// Returns all standalone products. + /// + /// Product request parameters. + /// + [HttpGet("standalone-products", Name = nameof(GetStandaloneProducts))] + [AuthorizeStore] + public async Task>> GetStandaloneProducts([FromQuery] ProductRequest request) + { + if (request.Culture is not null && + !CultureSiteInfoProvider.IsCultureOnSite(request.Culture, SiteContext.CurrentSiteName)) + { + return BadRequest($"Culture '{request.Culture}' is not assigned for site"); + } + + var products = await productService.GetStandaloneProducts(request); + return Ok(products); + } } From c88ab45b73a0b23cc881473e955b7cec672ce7ce Mon Sep 17 00:00:00 2001 From: Martin Kyjac Date: Wed, 3 Jul 2024 17:26:44 +0200 Subject: [PATCH 06/25] Add get standalone products method to product service --- .../Products/IProductService.cs | 8 ++++ .../Products/ProductPageRequest.cs | 32 +-------------- .../Products/ProductRequest.cs | 39 +++++++++++++++++++ .../Products/ProductService.cs | 8 +++- 4 files changed, 54 insertions(+), 33 deletions(-) create mode 100644 src/Kentico.Xperience.K13Ecommerce/Products/ProductRequest.cs diff --git a/src/Kentico.Xperience.K13Ecommerce/Products/IProductService.cs b/src/Kentico.Xperience.K13Ecommerce/Products/IProductService.cs index 49d49537..479f2d7b 100644 --- a/src/Kentico.Xperience.K13Ecommerce/Products/IProductService.cs +++ b/src/Kentico.Xperience.K13Ecommerce/Products/IProductService.cs @@ -36,4 +36,12 @@ public interface IProductService /// SKUID for product or variant. /// Currency code. Task GetVariantInventoryPriceInfo(int skuId, string? currencyCode = null); + + + /// + /// Gets all standalone products. + /// + /// Stanadlone product params. + /// + Task> GetStandaloneProducts(ProductRequest request); } diff --git a/src/Kentico.Xperience.K13Ecommerce/Products/ProductPageRequest.cs b/src/Kentico.Xperience.K13Ecommerce/Products/ProductPageRequest.cs index a0d35390..dff2db93 100644 --- a/src/Kentico.Xperience.K13Ecommerce/Products/ProductPageRequest.cs +++ b/src/Kentico.Xperience.K13Ecommerce/Products/ProductPageRequest.cs @@ -3,7 +3,7 @@ /// /// Model for request to filter product pages /// -public class ProductPageRequest +public class ProductPageRequest : ProductRequest { /// /// Node alias path prefix @@ -11,36 +11,6 @@ public class ProductPageRequest public required string Path { get; set; } - /// - /// Document culture - /// - public string? Culture { get; set; } - - - /// - /// Product currency - /// - public string? Currency { get; set; } - - - /// - /// Order by SQL expression - /// - public string? OrderBy { get; set; } - - - /// - /// Limit how many products to return. - /// - public int? Limit { get; set; } - - - /// - /// If true variants are loaded too for products with variants (default false). - /// - public bool WithVariants { get; set; } - - /// /// If true, DocumentSKUDescription is filled too (default false). /// diff --git a/src/Kentico.Xperience.K13Ecommerce/Products/ProductRequest.cs b/src/Kentico.Xperience.K13Ecommerce/Products/ProductRequest.cs new file mode 100644 index 00000000..1758d47a --- /dev/null +++ b/src/Kentico.Xperience.K13Ecommerce/Products/ProductRequest.cs @@ -0,0 +1,39 @@ +using System.ComponentModel.DataAnnotations; + +namespace Kentico.Xperience.K13Ecommerce.Products; + +/// +/// Model for request to filter standalone products +/// +public class ProductRequest +{ + /// + /// To determine if product has its page, culture needs to be provided + /// so documents in the specific culture will be checked. + /// + [RegularExpression("[a-zA-Z]{2}-[a-zA-Z]{2}")] + public string? Culture { get; set; } + + /// + /// Product currency. + /// + public string? Currency { get; set; } + + /// + /// Order by SQL expression. + /// + public string? OrderBy { get; set; } + + /// + /// Limit how many products to return. + /// + [DefaultValue(12)] + [Range(1, 1000)] + public int Limit { get; set; } + + /// + /// If true variants are loaded too for products with variants (default false). + /// + public bool WithVariants { get; set; } +} + diff --git a/src/Kentico.Xperience.K13Ecommerce/Products/ProductService.cs b/src/Kentico.Xperience.K13Ecommerce/Products/ProductService.cs index fc7ce94b..776b4d8e 100644 --- a/src/Kentico.Xperience.K13Ecommerce/Products/ProductService.cs +++ b/src/Kentico.Xperience.K13Ecommerce/Products/ProductService.cs @@ -6,8 +6,8 @@ internal class ProductService(IKenticoStoreApiClient storeApiClient) : IProductS { /// public async Task> GetProductPages(ProductPageRequest request) - => await storeApiClient.GetProductPagesAsync(request.Path, request.Culture, request.Currency, request.OrderBy, - request.Limit, request.WithVariants, request.WithLongDescription, request.NoLinks); + => await storeApiClient.GetProductPagesAsync(request.Path, request.WithLongDescription, request.NoLinks, request.Culture, + request.Currency, request.OrderBy, request.Limit, request.WithVariants); /// @@ -24,4 +24,8 @@ public async Task GetProductPrices(int skuId, string? cur /// public async Task GetVariantInventoryPriceInfo(int skuId, string? currencyCode = null) => await storeApiClient.GetInventoryPricesAsync(skuId, currencyCode); + + /// + public async Task> GetStandaloneProducts(ProductRequest request) => + await storeApiClient.GetStandaloneProductsAsync(request.Culture, request.Currency, request.OrderBy, request.Limit, request.WithVariants); } From 71778ac4d62d9a8966e3bd11d9f101702c955507 Mon Sep 17 00:00:00 2001 From: Martin Kyjac Date: Wed, 3 Jul 2024 17:38:19 +0200 Subject: [PATCH 07/25] Update swagger.json --- .../StoreApi/swagger.json | 119 +++++++++++++++--- 1 file changed, 100 insertions(+), 19 deletions(-) diff --git a/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json b/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json index ba166abd..1703add8 100644 --- a/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json +++ b/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json @@ -367,10 +367,26 @@ "type": "string" } }, + { + "name": "WithLongDescription", + "in": "query", + "description": "If true, DocumentSKUDescription is filled too (default false).", + "schema": { + "type": "boolean" + } + }, + { + "name": "NoLinks", + "in": "query", + "description": "If true, only not-linked product pages are returned (default false).", + "schema": { + "type": "boolean" + } + }, { "name": "Culture", "in": "query", - "description": "Document culture.", + "description": "To determine if product has its page, culture needs to be provided\r\nso documents in the specific culture will be checked.", "schema": { "pattern": "[a-zA-Z]{2}-[a-zA-Z]{2}", "type": "string" @@ -411,22 +427,6 @@ "schema": { "type": "boolean" } - }, - { - "name": "WithLongDescription", - "in": "query", - "description": "If true, DocumentSKUDescription is filled too (default false).", - "schema": { - "type": "boolean" - } - }, - { - "name": "NoLinks", - "in": "query", - "description": "If true, only not-linked product pages are returned (default false).", - "schema": { - "type": "boolean" - } } ], "responses": { @@ -659,6 +659,87 @@ } } }, + "/api/store/products/standalone-products": { + "get": { + "tags": [ + "Products" + ], + "summary": "Returns all standalone products.", + "operationId": "GetStandaloneProducts", + "parameters": [ + { + "name": "Culture", + "in": "query", + "description": "To determine if product has its page, culture needs to be provided\r\nso documents in the specific culture will be checked.", + "schema": { + "pattern": "[a-zA-Z]{2}-[a-zA-Z]{2}", + "type": "string" + } + }, + { + "name": "Currency", + "in": "query", + "description": "Product currency.", + "schema": { + "type": "string" + } + }, + { + "name": "OrderBy", + "in": "query", + "description": "Order by SQL expression.", + "schema": { + "type": "string" + } + }, + { + "name": "Limit", + "in": "query", + "description": "Limit how many products to return.", + "schema": { + "maximum": 1000, + "minimum": 1, + "type": "integer", + "format": "int32", + "default": 12 + } + }, + { + "name": "WithVariants", + "in": "query", + "description": "If true variants are loaded too for products with variants (default false).", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KProductSKU" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, "/api/store/cart/content": { "get": { "tags": [ @@ -3311,7 +3392,7 @@ "nullable": true } }, - "additionalProperties": { } + "additionalProperties": {} }, "ProductInventoryPriceInfo": { "type": "object", @@ -3418,7 +3499,7 @@ }, "security": [ { - "Bearer": [ ] + "Bearer": [] } ] } \ No newline at end of file From 2b6babeeb4428bbf3a60e8c8b2029dae4eaf0fda Mon Sep 17 00:00:00 2001 From: Martin Kyjac Date: Wed, 3 Jul 2024 18:37:39 +0200 Subject: [PATCH 08/25] Add standalone products to product synchronization --- .../StoreApi/StoreItemIdentifiers.cs | 9 +++++++++ .../Products/ProductSynchronizationService.cs | 9 ++++++++- .../Products/KProductService.cs | 2 ++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Kentico.Xperience.K13Ecommerce/StoreApi/StoreItemIdentifiers.cs b/src/Kentico.Xperience.K13Ecommerce/StoreApi/StoreItemIdentifiers.cs index 1263c1f3..c58ec1d2 100644 --- a/src/Kentico.Xperience.K13Ecommerce/StoreApi/StoreItemIdentifiers.cs +++ b/src/Kentico.Xperience.K13Ecommerce/StoreApi/StoreItemIdentifiers.cs @@ -9,6 +9,15 @@ public partial class KProductNode : IItemIdentifier { /// public int ExternalId => Sku.Skuid; + + /// + /// Create product node from product SKU. + /// + /// + public KProductNode(KProductSKU sku) + { + Sku = sku; + } } /// diff --git a/src/Kentico.Xperience.K13Ecommerce/Synchronization/Products/ProductSynchronizationService.cs b/src/Kentico.Xperience.K13Ecommerce/Synchronization/Products/ProductSynchronizationService.cs index 91a5b778..d36bb7bf 100644 --- a/src/Kentico.Xperience.K13Ecommerce/Synchronization/Products/ProductSynchronizationService.cs +++ b/src/Kentico.Xperience.K13Ecommerce/Synchronization/Products/ProductSynchronizationService.cs @@ -43,11 +43,18 @@ await productService.GetProductPages(new ProductPageRequest NoLinks = true }); + var kenticoStandaloneProducts = (await productService.GetStandaloneProducts(new ProductRequest + { + Culture = defaultCultureCode, + Limit = 1000, + WithVariants = true + })).Select(p => new KProductNode(p)); + var contentItemProducts = await contentItemService.GetContentItems(ProductSKU.CONTENT_TYPE_NAME, linkedItemsLevel: 2); var (toCreate, toUpdate, toDelete) = - ClassifyItems(kenticoStoreProducts, contentItemProducts); + ClassifyItems(kenticoStoreProducts.Concat(kenticoStandaloneProducts), contentItemProducts); int adminUserId = UserInfoProvider.AdministratorUser.UserID; foreach (var productToCreate in toCreate) diff --git a/src/Kentico.Xperience.StoreApi/Products/KProductService.cs b/src/Kentico.Xperience.StoreApi/Products/KProductService.cs index 5e57d80d..eea02cb9 100644 --- a/src/Kentico.Xperience.StoreApi/Products/KProductService.cs +++ b/src/Kentico.Xperience.StoreApi/Products/KProductService.cs @@ -172,6 +172,8 @@ public async Task> GetStandaloneProducts(ProductRequest .ToArray(); var skuInfos = skuInfoProvider.Get() + .WhereEqualsOrNull(nameof(SKUInfo.SKUOptionCategoryID), 0) + .WhereEqualsOrNull(nameof(SKUInfo.SKUParentSKUID), 0) .TopN(limit) .OrderBy(orderBy); From 2b3ff85a527c3ccee46eacc3ef02bb967785f181 Mon Sep 17 00:00:00 2001 From: Martin Kyjac Date: Thu, 4 Jul 2024 10:03:56 +0200 Subject: [PATCH 09/25] Simplify query to get SKU nodes --- .../Products/KProductService.cs | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/Kentico.Xperience.StoreApi/Products/KProductService.cs b/src/Kentico.Xperience.StoreApi/Products/KProductService.cs index eea02cb9..cbe841e9 100644 --- a/src/Kentico.Xperience.StoreApi/Products/KProductService.cs +++ b/src/Kentico.Xperience.StoreApi/Products/KProductService.cs @@ -167,30 +167,25 @@ public async Task> GetStandaloneProducts(ProductRequest { var (culture, currencyCode, orderBy, limit, withVariants) = request; - string[] productTypes = (await GetProductDataClasses()) - .Select(p => p.ClassName) - .ToArray(); - var skuInfos = skuInfoProvider.Get() .WhereEqualsOrNull(nameof(SKUInfo.SKUOptionCategoryID), 0) .WhereEqualsOrNull(nameof(SKUInfo.SKUParentSKUID), 0) .TopN(limit) .OrderBy(orderBy); - if (productTypes.Length > 0) - { - var query = new MultiDocumentQuery() - .Types(productTypes) - .Column(nameof(SKUTreeNode.NodeSKUID)); - if (!string.IsNullOrEmpty(culture)) - { - query = query.Culture(culture); - } + var query = DocumentHelper.GetDocuments() + .WhereNotNull(nameof(TreeNode.NodeSKUID)) + .Column(nameof(TreeNode.NodeSKUID)); - skuInfos = skuInfos.WhereNotIn(nameof(SKUInfo.SKUID), query); + if (!string.IsNullOrEmpty(culture)) + { + query = query.Culture(culture); } + skuInfos = skuInfos.WhereNotIn(nameof(SKUInfo.SKUID), query); + + return (await skuInfos.GetEnumerableTypedResultAsync()) .Select(x => productSKUConverter.Convert(x, currencyCode, withVariants)); } From e93c2c0d9bf5d235029a2177b81c951f03ba63a3 Mon Sep 17 00:00:00 2001 From: Martin Kyjac Date: Thu, 4 Jul 2024 10:04:33 +0200 Subject: [PATCH 10/25] Add setting for standalone products synchronization --- .../DancingGoat-K13Ecommerce/appsettings.json | 1 + .../Config/KenticoStoreConfig.cs | 5 ++++ .../Products/ProductSynchronizationService.cs | 27 ++++++++++++------- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/examples/DancingGoat-K13Ecommerce/appsettings.json b/examples/DancingGoat-K13Ecommerce/appsettings.json index e97cc90b..3a4ad62b 100644 --- a/examples/DancingGoat-K13Ecommerce/appsettings.json +++ b/examples/DancingGoat-K13Ecommerce/appsettings.json @@ -18,6 +18,7 @@ "StoreApiUrl": "http://dev.dancinggoat.com:65375", "ClientId": "YourUniqueClientIdentifier", "ClientSecret": "********************", + "StandaloneProductsSync": true, "ProductSyncEnabled": true, "ProductSyncInterval": 10 } diff --git a/src/Kentico.Xperience.K13Ecommerce/Config/KenticoStoreConfig.cs b/src/Kentico.Xperience.K13Ecommerce/Config/KenticoStoreConfig.cs index 6d99c2f9..3c6b8cdd 100644 --- a/src/Kentico.Xperience.K13Ecommerce/Config/KenticoStoreConfig.cs +++ b/src/Kentico.Xperience.K13Ecommerce/Config/KenticoStoreConfig.cs @@ -20,6 +20,11 @@ public class KenticoStoreConfig /// public required string ClientSecret { get; set; } = string.Empty; + /// + /// Synchronize also standalone products without page representation. + /// + public required bool StandaloneProductsSync { get; set; } = true; + /// /// When true, product synchronization is enabled. /// diff --git a/src/Kentico.Xperience.K13Ecommerce/Synchronization/Products/ProductSynchronizationService.cs b/src/Kentico.Xperience.K13Ecommerce/Synchronization/Products/ProductSynchronizationService.cs index d36bb7bf..fccb2d4e 100644 --- a/src/Kentico.Xperience.K13Ecommerce/Synchronization/Products/ProductSynchronizationService.cs +++ b/src/Kentico.Xperience.K13Ecommerce/Synchronization/Products/ProductSynchronizationService.cs @@ -5,6 +5,7 @@ using K13Store; using Kentico.Xperience.Ecommerce.Common.ContentItemSynchronization; +using Kentico.Xperience.K13Ecommerce.Config; using Kentico.Xperience.K13Ecommerce.Products; using Kentico.Xperience.K13Ecommerce.SiteStore; using Kentico.Xperience.K13Ecommerce.StoreApi; @@ -12,6 +13,7 @@ using Kentico.Xperience.K13Ecommerce.Synchronization.ProductVariants; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; namespace Kentico.Xperience.K13Ecommerce.Synchronization.Products; @@ -22,7 +24,8 @@ internal class ProductSynchronizationService( IProductVariantSynchronizationService variantSynchronizationService, IProductImageSynchronizationService productImageSynchronizationService, IHttpClientFactory httpClientFactory, - ISiteStoreService siteStoreService) : SynchronizationServiceCommon(httpClientFactory), IProductSynchronizationService + ISiteStoreService siteStoreService, + IOptionsMonitor config) : SynchronizationServiceCommon(httpClientFactory), IProductSynchronizationService { public async Task SynchronizeProducts() { @@ -33,7 +36,7 @@ public async Task SynchronizeProducts() string language = defaultCultureCode[..2]; var kenticoStoreProducts = - await productService.GetProductPages(new ProductPageRequest + (await productService.GetProductPages(new ProductPageRequest { Path = "/", Culture = defaultCultureCode, @@ -41,20 +44,26 @@ await productService.GetProductPages(new ProductPageRequest WithVariants = true, WithLongDescription = true, NoLinks = true - }); + })).ToList(); - var kenticoStandaloneProducts = (await productService.GetStandaloneProducts(new ProductRequest + if (config.CurrentValue.StandaloneProductsSync) { - Culture = defaultCultureCode, - Limit = 1000, - WithVariants = true - })).Select(p => new KProductNode(p)); + var kenticoStandaloneProducts = (await productService.GetStandaloneProducts(new ProductRequest + { + Culture = defaultCultureCode, + Limit = 1000, + WithVariants = true + })).Select(p => new KProductNode(p)); + + kenticoStoreProducts.AddRange(kenticoStandaloneProducts); + } + var contentItemProducts = await contentItemService.GetContentItems(ProductSKU.CONTENT_TYPE_NAME, linkedItemsLevel: 2); var (toCreate, toUpdate, toDelete) = - ClassifyItems(kenticoStoreProducts.Concat(kenticoStandaloneProducts), contentItemProducts); + ClassifyItems(kenticoStoreProducts, contentItemProducts); int adminUserId = UserInfoProvider.AdministratorUser.UserID; foreach (var productToCreate in toCreate) From a2077753098fb96f35080d9dade945e413f7a04b Mon Sep 17 00:00:00 2001 From: Martin Kyjac Date: Thu, 4 Jul 2024 11:30:43 +0200 Subject: [PATCH 11/25] Add SKUDescription field to KProductSKU --- .../ShopApi/CustomSKUConverter.cs | 4 ++-- src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json | 4 ++++ src/Kentico.Xperience.StoreApi/Products/KProductService.cs | 2 +- .../Products/Pages/ProductPageConverter.cs | 2 +- .../Products/SKU/IProductSKUConverter.cs | 3 ++- src/Kentico.Xperience.StoreApi/Products/SKU/KProductSKU.cs | 2 ++ .../Products/SKU/ProductSKUConverter.cs | 7 ++++++- 7 files changed, 18 insertions(+), 6 deletions(-) diff --git a/examples/Kentico13_DancingGoatStore/ShopApi/CustomSKUConverter.cs b/examples/Kentico13_DancingGoatStore/ShopApi/CustomSKUConverter.cs index 33140a37..5dcf28ff 100644 --- a/examples/Kentico13_DancingGoatStore/ShopApi/CustomSKUConverter.cs +++ b/examples/Kentico13_DancingGoatStore/ShopApi/CustomSKUConverter.cs @@ -10,9 +10,9 @@ namespace DancingGoat.ShopApi; /// public class CustomSKUConverter : ProductSKUConverter { - public override CustomSKU Convert(SKUInfo skuInfo, string currencyCode, bool withVariants) + public override CustomSKU Convert(SKUInfo skuInfo, string currencyCode, bool withVariants, bool withLongDescription) { - var model = base.Convert(skuInfo, currencyCode, withVariants); + var model = base.Convert(skuInfo, currencyCode, withVariants, withLongDescription); return model; } diff --git a/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json b/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json index 1703add8..44dd8176 100644 --- a/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json +++ b/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json @@ -2832,6 +2832,10 @@ "type": "string", "nullable": true }, + "skuLongDescription": { + "type": "string", + "nullable": true + }, "skuNumber": { "type": "string", "nullable": true diff --git a/src/Kentico.Xperience.StoreApi/Products/KProductService.cs b/src/Kentico.Xperience.StoreApi/Products/KProductService.cs index cbe841e9..8068498a 100644 --- a/src/Kentico.Xperience.StoreApi/Products/KProductService.cs +++ b/src/Kentico.Xperience.StoreApi/Products/KProductService.cs @@ -187,7 +187,7 @@ public async Task> GetStandaloneProducts(ProductRequest return (await skuInfos.GetEnumerableTypedResultAsync()) - .Select(x => productSKUConverter.Convert(x, currencyCode, withVariants)); + .Select(x => productSKUConverter.Convert(x, currencyCode, withVariants, true)); } diff --git a/src/Kentico.Xperience.StoreApi/Products/Pages/ProductPageConverter.cs b/src/Kentico.Xperience.StoreApi/Products/Pages/ProductPageConverter.cs index 266f5307..9efdf768 100644 --- a/src/Kentico.Xperience.StoreApi/Products/Pages/ProductPageConverter.cs +++ b/src/Kentico.Xperience.StoreApi/Products/Pages/ProductPageConverter.cs @@ -30,7 +30,7 @@ public virtual TProduct Convert(SKUTreeNode skuTreeNode, IEnumerable cus { var model = mapper.Map(skuTreeNode); model.AbsoluteUrl = DocumentURLProvider.GetAbsoluteUrl(skuTreeNode); - model.SKU = skuConverter.Convert(skuTreeNode.SKU, currencyCode, withVariants); + model.SKU = skuConverter.Convert(skuTreeNode.SKU, currencyCode, withVariants, false); model.CustomFields = customFields.ToDictionary(f => f, f => skuTreeNode.GetValue(f)); if (withLongDescription) { diff --git a/src/Kentico.Xperience.StoreApi/Products/SKU/IProductSKUConverter.cs b/src/Kentico.Xperience.StoreApi/Products/SKU/IProductSKUConverter.cs index b6ab646a..c3e5e76c 100644 --- a/src/Kentico.Xperience.StoreApi/Products/SKU/IProductSKUConverter.cs +++ b/src/Kentico.Xperience.StoreApi/Products/SKU/IProductSKUConverter.cs @@ -14,6 +14,7 @@ public interface IProductSKUConverter /// SKU info. /// Currency code in which evaluates prices. /// If true, variants are included. + /// If true, is included. /// - TModel Convert(SKUInfo skuInfo, string currencyCode, bool withVariants); + TModel Convert(SKUInfo skuInfo, string currencyCode, bool withVariants, bool withLongDescription); } diff --git a/src/Kentico.Xperience.StoreApi/Products/SKU/KProductSKU.cs b/src/Kentico.Xperience.StoreApi/Products/SKU/KProductSKU.cs index cddeeeb6..095e59c3 100644 --- a/src/Kentico.Xperience.StoreApi/Products/SKU/KProductSKU.cs +++ b/src/Kentico.Xperience.StoreApi/Products/SKU/KProductSKU.cs @@ -18,6 +18,8 @@ public class KProductSKU public string SKUShortDescription { get; set; } + public string SKULongDescription { get; set; } + public string SKUNumber { get; set; } public bool SKUEnabled { get; set; } diff --git a/src/Kentico.Xperience.StoreApi/Products/SKU/ProductSKUConverter.cs b/src/Kentico.Xperience.StoreApi/Products/SKU/ProductSKUConverter.cs index aeb68d6b..4a15dbbd 100644 --- a/src/Kentico.Xperience.StoreApi/Products/SKU/ProductSKUConverter.cs +++ b/src/Kentico.Xperience.StoreApi/Products/SKU/ProductSKUConverter.cs @@ -37,7 +37,7 @@ public ProductSKUConverter(ICatalogPriceCalculatorFactory catalogPriceCalculator /// - public virtual TModel Convert(SKUInfo skuInfo, string currencyCode, bool withVariants) + public virtual TModel Convert(SKUInfo skuInfo, string currencyCode, bool withVariants, bool withLongDescription) { var model = mapper.Map(skuInfo); @@ -66,6 +66,11 @@ public virtual TModel Convert(SKUInfo skuInfo, string currencyCode, bool withVar model.Variants = variants; } + if (withLongDescription) + { + model.SKULongDescription = skuInfo.SKUDescription; + } + model.Prices = mapper.Map(prices); return model; From a7d6bded118bc5b04c9615047311c5e80b4305ae Mon Sep 17 00:00:00 2001 From: Martin Kyjac Date: Thu, 4 Jul 2024 11:31:12 +0200 Subject: [PATCH 12/25] Add required field values --- .../StoreApi/StoreItemIdentifiers.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Kentico.Xperience.K13Ecommerce/StoreApi/StoreItemIdentifiers.cs b/src/Kentico.Xperience.K13Ecommerce/StoreApi/StoreItemIdentifiers.cs index c58ec1d2..246ddb3a 100644 --- a/src/Kentico.Xperience.K13Ecommerce/StoreApi/StoreItemIdentifiers.cs +++ b/src/Kentico.Xperience.K13Ecommerce/StoreApi/StoreItemIdentifiers.cs @@ -17,6 +17,11 @@ public partial class KProductNode : IItemIdentifier public KProductNode(KProductSKU sku) { Sku = sku; + DocumentSKUName = sku.SkuName; + DocumentSKUDescription = sku.SkuLongDescription; + DocumentSKUShortDescription = sku.SkuShortDescription; + ClassName = string.Empty; + NodeAliasPath = string.Empty; } } From 902d519c4c67d028c37dbc2095987924f32e1fc5 Mon Sep 17 00:00:00 2001 From: Martin Kyjac Date: Thu, 4 Jul 2024 11:43:22 +0200 Subject: [PATCH 13/25] Rename standalone product synchronization setting --- examples/DancingGoat-K13Ecommerce/appsettings.json | 2 +- src/Kentico.Xperience.K13Ecommerce/Config/KenticoStoreConfig.cs | 2 +- .../Synchronization/Products/ProductSynchronizationService.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/DancingGoat-K13Ecommerce/appsettings.json b/examples/DancingGoat-K13Ecommerce/appsettings.json index 3a4ad62b..8ffed5c8 100644 --- a/examples/DancingGoat-K13Ecommerce/appsettings.json +++ b/examples/DancingGoat-K13Ecommerce/appsettings.json @@ -18,8 +18,8 @@ "StoreApiUrl": "http://dev.dancinggoat.com:65375", "ClientId": "YourUniqueClientIdentifier", "ClientSecret": "********************", - "StandaloneProductsSync": true, "ProductSyncEnabled": true, + "StandaloneProductSync": true, "ProductSyncInterval": 10 } } \ No newline at end of file diff --git a/src/Kentico.Xperience.K13Ecommerce/Config/KenticoStoreConfig.cs b/src/Kentico.Xperience.K13Ecommerce/Config/KenticoStoreConfig.cs index 3c6b8cdd..12a822ab 100644 --- a/src/Kentico.Xperience.K13Ecommerce/Config/KenticoStoreConfig.cs +++ b/src/Kentico.Xperience.K13Ecommerce/Config/KenticoStoreConfig.cs @@ -23,7 +23,7 @@ public class KenticoStoreConfig /// /// Synchronize also standalone products without page representation. /// - public required bool StandaloneProductsSync { get; set; } = true; + public required bool StandaloneProductSync { get; set; } = true; /// /// When true, product synchronization is enabled. diff --git a/src/Kentico.Xperience.K13Ecommerce/Synchronization/Products/ProductSynchronizationService.cs b/src/Kentico.Xperience.K13Ecommerce/Synchronization/Products/ProductSynchronizationService.cs index fccb2d4e..4b71db7e 100644 --- a/src/Kentico.Xperience.K13Ecommerce/Synchronization/Products/ProductSynchronizationService.cs +++ b/src/Kentico.Xperience.K13Ecommerce/Synchronization/Products/ProductSynchronizationService.cs @@ -46,7 +46,7 @@ public async Task SynchronizeProducts() NoLinks = true })).ToList(); - if (config.CurrentValue.StandaloneProductsSync) + if (config.CurrentValue.StandaloneProductSync) { var kenticoStandaloneProducts = (await productService.GetStandaloneProducts(new ProductRequest { From 485329fab980a00910b4863ee3841c1d696fe127 Mon Sep 17 00:00:00 2001 From: Martin Kyjac <159790459+martinkyjac@users.noreply.github.com> Date: Thu, 4 Jul 2024 11:43:37 +0200 Subject: [PATCH 14/25] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 754b66c7..205d6cf3 100644 --- a/README.md +++ b/README.md @@ -169,6 +169,7 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment environment) "ClientId": "3ef7fe1b-696c-4afa-8b56-d3176b7bea95", "ClientSecret": "********************", "ProductSyncEnabled": true, + "StandaloneProductSync": true, "ProductSyncInterval": 10 } } From d91ab3d77e76dcc5fb2b3d5586e19bc714a01b86 Mon Sep 17 00:00:00 2001 From: Martin Kyjac <159790459+martinkyjac@users.noreply.github.com> Date: Thu, 4 Jul 2024 11:52:56 +0200 Subject: [PATCH 15/25] Update Usage-Guide.md --- docs/Usage-Guide.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/Usage-Guide.md b/docs/Usage-Guide.md index 226b9bb4..a3e347ce 100644 --- a/docs/Usage-Guide.md +++ b/docs/Usage-Guide.md @@ -232,7 +232,7 @@ and to browser cookie (uses `IShoppingCartClientStorage`) Library also implements product synchronization to Content hub. These are 3 entities synchronized to reusable content items: - Products - Content type `K13Store.ProductSKU` - - All products associated with product pages are synced. **Standalone SKUs** aren't currently supported. + - All products associated with product pages are synced. **Standalone SKUs** synchronization can be set via `StandaloneProductsSync` setting. - Product variants - Content type `K13Store.ProductVariant` - All products variant for parent products - Product images - Content type `K13Store.ProductImage` @@ -241,7 +241,7 @@ Library also implements product synchronization to Content hub. These are 3 enti The synchronization runs in a background thread worker periodically and can be disabled (`ProductSyncEnabled` setting). Interval can be set in minutes (`ProductSyncInterval` setting). Synchronized data is updated when source value changes, so data cannot be edited in XbyK safely, but new custom or reusable fields can be added and edited -safely. +safely. You can decide, wether include [standalone SKUs](https://docs.kentico.com/x/3gqRBg) or not (`StandaloneProductsSync` setting). No price data is synced, because catalog prices need calculator evaluation in context of user's cart and standalone requests via `IProductService` are required. @@ -294,6 +294,7 @@ dotnet add package Kentico.Xperience.Store.Rcl "ClientId": "3ef7fe1b-696c-4afa-8b56-d3176b7bea95", "ClientSecret": "********************", "ProductSyncEnabled": true, + "StandaloneProductSync": true, "ProductSyncInterval": 10 } } @@ -306,6 +307,7 @@ dotnet add package Kentico.Xperience.Store.Rcl | ClientId | Fill same value which is defined on KX 13 side | | ClientSecret | Fill same value which is defined on KX 13 side | | ProductSyncEnabled | If true, product synchronization is enabled | +| StandaloneProductSync | If true, [standalone SKUs](https://docs.kentico.com/x/3gqRBg) are synchronized as well | | ProductSyncInterval | Interval in minutes specifies how often synchronization is running | From e0c0907c090aa40aec61221ae00a9715687fa947 Mon Sep 17 00:00:00 2001 From: Martin Kyjac <159790459+martinkyjac@users.noreply.github.com> Date: Thu, 4 Jul 2024 11:54:01 +0200 Subject: [PATCH 16/25] Fix typo --- docs/Usage-Guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Usage-Guide.md b/docs/Usage-Guide.md index a3e347ce..112b78e3 100644 --- a/docs/Usage-Guide.md +++ b/docs/Usage-Guide.md @@ -241,7 +241,7 @@ Library also implements product synchronization to Content hub. These are 3 enti The synchronization runs in a background thread worker periodically and can be disabled (`ProductSyncEnabled` setting). Interval can be set in minutes (`ProductSyncInterval` setting). Synchronized data is updated when source value changes, so data cannot be edited in XbyK safely, but new custom or reusable fields can be added and edited -safely. You can decide, wether include [standalone SKUs](https://docs.kentico.com/x/3gqRBg) or not (`StandaloneProductsSync` setting). +safely. You can decide, whether include [standalone SKUs](https://docs.kentico.com/x/3gqRBg) or not (`StandaloneProductsSync` setting). No price data is synced, because catalog prices need calculator evaluation in context of user's cart and standalone requests via `IProductService` are required. From 43c92a7c70d841985d230fd0a45a827cf5519c44 Mon Sep 17 00:00:00 2001 From: Martin Kyjac Date: Mon, 8 Jul 2024 11:04:47 +0200 Subject: [PATCH 17/25] Add endpoint to return order info only for its customer. --- .../Orders/OrderController.cs | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/Kentico.Xperience.StoreApi/Orders/OrderController.cs b/src/Kentico.Xperience.StoreApi/Orders/OrderController.cs index 606fdb45..d1199fb9 100644 --- a/src/Kentico.Xperience.StoreApi/Orders/OrderController.cs +++ b/src/Kentico.Xperience.StoreApi/Orders/OrderController.cs @@ -117,14 +117,40 @@ public async Task> AdminOrderList([FromQuery] Or }); } + /// - /// Returns order by ID. + /// Returns order by ID only if order belongs to current customer. /// /// Order ID. [HttpGet("detail/{orderId:int}", Name = nameof(OrderDetail))] public async Task> OrderDetail([FromRoute] int orderId) + { + var customer = shoppingService.GetCurrentCustomer(); + if (customer == null) + { + return NotFound(); + } + + var order = await orderInfoProvider.GetAsync(orderId); + + if (order == null || order.OrderCustomerID != customer.CustomerID) + { + return NotFound(); + } + + return Ok(mapper.Map(order)); + } + + + /// + /// Returns order by ID. + /// + /// Order ID. + [HttpGet("admin/detail/{orderId:int}", Name = nameof(AdminOrderDetail))] + public async Task> AdminOrderDetail([FromRoute] int orderId) { var order = await orderInfoProvider.GetAsync(orderId); + if (order == null) { return NotFound(); From 01c0d652e39685c3d15034a1368f020fadc492f1 Mon Sep 17 00:00:00 2001 From: Martin Kyjac Date: Mon, 8 Jul 2024 11:05:14 +0200 Subject: [PATCH 18/25] Implement new swagger requests --- .../Orders/IOrderService.cs | 11 ++++- .../Orders/OrderService.cs | 6 ++- .../StoreApi/swagger.json | 49 +++++++++++++++++-- 3 files changed, 60 insertions(+), 6 deletions(-) diff --git a/src/Kentico.Xperience.K13Ecommerce/Orders/IOrderService.cs b/src/Kentico.Xperience.K13Ecommerce/Orders/IOrderService.cs index 7cb49a7c..0f2a5932 100644 --- a/src/Kentico.Xperience.K13Ecommerce/Orders/IOrderService.cs +++ b/src/Kentico.Xperience.K13Ecommerce/Orders/IOrderService.cs @@ -24,10 +24,17 @@ public interface IOrderService /// - /// Get order by id. + /// Get order by id for current customer. /// /// Order ID. - Task GetOrder(int orderId); + Task GetCurrentCustomerOrder(int orderId); + + + /// + /// Get order by ID to display in XbyK administration. + /// + /// + Task GetAdminOrder(int orderId); /// diff --git a/src/Kentico.Xperience.K13Ecommerce/Orders/OrderService.cs b/src/Kentico.Xperience.K13Ecommerce/Orders/OrderService.cs index 7603e157..b8f28e2d 100644 --- a/src/Kentico.Xperience.K13Ecommerce/Orders/OrderService.cs +++ b/src/Kentico.Xperience.K13Ecommerce/Orders/OrderService.cs @@ -15,7 +15,11 @@ public async Task GetAdminOrderList(OrderListRequest request) /// - public async Task GetOrder(int orderId) => await storeApiClient.OrderDetailAsync(orderId); + public async Task GetCurrentCustomerOrder(int orderId) => await storeApiClient.OrderDetailAsync(orderId); + + + /// + public async Task GetAdminOrder(int orderId) => await storeApiClient.AdminOrderDetailAsync(orderId); /// diff --git a/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json b/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json index 134ff103..41231e2b 100644 --- a/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json +++ b/src/Kentico.Xperience.K13Ecommerce/StoreApi/swagger.json @@ -348,7 +348,7 @@ "tags": [ "Order" ], - "summary": "Returns order by ID.", + "summary": "Returns order by ID only if order belongs to current customer.", "operationId": "OrderDetail", "parameters": [ { @@ -386,6 +386,49 @@ } } }, + "/api/store/order/admin/detail/{orderId}": { + "get": { + "tags": [ + "Order" + ], + "summary": "Returns order by ID.", + "operationId": "AdminOrderDetail", + "parameters": [ + { + "name": "orderId", + "in": "path", + "description": "Order ID.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KOrder" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, "/api/store/order/statuses/list": { "get": { "tags": [ @@ -3511,7 +3554,7 @@ "nullable": true } }, - "additionalProperties": { } + "additionalProperties": {} }, "ProductInventoryPriceInfo": { "type": "object", @@ -3618,7 +3661,7 @@ }, "security": [ { - "Bearer": [ ] + "Bearer": [] } ] } \ No newline at end of file From b4d7bd08132fd81ab523bbceb518a2932c5c2273 Mon Sep 17 00:00:00 2001 From: martinkyjac Date: Tue, 16 Jul 2024 22:37:04 +0200 Subject: [PATCH 19/25] Add SKUAvailableItems to CI dictionary --- .../Synchronization/Products/ProductSynchronizationItem.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Kentico.Xperience.K13Ecommerce/Synchronization/Products/ProductSynchronizationItem.cs b/src/Kentico.Xperience.K13Ecommerce/Synchronization/Products/ProductSynchronizationItem.cs index 526ba7b3..1c8de2f5 100644 --- a/src/Kentico.Xperience.K13Ecommerce/Synchronization/Products/ProductSynchronizationItem.cs +++ b/src/Kentico.Xperience.K13Ecommerce/Synchronization/Products/ProductSynchronizationItem.cs @@ -90,6 +90,7 @@ public bool GetModifiedProperties(ProductSKU contentItem, out Dictionary Date: Fri, 19 Jul 2024 15:17:50 +0200 Subject: [PATCH 20/25] Add param description --- src/Kentico.Xperience.K13Ecommerce/Orders/IOrderService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Kentico.Xperience.K13Ecommerce/Orders/IOrderService.cs b/src/Kentico.Xperience.K13Ecommerce/Orders/IOrderService.cs index 0f2a5932..f87dcb53 100644 --- a/src/Kentico.Xperience.K13Ecommerce/Orders/IOrderService.cs +++ b/src/Kentico.Xperience.K13Ecommerce/Orders/IOrderService.cs @@ -33,7 +33,7 @@ public interface IOrderService /// /// Get order by ID to display in XbyK administration. /// - /// + /// Order ID. Task GetAdminOrder(int orderId); From 64b61eeaa30be3b0fb9828399c77e2b63e061933 Mon Sep 17 00:00:00 2001 From: martinkyjac Date: Fri, 19 Jul 2024 15:18:25 +0200 Subject: [PATCH 21/25] Add new endpoints to docs --- README.md | 14 ++++++++------ docs/Usage-Guide.md | 21 +++++++++++++++------ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 754b66c7..fc24b07d 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Xperience by Kentico - KX 13 E-Commerce integration [![Kentico Labs](https://img.shields.io/badge/Kentico_Labs-grey?labelColor=orange&logo=data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ic3ZnLWljb24iIHN0eWxlPSJ3aWR0aDogMWVtOyBoZWlnaHQ6IDFlbTt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2ZpbGw6IGN1cnJlbnRDb2xvcjtvdmVyZmxvdzogaGlkZGVuOyIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik05NTYuMjg4IDgwNC40OEw2NDAgMjc3LjQ0VjY0aDMyYzE3LjYgMCAzMi0xNC40IDMyLTMycy0xNC40LTMyLTMyLTMyaC0zMjBjLTE3LjYgMC0zMiAxNC40LTMyIDMyczE0LjQgMzIgMzIgMzJIMzg0djIxMy40NEw2Ny43MTIgODA0LjQ4Qy00LjczNiA5MjUuMTg0IDUxLjIgMTAyNCAxOTIgMTAyNGg2NDBjMTQwLjggMCAxOTYuNzM2LTk4Ljc1MiAxMjQuMjg4LTIxOS41MnpNMjQxLjAyNCA2NDBMNDQ4IDI5NS4wNFY2NGgxMjh2MjMxLjA0TDc4Mi45NzYgNjQwSDI0MS4wMjR6IiAgLz48L3N2Zz4=)](https://github.com/Kentico/.github/blob/main/SUPPORT.md#labs-limited-support) -[![CI: Build and Test](https://github.com/Kentico/xperience-by-kentico-ecommerce/actions/workflows/ci.yml/badge.svg)](https://github.com/Kentico/xperience-by-kentico-ecommerce/actions/workflows/ci.yml) +[![CI: Build and Test](https://github.com/Kentico/xperience-by-kentico-k13ecommerce/actions/workflows/ci.yml/badge.svg)](https://github.com/Kentico/xperience-by-kentico-k13ecommerce/actions/workflows/ci.yml) -**This integration is currently a Proof of Concept (PoC). For further details, please refer to the [Support](#support) section and the [KenticoLabs](https://github.com/Kentico/.github/blob/main/SUPPORT.md#labs-limited-support) tag associated with this feature.** +**This integration is currently a Proof of Concept (PoC). For further details, please refer to the [Support](#support) section and the [Kentico Labs](https://github.com/Kentico/.github/blob/main/SUPPORT.md#labs-limited-support) tag associated with this feature.** | Name | Package | | ------------- |:-------------:| @@ -43,8 +43,10 @@ is located in [Dancing Goat XbyK example project](./examples/DancingGoat-K13Ecom The integration provides an API with services for implementing the following scenarios: - Listing products based on parameters, product categories, prices and inventory - Actions with shopping cart, changing currency and order creation - - Listing of orders (currently suitable for implementing listing orders in administration) - - **Order updates and listing for specific customers are under development** + - Listing of orders in administration + - Listing of orders for current customer + - Update order + - Listing site order statuses - Listing site cultures and currencies - Check [this part of User Guide](./docs/Usage-Guide.md#kx-13-e-commerce-integration-in-xperience-by-kentico) for more specific description @@ -137,7 +139,7 @@ dotnet add package Kentico.Xperience.StoreApi } ``` -2. Add [Store API services](https://github.com/Kentico/xperience-by-kentico-ecommerce/blob/main/examples/Kentico13_DancingGoatStore/Startup.cs#L130) to application services and configure Swagger +2. Add [Store API services](https://github.com/Kentico/xperience-by-kentico-k13ecommerce/blob/main/examples/Kentico13_DancingGoatStore/Startup.cs#L130) to application services and configure Swagger ```csharp // Startup.cs @@ -173,7 +175,7 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment environment) } } ``` -2. Add K13Ecommerce library to the [application services](https://github.com/Kentico/xperience-by-kentico-ecommerce/blob/main/examples/DancingGoat-K13Ecommerce/Program.cs#L61) +2. Add K13Ecommerce library to the [application services](https://github.com/Kentico/xperience-by-kentico-k13ecommerce/blob/main/examples/DancingGoat-K13Ecommerce/Program.cs#L61) ```csharp // Program.cs diff --git a/docs/Usage-Guide.md b/docs/Usage-Guide.md index 226b9bb4..8f0ecf80 100644 --- a/docs/Usage-Guide.md +++ b/docs/Usage-Guide.md @@ -77,6 +77,10 @@ via API. ### Orders - Endpoint `api/store/order/list` for retrieving list of orders for current customer based on request (supports paging) - Endpoint `api/store/order/admin/list` for retrieving list of orders (for all customers) based on request (supports paging) to display in XbyK administration (supports paging) +- Endpoint `api/store/order/detail/{orderID}` for retrieving order detail for current customer. If the order order belongs to another customer, no order is retrieved +- Endpoint `api/store/order/admin/detail/{orderID}` for retrieving order detail(without verifying if order belongs to current customer) +- Endpoint `api/store/order/statuses/list` for retrieving all order statuses +- Endpoint `api/store/order/update` for updating order(update order status, set order payment, etc.) ### Customers - Endpoint `api/store/customer/addresses` for retrieving current customer's addresses @@ -218,8 +222,12 @@ and to browser cookie (uses `IShoppingCartClientStorage`) - Service is used e.g. in [CheckoutService in Dancing Goat example](../examples/DancingGoat-K13Ecommerce/Services/CheckoutService.cs) where customer's addresses are retrieved in cart's second step. - `IOrderService` - - List of orders - currently suitable for implementing listing orders in administration - - **Order updates and listing for specific customers are under development** + - List of orders from all customers(for implementing listing orders in administration) + - List of orders for current customer(based on request) + - Order detail for current customer(only for orders that belong to the customer) + - Order detail for administrator(without verifying if order belongs to current customer) + - List of all order statuses + - Update order - `ISiteStoreService` - Use for retrieving site's [list of enabled cultures](https://github.com/Kentico/xperience-by-kentico-ecommerce/blob/main/src/Kentico.Xperience.K13Ecommerce/SiteStore/ISiteStoreService.cs#L13), e.g. for implementation of language selector - Use for retrieving site's [list of enabled currencies](https://github.com/Kentico/xperience-by-kentico-ecommerce/blob/main/src/Kentico.Xperience.K13Ecommerce/SiteStore/ISiteStoreService.cs#L18), e.g. for implementation of currency selector @@ -412,10 +420,11 @@ Here are links for some specific parts of shopping cart: - [Discount / Coupon codes](https://github.com/Kentico/xperience-by-kentico-ecommerce/blob/main/examples/DancingGoat-K13Ecommerce/Controllers/KStore/CheckoutController.cs#L163) - [Delivery details + shipping](https://github.com/Kentico/xperience-by-kentico-ecommerce/blob/main/examples/DancingGoat-K13Ecommerce/Controllers/KStore/CheckoutController.cs#L194) - [Payment](https://github.com/Kentico/xperience-by-kentico-ecommerce/blob/main/examples/DancingGoat-K13Ecommerce/Controllers/KStore/CheckoutController.cs#L330) -- Payment gateway - Is not part of this PoC solution, you need to implement integration with specific payment gateway. **API for updating orders (and their statuses) is under development**. +- Payment gateway - Is not part of this PoC solution, you need to implement integration with specific payment gateway. - [Order creation](https://github.com/Kentico/xperience-by-kentico-ecommerce/blob/main/examples/DancingGoat-K13Ecommerce/Controllers/KStore/CheckoutController.cs#L315) - - - +### How to handle order payments? +1. Implement your own payment method. +2. Retrieve all order statuses using `IOrderService` if needed. +3. Use `UpdateOrder` method of `IOrderService` to update order status and to set `OrderIsPaid` flag according to the payment result. \ No newline at end of file From dc7d4edc12bda4ebb95c7669229889d40c58e40a Mon Sep 17 00:00:00 2001 From: Martin Kyjac Date: Tue, 23 Jul 2024 15:08:09 +0200 Subject: [PATCH 22/25] Update Usage-Guide.md --- docs/Usage-Guide.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/Usage-Guide.md b/docs/Usage-Guide.md index 2d1fb153..eb15cc76 100644 --- a/docs/Usage-Guide.md +++ b/docs/Usage-Guide.md @@ -77,10 +77,10 @@ via API. ### Orders - Endpoint `api/store/order/list` for retrieving list of orders for current customer based on request (supports paging) - Endpoint `api/store/order/admin/list` for retrieving list of orders (for all customers) based on request (supports paging) to display in XbyK administration (supports paging) -- Endpoint `api/store/order/detail/{orderID}` for retrieving order detail for current customer. If the order order belongs to another customer, no order is retrieved -- Endpoint `api/store/order/admin/detail/{orderID}` for retrieving order detail(without verifying if order belongs to current customer) +- Endpoint `api/store/order/detail/{orderID}` for retrieving order details for the current customer. If the order belongs to another customer, no order is retrieved +- Endpoint `api/store/order/admin/detail/{orderID}` for retrieving order details (without verifying if the order belongs to the current customer) - Endpoint `api/store/order/statuses/list` for retrieving all order statuses -- Endpoint `api/store/order/update` for updating order(update order status, set order payment, etc.) +- Endpoint `api/store/order/update` for updating orders (update order status, set order payment, etc.). Primarily intended to be used via `IOrderService` available in the [integration API](https://github.com/Kentico/xperience-by-kentico-k13ecommerce/pull/16#kx-13-e-commerce-integration-in-xperience-by-kentico) ### Customers - Endpoint `api/store/customer/addresses` for retrieving current customer's addresses @@ -94,7 +94,7 @@ via API. When [member](https://docs.kentico.com/x/BIsuCw) is created on XbyK (for example when a new customer registers), this member needs to be synchronized to KX 13 as a user. It is subsequently used for API authorization (member/user identity is generated in JWT). Before you start using the Store API, you need to synchronize all website members between the client (XbyK) and your KX 13 application. -Complete synchronization is not part of this PoC solution. +Complete synchronization is currently not a part of this solution. - Endpoint `api/store/synchronization/user-synchronization` can be used to create a new user in KX 13 - The client application (XbyK) should use this to ensure that all new members are synchronized to KX 13. This is necessary when client's @@ -222,12 +222,12 @@ and to browser cookie (uses `IShoppingCartClientStorage`) - Service is used e.g. in [CheckoutService in Dancing Goat example](../examples/DancingGoat-K13Ecommerce/Services/CheckoutService.cs) where customer's addresses are retrieved in cart's second step. - `IOrderService` - - List of orders from all customers(for implementing listing orders in administration) - - List of orders for current customer(based on request) - - Order detail for current customer(only for orders that belong to the customer) - - Order detail for administrator(without verifying if order belongs to current customer) - - List of all order statuses - - Update order + - List orders from all customers (for implementing order listings in the administration) + - List orders for the current customer (based on the request context) + - Retrieve order details for the current customer (only for orders that belong to the customer) + - Retrieve order details for administrators (without verifying if the order belongs to the current customer) + - List all order statuses + - Update existing orders (order status, payment, etc.) - `ISiteStoreService` - Use for retrieving site's [list of enabled cultures](https://github.com/Kentico/xperience-by-kentico-ecommerce/blob/main/src/Kentico.Xperience.K13Ecommerce/SiteStore/ISiteStoreService.cs#L13), e.g. for implementation of language selector - Use for retrieving site's [list of enabled currencies](https://github.com/Kentico/xperience-by-kentico-ecommerce/blob/main/src/Kentico.Xperience.K13Ecommerce/SiteStore/ISiteStoreService.cs#L18), e.g. for implementation of currency selector @@ -240,7 +240,7 @@ and to browser cookie (uses `IShoppingCartClientStorage`) Library also implements product synchronization to Content hub. These are 3 entities synchronized to reusable content items: - Products - Content type `K13Store.ProductSKU` - - All products associated with product pages are synced. **Standalone SKUs** synchronization can be set via `StandaloneProductsSync` setting. + - All products associated with product pages are synced. **Standalone SKUs** synchronization can be set via `StandaloneProductSync` setting. - Product variants - Content type `K13Store.ProductVariant` - All products variant for parent products - Product images - Content type `K13Store.ProductImage` @@ -249,7 +249,7 @@ Library also implements product synchronization to Content hub. These are 3 enti The synchronization runs in a background thread worker periodically and can be disabled (`ProductSyncEnabled` setting). Interval can be set in minutes (`ProductSyncInterval` setting). Synchronized data is updated when source value changes, so data cannot be edited in XbyK safely, but new custom or reusable fields can be added and edited -safely. You can decide, whether include [standalone SKUs](https://docs.kentico.com/x/3gqRBg) or not (`StandaloneProductsSync` setting). +safely. You can decide, whether include [standalone SKUs](https://docs.kentico.com/x/3gqRBg) or not (`StandaloneProductSync` setting). No price data is synced, because catalog prices need calculator evaluation in context of user's cart and standalone requests via `IProductService` are required. @@ -315,7 +315,7 @@ dotnet add package Kentico.Xperience.Store.Rcl | ClientId | Fill same value which is defined on KX 13 side | | ClientSecret | Fill same value which is defined on KX 13 side | | ProductSyncEnabled | If true, product synchronization is enabled | -| StandaloneProductSync | If true, [standalone SKUs](https://docs.kentico.com/x/3gqRBg) are synchronized as well | +| StandaloneProductSync | If this setting along with `ProductSyncEnabled` is true, [standalone SKUs](https://docs.kentico.com/x/3gqRBg) are synchronized as well (if `ProductSyncEnabled` is false, no products are synchronized). | | ProductSyncInterval | Interval in minutes specifies how often synchronization is running | @@ -422,7 +422,7 @@ Here are links for some specific parts of shopping cart: - [Discount / Coupon codes](https://github.com/Kentico/xperience-by-kentico-ecommerce/blob/main/examples/DancingGoat-K13Ecommerce/Controllers/KStore/CheckoutController.cs#L163) - [Delivery details + shipping](https://github.com/Kentico/xperience-by-kentico-ecommerce/blob/main/examples/DancingGoat-K13Ecommerce/Controllers/KStore/CheckoutController.cs#L194) - [Payment](https://github.com/Kentico/xperience-by-kentico-ecommerce/blob/main/examples/DancingGoat-K13Ecommerce/Controllers/KStore/CheckoutController.cs#L330) -- Payment gateway - Is not part of this PoC solution, you need to implement integration with specific payment gateway. +- Payment gateway - Is not currently part of the solution. You need to implement integration with a specific payment gateway. - [Order creation](https://github.com/Kentico/xperience-by-kentico-ecommerce/blob/main/examples/DancingGoat-K13Ecommerce/Controllers/KStore/CheckoutController.cs#L315) From 71a8e0494cd7805753577930c5edefd0445cf3ac Mon Sep 17 00:00:00 2001 From: Martin Kyjac Date: Tue, 23 Jul 2024 15:10:29 +0200 Subject: [PATCH 23/25] Update README.md --- README.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index d36eec50..928555cf 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,8 @@ -# Xperience by Kentico - KX 13 E-Commerce integration +# Xperience by Kentico - Kentico Xperience 13 E-commerce -[![Kentico Labs](https://img.shields.io/badge/Kentico_Labs-grey?labelColor=orange&logo=data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ic3ZnLWljb24iIHN0eWxlPSJ3aWR0aDogMWVtOyBoZWlnaHQ6IDFlbTt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2ZpbGw6IGN1cnJlbnRDb2xvcjtvdmVyZmxvdzogaGlkZGVuOyIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik05NTYuMjg4IDgwNC40OEw2NDAgMjc3LjQ0VjY0aDMyYzE3LjYgMCAzMi0xNC40IDMyLTMycy0xNC40LTMyLTMyLTMyaC0zMjBjLTE3LjYgMC0zMiAxNC40LTMyIDMyczE0LjQgMzIgMzIgMzJIMzg0djIxMy40NEw2Ny43MTIgODA0LjQ4Qy00LjczNiA5MjUuMTg0IDUxLjIgMTAyNCAxOTIgMTAyNGg2NDBjMTQwLjggMCAxOTYuNzM2LTk4Ljc1MiAxMjQuMjg4LTIxOS41MnpNMjQxLjAyNCA2NDBMNDQ4IDI5NS4wNFY2NGgxMjh2MjMxLjA0TDc4Mi45NzYgNjQwSDI0MS4wMjR6IiAgLz48L3N2Zz4=)](https://github.com/Kentico/.github/blob/main/SUPPORT.md#labs-limited-support) +[![7-day bug-fix policy](https://img.shields.io/badge/-7--days_bug--fixing_policy-grey?labelColor=orange&logo=data:image/svg+xml;base64,PHN2ZyBjbGFzcz0ic3ZnLWljb24iIHN0eWxlPSJ3aWR0aDogMWVtOyBoZWlnaHQ6IDFlbTt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2ZpbGw6IGN1cnJlbnRDb2xvcjtvdmVyZmxvdzogaGlkZGVuOyIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik04ODguNDkgMjIyLjY4NnYtMzEuNTRsLTY1LjY3Mi0wLjk1NWgtMC4yMDVhNDY1LjcxNSA0NjUuNzE1IDAgMCAxLTE0NC4zMTUtMzEuMzM0Yy03Ny4wMDUtMzEuMTk4LTEyNi4yOTQtNjYuNzY1LTEyNi43MDMtNjcuMTA3bC0zOS44LTI4LjY3Mi0zOS4xODUgMjguNDY4Yy0yLjA0OCAxLjUwMS00OS45MDMgMzYuMDQ0LTEyNi45MDggNjcuMzFhNDQ3LjQyIDQ0Ny40MiAwIDAgMS0xNDQuNTIgMzEuMzM1bC02NS44NzcgMC45NTZ2Mzc4Ljg4YzAgODcuMDQgNDkuODM0IDE4NC42NjEgMTM3LjAxIDI2Ny44MSAzNy41NDcgMzUuODQgNzkuMjU4IDY2LjM1NSAxMjAuODMzIDg4LjIgNDMuMjggMjIuNzMzIDg0LjI0IDM0LjYxMiAxMTguODUyIDM0LjYxMiAzNC40MDYgMCA3NS43NzYtMTIuMTUyIDExOS42MDMtMzUuMTU4YTU0Ny45NzcgNTQ3Ljk3NyAwIDAgMCAxMjAuMDEzLTg3LjY1NCA1MTUuMjA5IDUxNS4yMDkgMCAwIDAgOTYuMTg4LTEyMi44OGMyNy4xMDItNDkuNTYyIDQwLjgyMy05OC4zMDQgNDAuODIzLTE0NC45OTlsLTAuMTM2LTM0Ny4yMDR6TTUxMC4wOSAxNDMuNDI4bDEuNzA2LTEuMzY1IDEuNzc1IDEuMzY1YzUuODAzIDQuMTY1IDU5LjUyOSA0MS44NDggMTQwLjM1NiA3NC43NTIgNzkuMTkgMzIuMDg2IDE1My42IDM1LjYzNSAxNjcuNjYzIDM2LjA0NWwyLjU5NCAwLjA2OCAwLjIwNSAzMTUuNzM0YzAuMTM3IDY5LjQ5NS00Mi41OTggMTUwLjE4Ni0xMTcuMDc3IDIyMS40NTdDNjQxLjU3IDg1NC4yODkgNTYzLjEzIDg5Ni40NzggNTEyIDg5Ni40NzhjLTIzLjY4OSAwLTU1LjU3LTkuODk5LTg5LjcwMi0yNy43ODVhNDc4LjgyMiA0NzguODIyIDAgMCAxLTEwNS42MDktNzcuMjc4QzI0Mi4yMSA3MjAuMjEzIDE5OS40NzUgNjM5LjUyMiAxOTkuNDc1IDU2OS44OVYyNTQuMjI1bDIuNzMtMC4xMzZjMy4yNzggMCA4Mi42MDQtMS41MDIgMTY3LjY2NC0zNS45NzdhNzM5Ljk0MiA3MzkuOTQyIDAgMCAwIDE0MC4yMi03NC42MTV2LTAuMDY5eiIgIC8+PHBhdGggZD0iTTcxMy4zMTggMzY4LjY0YTMyLjIyMiAzMi4yMjIgMCAwIDAtNDUuMzI5IDBMNDQ5LjE5NSA1ODcuNDM1bC05My4xODQtOTMuMTE2YTMyLjIyMiAzMi4yMjIgMCAwIDAtNDUuMzMgMCAzMi4yMjIgMzIuMjIyIDAgMCAwIDAgNDUuMjZsMTE1Ljg1IDExNS44NWEzMi4yOSAzMi4yOSAwIDAgMCA0NS4zMjggMEw3MTMuMzIgNDEzLjlhMzIuMjIyIDMyLjIyMiAwIDAgMCAwLTQ1LjMzeiIgIC8+PC9zdmc+)](https://github.com/Kentico/.github/blob/main/SUPPORT.md#full-support) [![CI: Build and Test](https://github.com/Kentico/xperience-by-kentico-k13ecommerce/actions/workflows/ci.yml/badge.svg)](https://github.com/Kentico/xperience-by-kentico-k13ecommerce/actions/workflows/ci.yml) -**This integration is currently a Proof of Concept (PoC). For further details, please refer to the [Support](#support) section and the [Kentico Labs](https://github.com/Kentico/.github/blob/main/SUPPORT.md#labs-limited-support) tag associated with this feature.** - | Name | Package | | ------------- |:-------------:| | Kentico.Xperience.K13Ecommerce | [![NuGet Package](https://img.shields.io/nuget/v/Kentico.Xperience.K13Ecommerce.svg)](https://www.nuget.org/packages/Kentico.Xperience.K13Ecommerce) | @@ -43,10 +41,10 @@ is located in [Dancing Goat XbyK example project](./examples/DancingGoat-K13Ecom The integration provides an API with services for implementing the following scenarios: - Listing products based on parameters, product categories, prices and inventory - Actions with shopping cart, changing currency and order creation - - Listing of orders in administration - - Listing of orders for current customer - - Update order - - Listing site order statuses + - Listing of orders in the administration + - Listing of orders on the live site for the current customer + - Updates of existing orders + - Retrieving and listing order statuses - Listing site cultures and currencies - Check [this part of User Guide](./docs/Usage-Guide.md#kx-13-e-commerce-integration-in-xperience-by-kentico) for more specific description @@ -210,8 +208,8 @@ Distributed under the MIT License. See [`LICENSE.md`](./LICENSE.md) for more inf ## Support -This contribution has __Kentico Labs limited support__. +This contribution has __Kentico Labs Full support by 7-day bug-fix policy__. -See [`SUPPORT.md`](https://github.com/Kentico/.github/blob/main/SUPPORT.md#labs-limited-support) for more information. +See [`SUPPORT.md`](https://github.com/Kentico/.github/blob/main/SUPPORT.md) for more information. For any security issues see [`SECURITY.md`](https://github.com/Kentico/.github/blob/main/SECURITY.md). From 73cd03a5e6fefcd870ca4598358e82b2ef4d7c44 Mon Sep 17 00:00:00 2001 From: Martin Kyjac Date: Tue, 23 Jul 2024 15:48:02 +0200 Subject: [PATCH 24/25] Update support policy text --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 928555cf..bfaddc80 100644 --- a/README.md +++ b/README.md @@ -208,7 +208,7 @@ Distributed under the MIT License. See [`LICENSE.md`](./LICENSE.md) for more inf ## Support -This contribution has __Kentico Labs Full support by 7-day bug-fix policy__. +This project has **Full support by 7-day bug-fix policy**. See [`SUPPORT.md`](https://github.com/Kentico/.github/blob/main/SUPPORT.md) for more information. From adb1feac504e598935d21c0099dbe87b2a26655f Mon Sep 17 00:00:00 2001 From: Martin Kyjac Date: Wed, 24 Jul 2024 07:57:54 +0200 Subject: [PATCH 25/25] Update support section --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bfaddc80..bf80a508 100644 --- a/README.md +++ b/README.md @@ -208,7 +208,7 @@ Distributed under the MIT License. See [`LICENSE.md`](./LICENSE.md) for more inf ## Support -This project has **Full support by 7-day bug-fix policy**. +This contribution has __Full Support__. See [`SUPPORT.md`](https://github.com/Kentico/.github/blob/main/SUPPORT.md) for more information.