Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Develop #7

Merged
merged 4 commits into from
Oct 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 0 additions & 9 deletions Apps.Akeneo/Actions/GeneralActions.cs
Original file line number Diff line number Diff line change
@@ -1,18 +1,9 @@
using Apps.Akeneo.Invocables;
using Apps.Akeneo.Models.Entities;
using Apps.Akeneo.Models.Request.Product;
using Apps.Akeneo.Models.Response;
using Apps.Akeneo.Models.Response.Product;
using Blackbird.Applications.Sdk.Common;
using Blackbird.Applications.Sdk.Common.Actions;
using Blackbird.Applications.Sdk.Common.Invocation;
using Blackbird.Applications.SDK.Extensions.FileManagement.Interfaces;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Apps.Akeneo.Actions
{
Expand Down
18 changes: 8 additions & 10 deletions Apps.Akeneo/Actions/ProductActions.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System.Globalization;
using System.Net.Mime;
using Apps.Akeneo.Constants;
using Apps.Akeneo.HtmlConversion;
Expand All @@ -13,11 +12,8 @@
using Blackbird.Applications.Sdk.Common.Invocation;
using Blackbird.Applications.SDK.Extensions.FileManagement.Interfaces;
using Blackbird.Applications.Sdk.Utils.Extensions.Http;
using Blackbird.Applications.Sdk.Utils.Extensions.String;
using Blackbird.Applications.Sdk.Utils.Extensions.System;
using RestSharp;
using Apps.Akeneo.Models.Queries;
using Newtonsoft.Json;

namespace Apps.Akeneo.Actions;

Expand Down Expand Up @@ -85,21 +81,23 @@ public async Task<FileModel> GetProductHtml([ActionParameter] ProductRequest inp
var htmlStream = ProductHtmlConverter.ToHtml(product, locale.Locale);
return new()
{
File = await _fileManagementClient.UploadAsync(htmlStream, MediaTypeNames.Text.Html, $"{product.Uuid}.html")
File = await _fileManagementClient.UploadAsync(htmlStream, MediaTypeNames.Text.Html, $"{product.Id}.html")
};
}

// TODO: We should embed the ID in the HTMl file so that the product input can become optional
[Action("Update product from HTML", Description = "Update product content from HTML file")]
public async Task UpdateProductHtml([ActionParameter] ProductRequest input,
public async Task UpdateProductHtml([ActionParameter] ProductOptionalRequest input,
[ActionParameter] LocaleRequest locale, [ActionParameter] FileModel file)
{
var fileStream = await _fileManagementClient.DownloadAsync(file.File);
var product = await GetProductContent(input.ProductId);
var htmlDoc = ProductHtmlConverter.LoadHtml(fileStream);

var productId = input.ProductId ?? ProductHtmlConverter.GetResourceId(htmlDoc);
var product = await GetProductContent(productId);

var updatedProduct = ProductHtmlConverter.UpdateFromHtml(product, locale.Locale, fileStream);
var updatedProduct = ProductHtmlConverter.UpdateFromHtml(product, locale.Locale, htmlDoc);

var request = new RestRequest($"/products-uuid/{input.ProductId}", Method.Patch)
var request = new RestRequest($"/products-uuid/{productId}", Method.Patch)
.WithJsonBody(new UpdateProductRequest(updatedProduct), JsonConfig.Settings);

await Client.ExecuteWithErrorHandling(request);
Expand Down
20 changes: 8 additions & 12 deletions Apps.Akeneo/Actions/ProductModelActions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,11 @@
using Apps.Akeneo.Models.Queries;
using Apps.Akeneo.Models.Request.Product;
using Apps.Akeneo.Models.Request;
using Apps.Akeneo.Models.Response.Product;
using Blackbird.Applications.Sdk.Common;
using Blackbird.Applications.Sdk.Common.Actions;
using Blackbird.Applications.Sdk.Common.Invocation;
using Blackbird.Applications.SDK.Extensions.FileManagement.Interfaces;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Apps.Akeneo.Models.Request.ProductModel;
using Apps.Akeneo.Models.Response.ProductModel;
using Apps.Akeneo.Constants;
Expand Down Expand Up @@ -87,21 +81,23 @@ public async Task<FileModel> GetProductModelHtml([ActionParameter] ProductModelR
var htmlStream = ProductHtmlConverter.ToHtml(productModel, locale.Locale);
return new()
{
File = await _fileManagementClient.UploadAsync(htmlStream, MediaTypeNames.Text.Html, $"{productModel.Code}.html")
File = await _fileManagementClient.UploadAsync(htmlStream, MediaTypeNames.Text.Html, $"{productModel.Id}.html")
};
}

// TODO: We should embed the ID in the HTMl file so that the product input can become optional
[Action("Update product model from HTML", Description = "Update product model content from HTML file")]
public async Task UpdateProductModelHtml([ActionParameter] ProductModelRequest input,
public async Task UpdateProductModelHtml([ActionParameter] ProductModelOptionalRequest input,
[ActionParameter] LocaleRequest locale, [ActionParameter] FileModel file)
{
var fileStream = await _fileManagementClient.DownloadAsync(file.File);
var productModel = await GetProductModelContent(input.ProductModelCode);
var htmlDoc = ProductHtmlConverter.LoadHtml(fileStream);

var productId = input.ProductModelCode ?? ProductHtmlConverter.GetResourceId(htmlDoc);
var productModel = await GetProductModelContent(productId);

var updatedProduct = ProductHtmlConverter.UpdateFromHtml(productModel, locale.Locale, fileStream);
var updatedProduct = ProductHtmlConverter.UpdateFromHtml(productModel, locale.Locale, htmlDoc);

var request = new RestRequest($"/product-models/{input.ProductModelCode}", Method.Patch)
var request = new RestRequest($"/product-models/{productId}", Method.Patch)
.WithJsonBody(new UpdateProductModelRequest(updatedProduct), JsonConfig.Settings);

await Client.ExecuteWithErrorHandling(request);
Expand Down
2 changes: 1 addition & 1 deletion Apps.Akeneo/Apps.Akeneo.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<Nullable>enable</Nullable>
<Product>Akeneo [Beta]</Product>
<Description>Akaneo’s PIM solution enables you to ingest, normalize, enrich, and centralize product information through enterprise-grade data modeling, governance, and workflows.</Description>
<Version>1.0.6</Version>
<Version>1.0.7</Version>
<AssemblyName>Apps.Akeneo</AssemblyName>
</PropertyGroup>

Expand Down
5 changes: 0 additions & 5 deletions Apps.Akeneo/DataSource/CategoryDataSourceHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,6 @@
using Blackbird.Applications.Sdk.Common.Dynamic;
using Blackbird.Applications.Sdk.Common.Invocation;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Apps.Akeneo.DataSource
{
Expand Down
2 changes: 1 addition & 1 deletion Apps.Akeneo/DataSource/ProductDataSourceHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@ public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext con
}

var result = await Client.PaginateOnce<ProductContentEntity>(request);
return result.ToDictionary(x => x.Uuid, x => x.Values["name"].First(x => x.Locale == "en_US").Data.ToString() ?? "No label for en_US");
return result.ToDictionary(x => x.Id, x => x.Values["name"].First(x => x.Locale == "en_US").Data.ToString() ?? "No label for en_US");
}
}
7 changes: 1 addition & 6 deletions Apps.Akeneo/DataSource/ProductModelDataSourceHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,6 @@
using Blackbird.Applications.Sdk.Common.Dynamic;
using Blackbird.Applications.Sdk.Common.Invocation;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Apps.Akeneo.DataSource
{
Expand All @@ -31,7 +26,7 @@ public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext con
}

var result = await Client.PaginateOnce<ProductModelEntity>(request);
return result.ToDictionary(x => x.Code, x => x.Code);
return result.ToDictionary(x => x.Id, x => x.Id);
}
}
}
6 changes: 6 additions & 0 deletions Apps.Akeneo/HtmlConversion/HtmlConstants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,10 @@ public class HtmlConstants
public const string Paragraph = "p";
public const string Span = "span";
public const string H1 = "h1";
public const string Ul = "ul";
public const string Li = "li";
public const string Table = "table";
public const string Td = "td";
public const string Th = "th";
public const string Tr = "tr";
}
Loading