//
using System;
using Meezi.Infrastructure.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace Meezi.Infrastructure.Data.Migrations
{
[DbContext(typeof(AppDbContext))]
[Migration("20260522211634_OrderDisplayNumber")]
partial class OrderDisplayNumber
{
///
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "10.0.0")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Meezi.Core.Entities.Attendance", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("ClockIn")
.HasColumnType("timestamp with time zone");
b.Property("ClockOut")
.HasColumnType("timestamp with time zone");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("Date")
.HasColumnType("date");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("EmployeeId")
.IsRequired()
.HasColumnType("text");
b.Property("Notes")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("EmployeeId", "Date")
.IsUnique();
b.ToTable("Attendances");
});
modelBuilder.Entity("Meezi.Core.Entities.Branch", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("AccentColor")
.HasColumnType("text");
b.Property("Address")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property("AutoCutEnabled")
.HasColumnType("boolean");
b.Property("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property("City")
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("IsActive")
.HasColumnType("boolean");
b.Property("KitchenPrinterIp")
.HasMaxLength(45)
.HasColumnType("character varying(45)");
b.Property("KitchenPrinterPort")
.HasColumnType("integer");
b.Property("LogoUrl")
.HasColumnType("text");
b.Property("Name")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property("PaperWidthMm")
.HasColumnType("integer");
b.Property("Phone")
.HasMaxLength(20)
.HasColumnType("character varying(20)");
b.Property("PosDeviceIp")
.HasMaxLength(45)
.HasColumnType("character varying(45)");
b.Property("PosDevicePort")
.HasColumnType("integer");
b.Property("ReceiptFooter")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property("ReceiptHeader")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property("ReceiptPrinterIp")
.HasMaxLength(45)
.HasColumnType("character varying(45)");
b.Property("ReceiptPrinterPort")
.HasColumnType("integer");
b.Property("TaxRate")
.HasColumnType("numeric");
b.Property("UpdatedAt")
.HasColumnType("timestamp with time zone");
b.Property("WelcomeText")
.HasColumnType("text");
b.Property("WifiPassword")
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.HasKey("Id");
b.HasIndex("CafeId", "IsActive");
b.ToTable("Branches");
});
modelBuilder.Entity("Meezi.Core.Entities.BranchMenuItemOverride", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("BranchId")
.IsRequired()
.HasColumnType("text");
b.Property("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("IsAvailable")
.HasColumnType("boolean");
b.Property("MenuItemId")
.IsRequired()
.HasColumnType("text");
b.Property("PriceOverride")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property("SortOrderOverride")
.HasColumnType("integer");
b.Property("UpdatedAt")
.HasColumnType("timestamp with time zone");
b.Property("UpdatedByUserId")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CafeId");
b.HasIndex("MenuItemId");
b.HasIndex("BranchId", "MenuItemId")
.IsUnique();
b.ToTable("BranchMenuItemOverrides");
});
modelBuilder.Entity("Meezi.Core.Entities.Cafe", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("Address")
.HasColumnType("text");
b.Property("AllowBranchTaxOverride")
.HasColumnType("boolean");
b.Property("City")
.HasColumnType("text");
b.Property("CoverImageUrl")
.HasColumnType("text");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DefaultTaxRate")
.HasPrecision(5, 2)
.HasColumnType("numeric(5,2)");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("Description")
.HasColumnType("text");
b.Property("DigikalaVendorId")
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.Property("DiscoverProfileJson")
.HasMaxLength(8000)
.HasColumnType("character varying(8000)");
b.Property("IsSuspended")
.HasColumnType("boolean");
b.Property("IsVerified")
.HasColumnType("boolean");
b.Property("LogoUrl")
.HasColumnType("text");
b.Property("Name")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property("NameAr")
.HasColumnType("text");
b.Property("NameEn")
.HasColumnType("text");
b.Property("Phone")
.HasColumnType("text");
b.Property("PlanExpiresAt")
.HasColumnType("timestamp with time zone");
b.Property("PlanTier")
.HasColumnType("integer");
b.Property("PreferredLanguage")
.IsRequired()
.HasColumnType("text");
b.Property("Slug")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.Property("SnappfoodVendorId")
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.Property("Tap30VendorId")
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.Property("ThemeJson")
.HasMaxLength(8000)
.HasColumnType("character varying(8000)");
b.HasKey("Id");
b.HasIndex("Slug")
.IsUnique();
b.ToTable("Cafes");
});
modelBuilder.Entity("Meezi.Core.Entities.CafeFeatureOverride", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("FeatureKey")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("IsEnabled")
.HasColumnType("boolean");
b.HasKey("Id");
b.HasIndex("CafeId", "FeatureKey")
.IsUnique();
b.ToTable("CafeFeatureOverrides");
});
modelBuilder.Entity("Meezi.Core.Entities.CafeNotification", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("Body")
.HasMaxLength(1000)
.HasColumnType("character varying(1000)");
b.Property("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("IsRead")
.HasColumnType("boolean");
b.Property("ReadAt")
.HasColumnType("timestamp with time zone");
b.Property("ReferenceId")
.HasMaxLength(64)
.HasColumnType("character varying(64)");
b.Property("TableNumber")
.HasMaxLength(40)
.HasColumnType("character varying(40)");
b.Property("Title")
.IsRequired()
.HasMaxLength(300)
.HasColumnType("character varying(300)");
b.Property("Type")
.IsRequired()
.HasMaxLength(60)
.HasColumnType("character varying(60)");
b.HasKey("Id");
b.HasIndex("CafeId", "IsRead", "CreatedAt");
b.ToTable("CafeNotifications");
});
modelBuilder.Entity("Meezi.Core.Entities.CafeReview", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("AuthorName")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property("AuthorPhone")
.HasColumnType("text");
b.Property("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property("Comment")
.HasColumnType("text");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("OwnerRepliedAt")
.HasColumnType("timestamp with time zone");
b.Property("OwnerReply")
.HasColumnType("text");
b.Property("Rating")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("CafeId", "CreatedAt");
b.ToTable("CafeReviews");
});
modelBuilder.Entity("Meezi.Core.Entities.CashTransaction", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("Amount")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property("BranchId")
.HasColumnType("text");
b.Property("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("CreatedByUserId")
.IsRequired()
.HasColumnType("text");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("Method")
.HasColumnType("integer");
b.Property("Note")
.HasColumnType("text");
b.Property("ReferenceId")
.HasColumnType("text");
b.Property("ShiftId")
.IsRequired()
.HasColumnType("text");
b.Property("Type")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("BranchId");
b.HasIndex("ShiftId");
b.HasIndex("CafeId", "BranchId");
b.ToTable("CashTransactions");
});
modelBuilder.Entity("Meezi.Core.Entities.Coupon", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property("Code")
.IsRequired()
.HasColumnType("text");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("ExpiresAt")
.HasColumnType("timestamp with time zone");
b.Property("IsActive")
.HasColumnType("boolean");
b.Property("MaxDiscount")
.HasColumnType("numeric");
b.Property("MinOrderAmount")
.HasColumnType("numeric");
b.Property("StartsAt")
.HasColumnType("timestamp with time zone");
b.Property("TargetGroup")
.HasColumnType("integer");
b.Property("Type")
.HasColumnType("integer");
b.Property("UsageLimit")
.HasColumnType("integer");
b.Property("UsedCount")
.HasColumnType("integer");
b.Property("Value")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.HasKey("Id");
b.HasIndex("CafeId", "Code")
.IsUnique();
b.ToTable("Coupons");
});
modelBuilder.Entity("Meezi.Core.Entities.Customer", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("BirthDateJalali")
.HasColumnType("text");
b.Property("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("Group")
.HasColumnType("integer");
b.Property("LoyaltyPoints")
.HasColumnType("integer");
b.Property("Name")
.IsRequired()
.HasColumnType("text");
b.Property("NationalId")
.HasColumnType("text");
b.Property("Phone")
.IsRequired()
.HasColumnType("text");
b.Property("ReferredBy")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CafeId", "Phone");
b.ToTable("Customers");
});
modelBuilder.Entity("Meezi.Core.Entities.DailyReport", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("AvgOrderValue")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property("BranchId")
.IsRequired()
.HasColumnType("text");
b.Property("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property("CardRevenue")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property("CashRevenue")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("CreditRevenue")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property("Date")
.HasColumnType("date");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("GeneratedAt")
.HasColumnType("timestamp with time zone");
b.Property("NetIncome")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property("TopProducts")
.IsRequired()
.HasColumnType("jsonb");
b.Property("TotalExpenses")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property("TotalOrders")
.HasColumnType("integer");
b.Property("TotalRevenue")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property("TotalVoids")
.HasColumnType("integer");
b.Property("VoidAmount")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.HasKey("Id");
b.HasIndex("BranchId");
b.HasIndex("CafeId", "BranchId", "Date")
.IsUnique();
b.ToTable("DailyReports");
});
modelBuilder.Entity("Meezi.Core.Entities.DeliveryCommissionRate", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("IsActive")
.HasColumnType("boolean");
b.Property("Platform")
.HasColumnType("integer");
b.Property("RatePercent")
.HasPrecision(5, 2)
.HasColumnType("numeric(5,2)");
b.Property("UpdatedAt")
.HasColumnType("timestamp with time zone");
b.HasKey("Id");
b.HasIndex("CafeId", "Platform")
.IsUnique();
b.ToTable("DeliveryCommissionRates");
});
modelBuilder.Entity("Meezi.Core.Entities.Employee", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("BaseSalary")
.HasColumnType("numeric");
b.Property("BranchId")
.HasColumnType("text");
b.Property("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("Name")
.IsRequired()
.HasColumnType("text");
b.Property("NationalId")
.HasColumnType("text");
b.Property("Phone")
.IsRequired()
.HasColumnType("text");
b.Property("PinCode")
.HasColumnType("text");
b.Property("Role")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("BranchId");
b.HasIndex("CafeId", "Phone")
.IsUnique()
.HasFilter("\"DeletedAt\" IS NULL");
b.ToTable("Employees");
});
modelBuilder.Entity("Meezi.Core.Entities.EmployeeSalary", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("BaseSalary")
.HasColumnType("numeric");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("Deductions")
.HasColumnType("numeric");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("EmployeeId")
.IsRequired()
.HasColumnType("text");
b.Property("IsPaid")
.HasColumnType("boolean");
b.Property("MonthYear")
.IsRequired()
.HasColumnType("text");
b.Property("NetSalary")
.HasColumnType("numeric");
b.Property("OvertimePay")
.HasColumnType("numeric");
b.HasKey("Id");
b.HasIndex("EmployeeId", "MonthYear")
.IsUnique();
b.ToTable("EmployeeSalaries");
});
modelBuilder.Entity("Meezi.Core.Entities.EmployeeSchedule", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DayOfWeek")
.HasColumnType("integer");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("EmployeeId")
.IsRequired()
.HasColumnType("text");
b.Property("ShiftType")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("EmployeeId", "DayOfWeek")
.IsUnique();
b.ToTable("EmployeeSchedules", (string)null);
});
modelBuilder.Entity("Meezi.Core.Entities.Expense", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("Amount")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property("BranchId")
.IsRequired()
.HasColumnType("text");
b.Property("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property("Category")
.HasColumnType("integer");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("CreatedByUserId")
.IsRequired()
.HasColumnType("text");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("Note")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property("ReceiptImageUrl")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property("ShiftId")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("BranchId");
b.HasIndex("ShiftId");
b.HasIndex("CafeId", "BranchId", "CreatedAt");
b.ToTable("Expenses");
});
modelBuilder.Entity("Meezi.Core.Entities.Ingredient", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("LowStockWarningPercent")
.HasPrecision(5, 2)
.HasColumnType("numeric(5,2)");
b.Property("Name")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property("ParLevel")
.HasPrecision(18, 3)
.HasColumnType("numeric(18,3)");
b.Property("QuantityOnHand")
.HasPrecision(18, 3)
.HasColumnType("numeric(18,3)");
b.Property("ReorderLevel")
.HasPrecision(18, 3)
.HasColumnType("numeric(18,3)");
b.Property("Unit")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("character varying(50)");
b.Property("UnitCost")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.HasKey("Id");
b.HasIndex("CafeId");
b.ToTable("Ingredients");
});
modelBuilder.Entity("Meezi.Core.Entities.LeaveRequest", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("EmployeeId")
.IsRequired()
.HasColumnType("text");
b.Property("EndDate")
.HasColumnType("date");
b.Property("Reason")
.HasColumnType("text");
b.Property("ReviewedBy")
.HasColumnType("text");
b.Property("StartDate")
.HasColumnType("date");
b.Property("Status")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("EmployeeId");
b.ToTable("LeaveRequests");
});
modelBuilder.Entity("Meezi.Core.Entities.MenuCategory", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("DiscountPercent")
.HasColumnType("numeric");
b.Property("Icon")
.HasMaxLength(32)
.HasColumnType("character varying(32)");
b.Property("IconPresetId")
.HasMaxLength(48)
.HasColumnType("character varying(48)");
b.Property("IconStyle")
.HasMaxLength(16)
.HasColumnType("character varying(16)");
b.Property("ImageUrl")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property("IsActive")
.HasColumnType("boolean");
b.Property("Name")
.IsRequired()
.HasColumnType("text");
b.Property("NameAr")
.HasColumnType("text");
b.Property("NameEn")
.HasColumnType("text");
b.Property("SortOrder")
.HasColumnType("integer");
b.Property("TaxId")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CafeId");
b.HasIndex("TaxId");
b.ToTable("MenuCategories");
});
modelBuilder.Entity("Meezi.Core.Entities.MenuItem", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property("CategoryId")
.IsRequired()
.HasColumnType("text");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("Description")
.HasColumnType("text");
b.Property("DiscountPercent")
.HasColumnType("numeric");
b.Property("ImageUrl")
.HasColumnType("text");
b.Property("IsAvailable")
.HasColumnType("boolean");
b.Property("Model3dUrl")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property("Name")
.IsRequired()
.HasColumnType("text");
b.Property("NameAr")
.HasColumnType("text");
b.Property("NameEn")
.HasColumnType("text");
b.Property("Price")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property("VideoUrl")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CafeId");
b.HasIndex("CategoryId");
b.ToTable("MenuItems");
});
modelBuilder.Entity("Meezi.Core.Entities.MenuItemIngredient", b =>
{
b.Property("Id")
.HasColumnType("text");
b.Property("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property("IngredientId")
.IsRequired()
.HasColumnType("text");
b.Property("MenuItemId")
.IsRequired()
.HasColumnType("text");
b.Property