Files
meezi/src/Meezi.Infrastructure/Data/Migrations/20260531061500_AddOrderCancellationFields.Designer.cs
T
soroush.asadi 345ae0a4b5
CI/CD / CI · Admin API (dotnet build) (push) Successful in 41s
CI/CD / CI · Admin Web (tsc) (push) Failing after 5s
CI/CD / CI · Website (tsc) (push) Failing after 4s
CI/CD / CI · Koja (tsc) (push) Failing after 5s
CI/CD / CI · API (dotnet build + test) (push) Successful in 1m13s
CI/CD / CI · Dashboard (tsc) (push) Failing after 2m32s
CI/CD / Deploy · all services (push) Has been skipped
first commit
2026-05-31 11:06:24 +03:30

3288 lines
114 KiB
C#

// <auto-generated />
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("20260531061500_AddOrderCancellationFields")]
partial class AddOrderCancellationFields
{
/// <inheritdoc />
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<string>("Id")
.HasColumnType("text");
b.Property<DateTime?>("ClockIn")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("ClockOut")
.HasColumnType("timestamp with time zone");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateOnly>("Date")
.HasColumnType("date");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("EmployeeId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Notes")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("EmployeeId", "Date")
.IsUnique();
b.ToTable("Attendances");
});
modelBuilder.Entity("Meezi.Core.Entities.AuditLog", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Action")
.IsRequired()
.HasMaxLength(96)
.HasColumnType("character varying(96)");
b.Property<string>("ActorId")
.HasColumnType("text");
b.Property<string>("ActorName")
.HasMaxLength(160)
.HasColumnType("character varying(160)");
b.Property<string>("ActorRole")
.HasMaxLength(32)
.HasColumnType("character varying(32)");
b.Property<string>("BranchId")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Category")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("character varying(64)");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("DetailsJson")
.HasColumnType("text");
b.Property<string>("EntityId")
.HasMaxLength(64)
.HasColumnType("character varying(64)");
b.Property<string>("EntityType")
.HasMaxLength(64)
.HasColumnType("character varying(64)");
b.Property<string>("Summary")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.HasKey("Id");
b.HasIndex("CafeId", "BranchId");
b.HasIndex("CafeId", "Category");
b.HasIndex("CafeId", "CreatedAt");
b.ToTable("AuditLogs");
});
modelBuilder.Entity("Meezi.Core.Entities.Branch", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("AccentColor")
.HasColumnType("text");
b.Property<string>("Address")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property<bool>("AutoCutEnabled")
.HasColumnType("boolean");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("City")
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsActive")
.HasColumnType("boolean");
b.Property<string>("KitchenPrinterIp")
.HasMaxLength(45)
.HasColumnType("character varying(45)");
b.Property<int?>("KitchenPrinterPort")
.HasColumnType("integer");
b.Property<string>("LogoUrl")
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property<int>("PaperWidthMm")
.HasColumnType("integer");
b.Property<string>("Phone")
.HasMaxLength(20)
.HasColumnType("character varying(20)");
b.Property<string>("PosDeviceIp")
.HasMaxLength(45)
.HasColumnType("character varying(45)");
b.Property<int?>("PosDevicePort")
.HasColumnType("integer");
b.Property<string>("ReceiptFooter")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property<string>("ReceiptHeader")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property<string>("ReceiptPrinterIp")
.HasMaxLength(45)
.HasColumnType("character varying(45)");
b.Property<int?>("ReceiptPrinterPort")
.HasColumnType("integer");
b.Property<DateTime?>("ScheduledPermanentDeleteAt")
.HasColumnType("timestamp with time zone");
b.Property<decimal?>("TaxRate")
.HasColumnType("numeric");
b.Property<DateTime>("UpdatedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("WelcomeText")
.HasColumnType("text");
b.Property<string>("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<string>("Id")
.HasColumnType("text");
b.Property<string>("BranchId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsAvailable")
.HasColumnType("boolean");
b.Property<string>("MenuItemId")
.IsRequired()
.HasColumnType("text");
b.Property<decimal?>("PriceOverride")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<int?>("SortOrderOverride")
.HasColumnType("integer");
b.Property<DateTime>("UpdatedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("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<string>("Id")
.HasColumnType("text");
b.Property<string>("Address")
.HasColumnType("text");
b.Property<bool>("AllowBranchTaxOverride")
.HasColumnType("boolean");
b.Property<string>("City")
.HasColumnType("text");
b.Property<string>("CoverImageUrl")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<decimal>("DefaultTaxRate")
.HasPrecision(5, 2)
.HasColumnType("numeric(5,2)");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<string>("DigikalaVendorId")
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.Property<string>("DiscoverBadgesJson")
.HasMaxLength(2000)
.HasColumnType("character varying(2000)");
b.Property<string>("DiscoverProfileJson")
.HasMaxLength(8000)
.HasColumnType("character varying(8000)");
b.Property<string>("GalleryJson")
.HasColumnType("text");
b.Property<string>("InstagramHandle")
.HasColumnType("text");
b.Property<bool>("IsSuspended")
.HasColumnType("boolean");
b.Property<bool>("IsVerified")
.HasColumnType("boolean");
b.Property<string>("LogoUrl")
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property<string>("NameAr")
.HasColumnType("text");
b.Property<string>("NameEn")
.HasColumnType("text");
b.Property<string>("Phone")
.HasColumnType("text");
b.Property<DateTime?>("PlanExpiresAt")
.HasColumnType("timestamp with time zone");
b.Property<int>("PlanTier")
.HasColumnType("integer");
b.Property<string>("PreferredLanguage")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Slug")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.Property<string>("SnappfoodVendorId")
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.Property<string>("Tap30VendorId")
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.Property<string>("ThemeJson")
.HasMaxLength(8000)
.HasColumnType("character varying(8000)");
b.Property<string>("WebsiteUrl")
.HasColumnType("text");
b.Property<string>("WorkingHoursJson")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("Slug")
.IsUnique();
b.ToTable("Cafes");
});
modelBuilder.Entity("Meezi.Core.Entities.CafeFeatureOverride", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("FeatureKey")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property<bool>("IsEnabled")
.HasColumnType("boolean");
b.HasKey("Id");
b.HasIndex("CafeId", "FeatureKey")
.IsUnique();
b.ToTable("CafeFeatureOverrides");
});
modelBuilder.Entity("Meezi.Core.Entities.CafeNotification", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Body")
.HasMaxLength(1000)
.HasColumnType("character varying(1000)");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsRead")
.HasColumnType("boolean");
b.Property<DateTime?>("ReadAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("ReferenceId")
.HasMaxLength(64)
.HasColumnType("character varying(64)");
b.Property<string>("TableNumber")
.HasMaxLength(40)
.HasColumnType("character varying(40)");
b.Property<string>("Title")
.IsRequired()
.HasMaxLength(300)
.HasColumnType("character varying(300)");
b.Property<string>("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<string>("Id")
.HasColumnType("text");
b.Property<string>("AuthorName")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property<string>("AuthorPhone")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Comment")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsHidden")
.HasColumnType("boolean");
b.Property<DateTime?>("OwnerRepliedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("OwnerReply")
.HasColumnType("text");
b.Property<int>("Rating")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("CafeId", "CreatedAt");
b.ToTable("CafeReviews");
});
modelBuilder.Entity("Meezi.Core.Entities.CafeReviewPhoto", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("ReviewId")
.IsRequired()
.HasColumnType("text");
b.Property<int>("SortOrder")
.HasColumnType("integer");
b.Property<string>("Url")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.HasKey("Id");
b.HasIndex("ReviewId");
b.ToTable("CafeReviewPhotos");
});
modelBuilder.Entity("Meezi.Core.Entities.CashTransaction", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<decimal>("Amount")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<string>("BranchId")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("CreatedByUserId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<int>("Method")
.HasColumnType("integer");
b.Property<string>("Note")
.HasColumnType("text");
b.Property<string>("ReferenceId")
.HasColumnType("text");
b.Property<string>("ShiftId")
.IsRequired()
.HasColumnType("text");
b.Property<int>("Type")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("BranchId");
b.HasIndex("ShiftId");
b.HasIndex("CafeId", "BranchId");
b.ToTable("CashTransactions");
});
modelBuilder.Entity("Meezi.Core.Entities.ConsumerAccount", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("Name")
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property<string>("Phone")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("character varying(20)");
b.HasKey("Id");
b.HasIndex("Phone")
.IsUnique();
b.ToTable("ConsumerAccounts");
});
modelBuilder.Entity("Meezi.Core.Entities.Coupon", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Code")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("ExpiresAt")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsActive")
.HasColumnType("boolean");
b.Property<decimal?>("MaxDiscount")
.HasColumnType("numeric");
b.Property<decimal?>("MinOrderAmount")
.HasColumnType("numeric");
b.Property<DateTime?>("StartsAt")
.HasColumnType("timestamp with time zone");
b.Property<int?>("TargetGroup")
.HasColumnType("integer");
b.Property<int>("Type")
.HasColumnType("integer");
b.Property<int?>("UsageLimit")
.HasColumnType("integer");
b.Property<int>("UsedCount")
.HasColumnType("integer");
b.Property<decimal>("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<string>("Id")
.HasColumnType("text");
b.Property<string>("BirthDateJalali")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<int>("Group")
.HasColumnType("integer");
b.Property<int>("LoyaltyPoints")
.HasColumnType("integer");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<string>("NationalId")
.HasColumnType("text");
b.Property<string>("Phone")
.IsRequired()
.HasColumnType("text");
b.Property<string>("ReferredBy")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CafeId", "Phone");
b.ToTable("Customers");
});
modelBuilder.Entity("Meezi.Core.Entities.DailyReport", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<decimal>("AvgOrderValue")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<string>("BranchId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<decimal>("CardRevenue")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<decimal>("CashRevenue")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<decimal>("CreditRevenue")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<DateOnly>("Date")
.HasColumnType("date");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime>("GeneratedAt")
.HasColumnType("timestamp with time zone");
b.Property<decimal>("NetIncome")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<string>("TopProducts")
.IsRequired()
.HasColumnType("jsonb");
b.Property<decimal>("TotalExpenses")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<int>("TotalOrders")
.HasColumnType("integer");
b.Property<decimal>("TotalRevenue")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<int>("TotalVoids")
.HasColumnType("integer");
b.Property<decimal>("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<string>("Id")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsActive")
.HasColumnType("boolean");
b.Property<int>("Platform")
.HasColumnType("integer");
b.Property<decimal>("RatePercent")
.HasPrecision(5, 2)
.HasColumnType("numeric(5,2)");
b.Property<DateTime>("UpdatedAt")
.HasColumnType("timestamp with time zone");
b.HasKey("Id");
b.HasIndex("CafeId", "Platform")
.IsUnique();
b.ToTable("DeliveryCommissionRates");
});
modelBuilder.Entity("Meezi.Core.Entities.DemoRequest", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("AdminNotes")
.HasMaxLength(2000)
.HasColumnType("character varying(2000)");
b.Property<string>("BranchCount")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("character varying(20)");
b.Property<string>("BusinessName")
.IsRequired()
.HasMaxLength(300)
.HasColumnType("character varying(300)");
b.Property<string>("ContactName")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property<DateTime?>("ContactedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("Email")
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property<string>("Notes")
.HasMaxLength(2000)
.HasColumnType("character varying(2000)");
b.Property<string>("Phone")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("character varying(20)");
b.Property<string>("Source")
.IsRequired()
.ValueGeneratedOnAdd()
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasDefaultValue("website");
b.Property<int>("Status")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("Status", "CreatedAt");
b.ToTable("DemoRequests");
});
modelBuilder.Entity("Meezi.Core.Entities.Employee", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<decimal>("BaseSalary")
.HasColumnType("numeric");
b.Property<string>("BranchId")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<string>("NationalId")
.HasColumnType("text");
b.Property<string>("Phone")
.IsRequired()
.HasColumnType("text");
b.Property<string>("PinCode")
.HasColumnType("text");
b.Property<int>("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.EmployeeBranchRole", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("BranchId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("EmployeeId")
.IsRequired()
.HasColumnType("text");
b.Property<int>("Role")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("BranchId");
b.HasIndex("CafeId", "BranchId");
b.HasIndex("EmployeeId", "BranchId")
.IsUnique()
.HasFilter("\"DeletedAt\" IS NULL");
b.ToTable("EmployeeBranchRoles");
});
modelBuilder.Entity("Meezi.Core.Entities.EmployeeSalary", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<decimal>("BaseSalary")
.HasColumnType("numeric");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<decimal>("Deductions")
.HasColumnType("numeric");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("EmployeeId")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("IsPaid")
.HasColumnType("boolean");
b.Property<string>("MonthYear")
.IsRequired()
.HasColumnType("text");
b.Property<decimal>("NetSalary")
.HasColumnType("numeric");
b.Property<decimal>("OvertimePay")
.HasColumnType("numeric");
b.HasKey("Id");
b.HasIndex("EmployeeId", "MonthYear")
.IsUnique();
b.ToTable("EmployeeSalaries");
});
modelBuilder.Entity("Meezi.Core.Entities.EmployeeSchedule", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<int>("DayOfWeek")
.HasColumnType("integer");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("EmployeeId")
.IsRequired()
.HasColumnType("text");
b.Property<int>("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<string>("Id")
.HasColumnType("text");
b.Property<decimal>("Amount")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<string>("BranchId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<int>("Category")
.HasColumnType("integer");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("CreatedByUserId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("Note")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property<string>("ReceiptImageUrl")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property<string>("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<string>("Id")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<decimal>("LowStockWarningPercent")
.HasPrecision(5, 2)
.HasColumnType("numeric(5,2)");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property<decimal>("ParLevel")
.HasPrecision(18, 3)
.HasColumnType("numeric(18,3)");
b.Property<decimal>("QuantityOnHand")
.HasPrecision(18, 3)
.HasColumnType("numeric(18,3)");
b.Property<decimal>("ReorderLevel")
.HasPrecision(18, 3)
.HasColumnType("numeric(18,3)");
b.Property<string>("Unit")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("character varying(50)");
b.Property<decimal>("UnitCost")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.HasKey("Id");
b.HasIndex("CafeId");
b.ToTable("Ingredients");
});
modelBuilder.Entity("Meezi.Core.Entities.KitchenStation", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("BranchId")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.Property<string>("PrinterIp")
.HasMaxLength(45)
.HasColumnType("character varying(45)");
b.Property<int>("PrinterPort")
.HasColumnType("integer");
b.Property<int>("SortOrder")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("BranchId");
b.HasIndex("CafeId", "SortOrder");
b.ToTable("KitchenStations");
});
modelBuilder.Entity("Meezi.Core.Entities.LeaveRequest", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("EmployeeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateOnly>("EndDate")
.HasColumnType("date");
b.Property<string>("Reason")
.HasColumnType("text");
b.Property<string>("ReviewedBy")
.HasColumnType("text");
b.Property<DateOnly>("StartDate")
.HasColumnType("date");
b.Property<int>("Status")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("EmployeeId");
b.ToTable("LeaveRequests");
});
modelBuilder.Entity("Meezi.Core.Entities.MenuCategory", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<decimal>("DiscountPercent")
.HasColumnType("numeric");
b.Property<string>("Icon")
.HasMaxLength(32)
.HasColumnType("character varying(32)");
b.Property<string>("IconPresetId")
.HasMaxLength(48)
.HasColumnType("character varying(48)");
b.Property<string>("IconStyle")
.HasMaxLength(16)
.HasColumnType("character varying(16)");
b.Property<string>("ImageUrl")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property<bool>("IsActive")
.HasColumnType("boolean");
b.Property<string>("KitchenStationId")
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<string>("NameAr")
.HasColumnType("text");
b.Property<string>("NameEn")
.HasColumnType("text");
b.Property<int>("SortOrder")
.HasColumnType("integer");
b.Property<string>("TaxId")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CafeId");
b.HasIndex("KitchenStationId");
b.HasIndex("TaxId");
b.ToTable("MenuCategories");
});
modelBuilder.Entity("Meezi.Core.Entities.MenuItem", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("CategoryId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("Description")
.HasColumnType("text");
b.Property<decimal>("DiscountPercent")
.HasColumnType("numeric");
b.Property<string>("ImageUrl")
.HasColumnType("text");
b.Property<bool>("IsAvailable")
.HasColumnType("boolean");
b.Property<string>("Model3dUrl")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<string>("NameAr")
.HasColumnType("text");
b.Property<string>("NameEn")
.HasColumnType("text");
b.Property<decimal>("Price")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<string>("VideoUrl")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CafeId");
b.HasIndex("CategoryId");
b.ToTable("MenuItems");
});
modelBuilder.Entity("Meezi.Core.Entities.MenuItemIngredient", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("IngredientId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("MenuItemId")
.IsRequired()
.HasColumnType("text");
b.Property<decimal>("QuantityPerUnit")
.HasPrecision(18, 3)
.HasColumnType("numeric(18,3)");
b.HasKey("Id");
b.HasIndex("IngredientId");
b.HasIndex("MenuItemId");
b.HasIndex("CafeId", "MenuItemId", "IngredientId")
.IsUnique();
b.ToTable("MenuItemIngredients");
});
modelBuilder.Entity("Meezi.Core.Entities.Order", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("BranchId")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("CancelReason")
.HasColumnType("text");
b.Property<DateTime?>("CancelledAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("CancelledByEmployeeId")
.HasColumnType("text");
b.Property<string>("CouponId")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("CustomerId")
.HasColumnType("text");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("DeliveryMetaJson")
.HasMaxLength(4000)
.HasColumnType("character varying(4000)");
b.Property<int?>("DeliveryPlatform")
.HasColumnType("integer");
b.Property<decimal>("DiscountAmount")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<int>("DisplayNumber")
.HasColumnType("integer");
b.Property<string>("EmployeeId")
.HasColumnType("text");
b.Property<string>("ExternalOrderId")
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property<string>("GuestName")
.HasColumnType("text");
b.Property<string>("GuestPhone")
.HasColumnType("text");
b.Property<string>("GuestTrackingToken")
.HasMaxLength(64)
.HasColumnType("character varying(64)");
b.Property<int>("OrderType")
.HasColumnType("integer");
b.Property<decimal>("PlatformCommission")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<string>("ReservationId")
.HasColumnType("text");
b.Property<string>("SnappfoodOrderId")
.HasColumnType("text");
b.Property<int>("Source")
.HasColumnType("integer");
b.Property<int>("Status")
.HasColumnType("integer");
b.Property<DateTime>("StatusUpdatedAt")
.HasColumnType("timestamp with time zone");
b.Property<decimal>("Subtotal")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<string>("TableId")
.HasColumnType("text");
b.Property<decimal>("TaxTotal")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<decimal>("Total")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.HasKey("Id");
b.HasIndex("BranchId");
b.HasIndex("CouponId");
b.HasIndex("CustomerId");
b.HasIndex("EmployeeId");
b.HasIndex("GuestTrackingToken");
b.HasIndex("ReservationId");
b.HasIndex("TableId");
b.HasIndex("CafeId", "DisplayNumber")
.IsUnique();
b.HasIndex("CafeId", "DeliveryPlatform", "ExternalOrderId");
b.ToTable("Orders");
});
modelBuilder.Entity("Meezi.Core.Entities.OrderItem", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsVoided")
.HasColumnType("boolean");
b.Property<string>("MenuItemId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Notes")
.HasColumnType("text");
b.Property<string>("OrderId")
.IsRequired()
.HasColumnType("text");
b.Property<int>("Quantity")
.HasColumnType("integer");
b.Property<decimal>("UnitPrice")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<DateTime?>("VoidedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("VoidedByUserId")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("MenuItemId");
b.HasIndex("OrderId");
b.ToTable("OrderItems");
});
modelBuilder.Entity("Meezi.Core.Entities.Payment", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<decimal>("Amount")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<int>("Method")
.HasColumnType("integer");
b.Property<string>("OrderId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Reference")
.HasColumnType("text");
b.Property<int>("Status")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("OrderId");
b.ToTable("Payments");
});
modelBuilder.Entity("Meezi.Core.Entities.PlatformFeature", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("DisplayNameEn")
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property<string>("DisplayNameFa")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property<bool>("IsEnabledGlobally")
.HasColumnType("boolean");
b.Property<string>("Key")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property<string>("ModuleGroup")
.IsRequired()
.HasMaxLength(60)
.HasColumnType("character varying(60)");
b.Property<DateTime>("UpdatedAt")
.HasColumnType("timestamp with time zone");
b.HasKey("Id");
b.HasIndex("Key")
.IsUnique();
b.ToTable("PlatformFeatures");
});
modelBuilder.Entity("Meezi.Core.Entities.PlatformPlanDefinition", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("DisplayNameEn")
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property<string>("DisplayNameFa")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property<string>("FeaturesJson")
.HasMaxLength(4000)
.HasColumnType("character varying(4000)");
b.Property<bool>("IsActive")
.HasColumnType("boolean");
b.Property<bool>("IsBillableOnline")
.HasColumnType("boolean");
b.Property<string>("LimitsJson")
.IsRequired()
.HasMaxLength(4000)
.HasColumnType("character varying(4000)");
b.Property<decimal>("MonthlyPriceToman")
.HasPrecision(18)
.HasColumnType("numeric(18,0)");
b.Property<int>("SortOrder")
.HasColumnType("integer");
b.Property<int>("Tier")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("Tier")
.IsUnique();
b.ToTable("PlatformPlanDefinitions");
});
modelBuilder.Entity("Meezi.Core.Entities.PlatformSetting", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Category")
.IsRequired()
.HasMaxLength(60)
.HasColumnType("character varying(60)");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("DescriptionFa")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property<string>("Key")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property<DateTime>("UpdatedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("Value")
.IsRequired()
.HasMaxLength(8000)
.HasColumnType("character varying(8000)");
b.HasKey("Id");
b.HasIndex("Key")
.IsUnique();
b.ToTable("PlatformSettings");
});
modelBuilder.Entity("Meezi.Core.Entities.PushDevice", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("City")
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.Property<string>("ConsumerAccountId")
.HasMaxLength(64)
.HasColumnType("character varying(64)");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime>("LastSeenAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("Platform")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("character varying(20)");
b.Property<string>("Token")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.HasKey("Id");
b.HasIndex("City");
b.HasIndex("Token")
.IsUnique();
b.ToTable("PushDevices");
});
modelBuilder.Entity("Meezi.Core.Entities.QueueTicket", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("BranchId")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("CustomerLabel")
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime>("IssuedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("IssuedByUserId")
.HasColumnType("text");
b.Property<int>("Number")
.HasColumnType("integer");
b.Property<string>("OrderId")
.HasColumnType("text");
b.Property<DateOnly>("ServiceDate")
.HasColumnType("date");
b.Property<int>("Status")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("BranchId");
b.HasIndex("OrderId");
b.HasIndex("CafeId", "BranchId", "ServiceDate", "Number")
.IsUnique();
b.ToTable("QueueTickets");
});
modelBuilder.Entity("Meezi.Core.Entities.Shift", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("BranchId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime?>("ClosedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("ClosedByUserId")
.HasColumnType("text");
b.Property<decimal?>("ClosingCash")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<decimal?>("Discrepancy")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<decimal>("ExpectedCash")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<DateTime>("OpenedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("OpenedByUserId")
.IsRequired()
.HasColumnType("text");
b.Property<decimal>("OpeningCash")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<int>("Status")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("CafeId");
b.HasIndex("ClosedByUserId");
b.HasIndex("OpenedByUserId");
b.HasIndex("BranchId", "Status");
b.ToTable("RegisterShifts", (string)null);
});
modelBuilder.Entity("Meezi.Core.Entities.StockMovement", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("BranchId")
.HasMaxLength(64)
.HasColumnType("character varying(64)");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<decimal>("Delta")
.HasPrecision(18, 3)
.HasColumnType("numeric(18,3)");
b.Property<string>("ExpenseId")
.HasMaxLength(64)
.HasColumnType("character varying(64)");
b.Property<string>("IngredientId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Kind")
.IsRequired()
.HasMaxLength(30)
.HasColumnType("character varying(30)");
b.Property<string>("Note")
.HasColumnType("text");
b.Property<string>("OrderId")
.HasMaxLength(64)
.HasColumnType("character varying(64)");
b.Property<decimal?>("TotalCostToman")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.HasKey("Id");
b.HasIndex("IngredientId");
b.HasIndex("CafeId", "OrderId");
b.ToTable("StockMovements");
});
modelBuilder.Entity("Meezi.Core.Entities.SubscriptionPayment", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<long>("AmountRials")
.HasColumnType("bigint");
b.Property<decimal>("AmountToman")
.HasPrecision(18, 2)
.HasColumnType("numeric(18,2)");
b.Property<string>("Authority")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<int>("Months")
.HasColumnType("integer");
b.Property<int>("PlanTier")
.HasColumnType("integer");
b.Property<int>("Provider")
.HasColumnType("integer");
b.Property<string>("RefId")
.HasColumnType("text");
b.Property<int>("Status")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("Authority");
b.HasIndex("CafeId");
b.ToTable("SubscriptionPayments");
});
modelBuilder.Entity("Meezi.Core.Entities.SupportTicket", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("AssignedAdminId")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime?>("ClosedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("CreatedByEmployeeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<int>("Priority")
.HasColumnType("integer");
b.Property<int>("Status")
.HasColumnType("integer");
b.Property<string>("Subject")
.IsRequired()
.HasMaxLength(300)
.HasColumnType("character varying(300)");
b.Property<DateTime>("UpdatedAt")
.HasColumnType("timestamp with time zone");
b.HasKey("Id");
b.HasIndex("CreatedByEmployeeId");
b.HasIndex("CafeId", "Status", "UpdatedAt");
b.ToTable("SupportTickets");
});
modelBuilder.Entity("Meezi.Core.Entities.SupportTicketMessage", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Body")
.IsRequired()
.HasMaxLength(8000)
.HasColumnType("character varying(8000)");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("SenderId")
.IsRequired()
.HasColumnType("text");
b.Property<int>("SenderKind")
.HasColumnType("integer");
b.Property<string>("TicketId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("TicketId", "CreatedAt");
b.ToTable("SupportTicketMessages");
});
modelBuilder.Entity("Meezi.Core.Entities.SystemAdmin", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsActive")
.HasColumnType("boolean");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property<string>("Phone")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("character varying(20)");
b.HasKey("Id");
b.HasIndex("Phone")
.IsUnique();
b.ToTable("SystemAdmins");
});
modelBuilder.Entity("Meezi.Core.Entities.Table", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("BranchId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<int>("Capacity")
.HasColumnType("integer");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("Floor")
.HasColumnType("text");
b.Property<string>("ImageUrl")
.HasColumnType("text");
b.Property<bool>("IsActive")
.HasColumnType("boolean");
b.Property<bool>("IsCleaning")
.HasColumnType("boolean");
b.Property<string>("Number")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("character varying(50)");
b.Property<string>("QrCode")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SectionId")
.HasColumnType("text");
b.Property<int>("SortOrder")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasDefaultValue(0);
b.Property<string>("VideoUrl")
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CafeId");
b.HasIndex("QrCode")
.IsUnique();
b.HasIndex("SectionId");
b.HasIndex("BranchId", "SectionId", "SortOrder");
b.ToTable("Tables");
});
modelBuilder.Entity("Meezi.Core.Entities.TableReservation", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("CustomerId")
.HasColumnType("text");
b.Property<DateOnly>("Date")
.HasColumnType("date");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("GuestName")
.IsRequired()
.HasColumnType("text");
b.Property<string>("GuestPhone")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Notes")
.HasColumnType("text");
b.Property<int>("PartySize")
.HasColumnType("integer");
b.Property<int>("Status")
.HasColumnType("integer");
b.Property<string>("TableId")
.HasColumnType("text");
b.Property<TimeOnly>("Time")
.HasColumnType("time without time zone");
b.HasKey("Id");
b.HasIndex("CustomerId");
b.HasIndex("TableId");
b.HasIndex("CafeId", "Date", "Time");
b.ToTable("TableReservations");
});
modelBuilder.Entity("Meezi.Core.Entities.TableSection", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("BranchId")
.IsRequired()
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsActive")
.HasColumnType("boolean");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.Property<int>("SortOrder")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("CafeId");
b.HasIndex("BranchId", "Name");
b.ToTable("TableSections");
});
modelBuilder.Entity("Meezi.Core.Entities.Tax", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("CafeId")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<bool>("IsCompound")
.HasColumnType("boolean");
b.Property<bool>("IsDefault")
.HasColumnType("boolean");
b.Property<bool>("IsRequired")
.HasColumnType("boolean");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<decimal>("Rate")
.HasPrecision(5, 2)
.HasColumnType("numeric(5,2)");
b.HasKey("Id");
b.HasIndex("CafeId");
b.ToTable("Taxes");
});
modelBuilder.Entity("Meezi.Core.Entities.WebhookLog", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<int>("AttemptCount")
.HasColumnType("integer");
b.Property<string>("CafeId")
.HasColumnType("text");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("ErrorMessage")
.HasMaxLength(2000)
.HasColumnType("character varying(2000)");
b.Property<string>("ExternalOrderId")
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property<string>("MeeziOrderId")
.HasMaxLength(50)
.HasColumnType("character varying(50)");
b.Property<int>("Platform")
.HasColumnType("integer");
b.Property<bool>("Processed")
.HasColumnType("boolean");
b.Property<DateTime?>("ProcessedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("RawBody")
.IsRequired()
.HasColumnType("text");
b.Property<string>("SignatureHeader")
.HasMaxLength(256)
.HasColumnType("character varying(256)");
b.Property<bool>("SignatureValid")
.HasColumnType("boolean");
b.Property<bool>("Success")
.HasColumnType("boolean");
b.HasKey("Id");
b.HasIndex("CafeId");
b.HasIndex("Platform", "CreatedAt");
b.ToTable("WebhookLogs");
});
modelBuilder.Entity("Meezi.Core.Entities.WebsiteBlogPost", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("Author")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property<string>("CategoryEn")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.Property<string>("CategoryFa")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.Property<string>("ContentEn")
.IsRequired()
.HasColumnType("text");
b.Property<string>("ContentFa")
.IsRequired()
.HasColumnType("text");
b.Property<string>("CoverImage")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("ExcerptEn")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("character varying(1000)");
b.Property<string>("ExcerptFa")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("character varying(1000)");
b.Property<bool>("IsPublished")
.HasColumnType("boolean");
b.Property<DateTime?>("PublishedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("Slug")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property<string>("TagsJson")
.IsRequired()
.ValueGeneratedOnAdd()
.HasMaxLength(2000)
.HasColumnType("character varying(2000)")
.HasDefaultValue("[]");
b.Property<string>("TitleEn")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.Property<string>("TitleFa")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.Property<int>("ViewCount")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("Slug")
.IsUnique();
b.HasIndex("IsPublished", "PublishedAt");
b.ToTable("WebsiteBlogPosts");
});
modelBuilder.Entity("Meezi.Core.Entities.WebsiteComment", b =>
{
b.Property<string>("Id")
.HasColumnType("text");
b.Property<string>("AuthorEmail")
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property<string>("AuthorName")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.Property<string>("Content")
.IsRequired()
.HasMaxLength(3000)
.HasColumnType("character varying(3000)");
b.Property<DateTime>("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property<DateTime?>("DeletedAt")
.HasColumnType("timestamp with time zone");
b.Property<string>("IpAddress")
.HasMaxLength(50)
.HasColumnType("character varying(50)");
b.Property<bool>("IsApproved")
.HasColumnType("boolean");
b.Property<string>("PostSlug")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.HasKey("Id");
b.HasIndex("PostSlug", "IsApproved", "CreatedAt");
b.ToTable("WebsiteComments");
});
modelBuilder.Entity("Meezi.Core.Entities.Attendance", b =>
{
b.HasOne("Meezi.Core.Entities.Employee", "Employee")
.WithMany("Attendances")
.HasForeignKey("EmployeeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Employee");
});
modelBuilder.Entity("Meezi.Core.Entities.AuditLog", b =>
{
b.HasOne("Meezi.Core.Entities.Cafe", null)
.WithMany()
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Meezi.Core.Entities.Branch", b =>
{
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany("Branches")
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Cafe");
});
modelBuilder.Entity("Meezi.Core.Entities.BranchMenuItemOverride", b =>
{
b.HasOne("Meezi.Core.Entities.Branch", "Branch")
.WithMany()
.HasForeignKey("BranchId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Meezi.Core.Entities.MenuItem", "MenuItem")
.WithMany("BranchOverrides")
.HasForeignKey("MenuItemId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Branch");
b.Navigation("MenuItem");
});
modelBuilder.Entity("Meezi.Core.Entities.CafeFeatureOverride", b =>
{
b.HasOne("Meezi.Core.Entities.Cafe", null)
.WithMany()
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Meezi.Core.Entities.CafeReview", b =>
{
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany("Reviews")
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Cafe");
});
modelBuilder.Entity("Meezi.Core.Entities.CafeReviewPhoto", b =>
{
b.HasOne("Meezi.Core.Entities.CafeReview", "Review")
.WithMany("Photos")
.HasForeignKey("ReviewId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Review");
});
modelBuilder.Entity("Meezi.Core.Entities.CashTransaction", b =>
{
b.HasOne("Meezi.Core.Entities.Branch", "Branch")
.WithMany()
.HasForeignKey("BranchId")
.OnDelete(DeleteBehavior.SetNull);
b.HasOne("Meezi.Core.Entities.Shift", "Shift")
.WithMany("Transactions")
.HasForeignKey("ShiftId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Branch");
b.Navigation("Shift");
});
modelBuilder.Entity("Meezi.Core.Entities.Coupon", b =>
{
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany("Coupons")
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Cafe");
});
modelBuilder.Entity("Meezi.Core.Entities.Customer", b =>
{
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany("Customers")
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Cafe");
});
modelBuilder.Entity("Meezi.Core.Entities.DailyReport", b =>
{
b.HasOne("Meezi.Core.Entities.Branch", "Branch")
.WithMany()
.HasForeignKey("BranchId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Branch");
});
modelBuilder.Entity("Meezi.Core.Entities.DeliveryCommissionRate", b =>
{
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany()
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Cafe");
});
modelBuilder.Entity("Meezi.Core.Entities.Employee", b =>
{
b.HasOne("Meezi.Core.Entities.Branch", "Branch")
.WithMany("Staff")
.HasForeignKey("BranchId")
.OnDelete(DeleteBehavior.SetNull);
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany("Employees")
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Branch");
b.Navigation("Cafe");
});
modelBuilder.Entity("Meezi.Core.Entities.EmployeeBranchRole", b =>
{
b.HasOne("Meezi.Core.Entities.Branch", "Branch")
.WithMany("StaffRoles")
.HasForeignKey("BranchId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Meezi.Core.Entities.Employee", "Employee")
.WithMany("BranchRoles")
.HasForeignKey("EmployeeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Branch");
b.Navigation("Employee");
});
modelBuilder.Entity("Meezi.Core.Entities.EmployeeSalary", b =>
{
b.HasOne("Meezi.Core.Entities.Employee", "Employee")
.WithMany("Salaries")
.HasForeignKey("EmployeeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Employee");
});
modelBuilder.Entity("Meezi.Core.Entities.EmployeeSchedule", b =>
{
b.HasOne("Meezi.Core.Entities.Employee", "Employee")
.WithMany("Schedules")
.HasForeignKey("EmployeeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Employee");
});
modelBuilder.Entity("Meezi.Core.Entities.Expense", b =>
{
b.HasOne("Meezi.Core.Entities.Branch", "Branch")
.WithMany()
.HasForeignKey("BranchId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Meezi.Core.Entities.Shift", "Shift")
.WithMany()
.HasForeignKey("ShiftId")
.OnDelete(DeleteBehavior.SetNull);
b.Navigation("Branch");
b.Navigation("Shift");
});
modelBuilder.Entity("Meezi.Core.Entities.Ingredient", b =>
{
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany("Ingredients")
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Cafe");
});
modelBuilder.Entity("Meezi.Core.Entities.KitchenStation", b =>
{
b.HasOne("Meezi.Core.Entities.Branch", "Branch")
.WithMany()
.HasForeignKey("BranchId")
.OnDelete(DeleteBehavior.SetNull);
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany()
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Branch");
b.Navigation("Cafe");
});
modelBuilder.Entity("Meezi.Core.Entities.LeaveRequest", b =>
{
b.HasOne("Meezi.Core.Entities.Employee", "Employee")
.WithMany("LeaveRequests")
.HasForeignKey("EmployeeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Employee");
});
modelBuilder.Entity("Meezi.Core.Entities.MenuCategory", b =>
{
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany("MenuCategories")
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Meezi.Core.Entities.KitchenStation", "KitchenStation")
.WithMany("Categories")
.HasForeignKey("KitchenStationId")
.OnDelete(DeleteBehavior.SetNull);
b.HasOne("Meezi.Core.Entities.Tax", "Tax")
.WithMany("MenuCategories")
.HasForeignKey("TaxId")
.OnDelete(DeleteBehavior.SetNull);
b.Navigation("Cafe");
b.Navigation("KitchenStation");
b.Navigation("Tax");
});
modelBuilder.Entity("Meezi.Core.Entities.MenuItem", b =>
{
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany("MenuItems")
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Meezi.Core.Entities.MenuCategory", "Category")
.WithMany("MenuItems")
.HasForeignKey("CategoryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Cafe");
b.Navigation("Category");
});
modelBuilder.Entity("Meezi.Core.Entities.MenuItemIngredient", b =>
{
b.HasOne("Meezi.Core.Entities.Ingredient", "Ingredient")
.WithMany("MenuItemRecipes")
.HasForeignKey("IngredientId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Meezi.Core.Entities.MenuItem", "MenuItem")
.WithMany("RecipeIngredients")
.HasForeignKey("MenuItemId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Ingredient");
b.Navigation("MenuItem");
});
modelBuilder.Entity("Meezi.Core.Entities.Order", b =>
{
b.HasOne("Meezi.Core.Entities.Branch", "Branch")
.WithMany("Orders")
.HasForeignKey("BranchId")
.OnDelete(DeleteBehavior.SetNull);
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany("Orders")
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Meezi.Core.Entities.Coupon", "Coupon")
.WithMany("Orders")
.HasForeignKey("CouponId")
.OnDelete(DeleteBehavior.SetNull);
b.HasOne("Meezi.Core.Entities.Customer", "Customer")
.WithMany("Orders")
.HasForeignKey("CustomerId")
.OnDelete(DeleteBehavior.SetNull);
b.HasOne("Meezi.Core.Entities.Employee", "Employee")
.WithMany("Orders")
.HasForeignKey("EmployeeId")
.OnDelete(DeleteBehavior.SetNull);
b.HasOne("Meezi.Core.Entities.TableReservation", "Reservation")
.WithMany()
.HasForeignKey("ReservationId")
.OnDelete(DeleteBehavior.SetNull);
b.HasOne("Meezi.Core.Entities.Table", "Table")
.WithMany("Orders")
.HasForeignKey("TableId")
.OnDelete(DeleteBehavior.SetNull);
b.Navigation("Branch");
b.Navigation("Cafe");
b.Navigation("Coupon");
b.Navigation("Customer");
b.Navigation("Employee");
b.Navigation("Reservation");
b.Navigation("Table");
});
modelBuilder.Entity("Meezi.Core.Entities.OrderItem", b =>
{
b.HasOne("Meezi.Core.Entities.MenuItem", "MenuItem")
.WithMany("OrderItems")
.HasForeignKey("MenuItemId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.HasOne("Meezi.Core.Entities.Order", "Order")
.WithMany("Items")
.HasForeignKey("OrderId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("MenuItem");
b.Navigation("Order");
});
modelBuilder.Entity("Meezi.Core.Entities.Payment", b =>
{
b.HasOne("Meezi.Core.Entities.Order", "Order")
.WithMany("Payments")
.HasForeignKey("OrderId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Order");
});
modelBuilder.Entity("Meezi.Core.Entities.QueueTicket", b =>
{
b.HasOne("Meezi.Core.Entities.Branch", "Branch")
.WithMany()
.HasForeignKey("BranchId")
.OnDelete(DeleteBehavior.SetNull);
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany()
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Meezi.Core.Entities.Order", "Order")
.WithMany()
.HasForeignKey("OrderId")
.OnDelete(DeleteBehavior.SetNull);
b.Navigation("Branch");
b.Navigation("Cafe");
b.Navigation("Order");
});
modelBuilder.Entity("Meezi.Core.Entities.Shift", b =>
{
b.HasOne("Meezi.Core.Entities.Branch", "Branch")
.WithMany()
.HasForeignKey("BranchId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany()
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Meezi.Core.Entities.Employee", "ClosedBy")
.WithMany()
.HasForeignKey("ClosedByUserId")
.OnDelete(DeleteBehavior.SetNull);
b.HasOne("Meezi.Core.Entities.Employee", "OpenedBy")
.WithMany()
.HasForeignKey("OpenedByUserId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("Branch");
b.Navigation("Cafe");
b.Navigation("ClosedBy");
b.Navigation("OpenedBy");
});
modelBuilder.Entity("Meezi.Core.Entities.StockMovement", b =>
{
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany()
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Meezi.Core.Entities.Ingredient", "Ingredient")
.WithMany("Movements")
.HasForeignKey("IngredientId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Cafe");
b.Navigation("Ingredient");
});
modelBuilder.Entity("Meezi.Core.Entities.SubscriptionPayment", b =>
{
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany("SubscriptionPayments")
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Cafe");
});
modelBuilder.Entity("Meezi.Core.Entities.SupportTicket", b =>
{
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany()
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Meezi.Core.Entities.Employee", "CreatedByEmployee")
.WithMany()
.HasForeignKey("CreatedByEmployeeId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("Cafe");
b.Navigation("CreatedByEmployee");
});
modelBuilder.Entity("Meezi.Core.Entities.SupportTicketMessage", b =>
{
b.HasOne("Meezi.Core.Entities.SupportTicket", "Ticket")
.WithMany("Messages")
.HasForeignKey("TicketId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Ticket");
});
modelBuilder.Entity("Meezi.Core.Entities.Table", b =>
{
b.HasOne("Meezi.Core.Entities.Branch", "Branch")
.WithMany("Tables")
.HasForeignKey("BranchId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany("Tables")
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Meezi.Core.Entities.TableSection", "Section")
.WithMany("Tables")
.HasForeignKey("SectionId")
.OnDelete(DeleteBehavior.SetNull);
b.Navigation("Branch");
b.Navigation("Cafe");
b.Navigation("Section");
});
modelBuilder.Entity("Meezi.Core.Entities.TableReservation", b =>
{
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany()
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Meezi.Core.Entities.Customer", "Customer")
.WithMany()
.HasForeignKey("CustomerId")
.OnDelete(DeleteBehavior.SetNull);
b.HasOne("Meezi.Core.Entities.Table", "Table")
.WithMany()
.HasForeignKey("TableId")
.OnDelete(DeleteBehavior.SetNull);
b.Navigation("Cafe");
b.Navigation("Customer");
b.Navigation("Table");
});
modelBuilder.Entity("Meezi.Core.Entities.TableSection", b =>
{
b.HasOne("Meezi.Core.Entities.Branch", "Branch")
.WithMany("Sections")
.HasForeignKey("BranchId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Branch");
});
modelBuilder.Entity("Meezi.Core.Entities.Tax", b =>
{
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany("Taxes")
.HasForeignKey("CafeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Cafe");
});
modelBuilder.Entity("Meezi.Core.Entities.WebhookLog", b =>
{
b.HasOne("Meezi.Core.Entities.Cafe", "Cafe")
.WithMany()
.HasForeignKey("CafeId");
b.Navigation("Cafe");
});
modelBuilder.Entity("Meezi.Core.Entities.WebsiteComment", b =>
{
b.HasOne("Meezi.Core.Entities.WebsiteBlogPost", "Post")
.WithMany("Comments")
.HasForeignKey("PostSlug")
.HasPrincipalKey("Slug")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Post");
});
modelBuilder.Entity("Meezi.Core.Entities.Branch", b =>
{
b.Navigation("Orders");
b.Navigation("Sections");
b.Navigation("Staff");
b.Navigation("StaffRoles");
b.Navigation("Tables");
});
modelBuilder.Entity("Meezi.Core.Entities.Cafe", b =>
{
b.Navigation("Branches");
b.Navigation("Coupons");
b.Navigation("Customers");
b.Navigation("Employees");
b.Navigation("Ingredients");
b.Navigation("MenuCategories");
b.Navigation("MenuItems");
b.Navigation("Orders");
b.Navigation("Reviews");
b.Navigation("SubscriptionPayments");
b.Navigation("Tables");
b.Navigation("Taxes");
});
modelBuilder.Entity("Meezi.Core.Entities.CafeReview", b =>
{
b.Navigation("Photos");
});
modelBuilder.Entity("Meezi.Core.Entities.Coupon", b =>
{
b.Navigation("Orders");
});
modelBuilder.Entity("Meezi.Core.Entities.Customer", b =>
{
b.Navigation("Orders");
});
modelBuilder.Entity("Meezi.Core.Entities.Employee", b =>
{
b.Navigation("Attendances");
b.Navigation("BranchRoles");
b.Navigation("LeaveRequests");
b.Navigation("Orders");
b.Navigation("Salaries");
b.Navigation("Schedules");
});
modelBuilder.Entity("Meezi.Core.Entities.Ingredient", b =>
{
b.Navigation("MenuItemRecipes");
b.Navigation("Movements");
});
modelBuilder.Entity("Meezi.Core.Entities.KitchenStation", b =>
{
b.Navigation("Categories");
});
modelBuilder.Entity("Meezi.Core.Entities.MenuCategory", b =>
{
b.Navigation("MenuItems");
});
modelBuilder.Entity("Meezi.Core.Entities.MenuItem", b =>
{
b.Navigation("BranchOverrides");
b.Navigation("OrderItems");
b.Navigation("RecipeIngredients");
});
modelBuilder.Entity("Meezi.Core.Entities.Order", b =>
{
b.Navigation("Items");
b.Navigation("Payments");
});
modelBuilder.Entity("Meezi.Core.Entities.Shift", b =>
{
b.Navigation("Transactions");
});
modelBuilder.Entity("Meezi.Core.Entities.SupportTicket", b =>
{
b.Navigation("Messages");
});
modelBuilder.Entity("Meezi.Core.Entities.Table", b =>
{
b.Navigation("Orders");
});
modelBuilder.Entity("Meezi.Core.Entities.TableSection", b =>
{
b.Navigation("Tables");
});
modelBuilder.Entity("Meezi.Core.Entities.Tax", b =>
{
b.Navigation("MenuCategories");
});
modelBuilder.Entity("Meezi.Core.Entities.WebsiteBlogPost", b =>
{
b.Navigation("Comments");
});
#pragma warning restore 612, 618
}
}
}