Compare commits

...

7 Commits

Author SHA1 Message Date
Drew Rautenberg f1f1f17d72 Merge pull request #36 from BarkProductions/34-add-customer-data-model
34 add customer data model
2026-07-15 20:27:03 -05:00
drew 3c707744fc made phone optional in customers model 2026-07-15 20:26:25 -05:00
drew 92788701d4 db migration 2026-07-15 19:41:54 -05:00
drew 188102fe4a removed required keywords. will address at a later time. 2026-07-15 19:41:26 -05:00
drew 791737a28d added customers model to context 2026-07-15 19:35:02 -05:00
drew a2bf58cf85 added required keywords to align with new standards 2026-07-15 19:33:26 -05:00
drew 993a9b3357 created customers model 2026-07-15 19:31:01 -05:00
6 changed files with 461 additions and 1 deletions
@@ -0,0 +1,163 @@
// <auto-generated />
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
{
/// <inheritdoc />
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<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasColumnName("id");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Address")
.HasColumnType("text")
.HasColumnName("address");
b.Property<string>("BillingTerms")
.HasColumnType("text")
.HasColumnName("billing_terms");
b.Property<string>("Company")
.HasColumnType("text")
.HasColumnName("company");
b.Property<string>("Email")
.IsRequired()
.HasColumnType("text")
.HasColumnName("email");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text")
.HasColumnName("name");
b.Property<string>("Notes")
.HasColumnType("text")
.HasColumnName("notes");
b.Property<string>("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<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasColumnName("id");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Barcode")
.IsRequired()
.HasColumnType("text")
.HasColumnName("barcode");
b.Property<string>("Brand")
.IsRequired()
.HasColumnType("text")
.HasColumnName("brand");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text")
.HasColumnName("name");
b.Property<string>("Notes")
.HasColumnType("text")
.HasColumnName("notes");
b.Property<float?>("RentalPrice")
.HasColumnType("real")
.HasColumnName("rental_price");
b.Property<float?>("ReplacementCost")
.HasColumnType("real")
.HasColumnName("replacement_cost");
b.Property<string>("SerialNumber")
.HasColumnType("text")
.HasColumnName("serial_number");
b.Property<string>("StatusId")
.HasColumnType("text")
.HasColumnName("status_id");
b.Property<float?>("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<string>("Id")
.HasColumnType("text")
.HasColumnName("id");
b.Property<string>("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
}
}
}
@@ -0,0 +1,41 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace barkmanapi.Migrations
{
/// <inheritdoc />
public partial class AddCustomerModel : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "customers",
columns: table => new
{
id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
name = table.Column<string>(type: "text", nullable: false),
company = table.Column<string>(type: "text", nullable: true),
email = table.Column<string>(type: "text", nullable: false),
phone_number = table.Column<string>(type: "text", nullable: false),
address = table.Column<string>(type: "text", nullable: true),
billing_terms = table.Column<string>(type: "text", nullable: true),
notes = table.Column<string>(type: "text", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_customers", x => x.id);
});
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "customers");
}
}
}
@@ -0,0 +1,162 @@
// <auto-generated />
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
{
/// <inheritdoc />
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<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasColumnName("id");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Address")
.HasColumnType("text")
.HasColumnName("address");
b.Property<string>("BillingTerms")
.HasColumnType("text")
.HasColumnName("billing_terms");
b.Property<string>("Company")
.HasColumnType("text")
.HasColumnName("company");
b.Property<string>("Email")
.IsRequired()
.HasColumnType("text")
.HasColumnName("email");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text")
.HasColumnName("name");
b.Property<string>("Notes")
.HasColumnType("text")
.HasColumnName("notes");
b.Property<string>("PhoneNumber")
.HasColumnType("text")
.HasColumnName("phone_number");
b.HasKey("Id")
.HasName("pk_customers");
b.ToTable("customers", (string)null);
});
modelBuilder.Entity("barkmanapi.InventoryItems", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasColumnName("id");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Barcode")
.IsRequired()
.HasColumnType("text")
.HasColumnName("barcode");
b.Property<string>("Brand")
.IsRequired()
.HasColumnType("text")
.HasColumnName("brand");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text")
.HasColumnName("name");
b.Property<string>("Notes")
.HasColumnType("text")
.HasColumnName("notes");
b.Property<float?>("RentalPrice")
.HasColumnType("real")
.HasColumnName("rental_price");
b.Property<float?>("ReplacementCost")
.HasColumnType("real")
.HasColumnName("replacement_cost");
b.Property<string>("SerialNumber")
.HasColumnType("text")
.HasColumnName("serial_number");
b.Property<string>("StatusId")
.HasColumnType("text")
.HasColumnName("status_id");
b.Property<float?>("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<string>("Id")
.HasColumnType("text")
.HasColumnName("id");
b.Property<string>("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
}
}
}
@@ -0,0 +1,36 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace barkmanapi.Migrations
{
/// <inheritdoc />
public partial class customerPhoneOpt : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "phone_number",
table: "customers",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "phone_number",
table: "customers",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
}
}
}
@@ -21,6 +21,51 @@ namespace barkmanapi.Migrations
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("barkmanapi.Customers", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasColumnName("id");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Address")
.HasColumnType("text")
.HasColumnName("address");
b.Property<string>("BillingTerms")
.HasColumnType("text")
.HasColumnName("billing_terms");
b.Property<string>("Company")
.HasColumnType("text")
.HasColumnName("company");
b.Property<string>("Email")
.IsRequired()
.HasColumnType("text")
.HasColumnName("email");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text")
.HasColumnName("name");
b.Property<string>("Notes")
.HasColumnType("text")
.HasColumnName("notes");
b.Property<string>("PhoneNumber")
.HasColumnType("text")
.HasColumnName("phone_number");
b.HasKey("Id")
.HasName("pk_customers");
b.ToTable("customers", (string)null);
});
modelBuilder.Entity("barkmanapi.InventoryItems", b => modelBuilder.Entity("barkmanapi.InventoryItems", b =>
{ {
b.Property<int>("Id") b.Property<int>("Id")
+14 -1
View File
@@ -6,6 +6,7 @@ public class BarkContext(DbContextOptions<BarkContext> options) : DbContext(opti
{ {
public DbSet<InventoryItems> Inventory { get; set; } public DbSet<InventoryItems> Inventory { get; set; }
public DbSet<ItemStatus> ItemStatus { get; set; } public DbSet<ItemStatus> ItemStatus { get; set; }
public DbSet<Customers> Customers { get; set; }
} }
[Index(nameof(Barcode), IsUnique = true)] [Index(nameof(Barcode), IsUnique = true)]
@@ -16,7 +17,7 @@ public class InventoryItems
public string Name { get; set; } public string Name { get; set; }
public string Brand { get; set; } public string Brand { get; set; }
public string? SerialNumber { get; set; } public string? SerialNumber { get; set; }
public ItemStatus Status { get; set; } public ItemStatus Status { get; set; }
public string? StatusId { get; set; } public string? StatusId { get; set; }
public float? Weight { get; set; } public float? Weight { get; set; }
public float? RentalPrice { get; set; } public float? RentalPrice { get; set; }
@@ -29,3 +30,15 @@ public class ItemStatus
public string Id { get; set; } public string Id { get; set; }
public string Name { 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 string? PhoneNumber { get; set; }
public string? Address { get; set; }
public string? BillingTerms { get; set; }
public string? Notes { get; set; }
}