﻿// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using StockMaster.Data;

#nullable disable

namespace StockMaster.Migrations
{
    [DbContext(typeof(StockDbContext))]
    partial class StockDbContextModelSnapshot : ModelSnapshot
    {
        protected override void BuildModel(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<int>("CategoryId")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer")
                        .HasColumnName("category_id");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("CategoryId"));

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp without time zone")
                        .HasColumnName("created_at");

                    b.Property<string>("Description")
                        .IsRequired()
                        .HasColumnType("text")
                        .HasColumnName("description");

                    b.Property<string>("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<int>("CustomerId")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer")
                        .HasColumnName("customer_id");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("CustomerId"));

                    b.Property<string>("Address")
                        .IsRequired()
                        .HasColumnType("text")
                        .HasColumnName("address");

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp without time zone")
                        .HasColumnName("created_at");

                    b.Property<string>("Email")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)")
                        .HasColumnName("email");

                    b.Property<string>("Name")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)")
                        .HasColumnName("name");

                    b.Property<string>("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<int>("ProductId")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer")
                        .HasColumnName("product_id");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("ProductId"));

                    b.Property<int?>("CategoryId")
                        .HasColumnType("integer")
                        .HasColumnName("category_id");

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp without time zone")
                        .HasColumnName("created_at");

                    b.Property<string>("Description")
                        .IsRequired()
                        .HasColumnType("text")
                        .HasColumnName("description");

                    b.Property<bool>("IsActive")
                        .HasColumnType("boolean")
                        .HasColumnName("is_active");

                    b.Property<string>("Name")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)")
                        .HasColumnName("name");

                    b.Property<int>("ReorderLevel")
                        .HasColumnType("integer")
                        .HasColumnName("reorder_level");

                    b.Property<string>("Sku")
                        .IsRequired()
                        .HasMaxLength(50)
                        .HasColumnType("character varying(50)")
                        .HasColumnName("sku");

                    b.Property<int?>("SupplierId")
                        .HasColumnType("integer")
                        .HasColumnName("supplier_id");

                    b.Property<decimal>("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<int>("LogId")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer")
                        .HasColumnName("log_id");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("LogId"));

                    b.Property<DateTime>("ChangedAt")
                        .HasColumnType("timestamp without time zone")
                        .HasColumnName("changed_at");

                    b.Property<string>("ChangedBy")
                        .IsRequired()
                        .HasColumnType("text")
                        .HasColumnName("changed_by");

                    b.Property<decimal>("NewPrice")
                        .HasColumnType("numeric")
                        .HasColumnName("new_price");

                    b.Property<decimal>("OldPrice")
                        .HasColumnType("numeric")
                        .HasColumnName("old_price");

                    b.Property<int>("ProductId")
                        .HasColumnType("integer")
                        .HasColumnName("product_id");

                    b.Property<string>("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<int>("PoId")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer")
                        .HasColumnName("po_id");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("PoId"));

                    b.Property<DateTime?>("ActualDeliveryDate")
                        .HasColumnType("timestamp without time zone")
                        .HasColumnName("actual_delivery_date");

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp without time zone")
                        .HasColumnName("created_at");

                    b.Property<DateTime>("ExpectedDeliveryDate")
                        .HasColumnType("timestamp without time zone")
                        .HasColumnName("expected_delivery_date");

                    b.Property<DateTime>("OrderDate")
                        .HasColumnType("timestamp without time zone")
                        .HasColumnName("order_date");

                    b.Property<string>("Status")
                        .IsRequired()
                        .HasMaxLength(20)
                        .HasColumnType("character varying(20)")
                        .HasColumnName("status");

                    b.Property<int?>("SupplierId")
                        .HasColumnType("integer")
                        .HasColumnName("supplier_id");

                    b.Property<int>("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<int>("PoId")
                        .HasColumnType("integer")
                        .HasColumnName("po_id");

                    b.Property<int>("ProductId")
                        .HasColumnType("integer")
                        .HasColumnName("product_id");

                    b.Property<int>("Quantity")
                        .HasColumnType("integer")
                        .HasColumnName("quantity");

                    b.Property<int>("ReceivedQuantity")
                        .HasColumnType("integer")
                        .HasColumnName("received_quantity");

                    b.Property<decimal>("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<int>("SaleId")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer")
                        .HasColumnName("sale_id");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("SaleId"));

                    b.Property<int?>("CustomerId")
                        .HasColumnType("integer")
                        .HasColumnName("customer_id");

                    b.Property<DateTime>("DateTime")
                        .HasColumnType("timestamp without time zone")
                        .HasColumnName("date_time");

                    b.Property<decimal>("TotalAmount")
                        .HasPrecision(15, 2)
                        .HasColumnType("numeric(15,2)")
                        .HasColumnName("total_amount");

                    b.Property<int?>("UserId")
                        .HasColumnType("integer")
                        .HasColumnName("user_id");

                    b.Property<int>("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<int>("SaleId")
                        .HasColumnType("integer")
                        .HasColumnName("sale_id");

                    b.Property<int>("ProductId")
                        .HasColumnType("integer")
                        .HasColumnName("product_id");

                    b.Property<int>("Quantity")
                        .HasColumnType("integer")
                        .HasColumnName("quantity");

                    b.Property<decimal>("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<int>("SupplierId")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer")
                        .HasColumnName("supplier_id");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("SupplierId"));

                    b.Property<string>("Address")
                        .IsRequired()
                        .HasColumnType("text")
                        .HasColumnName("address");

                    b.Property<string>("ContactPerson")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)")
                        .HasColumnName("contact_person");

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp without time zone")
                        .HasColumnName("created_at");

                    b.Property<string>("Email")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)")
                        .HasColumnName("email");

                    b.Property<string>("Name")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)")
                        .HasColumnName("name");

                    b.Property<string>("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<int>("UserId")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer")
                        .HasColumnName("user_id");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("UserId"));

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp without time zone")
                        .HasColumnName("created_at");

                    b.Property<string>("Email")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)")
                        .HasColumnName("email");

                    b.Property<string>("FullName")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)")
                        .HasColumnName("full_name");

                    b.Property<bool>("IsActive")
                        .HasColumnType("boolean")
                        .HasColumnName("is_active");

                    b.Property<string>("Password")
                        .IsRequired()
                        .HasMaxLength(255)
                        .HasColumnType("character varying(255)")
                        .HasColumnName("password");

                    b.Property<string>("Role")
                        .IsRequired()
                        .HasMaxLength(20)
                        .HasColumnType("character varying(20)")
                        .HasColumnName("role");

                    b.Property<string>("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<decimal>("AvgSaleValue")
                        .HasColumnType("numeric")
                        .HasColumnName("avg_sale_value");

                    b.Property<string>("FullName")
                        .IsRequired()
                        .HasColumnType("text")
                        .HasColumnName("full_name");

                    b.Property<long>("RevenueRank")
                        .HasColumnType("bigint")
                        .HasColumnName("revenue_rank");

                    b.Property<string>("Role")
                        .IsRequired()
                        .HasColumnType("text")
                        .HasColumnName("role");

                    b.Property<decimal>("TotalRevenue")
                        .HasColumnType("numeric")
                        .HasColumnName("total_revenue");

                    b.Property<long>("TotalSales")
                        .HasColumnType("bigint")
                        .HasColumnName("total_sales");

                    b.Property<long>("UniqueCustomers")
                        .HasColumnType("bigint")
                        .HasColumnName("unique_customers");

                    b.Property<int>("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<decimal>("AvgSaleValue")
                        .HasColumnType("numeric")
                        .HasColumnName("avg_sale_value");

                    b.Property<string>("DayName")
                        .IsRequired()
                        .HasColumnType("text")
                        .HasColumnName("day_name");

                    b.Property<int>("DayNumber")
                        .HasColumnType("integer")
                        .HasColumnName("day_number");

                    b.Property<decimal>("TotalItemsSold")
                        .HasColumnType("numeric")
                        .HasColumnName("total_items_sold");

                    b.Property<decimal>("TotalRevenue")
                        .HasColumnType("numeric")
                        .HasColumnName("total_revenue");

                    b.Property<long>("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<long>("ActiveWarehouses")
                        .HasColumnType("bigint")
                        .HasColumnName("active_warehouses_today");

                    b.Property<decimal>("TotalItemsSold")
                        .HasColumnType("numeric")
                        .HasColumnName("total_items_sold_today");

                    b.Property<decimal>("TotalRevenue")
                        .HasColumnType("numeric")
                        .HasColumnName("total_revenue_today");

                    b.Property<long>("TotalTransactions")
                        .HasColumnType("bigint")
                        .HasColumnName("total_transactions_today");

                    b.Property<long>("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<int>("WarehouseId")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer")
                        .HasColumnName("warehouse_id");

                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("WarehouseId"));

                    b.Property<int>("Capacity")
                        .HasColumnType("integer")
                        .HasColumnName("capacity");

                    b.Property<DateTime>("CreatedAt")
                        .HasColumnType("timestamp without time zone")
                        .HasColumnName("created_at");

                    b.Property<string>("Location")
                        .IsRequired()
                        .HasMaxLength(255)
                        .HasColumnType("character varying(255)")
                        .HasColumnName("location");

                    b.Property<string>("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<int>("WarehouseId")
                        .HasColumnType("integer")
                        .HasColumnName("warehouse_id");

                    b.Property<int>("ProductId")
                        .HasColumnType("integer")
                        .HasColumnName("product_id");

                    b.Property<DateTime>("LastUpdated")
                        .HasColumnType("timestamp without time zone")
                        .HasColumnName("last_updated");

                    b.Property<int>("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
        }
    }
}
