backend phase 11

This commit is contained in:
hamid
2026-07-09 02:13:30 +03:30
parent 23605591eb
commit 465f75c29e
78 changed files with 9555 additions and 27 deletions
@@ -0,0 +1,313 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional
namespace Baya.Infrastructure.Persistence.Migrations
{
/// <inheritdoc />
public partial class RefundsClawbacksInvoices : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "InvoiceNumberSequences",
schema: "payments",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false),
NextValue = table.Column<long>(type: "bigint", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_InvoiceNumberSequences", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Invoices",
schema: "payments",
columns: table => new
{
Id = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
BookingId = table.Column<long>(type: "bigint", nullable: false),
InvoiceNumber = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: false),
IssuingEntityType = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: false),
PartnerCenterId = table.Column<long>(type: "bigint", nullable: true),
GrossIrr = table.Column<long>(type: "bigint", nullable: false),
PlatformCommissionIrr = table.Column<long>(type: "bigint", nullable: false),
BnplCommissionIrr = table.Column<long>(type: "bigint", nullable: true),
VatRate = table.Column<decimal>(type: "decimal(5,4)", precision: 5, scale: 4, nullable: false),
VatIrr = table.Column<long>(type: "bigint", nullable: false),
MoadianReferenceNumber = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true),
MoadianStatus = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: true),
PdfStorageKey = table.Column<string>(type: "nvarchar(512)", maxLength: 512, nullable: true),
IssuedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
DeletedAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true),
CreatedAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false),
ModifiedAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true),
CreatedById = table.Column<int>(type: "int", nullable: true),
ModifiedById = table.Column<int>(type: "int", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Invoices", x => x.Id);
table.ForeignKey(
name: "FK_Invoices_Bookings_BookingId",
column: x => x.BookingId,
principalSchema: "booking",
principalTable: "Bookings",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "Refunds",
schema: "payments",
columns: table => new
{
Id = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
PaymentTransactionId = table.Column<long>(type: "bigint", nullable: false),
BookingId = table.Column<long>(type: "bigint", nullable: false),
RequestedByCustomerId = table.Column<long>(type: "bigint", nullable: false),
TicketId = table.Column<long>(type: "bigint", nullable: true),
Amount = table.Column<long>(type: "bigint", nullable: false),
PlatformFeeRefundedIrr = table.Column<long>(type: "bigint", nullable: false),
NursePayoutRefundedIrr = table.Column<long>(type: "bigint", nullable: false),
RefundPercentage = table.Column<decimal>(type: "decimal(6,4)", precision: 6, scale: 4, nullable: false),
RefundChannel = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: false),
ReasonCategory = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ReasonNotes = table.Column<string>(type: "nvarchar(1000)", maxLength: 1000, nullable: true),
Status = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: false),
ApprovedByAdminId = table.Column<int>(type: "int", nullable: true),
RejectedReason = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
AdminNotes = table.Column<string>(type: "nvarchar(1000)", maxLength: 1000, nullable: true),
GatewayRefundReference = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: true),
ExternalRevertReference = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: true),
ExpectedCustomerRefundEta = table.Column<DateOnly>(type: "date", nullable: true),
CancellationPolicyCode = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
RefundPercentageApplied = table.Column<decimal>(type: "decimal(5,2)", precision: 5, scale: 2, nullable: true),
ProcessedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
DeletedAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true),
CreatedAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false),
ModifiedAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true),
CreatedById = table.Column<int>(type: "int", nullable: true),
ModifiedById = table.Column<int>(type: "int", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Refunds", x => x.Id);
table.CheckConstraint("CK_Refunds_LegSplit", "[Amount] = [PlatformFeeRefundedIrr] + [NursePayoutRefundedIrr] AND [Amount] >= 0 AND [PlatformFeeRefundedIrr] >= 0 AND [NursePayoutRefundedIrr] >= 0");
table.ForeignKey(
name: "FK_Refunds_Bookings_BookingId",
column: x => x.BookingId,
principalSchema: "booking",
principalTable: "Bookings",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
table.ForeignKey(
name: "FK_Refunds_CustomerProfiles_RequestedByCustomerId",
column: x => x.RequestedByCustomerId,
principalSchema: "usr",
principalTable: "CustomerProfiles",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
table.ForeignKey(
name: "FK_Refunds_PaymentTransactions_PaymentTransactionId",
column: x => x.PaymentTransactionId,
principalSchema: "payments",
principalTable: "PaymentTransactions",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "NurseClawbacks",
schema: "payments",
columns: table => new
{
Id = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
NurseId = table.Column<long>(type: "bigint", nullable: false),
BookingId = table.Column<long>(type: "bigint", nullable: false),
RefundId = table.Column<long>(type: "bigint", nullable: false),
OriginalPayoutId = table.Column<long>(type: "bigint", nullable: true),
AmountIrr = table.Column<long>(type: "bigint", nullable: false),
Status = table.Column<string>(type: "nvarchar(30)", maxLength: 30, nullable: false),
RecoveredInPayoutId = table.Column<long>(type: "bigint", nullable: true),
ResolvedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
ResolutionNotes = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
DeletedAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true),
CreatedAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false),
ModifiedAt = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true),
CreatedById = table.Column<int>(type: "int", nullable: true),
ModifiedById = table.Column<int>(type: "int", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_NurseClawbacks", x => x.Id);
table.ForeignKey(
name: "FK_NurseClawbacks_Bookings_BookingId",
column: x => x.BookingId,
principalSchema: "booking",
principalTable: "Bookings",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
table.ForeignKey(
name: "FK_NurseClawbacks_NurseProfiles_NurseId",
column: x => x.NurseId,
principalSchema: "usr",
principalTable: "NurseProfiles",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
table.ForeignKey(
name: "FK_NurseClawbacks_Refunds_RefundId",
column: x => x.RefundId,
principalSchema: "payments",
principalTable: "Refunds",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.InsertData(
schema: "payments",
table: "InvoiceNumberSequences",
columns: new[] { "Id", "NextValue" },
values: new object[] { 1, 1L });
migrationBuilder.InsertData(
schema: "ops",
table: "PlatformConfigs",
columns: new[] { "Id", "CreatedAt", "CreatedById", "DataType", "Description", "Key", "ModifiedAt", "ModifiedById", "Value" },
values: new object[,]
{
{ 19L, new DateTimeOffset(new DateTime(2026, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)), null, "bool", "Whether a refund must link a support ticket (b11). Off until b15 ships the tickets table.", "refund_ticket_required", null, null, "false" },
{ 20L, new DateTimeOffset(new DateTime(2026, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)), null, "int", "Business days shown as the customer BNPL refund ETA (b11).", "bnpl_refund_eta_business_days", null, null, "10" },
{ 21L, new DateTimeOffset(new DateTime(2026, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)), null, "bool", "Ops/testing override that forces the post-payout clawback path for refunds (b11); b13 replaces the derivation.", "refund_assume_nurse_paid", null, null, "false" }
});
migrationBuilder.CreateIndex(
name: "IX_Invoices_BookingId",
schema: "payments",
table: "Invoices",
column: "BookingId",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_Invoices_InvoiceNumber",
schema: "payments",
table: "Invoices",
column: "InvoiceNumber",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_NurseClawbacks_BookingId",
schema: "payments",
table: "NurseClawbacks",
column: "BookingId");
migrationBuilder.CreateIndex(
name: "IX_NurseClawbacks_NurseId",
schema: "payments",
table: "NurseClawbacks",
column: "NurseId");
migrationBuilder.CreateIndex(
name: "IX_NurseClawbacks_OriginalPayoutId",
schema: "payments",
table: "NurseClawbacks",
column: "OriginalPayoutId");
migrationBuilder.CreateIndex(
name: "IX_NurseClawbacks_RecoveredInPayoutId",
schema: "payments",
table: "NurseClawbacks",
column: "RecoveredInPayoutId");
migrationBuilder.CreateIndex(
name: "IX_NurseClawbacks_RefundId",
schema: "payments",
table: "NurseClawbacks",
column: "RefundId",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_NurseClawbacks_Status",
schema: "payments",
table: "NurseClawbacks",
column: "Status");
migrationBuilder.CreateIndex(
name: "IX_Refunds_BookingId",
schema: "payments",
table: "Refunds",
column: "BookingId");
migrationBuilder.CreateIndex(
name: "IX_Refunds_PaymentTransactionId",
schema: "payments",
table: "Refunds",
column: "PaymentTransactionId");
migrationBuilder.CreateIndex(
name: "IX_Refunds_RequestedByCustomerId",
schema: "payments",
table: "Refunds",
column: "RequestedByCustomerId");
migrationBuilder.CreateIndex(
name: "IX_Refunds_Status",
schema: "payments",
table: "Refunds",
column: "Status");
migrationBuilder.CreateIndex(
name: "IX_Refunds_TicketId",
schema: "payments",
table: "Refunds",
column: "TicketId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "InvoiceNumberSequences",
schema: "payments");
migrationBuilder.DropTable(
name: "Invoices",
schema: "payments");
migrationBuilder.DropTable(
name: "NurseClawbacks",
schema: "payments");
migrationBuilder.DropTable(
name: "Refunds",
schema: "payments");
migrationBuilder.DeleteData(
schema: "ops",
table: "PlatformConfigs",
keyColumn: "Id",
keyValue: 19L);
migrationBuilder.DeleteData(
schema: "ops",
table: "PlatformConfigs",
keyColumn: "Id",
keyValue: 20L);
migrationBuilder.DeleteData(
schema: "ops",
table: "PlatformConfigs",
keyColumn: "Id",
keyValue: 21L);
}
}
}
@@ -1155,6 +1155,33 @@ namespace Baya.Infrastructure.Persistence.Migrations
Description = "Hours between no-show sweeps (the scheduled cron is deferred; the sweep is admin-triggered today).",
Key = "no_show_scan_cadence_hours",
Value = "1"
},
new
{
Id = 19L,
CreatedAt = new DateTimeOffset(new DateTime(2026, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)),
DataType = "bool",
Description = "Whether a refund must link a support ticket (b11). Off until b15 ships the tickets table.",
Key = "refund_ticket_required",
Value = "false"
},
new
{
Id = 20L,
CreatedAt = new DateTimeOffset(new DateTime(2026, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)),
DataType = "int",
Description = "Business days shown as the customer BNPL refund ETA (b11).",
Key = "bnpl_refund_eta_business_days",
Value = "10"
},
new
{
Id = 21L,
CreatedAt = new DateTimeOffset(new DateTime(2026, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)),
DataType = "bool",
Description = "Ops/testing override that forces the post-payout clawback path for refunds (b11); b13 replaces the derivation.",
Key = "refund_assume_nurse_paid",
Value = "false"
});
});
@@ -2630,6 +2657,107 @@ namespace Baya.Infrastructure.Persistence.Migrations
b.ToTable("Patients", "usr");
});
modelBuilder.Entity("Baya.Domain.Entities.Invoices.Invoice", b =>
{
b.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
b.Property<long?>("BnplCommissionIrr")
.HasColumnType("bigint");
b.Property<long>("BookingId")
.HasColumnType("bigint");
b.Property<DateTimeOffset>("CreatedAt")
.HasColumnType("datetimeoffset");
b.Property<int?>("CreatedById")
.HasColumnType("int");
b.Property<DateTimeOffset?>("DeletedAt")
.HasColumnType("datetimeoffset");
b.Property<long>("GrossIrr")
.HasColumnType("bigint");
b.Property<string>("InvoiceNumber")
.IsRequired()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)");
b.Property<DateTime>("IssuedAt")
.HasColumnType("datetime2");
b.Property<string>("IssuingEntityType")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("nvarchar(20)");
b.Property<string>("MoadianReferenceNumber")
.HasMaxLength(40)
.HasColumnType("nvarchar(40)");
b.Property<string>("MoadianStatus")
.HasMaxLength(20)
.HasColumnType("nvarchar(20)");
b.Property<DateTimeOffset?>("ModifiedAt")
.HasColumnType("datetimeoffset");
b.Property<int?>("ModifiedById")
.HasColumnType("int");
b.Property<long?>("PartnerCenterId")
.HasColumnType("bigint");
b.Property<string>("PdfStorageKey")
.HasMaxLength(512)
.HasColumnType("nvarchar(512)");
b.Property<long>("PlatformCommissionIrr")
.HasColumnType("bigint");
b.Property<long>("VatIrr")
.HasColumnType("bigint");
b.Property<decimal>("VatRate")
.HasPrecision(5, 4)
.HasColumnType("decimal(5,4)");
b.HasKey("Id");
b.HasIndex("BookingId")
.IsUnique();
b.HasIndex("InvoiceNumber")
.IsUnique();
b.ToTable("Invoices", "payments");
});
modelBuilder.Entity("Baya.Domain.Entities.Invoices.InvoiceNumberSequence", b =>
{
b.Property<int>("Id")
.HasColumnType("int");
b.Property<long>("NextValue")
.HasColumnType("bigint");
b.HasKey("Id");
b.ToTable("InvoiceNumberSequences", "payments");
b.HasData(
new
{
Id = 1,
NextValue = 1L
});
});
modelBuilder.Entity("Baya.Domain.Entities.Notifications.Notification", b =>
{
b.Property<long>("Id")
@@ -2949,6 +3077,194 @@ namespace Baya.Infrastructure.Persistence.Migrations
b.ToTable("PaymentWebhookEvents", "payments");
});
modelBuilder.Entity("Baya.Domain.Entities.Refunds.NurseClawback", b =>
{
b.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
b.Property<long>("AmountIrr")
.HasColumnType("bigint");
b.Property<long>("BookingId")
.HasColumnType("bigint");
b.Property<DateTimeOffset>("CreatedAt")
.HasColumnType("datetimeoffset");
b.Property<int?>("CreatedById")
.HasColumnType("int");
b.Property<DateTimeOffset?>("DeletedAt")
.HasColumnType("datetimeoffset");
b.Property<DateTimeOffset?>("ModifiedAt")
.HasColumnType("datetimeoffset");
b.Property<int?>("ModifiedById")
.HasColumnType("int");
b.Property<long>("NurseId")
.HasColumnType("bigint");
b.Property<long?>("OriginalPayoutId")
.HasColumnType("bigint");
b.Property<long?>("RecoveredInPayoutId")
.HasColumnType("bigint");
b.Property<long>("RefundId")
.HasColumnType("bigint");
b.Property<string>("ResolutionNotes")
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.Property<DateTime?>("ResolvedAt")
.HasColumnType("datetime2");
b.Property<string>("Status")
.IsRequired()
.HasMaxLength(30)
.HasColumnType("nvarchar(30)");
b.HasKey("Id");
b.HasIndex("BookingId");
b.HasIndex("NurseId");
b.HasIndex("OriginalPayoutId");
b.HasIndex("RecoveredInPayoutId");
b.HasIndex("RefundId")
.IsUnique();
b.HasIndex("Status");
b.ToTable("NurseClawbacks", "payments");
});
modelBuilder.Entity("Baya.Domain.Entities.Refunds.Refund", b =>
{
b.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("Id"));
b.Property<string>("AdminNotes")
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<long>("Amount")
.HasColumnType("bigint");
b.Property<int?>("ApprovedByAdminId")
.HasColumnType("int");
b.Property<long>("BookingId")
.HasColumnType("bigint");
b.Property<string>("CancellationPolicyCode")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<DateTimeOffset>("CreatedAt")
.HasColumnType("datetimeoffset");
b.Property<int?>("CreatedById")
.HasColumnType("int");
b.Property<DateTimeOffset?>("DeletedAt")
.HasColumnType("datetimeoffset");
b.Property<DateOnly?>("ExpectedCustomerRefundEta")
.HasColumnType("date");
b.Property<string>("ExternalRevertReference")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<string>("GatewayRefundReference")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<DateTimeOffset?>("ModifiedAt")
.HasColumnType("datetimeoffset");
b.Property<int?>("ModifiedById")
.HasColumnType("int");
b.Property<long>("NursePayoutRefundedIrr")
.HasColumnType("bigint");
b.Property<long>("PaymentTransactionId")
.HasColumnType("bigint");
b.Property<long>("PlatformFeeRefundedIrr")
.HasColumnType("bigint");
b.Property<DateTime?>("ProcessedAt")
.HasColumnType("datetime2");
b.Property<string>("ReasonCategory")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ReasonNotes")
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<string>("RefundChannel")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("nvarchar(20)");
b.Property<decimal>("RefundPercentage")
.HasPrecision(6, 4)
.HasColumnType("decimal(6,4)");
b.Property<decimal?>("RefundPercentageApplied")
.HasPrecision(5, 2)
.HasColumnType("decimal(5,2)");
b.Property<string>("RejectedReason")
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.Property<long>("RequestedByCustomerId")
.HasColumnType("bigint");
b.Property<string>("Status")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("nvarchar(20)");
b.Property<long?>("TicketId")
.HasColumnType("bigint");
b.HasKey("Id");
b.HasIndex("BookingId");
b.HasIndex("PaymentTransactionId");
b.HasIndex("RequestedByCustomerId");
b.HasIndex("Status");
b.HasIndex("TicketId");
b.ToTable("Refunds", "payments", t =>
{
t.HasCheckConstraint("CK_Refunds_LegSplit", "[Amount] = [PlatformFeeRefundedIrr] + [NursePayoutRefundedIrr] AND [Amount] >= 0 AND [PlatformFeeRefundedIrr] >= 0 AND [NursePayoutRefundedIrr] >= 0");
});
});
modelBuilder.Entity("Baya.Domain.Entities.Search.NurseSearchIndex", b =>
{
b.Property<long>("Id")
@@ -4186,6 +4502,15 @@ namespace Baya.Infrastructure.Persistence.Migrations
b.Navigation("Customer");
});
modelBuilder.Entity("Baya.Domain.Entities.Invoices.Invoice", b =>
{
b.HasOne("Baya.Domain.Entities.Booking.Booking", null)
.WithMany()
.HasForeignKey("BookingId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
});
modelBuilder.Entity("Baya.Domain.Entities.Notifications.Notification", b =>
{
b.HasOne("Baya.Domain.Entities.User.User", null)
@@ -4231,6 +4556,48 @@ namespace Baya.Infrastructure.Persistence.Migrations
.IsRequired();
});
modelBuilder.Entity("Baya.Domain.Entities.Refunds.NurseClawback", b =>
{
b.HasOne("Baya.Domain.Entities.Booking.Booking", null)
.WithMany()
.HasForeignKey("BookingId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.HasOne("Baya.Domain.Entities.Identity.NurseProfile", null)
.WithMany()
.HasForeignKey("NurseId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.HasOne("Baya.Domain.Entities.Refunds.Refund", null)
.WithMany()
.HasForeignKey("RefundId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
});
modelBuilder.Entity("Baya.Domain.Entities.Refunds.Refund", b =>
{
b.HasOne("Baya.Domain.Entities.Booking.Booking", null)
.WithMany()
.HasForeignKey("BookingId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.HasOne("Baya.Domain.Entities.Payments.PaymentTransaction", null)
.WithMany()
.HasForeignKey("PaymentTransactionId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.HasOne("Baya.Domain.Entities.Identity.CustomerProfile", null)
.WithMany()
.HasForeignKey("RequestedByCustomerId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
});
modelBuilder.Entity("Baya.Domain.Entities.Search.NurseSearchIndex", b =>
{
b.HasOne("Baya.Domain.Entities.Identity.NurseProfile", null)