From f77f9fb9eaf6f08e4dc3480a6f6d2bdf9b2167c1 Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Wed, 10 Jun 2026 20:03:07 -0500 Subject: [PATCH] added unique check for barcode --- .../20260611002716_barcodestring.Designer.cs | 113 +++++++++++++++++ .../20260611002716_barcodestring.cs | 34 +++++ ...20260611005912_barcodeisunique.Designer.cs | 117 ++++++++++++++++++ .../20260611005912_barcodeisunique.cs | 28 +++++ .../Migrations/BarkContextModelSnapshot.cs | 9 +- barkmanAPI/barkDbModel.cs | 3 +- 6 files changed, 301 insertions(+), 3 deletions(-) create mode 100644 barkmanAPI/Migrations/20260611002716_barcodestring.Designer.cs create mode 100644 barkmanAPI/Migrations/20260611002716_barcodestring.cs create mode 100644 barkmanAPI/Migrations/20260611005912_barcodeisunique.Designer.cs create mode 100644 barkmanAPI/Migrations/20260611005912_barcodeisunique.cs diff --git a/barkmanAPI/Migrations/20260611002716_barcodestring.Designer.cs b/barkmanAPI/Migrations/20260611002716_barcodestring.Designer.cs new file mode 100644 index 0000000..bfa084a --- /dev/null +++ b/barkmanAPI/Migrations/20260611002716_barcodestring.Designer.cs @@ -0,0 +1,113 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using barkmanapi; + +#nullable disable + +namespace barkmanapi.Migrations +{ + [DbContext(typeof(BarkContext))] + [Migration("20260611002716_barcodestring")] + partial class barcodestring + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.1") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("barkmanapi.InventoryItems", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Barcode") + .IsRequired() + .HasColumnType("text") + .HasColumnName("barcode"); + + b.Property("Brand") + .IsRequired() + .HasColumnType("text") + .HasColumnName("brand"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Notes") + .HasColumnType("text") + .HasColumnName("notes"); + + b.Property("RentalPrice") + .HasColumnType("real") + .HasColumnName("rental_price"); + + b.Property("ReplacementCost") + .HasColumnType("real") + .HasColumnName("replacement_cost"); + + b.Property("SerialNumber") + .HasColumnType("text") + .HasColumnName("serial_number"); + + b.Property("StatusId") + .HasColumnType("text") + .HasColumnName("status_id"); + + b.Property("Weight") + .HasColumnType("real") + .HasColumnName("weight"); + + b.HasKey("Id") + .HasName("pk_inventory"); + + b.HasIndex("StatusId") + .HasDatabaseName("ix_inventory_status_id"); + + b.ToTable("inventory", (string)null); + }); + + modelBuilder.Entity("barkmanapi.ItemStatus", b => + { + b.Property("Id") + .HasColumnType("text") + .HasColumnName("id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("pk_item_status"); + + b.ToTable("item_status", (string)null); + }); + + modelBuilder.Entity("barkmanapi.InventoryItems", b => + { + b.HasOne("barkmanapi.ItemStatus", "Status") + .WithMany() + .HasForeignKey("StatusId") + .HasConstraintName("fk_inventory_item_status_status_id"); + + b.Navigation("Status"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/barkmanAPI/Migrations/20260611002716_barcodestring.cs b/barkmanAPI/Migrations/20260611002716_barcodestring.cs new file mode 100644 index 0000000..ac51ff5 --- /dev/null +++ b/barkmanAPI/Migrations/20260611002716_barcodestring.cs @@ -0,0 +1,34 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace barkmanapi.Migrations +{ + /// + public partial class barcodestring : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "barcode", + table: "inventory", + type: "text", + nullable: false, + oldClrType: typeof(int), + oldType: "integer"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "barcode", + table: "inventory", + type: "integer", + nullable: false, + oldClrType: typeof(string), + oldType: "text"); + } + } +} diff --git a/barkmanAPI/Migrations/20260611005912_barcodeisunique.Designer.cs b/barkmanAPI/Migrations/20260611005912_barcodeisunique.Designer.cs new file mode 100644 index 0000000..076d7ff --- /dev/null +++ b/barkmanAPI/Migrations/20260611005912_barcodeisunique.Designer.cs @@ -0,0 +1,117 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using barkmanapi; + +#nullable disable + +namespace barkmanapi.Migrations +{ + [DbContext(typeof(BarkContext))] + [Migration("20260611005912_barcodeisunique")] + partial class barcodeisunique + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.1") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("barkmanapi.InventoryItems", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Barcode") + .IsRequired() + .HasColumnType("text") + .HasColumnName("barcode"); + + b.Property("Brand") + .IsRequired() + .HasColumnType("text") + .HasColumnName("brand"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Notes") + .HasColumnType("text") + .HasColumnName("notes"); + + b.Property("RentalPrice") + .HasColumnType("real") + .HasColumnName("rental_price"); + + b.Property("ReplacementCost") + .HasColumnType("real") + .HasColumnName("replacement_cost"); + + b.Property("SerialNumber") + .HasColumnType("text") + .HasColumnName("serial_number"); + + b.Property("StatusId") + .HasColumnType("text") + .HasColumnName("status_id"); + + b.Property("Weight") + .HasColumnType("real") + .HasColumnName("weight"); + + b.HasKey("Id") + .HasName("pk_inventory"); + + b.HasIndex("Barcode") + .IsUnique() + .HasDatabaseName("ix_inventory_barcode"); + + b.HasIndex("StatusId") + .HasDatabaseName("ix_inventory_status_id"); + + b.ToTable("inventory", (string)null); + }); + + modelBuilder.Entity("barkmanapi.ItemStatus", b => + { + b.Property("Id") + .HasColumnType("text") + .HasColumnName("id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("pk_item_status"); + + b.ToTable("item_status", (string)null); + }); + + modelBuilder.Entity("barkmanapi.InventoryItems", b => + { + b.HasOne("barkmanapi.ItemStatus", "Status") + .WithMany() + .HasForeignKey("StatusId") + .HasConstraintName("fk_inventory_item_status_status_id"); + + b.Navigation("Status"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/barkmanAPI/Migrations/20260611005912_barcodeisunique.cs b/barkmanAPI/Migrations/20260611005912_barcodeisunique.cs new file mode 100644 index 0000000..bd92898 --- /dev/null +++ b/barkmanAPI/Migrations/20260611005912_barcodeisunique.cs @@ -0,0 +1,28 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace barkmanapi.Migrations +{ + /// + public partial class barcodeisunique : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateIndex( + name: "ix_inventory_barcode", + table: "inventory", + column: "barcode", + unique: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "ix_inventory_barcode", + table: "inventory"); + } + } +} diff --git a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs index d3f1dee..15f4585 100644 --- a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs +++ b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs @@ -30,8 +30,9 @@ namespace barkmanapi.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - b.Property("Barcode") - .HasColumnType("integer") + b.Property("Barcode") + .IsRequired() + .HasColumnType("text") .HasColumnName("barcode"); b.Property("Brand") @@ -71,6 +72,10 @@ namespace barkmanapi.Migrations b.HasKey("Id") .HasName("pk_inventory"); + b.HasIndex("Barcode") + .IsUnique() + .HasDatabaseName("ix_inventory_barcode"); + b.HasIndex("StatusId") .HasDatabaseName("ix_inventory_status_id"); diff --git a/barkmanAPI/barkDbModel.cs b/barkmanAPI/barkDbModel.cs index 1decfb8..aac0a20 100644 --- a/barkmanAPI/barkDbModel.cs +++ b/barkmanAPI/barkDbModel.cs @@ -8,10 +8,11 @@ public class BarkContext(DbContextOptions options) : DbContext(opti public DbSet ItemStatus { get; set; } } +[Index(nameof(Barcode), IsUnique = true)] public class InventoryItems { public int Id {get; set;} - public int Barcode {get; set;} + public string Barcode {get; set;} public string Name { get; set; } public string Brand { get; set; } public string? SerialNumber { get; set; }