diff --git a/barkmanAPI/Migrations/20260716020638_addoders.Designer.cs b/barkmanAPI/Migrations/20260716020638_addoders.Designer.cs
new file mode 100644
index 0000000..1efed6e
--- /dev/null
+++ b/barkmanAPI/Migrations/20260716020638_addoders.Designer.cs
@@ -0,0 +1,295 @@
+//
+using System;
+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("20260716020638_addoders")]
+ partial class addoders
+ {
+ ///
+ 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.OrderItems", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ItemId")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("item_id");
+
+ b.Property("OrderId")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("order_id");
+
+ b.Property("OrdersId")
+ .HasColumnType("integer")
+ .HasColumnName("orders_id");
+
+ b.Property("Quantity")
+ .HasColumnType("integer")
+ .HasColumnName("quantity");
+
+ b.HasKey("Id")
+ .HasName("pk_order_items");
+
+ b.HasIndex("OrdersId")
+ .HasDatabaseName("ix_order_items_orders_id");
+
+ b.ToTable("order_items", (string)null);
+ });
+
+ modelBuilder.Entity("barkmanapi.OrderStatus", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("text")
+ .HasColumnName("id");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.HasKey("Id")
+ .HasName("pk_order_status");
+
+ b.ToTable("order_status", (string)null);
+ });
+
+ modelBuilder.Entity("barkmanapi.Orders", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Address")
+ .HasColumnType("text")
+ .HasColumnName("address");
+
+ b.Property("CustomerId")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("customer_id");
+
+ b.Property("EndDate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("end_date");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property("Notes")
+ .HasColumnType("text")
+ .HasColumnName("notes");
+
+ b.Property("StartDate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("start_date");
+
+ b.Property("StatusId")
+ .HasColumnType("text")
+ .HasColumnName("status_id");
+
+ b.Property("TotalPrice")
+ .HasColumnType("numeric")
+ .HasColumnName("total_price");
+
+ b.Property("Venue")
+ .HasColumnType("text")
+ .HasColumnName("venue");
+
+ b.HasKey("Id")
+ .HasName("pk_orders");
+
+ b.HasIndex("StatusId")
+ .HasDatabaseName("ix_orders_status_id");
+
+ b.ToTable("orders", (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");
+ });
+
+ modelBuilder.Entity("barkmanapi.OrderItems", b =>
+ {
+ b.HasOne("barkmanapi.Orders", null)
+ .WithMany("Items")
+ .HasForeignKey("OrdersId")
+ .HasConstraintName("fk_order_items_orders_orders_id");
+ });
+
+ modelBuilder.Entity("barkmanapi.Orders", b =>
+ {
+ b.HasOne("barkmanapi.OrderStatus", "Status")
+ .WithMany()
+ .HasForeignKey("StatusId")
+ .HasConstraintName("fk_orders_order_status_status_id");
+
+ b.Navigation("Status");
+ });
+
+ modelBuilder.Entity("barkmanapi.Orders", b =>
+ {
+ b.Navigation("Items");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/barkmanAPI/Migrations/20260716020638_addoders.cs b/barkmanAPI/Migrations/20260716020638_addoders.cs
new file mode 100644
index 0000000..071e0f5
--- /dev/null
+++ b/barkmanAPI/Migrations/20260716020638_addoders.cs
@@ -0,0 +1,98 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace barkmanapi.Migrations
+{
+ ///
+ public partial class addoders : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.CreateTable(
+ name: "order_status",
+ columns: table => new
+ {
+ id = table.Column(type: "text", nullable: false),
+ name = table.Column(type: "text", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_order_status", x => x.id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "orders",
+ columns: table => new
+ {
+ id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ customer_id = table.Column(type: "text", nullable: false),
+ name = table.Column(type: "text", nullable: false),
+ status_id = table.Column(type: "text", nullable: true),
+ start_date = table.Column(type: "timestamp with time zone", nullable: false),
+ end_date = table.Column(type: "timestamp with time zone", nullable: false),
+ total_price = table.Column(type: "numeric", nullable: false),
+ venue = table.Column(type: "text", nullable: true),
+ address = table.Column(type: "text", nullable: true),
+ notes = table.Column(type: "text", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_orders", x => x.id);
+ table.ForeignKey(
+ name: "fk_orders_order_status_status_id",
+ column: x => x.status_id,
+ principalTable: "order_status",
+ principalColumn: "id");
+ });
+
+ migrationBuilder.CreateTable(
+ name: "order_items",
+ columns: table => new
+ {
+ id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ order_id = table.Column(type: "text", nullable: false),
+ item_id = table.Column(type: "text", nullable: false),
+ quantity = table.Column(type: "integer", nullable: false),
+ orders_id = table.Column(type: "integer", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_order_items", x => x.id);
+ table.ForeignKey(
+ name: "fk_order_items_orders_orders_id",
+ column: x => x.orders_id,
+ principalTable: "orders",
+ principalColumn: "id");
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "ix_order_items_orders_id",
+ table: "order_items",
+ column: "orders_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_orders_status_id",
+ table: "orders",
+ column: "status_id");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "order_items");
+
+ migrationBuilder.DropTable(
+ name: "orders");
+
+ migrationBuilder.DropTable(
+ name: "order_status");
+ }
+ }
+}
diff --git a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs
index c59a956..e770297 100644
--- a/barkmanAPI/Migrations/BarkContextModelSnapshot.cs
+++ b/barkmanAPI/Migrations/BarkContextModelSnapshot.cs
@@ -1,4 +1,5 @@
//
+using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
@@ -144,6 +145,115 @@ namespace barkmanapi.Migrations
b.ToTable("item_status", (string)null);
});
+ modelBuilder.Entity("barkmanapi.OrderItems", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ItemId")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("item_id");
+
+ b.Property("OrderId")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("order_id");
+
+ b.Property("OrdersId")
+ .HasColumnType("integer")
+ .HasColumnName("orders_id");
+
+ b.Property("Quantity")
+ .HasColumnType("integer")
+ .HasColumnName("quantity");
+
+ b.HasKey("Id")
+ .HasName("pk_order_items");
+
+ b.HasIndex("OrdersId")
+ .HasDatabaseName("ix_order_items_orders_id");
+
+ b.ToTable("order_items", (string)null);
+ });
+
+ modelBuilder.Entity("barkmanapi.OrderStatus", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("text")
+ .HasColumnName("id");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.HasKey("Id")
+ .HasName("pk_order_status");
+
+ b.ToTable("order_status", (string)null);
+ });
+
+ modelBuilder.Entity("barkmanapi.Orders", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Address")
+ .HasColumnType("text")
+ .HasColumnName("address");
+
+ b.Property("CustomerId")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("customer_id");
+
+ b.Property("EndDate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("end_date");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property("Notes")
+ .HasColumnType("text")
+ .HasColumnName("notes");
+
+ b.Property("StartDate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("start_date");
+
+ b.Property("StatusId")
+ .HasColumnType("text")
+ .HasColumnName("status_id");
+
+ b.Property("TotalPrice")
+ .HasColumnType("numeric")
+ .HasColumnName("total_price");
+
+ b.Property("Venue")
+ .HasColumnType("text")
+ .HasColumnName("venue");
+
+ b.HasKey("Id")
+ .HasName("pk_orders");
+
+ b.HasIndex("StatusId")
+ .HasDatabaseName("ix_orders_status_id");
+
+ b.ToTable("orders", (string)null);
+ });
+
modelBuilder.Entity("barkmanapi.InventoryItems", b =>
{
b.HasOne("barkmanapi.ItemStatus", "Status")
@@ -153,6 +263,29 @@ namespace barkmanapi.Migrations
b.Navigation("Status");
});
+
+ modelBuilder.Entity("barkmanapi.OrderItems", b =>
+ {
+ b.HasOne("barkmanapi.Orders", null)
+ .WithMany("Items")
+ .HasForeignKey("OrdersId")
+ .HasConstraintName("fk_order_items_orders_orders_id");
+ });
+
+ modelBuilder.Entity("barkmanapi.Orders", b =>
+ {
+ b.HasOne("barkmanapi.OrderStatus", "Status")
+ .WithMany()
+ .HasForeignKey("StatusId")
+ .HasConstraintName("fk_orders_order_status_status_id");
+
+ b.Navigation("Status");
+ });
+
+ modelBuilder.Entity("barkmanapi.Orders", b =>
+ {
+ b.Navigation("Items");
+ });
#pragma warning restore 612, 618
}
}
diff --git a/barkmanAPI/barkDbModel.cs b/barkmanAPI/barkDbModel.cs
index 479bca8..7566374 100644
--- a/barkmanAPI/barkDbModel.cs
+++ b/barkmanAPI/barkDbModel.cs
@@ -7,6 +7,9 @@ public class BarkContext(DbContextOptions options) : DbContext(opti
public DbSet Inventory { get; set; }
public DbSet ItemStatus { get; set; }
public DbSet Customers { get; set; }
+ public DbSet Orders { get; set; }
+ public DbSet OrderItems { get; set; }
+ public DbSet OrderStatus { get; set; }
}
[Index(nameof(Barcode), IsUnique = true)]
@@ -41,4 +44,34 @@ public class Customers
public string? Address { get; set; }
public string? BillingTerms { get; set; }
public string? Notes { get; set; }
-}
\ No newline at end of file
+}
+
+public class Orders
+{
+ public int Id { get; set; }
+ public required string CustomerId { get; set; }
+ public required string Name { get; set; }
+ public OrderStatus Status { get; set; }
+ public string? StatusId { get; set; }
+ public DateTimeOffset StartDate { get; set; }
+ public DateTimeOffset EndDate { get; set; }
+ public decimal TotalPrice { get; set; }
+ public string? Venue { get; set; }
+ public string? Address { get; set; }
+ public OrderItems[] Items { get; set; }
+ public string? Notes { get; set; }
+}
+
+public class OrderItems
+{
+ public int Id { get; set; }
+ public required string OrderId { get; set; }
+ public required string ItemId { get; set; }
+ public int Quantity { get; set; }
+}
+
+public class OrderStatus
+{
+ public string Id { get; set; }
+ public string Name { get; set; }
+}