I registered my service using an interface that is located in my own plugin project.
Controller
namespace Nop.Plugin.Widgets.Samurai.Controller
{
[Authorize]
public class SamuraiDataBaseMigrationController : BasePluginController
{
private readonly SamuraiDataService _service;
public SamuraiDataBaseMigrationController(SamuraiDataService service)
{
_service = service;
}
[HttpPost]
public ActionResult AdicionarAoMigrate([FromBody] ProductInfoModel data)
{
_service.ArmazenarDados(data.ProductName, data.ProductPrice);
return Json(new { success = true, message = "Informações do produto migradas com sucesso!" });
}
}
}
Migration
public class SamuraiMigration : AutoReversingMigration
{
public override void Up()
{
if (!DataSettingsManager.IsDatabaseInstalled())
return;
//Cria a tabela com o nome ProductInfo e adiciona duas colunas, uma sendo do nome do produto e outra para preços
Create.Table("ProductsInfo")
.WithColumn("ProductName").AsString(256).NotNullable()
.WithColumn("ProductPrice").AsDecimal().NotNullable();
}
}
Service
namespace Nop.Plugin.Widgets.Samurai.Services
{
public interface ISamuraiDataService
{
void ArmazenarDados(string productname, float productprice);
}
public class SamuraiDataService : ISamuraiDataService
{
private readonly IDataContext _dataContext;
public SamuraiDataService(IDataContext dataContext)
{
_dataContext = dataContext;
}
public void ArmazenarDados(string productname, float productprice)
{
var newRegister = new ProductInfoModel
{
ProductName = productname,
ProductPrice = productprice
};
_dataContext.Insert(newRegister);
}
}
}
NopServices
namespace Nop.Plugin.Widgets.Samurai.Infrastructure
{
public class NopStartup : INopStartup
{
public int Order => 2000;
public void ConfigureServices(IServiceCollection services, IConfiguration configuration)
{
services.AddScoped<SamuraiMigration>();
services.AddScoped<SamuraiDataBaseMigrationController>();
services.AddScoped<SamuraiDataService>();
}
public void Configure(IApplicationBuilder application)
{
//nothing
}
}
}
Ajax Request
<div class="add-to-migrate-button">
<button class="add-to-migrate" id="add-to-migrate" type="button">ADD TO BASE</button>
</div>
<script>
$(document).ready(function () {
$("#add-to-migrate").click(function () {
var ProductName = $(".product-name").text();
var ProductPrice = parseFloat($(".product-price").text().replace(/[^\d.-]/g, ''));
console.log("URL:", '@Url.RouteUrl("AdicionarAoMigrate")');
armazenarDadosNoBanco(ProductName, ProductPrice);
});
function armazenarDadosNoBanco(ProductName, ProductPrice) {
$.ajax({
url: '@Url.RouteUrl("AdicionarAoMigrate")',
cache: false,
type: "POST",
dataType: "json",
contentType: "application/json",
data: JSON.stringify({
ProductName: ProductName,
ProductPrice: ProductPrice
}),
success: function (data) {
console.info("Successful data migration")
},
error: function (xhr, status, error) {
console.error("AJAX request error:", error);
console.error("Status:", status);
console.error("Response:", xhr.responseText);
}
});
}
});
</script>
}