From 518eff0ec7c85031d546dfad8029e452bd57fc78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zieli=C5=84ski?= Date: Sat, 28 Jun 2025 18:54:08 +0100 Subject: [PATCH] Import products --- Bimix.API/appsettings.Development.json | Bin 408 -> 593 bytes Bimix.Application/Bimix.Application.csproj | 4 + Bimix.Domain/Entities/Product.cs | 3 + Bimix.Domain/Entities/SyncState.cs | 2 +- Bimix.Infrastructure/Data/BimixDbContext.cs | 3 + ...50624193445_Products-NewFields.Designer.cs | 80 ++++++++++++++++++ .../20250624193445_Products-NewFields.cs | 54 ++++++++++++ .../Migrations/BimixDbContextModelSnapshot.cs | 15 ++++ .../Sync/ProductSyncService.cs | 7 ++ 9 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 Bimix.Infrastructure/Migrations/20250624193445_Products-NewFields.Designer.cs create mode 100644 Bimix.Infrastructure/Migrations/20250624193445_Products-NewFields.cs diff --git a/Bimix.API/appsettings.Development.json b/Bimix.API/appsettings.Development.json index 5d472c11911b974f959b2de87c6a005ebfff6070..9165130ff423cd7193083094c902d2fed586d3f0 100644 GIT binary patch literal 593 zcmV-X0H@&F9r$HyDHw{5ZP}S6u zc1!BmTM=`(M*IQevH%4EO`DX)AP<`hjyn9s1c-8laA*9a!FOmaR*Q}k`1pT3?)sH> z_2pJqVaxoNh!Ll;ON?Z(c!e4%KF=yr_{p)=aj|tmokxDNWc&C@mClS8#zhe!RiKL* zt5Fp>Z%j(3=n(sx=oxBIZAp;?T3>Lfj95957&$C$;=QbwTq0V)gixQMVT)!3qnE(W zKVTp|98Cn_y=EXcDlSN&NT$j$e->Pt;5Ca|qU(*`9Jjhu^eaLh4sU*Knp=y-7PLIZ z6s=px1@QyxI+ziAy)r5F?x3`_SXIFgQt8xPC!`LU@>;rlk@sMjS3sZ;G%|M<$T}GI zK3D-YmCPI_i*+f2;vbr&&9Yvp%vYAAZM=O#~DK-sm{{E*zok1Sn!=o(j~0dF3j5c>YtYMfGB7e90#oD z+ZC`g?Tj$Z^4hbVT;rR!u?jPX(juTmx`bo^;9~9vT*+g14QnTceLi+k8Yq`&$++8f f#{2KfS)TwT)G#GCkk@9Cj3t!hUJ*n^;xUI}al9Vk literal 408 zcmV;J0cZXIM@dveQdv+`05$o+@}RFloOt*^nrMe03DUG8$`r?df1gA#T?tGD7q8=x z_uf#P1`J}T{9+{m_-e(}H&>yok!7B6D|iS#{IFGQIt zEDeH?Sg)xFoTxVI8hJ?KyA@q;W4f>Jz(!pjp?`7F@kM4oOu$+CCc~zDo*&*M4t=Ld z0%jhHQa;3a$k%7qgT_)sKqKeG)19?fQa`>H#(TQ3K|3WqfPxOZZ@@v^_m;R@2Wn69 zMd~N+8RI|}YfH2ENXWQ3rHRK~^4pzFe`{x~aINlcMqda)C97tN`!CECt2C)~J)qPf z-Rg?gld9x_hiB0BbT&u;8Y+9i43k8+>G1%2>o|;LOWS=PHpB-|EBTP$AbTba zjUk8Ey-?626#WF6WccBm^#1F&HaP#&w#gxVXO|jDPgb4-^V(W57pm;BO)hNImjTX_ CN6eD| 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 };