//
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StockMaster.Data;
#nullable disable
namespace StockMaster.Migrations
{
[DbContext(typeof(StockDbContext))]
[Migration("20260222001854_InitialSetup")]
partial class InitialSetup
{
///
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "8.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("StockMaster.Models.Category", b =>
{
b.Property("CategoryId")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasColumnName("category_id");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("CategoryId"));
b.Property("CreatedAt")
.HasColumnType("timestamp without time zone")
.HasColumnName("created_at");
b.Property("Description")
.IsRequired()
.HasColumnType("text")
.HasColumnName("description");
b.Property("Name")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("name");
b.HasKey("CategoryId");
b.ToTable("category", "stock_management");
});
modelBuilder.Entity("StockMaster.Models.Customer", b =>
{
b.Property("CustomerId")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasColumnName("customer_id");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("CustomerId"));
b.Property("Address")
.IsRequired()
.HasColumnType("text")
.HasColumnName("address");
b.Property("CreatedAt")
.HasColumnType("timestamp without time zone")
.HasColumnName("created_at");
b.Property("Email")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("email");
b.Property("Name")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("name");
b.Property("Phone")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("character varying(20)")
.HasColumnName("phone");
b.HasKey("CustomerId");
b.ToTable("customer", "stock_management");
});
modelBuilder.Entity("StockMaster.Models.Product", b =>
{
b.Property("ProductId")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasColumnName("product_id");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("ProductId"));
b.Property("CategoryId")
.HasColumnType("integer")
.HasColumnName("category_id");
b.Property("CreatedAt")
.HasColumnType("timestamp without time zone")
.HasColumnName("created_at");
b.Property("Description")
.IsRequired()
.HasColumnType("text")
.HasColumnName("description");
b.Property("IsActive")
.HasColumnType("boolean")
.HasColumnName("is_active");
b.Property("Name")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("name");
b.Property("ReorderLevel")
.HasColumnType("integer")
.HasColumnName("reorder_level");
b.Property("Sku")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("sku");
b.Property("SupplierId")
.HasColumnType("integer")
.HasColumnName("supplier_id");
b.Property("UnitPrice")
.HasPrecision(12, 2)
.HasColumnType("numeric(12,2)")
.HasColumnName("unit_price");
b.HasKey("ProductId");
b.HasIndex("CategoryId");
b.HasIndex("SupplierId");
b.ToTable("product", "stock_management");
});
modelBuilder.Entity("StockMaster.Models.ProductPriceLog", b =>
{
b.Property("LogId")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasColumnName("log_id");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("LogId"));
b.Property("ChangedAt")
.HasColumnType("timestamp without time zone")
.HasColumnName("changed_at");
b.Property("ChangedBy")
.IsRequired()
.HasColumnType("text")
.HasColumnName("changed_by");
b.Property("NewPrice")
.HasColumnType("numeric")
.HasColumnName("new_price");
b.Property("OldPrice")
.HasColumnType("numeric")
.HasColumnName("old_price");
b.Property("ProductId")
.HasColumnType("integer")
.HasColumnName("product_id");
b.Property("ProductName")
.IsRequired()
.HasColumnType("text")
.HasColumnName("product_name");
b.HasKey("LogId");
b.ToTable("product_price_log", "stock_management");
});
modelBuilder.Entity("StockMaster.Models.PurchaseOrder", b =>
{
b.Property("PoId")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasColumnName("po_id");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("PoId"));
b.Property("ActualDeliveryDate")
.HasColumnType("timestamp without time zone")
.HasColumnName("actual_delivery_date");
b.Property("CreatedAt")
.HasColumnType("timestamp without time zone")
.HasColumnName("created_at");
b.Property("ExpectedDeliveryDate")
.HasColumnType("timestamp without time zone")
.HasColumnName("expected_delivery_date");
b.Property("OrderDate")
.HasColumnType("timestamp without time zone")
.HasColumnName("order_date");
b.Property("Status")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("character varying(20)")
.HasColumnName("status");
b.Property("SupplierId")
.HasColumnType("integer")
.HasColumnName("supplier_id");
b.Property("WarehouseId")
.HasColumnType("integer")
.HasColumnName("warehouse_id");
b.HasKey("PoId");
b.HasIndex("SupplierId");
b.HasIndex("WarehouseId");
b.ToTable("purchase_order", "stock_management");
});
modelBuilder.Entity("StockMaster.Models.PurchaseOrderItem", b =>
{
b.Property("PoId")
.HasColumnType("integer")
.HasColumnName("po_id");
b.Property("ProductId")
.HasColumnType("integer")
.HasColumnName("product_id");
b.Property("Quantity")
.HasColumnType("integer")
.HasColumnName("quantity");
b.Property("ReceivedQuantity")
.HasColumnType("integer")
.HasColumnName("received_quantity");
b.Property("UnitCost")
.HasPrecision(12, 2)
.HasColumnType("numeric(12,2)")
.HasColumnName("unit_cost");
b.HasKey("PoId", "ProductId");
b.HasIndex("ProductId");
b.ToTable("purchase_order_item", "stock_management");
});
modelBuilder.Entity("StockMaster.Models.Sale", b =>
{
b.Property("SaleId")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasColumnName("sale_id");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("SaleId"));
b.Property("CustomerId")
.HasColumnType("integer")
.HasColumnName("customer_id");
b.Property("DateTime")
.HasColumnType("timestamp without time zone")
.HasColumnName("date_time");
b.Property("TotalAmount")
.HasPrecision(15, 2)
.HasColumnType("numeric(15,2)")
.HasColumnName("total_amount");
b.Property("UserId")
.HasColumnType("integer")
.HasColumnName("user_id");
b.Property("WarehouseId")
.HasColumnType("integer")
.HasColumnName("warehouse_id");
b.HasKey("SaleId");
b.HasIndex("CustomerId");
b.HasIndex("UserId");
b.HasIndex("WarehouseId");
b.ToTable("sale", "stock_management");
});
modelBuilder.Entity("StockMaster.Models.SaleItem", b =>
{
b.Property("SaleId")
.HasColumnType("integer")
.HasColumnName("sale_id");
b.Property("ProductId")
.HasColumnType("integer")
.HasColumnName("product_id");
b.Property("Quantity")
.HasColumnType("integer")
.HasColumnName("quantity");
b.Property("UnitPriceAtSale")
.HasPrecision(12, 2)
.HasColumnType("numeric(12,2)")
.HasColumnName("unit_price_at_sale");
b.HasKey("SaleId", "ProductId");
b.HasIndex("ProductId");
b.ToTable("sale_item", "stock_management");
});
modelBuilder.Entity("StockMaster.Models.Supplier", b =>
{
b.Property("SupplierId")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasColumnName("supplier_id");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("SupplierId"));
b.Property("Address")
.IsRequired()
.HasColumnType("text")
.HasColumnName("address");
b.Property("ContactPerson")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("contact_person");
b.Property("CreatedAt")
.HasColumnType("timestamp without time zone")
.HasColumnName("created_at");
b.Property("Email")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("email");
b.Property("Name")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("name");
b.Property("Phone")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("character varying(20)")
.HasColumnName("phone");
b.HasKey("SupplierId");
b.ToTable("supplier", "stock_management");
});
modelBuilder.Entity("StockMaster.Models.User", b =>
{
b.Property("UserId")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasColumnName("user_id");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("UserId"));
b.Property("CreatedAt")
.HasColumnType("timestamp without time zone")
.HasColumnName("created_at");
b.Property("Email")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("email");
b.Property("FullName")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("full_name");
b.Property("IsActive")
.HasColumnType("boolean")
.HasColumnName("is_active");
b.Property("Password")
.IsRequired()
.HasMaxLength(255)
.HasColumnType("character varying(255)")
.HasColumnName("password");
b.Property("Role")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("character varying(20)")
.HasColumnName("role");
b.Property("Username")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("username");
b.HasKey("UserId");
b.ToTable("users", "stock_management");
});
modelBuilder.Entity("StockMaster.Models.VwEmployeeRanking", b =>
{
b.Property("AvgSaleValue")
.HasColumnType("numeric")
.HasColumnName("avg_sale_value");
b.Property("FullName")
.IsRequired()
.HasColumnType("text")
.HasColumnName("full_name");
b.Property("RevenueRank")
.HasColumnType("bigint")
.HasColumnName("revenue_rank");
b.Property("Role")
.IsRequired()
.HasColumnType("text")
.HasColumnName("role");
b.Property("TotalRevenue")
.HasColumnType("numeric")
.HasColumnName("total_revenue");
b.Property("TotalSales")
.HasColumnType("bigint")
.HasColumnName("total_sales");
b.Property("UniqueCustomers")
.HasColumnType("bigint")
.HasColumnName("unique_customers");
b.Property("UserId")
.HasColumnType("integer")
.HasColumnName("user_id");
b.ToTable((string)null);
b.ToView("vw_employee_sales_ranking", "stock_management");
});
modelBuilder.Entity("StockMaster.Models.VwSalesByDay", b =>
{
b.Property("AvgSaleValue")
.HasColumnType("numeric")
.HasColumnName("avg_sale_value");
b.Property("DayName")
.IsRequired()
.HasColumnType("text")
.HasColumnName("day_name");
b.Property("DayNumber")
.HasColumnType("integer")
.HasColumnName("day_number");
b.Property("TotalItemsSold")
.HasColumnType("numeric")
.HasColumnName("total_items_sold");
b.Property("TotalRevenue")
.HasColumnType("numeric")
.HasColumnName("total_revenue");
b.Property("TotalSales")
.HasColumnType("bigint")
.HasColumnName("total_sales");
b.ToTable((string)null);
b.ToView("vw_sales_by_day_of_week", "stock_management");
});
modelBuilder.Entity("StockMaster.Models.VwTodaysSummary", b =>
{
b.Property("ActiveWarehouses")
.HasColumnType("bigint")
.HasColumnName("active_warehouses_today");
b.Property("TotalItemsSold")
.HasColumnType("numeric")
.HasColumnName("total_items_sold_today");
b.Property("TotalRevenue")
.HasColumnType("numeric")
.HasColumnName("total_revenue_today");
b.Property("TotalTransactions")
.HasColumnType("bigint")
.HasColumnName("total_transactions_today");
b.Property("UniqueCustomers")
.HasColumnType("bigint")
.HasColumnName("unique_customers_today");
b.ToTable((string)null);
b.ToView("vw_todays_sales_summary", "stock_management");
});
modelBuilder.Entity("StockMaster.Models.Warehouse", b =>
{
b.Property("WarehouseId")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasColumnName("warehouse_id");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("WarehouseId"));
b.Property("Capacity")
.HasColumnType("integer")
.HasColumnName("capacity");
b.Property("CreatedAt")
.HasColumnType("timestamp without time zone")
.HasColumnName("created_at");
b.Property("Location")
.IsRequired()
.HasMaxLength(255)
.HasColumnType("character varying(255)")
.HasColumnName("location");
b.Property("Name")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("name");
b.HasKey("WarehouseId");
b.ToTable("warehouse", "stock_management");
});
modelBuilder.Entity("StockMaster.Models.WarehouseStock", b =>
{
b.Property("WarehouseId")
.HasColumnType("integer")
.HasColumnName("warehouse_id");
b.Property("ProductId")
.HasColumnType("integer")
.HasColumnName("product_id");
b.Property("LastUpdated")
.HasColumnType("timestamp without time zone")
.HasColumnName("last_updated");
b.Property("QuantityOnHand")
.HasColumnType("integer")
.HasColumnName("quantity_on_hand");
b.HasKey("WarehouseId", "ProductId");
b.HasIndex("ProductId");
b.ToTable("warehouse_stock", "stock_management");
});
modelBuilder.Entity("StockMaster.Models.Product", b =>
{
b.HasOne("StockMaster.Models.Category", "Category")
.WithMany()
.HasForeignKey("CategoryId");
b.HasOne("StockMaster.Models.Supplier", "Supplier")
.WithMany()
.HasForeignKey("SupplierId");
b.Navigation("Category");
b.Navigation("Supplier");
});
modelBuilder.Entity("StockMaster.Models.PurchaseOrder", b =>
{
b.HasOne("StockMaster.Models.Supplier", "Supplier")
.WithMany()
.HasForeignKey("SupplierId");
b.HasOne("StockMaster.Models.Warehouse", "Warehouse")
.WithMany()
.HasForeignKey("WarehouseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Supplier");
b.Navigation("Warehouse");
});
modelBuilder.Entity("StockMaster.Models.PurchaseOrderItem", b =>
{
b.HasOne("StockMaster.Models.PurchaseOrder", "PurchaseOrder")
.WithMany("PurchaseOrderItems")
.HasForeignKey("PoId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("StockMaster.Models.Product", "Product")
.WithMany()
.HasForeignKey("ProductId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Product");
b.Navigation("PurchaseOrder");
});
modelBuilder.Entity("StockMaster.Models.Sale", b =>
{
b.HasOne("StockMaster.Models.Customer", "Customer")
.WithMany()
.HasForeignKey("CustomerId");
b.HasOne("StockMaster.Models.User", "User")
.WithMany()
.HasForeignKey("UserId");
b.HasOne("StockMaster.Models.Warehouse", "Warehouse")
.WithMany()
.HasForeignKey("WarehouseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Customer");
b.Navigation("User");
b.Navigation("Warehouse");
});
modelBuilder.Entity("StockMaster.Models.SaleItem", b =>
{
b.HasOne("StockMaster.Models.Product", "Product")
.WithMany()
.HasForeignKey("ProductId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("StockMaster.Models.Sale", "Sale")
.WithMany("SaleItems")
.HasForeignKey("SaleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Product");
b.Navigation("Sale");
});
modelBuilder.Entity("StockMaster.Models.WarehouseStock", b =>
{
b.HasOne("StockMaster.Models.Product", "Product")
.WithMany()
.HasForeignKey("ProductId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("StockMaster.Models.Warehouse", "Warehouse")
.WithMany()
.HasForeignKey("WarehouseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Product");
b.Navigation("Warehouse");
});
modelBuilder.Entity("StockMaster.Models.PurchaseOrder", b =>
{
b.Navigation("PurchaseOrderItems");
});
modelBuilder.Entity("StockMaster.Models.Sale", b =>
{
b.Navigation("SaleItems");
});
#pragma warning restore 612, 618
}
}
}