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; }