From 993a9b3357b0b80213e71bac58c34b592a9487f0 Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Wed, 15 Jul 2026 19:31:01 -0500 Subject: [PATCH 1/6] created customers model --- barkmanAPI/barkDbModel.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/barkmanAPI/barkDbModel.cs b/barkmanAPI/barkDbModel.cs index aac0a20..bdbb7cb 100644 --- a/barkmanAPI/barkDbModel.cs +++ b/barkmanAPI/barkDbModel.cs @@ -28,4 +28,16 @@ public class ItemStatus { public string Id { get; set; } public string Name { get; set; } +} + +public class Customers +{ + public int Id { get; set; } + public required string Name { get; set; } + public string? Company { get; set; } + public required string Email { get; set; } + public required string PhoneNumber { get; set; } + public string? Address { get; set; } + public string? BillingTerms { get; set; } + public string? Notes { get; set; } } \ No newline at end of file From a2bf58cf852c2ed2f26346ddc5291974cc38ff22 Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Wed, 15 Jul 2026 19:33:26 -0500 Subject: [PATCH 2/6] added required keywords to align with new standards --- barkmanAPI/barkDbModel.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/barkmanAPI/barkDbModel.cs b/barkmanAPI/barkDbModel.cs index bdbb7cb..214d277 100644 --- a/barkmanAPI/barkDbModel.cs +++ b/barkmanAPI/barkDbModel.cs @@ -12,11 +12,11 @@ public class BarkContext(DbContextOptions options) : DbContext(opti public class InventoryItems { public int Id {get; set;} - public string Barcode {get; set;} - public string Name { get; set; } - public string Brand { get; set; } + public required string Barcode {get; set;} + public required string Name { get; set; } + public required string Brand { get; set; } public string? SerialNumber { get; set; } - public ItemStatus Status { get; set; } + public required ItemStatus Status { get; set; } public string? StatusId { get; set; } public float? Weight { get; set; } public float? RentalPrice { get; set; } @@ -26,8 +26,8 @@ public class InventoryItems public class ItemStatus { - public string Id { get; set; } - public string Name { get; set; } + public required string Id { get; set; } + public required string Name { get; set; } } public class Customers From 791737a28d1bda9c0b36b5bed6fd1082e5bfc4f4 Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Wed, 15 Jul 2026 19:35:02 -0500 Subject: [PATCH 3/6] added customers model to context --- barkmanAPI/barkDbModel.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/barkmanAPI/barkDbModel.cs b/barkmanAPI/barkDbModel.cs index 214d277..e32cff0 100644 --- a/barkmanAPI/barkDbModel.cs +++ b/barkmanAPI/barkDbModel.cs @@ -6,6 +6,7 @@ public class BarkContext(DbContextOptions options) : DbContext(opti { public DbSet Inventory { get; set; } public DbSet ItemStatus { get; set; } + public DbSet Customers { get; set; } } [Index(nameof(Barcode), IsUnique = true)] From 188102fe4ab4fee0cfeb041d96f2cfef33fc0643 Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Wed, 15 Jul 2026 19:41:26 -0500 Subject: [PATCH 4/6] removed required keywords. will address at a later time. --- barkmanAPI/barkDbModel.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/barkmanAPI/barkDbModel.cs b/barkmanAPI/barkDbModel.cs index e32cff0..2dd528b 100644 --- a/barkmanAPI/barkDbModel.cs +++ b/barkmanAPI/barkDbModel.cs @@ -13,11 +13,11 @@ public class BarkContext(DbContextOptions options) : DbContext(opti public class InventoryItems { public int Id {get; set;} - public required string Barcode {get; set;} - public required string Name { get; set; } - public required string Brand { get; set; } + public string Barcode {get; set;} + public string Name { get; set; } + public string Brand { get; set; } public string? SerialNumber { get; set; } - public required ItemStatus Status { get; set; } + public ItemStatus Status { get; set; } public string? StatusId { get; set; } public float? Weight { get; set; } public float? RentalPrice { get; set; } @@ -27,8 +27,8 @@ public class InventoryItems public class ItemStatus { - public required string Id { get; set; } - public required string Name { get; set; } + public string Id { get; set; } + public string Name { get; set; } } public class Customers From 92788701d4b47999006c9f1f27d2627b1105657a Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Wed, 15 Jul 2026 19:41:54 -0500 Subject: [PATCH 5/6] db migration --- .../Migrations/BarkContextModelSnapshot.cs | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs index 15f4585..0929965 100644 --- a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs +++ b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs @@ -21,6 +21,52 @@ namespace barkmanapi.Migrations NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + modelBuilder.Entity("barkmanapi.Customers", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .HasColumnType("text") + .HasColumnName("address"); + + b.Property("BillingTerms") + .HasColumnType("text") + .HasColumnName("billing_terms"); + + b.Property("Company") + .HasColumnType("text") + .HasColumnName("company"); + + b.Property("Email") + .IsRequired() + .HasColumnType("text") + .HasColumnName("email"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Notes") + .HasColumnType("text") + .HasColumnName("notes"); + + b.Property("PhoneNumber") + .IsRequired() + .HasColumnType("text") + .HasColumnName("phone_number"); + + b.HasKey("Id") + .HasName("pk_customers"); + + b.ToTable("customers", (string)null); + }); + modelBuilder.Entity("barkmanapi.InventoryItems", b => { b.Property("Id") From 3c707744fccd7aa90502fb62f14e7d6d278b30dc Mon Sep 17 00:00:00 2001 From: Drew Rautenberg Date: Wed, 15 Jul 2026 20:26:25 -0500 Subject: [PATCH 6/6] made phone optional in customers model --- ...0260716004134_AddCustomerModel.Designer.cs | 163 ++++++++++++++++++ .../20260716004134_AddCustomerModel.cs | 41 +++++ ...0260716012558_customerPhoneOpt.Designer.cs | 162 +++++++++++++++++ .../20260716012558_customerPhoneOpt.cs | 36 ++++ .../Migrations/BarkContextModelSnapshot.cs | 1 - barkmanAPI/barkDbModel.cs | 2 +- 6 files changed, 403 insertions(+), 2 deletions(-) create mode 100644 barkmanAPI/Migrations/20260716004134_AddCustomerModel.Designer.cs create mode 100644 barkmanAPI/Migrations/20260716004134_AddCustomerModel.cs create mode 100644 barkmanAPI/Migrations/20260716012558_customerPhoneOpt.Designer.cs create mode 100644 barkmanAPI/Migrations/20260716012558_customerPhoneOpt.cs diff --git a/barkmanAPI/Migrations/20260716004134_AddCustomerModel.Designer.cs b/barkmanAPI/Migrations/20260716004134_AddCustomerModel.Designer.cs new file mode 100644 index 0000000..e499368 --- /dev/null +++ b/barkmanAPI/Migrations/20260716004134_AddCustomerModel.Designer.cs @@ -0,0 +1,163 @@ +// +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("20260716004134_AddCustomerModel")] + partial class AddCustomerModel + { + /// + 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.Customers", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .HasColumnType("text") + .HasColumnName("address"); + + b.Property("BillingTerms") + .HasColumnType("text") + .HasColumnName("billing_terms"); + + b.Property("Company") + .HasColumnType("text") + .HasColumnName("company"); + + b.Property("Email") + .IsRequired() + .HasColumnType("text") + .HasColumnName("email"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Notes") + .HasColumnType("text") + .HasColumnName("notes"); + + b.Property("PhoneNumber") + .IsRequired() + .HasColumnType("text") + .HasColumnName("phone_number"); + + b.HasKey("Id") + .HasName("pk_customers"); + + b.ToTable("customers", (string)null); + }); + + 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/20260716004134_AddCustomerModel.cs b/barkmanAPI/Migrations/20260716004134_AddCustomerModel.cs new file mode 100644 index 0000000..c77df68 --- /dev/null +++ b/barkmanAPI/Migrations/20260716004134_AddCustomerModel.cs @@ -0,0 +1,41 @@ +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace barkmanapi.Migrations +{ + /// + public partial class AddCustomerModel : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "customers", + columns: table => new + { + id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + name = table.Column(type: "text", nullable: false), + company = table.Column(type: "text", nullable: true), + email = table.Column(type: "text", nullable: false), + phone_number = table.Column(type: "text", nullable: false), + address = table.Column(type: "text", nullable: true), + billing_terms = table.Column(type: "text", nullable: true), + notes = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_customers", x => x.id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "customers"); + } + } +} diff --git a/barkmanAPI/Migrations/20260716012558_customerPhoneOpt.Designer.cs b/barkmanAPI/Migrations/20260716012558_customerPhoneOpt.Designer.cs new file mode 100644 index 0000000..8fe82f1 --- /dev/null +++ b/barkmanAPI/Migrations/20260716012558_customerPhoneOpt.Designer.cs @@ -0,0 +1,162 @@ +// +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("20260716012558_customerPhoneOpt")] + partial class customerPhoneOpt + { + /// + 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.Customers", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .HasColumnType("text") + .HasColumnName("address"); + + b.Property("BillingTerms") + .HasColumnType("text") + .HasColumnName("billing_terms"); + + b.Property("Company") + .HasColumnType("text") + .HasColumnName("company"); + + b.Property("Email") + .IsRequired() + .HasColumnType("text") + .HasColumnName("email"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Notes") + .HasColumnType("text") + .HasColumnName("notes"); + + b.Property("PhoneNumber") + .HasColumnType("text") + .HasColumnName("phone_number"); + + b.HasKey("Id") + .HasName("pk_customers"); + + b.ToTable("customers", (string)null); + }); + + 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/20260716012558_customerPhoneOpt.cs b/barkmanAPI/Migrations/20260716012558_customerPhoneOpt.cs new file mode 100644 index 0000000..db55c27 --- /dev/null +++ b/barkmanAPI/Migrations/20260716012558_customerPhoneOpt.cs @@ -0,0 +1,36 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace barkmanapi.Migrations +{ + /// + public partial class customerPhoneOpt : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "phone_number", + table: "customers", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "text"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "phone_number", + table: "customers", + type: "text", + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + } + } +} diff --git a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs index 0929965..c59a956 100644 --- a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs +++ b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs @@ -57,7 +57,6 @@ namespace barkmanapi.Migrations .HasColumnName("notes"); b.Property("PhoneNumber") - .IsRequired() .HasColumnType("text") .HasColumnName("phone_number"); diff --git a/barkmanAPI/barkDbModel.cs b/barkmanAPI/barkDbModel.cs index 2dd528b..479bca8 100644 --- a/barkmanAPI/barkDbModel.cs +++ b/barkmanAPI/barkDbModel.cs @@ -37,7 +37,7 @@ public class Customers public required string Name { get; set; } public string? Company { get; set; } public required string Email { get; set; } - public required string PhoneNumber { get; set; } + public string? PhoneNumber { get; set; } public string? Address { get; set; } public string? BillingTerms { get; set; } public string? Notes { get; set; }