diff --git a/Bimix.API/appsettings.Development.json b/Bimix.API/appsettings.Development.json index 5d472c1..9165130 100644 Binary files a/Bimix.API/appsettings.Development.json and b/Bimix.API/appsettings.Development.json differ diff --git a/Bimix.Application/Bimix.Application.csproj b/Bimix.Application/Bimix.Application.csproj index e6b0ca9..53e54b7 100644 --- a/Bimix.Application/Bimix.Application.csproj +++ b/Bimix.Application/Bimix.Application.csproj @@ -4,6 +4,10 @@ + + + + net8.0 enable diff --git a/Bimix.Domain/Entities/Product.cs b/Bimix.Domain/Entities/Product.cs index 5b70a8e..9e68ae1 100644 --- a/Bimix.Domain/Entities/Product.cs +++ b/Bimix.Domain/Entities/Product.cs @@ -3,4 +3,7 @@ namespace Bimix.Domain.Entities; public class Product : BaseEntity { public required string Name { get; set; } + public string? Code { get; set; } + public string? Ean { get; set; } + public string? StockAddresses { get; set; } } \ No newline at end of file diff --git a/Bimix.Domain/Entities/SyncState.cs b/Bimix.Domain/Entities/SyncState.cs index 0149952..01dd76c 100644 --- a/Bimix.Domain/Entities/SyncState.cs +++ b/Bimix.Domain/Entities/SyncState.cs @@ -2,6 +2,6 @@ namespace Bimix.Domain.Entities; public class SyncState { - public required string Entity { get; set; } + public required string Entity { get; init; } public required long LastSynced { get; set; } // UnixTimestamp } \ No newline at end of file diff --git a/Bimix.Infrastructure/Data/BimixDbContext.cs b/Bimix.Infrastructure/Data/BimixDbContext.cs index dd09f5f..3388c1e 100644 --- a/Bimix.Infrastructure/Data/BimixDbContext.cs +++ b/Bimix.Infrastructure/Data/BimixDbContext.cs @@ -14,6 +14,9 @@ public class BimixDbContext(DbContextOptions options) : DbContex modelBuilder.Entity().HasKey(x => x.Id); modelBuilder.Entity().Property(x => x.Name).IsRequired().HasMaxLength(512); + modelBuilder.Entity().Property(x => x.Code).IsRequired().HasMaxLength(40); + modelBuilder.Entity().Property(x => x.Ean).IsRequired().HasMaxLength(50); + modelBuilder.Entity().Property(x => x.StockAddresses).IsRequired().HasMaxLength(512); modelBuilder.Entity().HasKey((x => x.Entity)); } diff --git a/Bimix.Infrastructure/Migrations/20250624193445_Products-NewFields.Designer.cs b/Bimix.Infrastructure/Migrations/20250624193445_Products-NewFields.Designer.cs new file mode 100644 index 0000000..b03e9e9 --- /dev/null +++ b/Bimix.Infrastructure/Migrations/20250624193445_Products-NewFields.Designer.cs @@ -0,0 +1,80 @@ +// +using System; +using Bimix.Infrastructure.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Bimix.Infrastructure.Migrations +{ + [DbContext(typeof(BimixDbContext))] + [Migration("20250624193445_Products-NewFields")] + partial class ProductsNewFields + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.17") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Bimix.Domain.Entities.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("Ean") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("StockAddresses") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("UpdatedAt") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("Bimix.Domain.Entities.SyncState", b => + { + b.Property("Entity") + .HasColumnType("nvarchar(450)"); + + b.Property("LastSynced") + .HasColumnType("bigint"); + + b.HasKey("Entity"); + + b.ToTable("SyncStates"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Bimix.Infrastructure/Migrations/20250624193445_Products-NewFields.cs b/Bimix.Infrastructure/Migrations/20250624193445_Products-NewFields.cs new file mode 100644 index 0000000..8cb9efd --- /dev/null +++ b/Bimix.Infrastructure/Migrations/20250624193445_Products-NewFields.cs @@ -0,0 +1,54 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Bimix.Infrastructure.Migrations +{ + /// + public partial class ProductsNewFields : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "Code", + table: "Products", + type: "nvarchar(40)", + maxLength: 40, + nullable: false, + defaultValue: ""); + + migrationBuilder.AddColumn( + name: "Ean", + table: "Products", + type: "nvarchar(50)", + maxLength: 50, + nullable: false, + defaultValue: ""); + + migrationBuilder.AddColumn( + name: "StockAddresses", + table: "Products", + type: "nvarchar(512)", + maxLength: 512, + nullable: false, + defaultValue: ""); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Code", + table: "Products"); + + migrationBuilder.DropColumn( + name: "Ean", + table: "Products"); + + migrationBuilder.DropColumn( + name: "StockAddresses", + table: "Products"); + } + } +} diff --git a/Bimix.Infrastructure/Migrations/BimixDbContextModelSnapshot.cs b/Bimix.Infrastructure/Migrations/BimixDbContextModelSnapshot.cs index e7b2441..d4a21e3 100644 --- a/Bimix.Infrastructure/Migrations/BimixDbContextModelSnapshot.cs +++ b/Bimix.Infrastructure/Migrations/BimixDbContextModelSnapshot.cs @@ -28,14 +28,29 @@ namespace Bimix.Infrastructure.Migrations .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); + b.Property("Code") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)"); + b.Property("CreatedAt") .HasColumnType("datetime2"); + b.Property("Ean") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + b.Property("Name") .IsRequired() .HasMaxLength(512) .HasColumnType("nvarchar(512)"); + b.Property("StockAddresses") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + b.Property("UpdatedAt") .HasColumnType("datetime2"); diff --git a/Bimix.Infrastructure/Sync/ProductSyncService.cs b/Bimix.Infrastructure/Sync/ProductSyncService.cs index 6afa9ac..3681c99 100644 --- a/Bimix.Infrastructure/Sync/ProductSyncService.cs +++ b/Bimix.Infrastructure/Sync/ProductSyncService.cs @@ -1,3 +1,4 @@ +using System.Reflection.Metadata.Ecma335; using System.Text.Json; using Bimix.Domain.Entities; using Bimix.Infrastructure.Data; @@ -28,6 +29,9 @@ public class ProductSyncService(HttpClient httpClient, BimixDbContext db, IConfi { var idStr = p.GetProperty("id").GetString() ?? ""; var name = p.GetProperty("name").GetString() ?? ""; + var code = p.GetProperty("code").GetString() ?? ""; + var stockAddresses = p.GetProperty("stock_addresses").GetString() ?? ""; + var ean = p.GetProperty("ean").GetString() ?? ""; if (!Guid.TryParse(idStr, out Guid id)) { @@ -43,6 +47,9 @@ public class ProductSyncService(HttpClient httpClient, BimixDbContext db, IConfi { Id = id, Name = name, + Ean = ean, + Code = code, + StockAddresses = stockAddresses, CreatedAt = DateTime.UtcNow, UpdatedAt = DateTime.UtcNow };