diff --git a/Apps.Magento/Actions/PageActions.cs b/Apps.Magento/Actions/PageActions.cs index c9ecac9..2ce50f6 100644 --- a/Apps.Magento/Actions/PageActions.cs +++ b/Apps.Magento/Actions/PageActions.cs @@ -87,9 +87,22 @@ public async Task UpdatePageByIdAsync([ActionParameter] PageIdenti page.Active = pageRequest.Active ?? page.Active; var request = new ApiRequest($"/rest/V1/cmsPage/{identifier.PageId}", Method.Put, Creds) - .AddBody(new { page }); - await Client.ExecuteWithErrorHandling(request); + .AddBody(new { page = new + { + id = page.Id, + identifier = page.Identifier, + title = page.Title, + page_layout = page.PageLayout, + meta_title = page.MetaTitle, + meta_keywords = page.MetaKeywords, + meta_description = page.MetaDescription, + content_heading = page.ContentHeading, + content = page.Content, + sort_order = page.SortOrder, + active = page.Active + } }); + await Client.ExecuteWithErrorHandling(request); return await GetPageByIdAsync(identifier); } diff --git a/Apps.Magento/Actions/ProductActions.cs b/Apps.Magento/Actions/ProductActions.cs index ac58806..2d1943b 100644 --- a/Apps.Magento/Actions/ProductActions.cs +++ b/Apps.Magento/Actions/ProductActions.cs @@ -75,6 +75,16 @@ public async Task GetProductBySkuAsHtmlAsync( [Action("Create product", Description = "Create product with specified data")] public async Task CreateProductAsync([ActionParameter] CreateProductRequest createProductRequest) { + var customAttributes = new List(); + if (!string.IsNullOrEmpty(createProductRequest.PriceView)) + { + customAttributes.Add(new + { + attribute_code = "price_view", + value = createProductRequest.PriceView + }); + } + var body = new { product = new @@ -91,7 +101,7 @@ public async Task CreateProductAsync([ActionParameter] CreatePr { category_links = new List() }, - custom_attributes = new List() + custom_attributes = customAttributes } }; diff --git a/Apps.Magento/Models/Requests/Products/CreateProductRequest.cs b/Apps.Magento/Models/Requests/Products/CreateProductRequest.cs index 147cd0e..905aa6b 100644 --- a/Apps.Magento/Models/Requests/Products/CreateProductRequest.cs +++ b/Apps.Magento/Models/Requests/Products/CreateProductRequest.cs @@ -22,4 +22,7 @@ public class CreateProductRequest public string TypeId { get; set; } = string.Empty; public double Weight { get; set; } + + [Display("Price view")] + public string? PriceView { get; set; } } \ No newline at end of file diff --git a/Apps.Magento/Polling/Models/Requests/OnProductsUpdatedRequest.cs b/Apps.Magento/Polling/Models/Requests/OnProductsUpdatedRequest.cs new file mode 100644 index 0000000..85ae0a8 --- /dev/null +++ b/Apps.Magento/Polling/Models/Requests/OnProductsUpdatedRequest.cs @@ -0,0 +1,9 @@ +using Blackbird.Applications.Sdk.Common; + +namespace Apps.Magento.Polling.Models.Requests; + +public class OnProductsUpdatedRequest +{ + [Display("Title", Description = "By setting this parameter, the event will only trigger when the product title contains the specified value")] + public string? Title { get; set; } +} \ No newline at end of file diff --git a/Apps.Magento/Polling/ProductPollingList.cs b/Apps.Magento/Polling/ProductPollingList.cs index ca43c3a..8b0a999 100644 --- a/Apps.Magento/Polling/ProductPollingList.cs +++ b/Apps.Magento/Polling/ProductPollingList.cs @@ -1,9 +1,9 @@ using Apps.Magento.Api; using Apps.Magento.Invocables; -using Apps.Magento.Models.Identifiers; using Apps.Magento.Models.Requests; using Apps.Magento.Models.Responses.Products; using Apps.Magento.Polling.Models; +using Apps.Magento.Polling.Models.Requests; using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Polling; using RestSharp; @@ -16,7 +16,7 @@ public class ProductPollingList(InvocationContext invocationContext) : AppInvoca [PollingEvent("On products created", "Triggered when new products are created")] public async Task> OnProductsCreated( PollingEventRequest request, - [PollingEventParameter] StoreViewOptionalIdentifier storeViewIdentifier) + [PollingEventParameter] OnProductsUpdatedRequest filterRequest) { if (request.Memory is null) { @@ -30,7 +30,7 @@ public async Task> OnProducts }; } - var products = await GetProducts(new BaseFilterRequest { CreatedAt = request.Memory.LastInteractionDate }, storeViewIdentifier.ToString()); + var products = await GetProducts(new BaseFilterRequest { CreatedAt = request.Memory.LastInteractionDate, Title = filterRequest.Title }); return new() { FlyBird = products.Items.Any(), @@ -45,7 +45,7 @@ public async Task> OnProducts [PollingEvent("On products updated", "Triggered when products are updated")] public async Task> OnProductsUpdated( PollingEventRequest request, - [PollingEventParameter] StoreViewOptionalIdentifier storeViewIdentifier) + [PollingEventParameter] OnProductsUpdatedRequest filterRequest) { if (request.Memory is null) { @@ -59,8 +59,7 @@ public async Task> OnProducts }; } - var products = await GetProducts(new BaseFilterRequest { UpdatedAt = request.Memory.LastInteractionDate }, - storeViewIdentifier.ToString()); + var products = await GetProducts(new BaseFilterRequest { UpdatedAt = request.Memory.LastInteractionDate, Title = filterRequest.Title }); products.Items = products.Items.Where(x => x.CreatedAt != x.UpdatedAt).ToList(); return new() @@ -74,10 +73,10 @@ public async Task> OnProducts }; } - private async Task GetProducts(BaseFilterRequest request, string storeView) + private async Task GetProducts(BaseFilterRequest request) { var queryString = BuildQueryString(request); - var requestUrl = $"/rest/{storeView}/V1/products?searchCriteria{queryString}"; + var requestUrl = $"/rest/V1/products?searchCriteria{queryString}"; return await Client.ExecuteWithErrorHandling(new ApiRequest(requestUrl, Method.Get, Creds)); } } \ No newline at end of file