fix(Core): make Realm.Players an actual relation

This commit is contained in:
2026-06-15 22:12:18 +02:00
parent e89df7cda5
commit 225b4194e6
5 changed files with 344 additions and 2 deletions
+3
View File
@@ -17,5 +17,8 @@ public class DataContext(DbContextOptions<DataContext> options) : DbContext(opti
{ {
modelBuilder.Entity<Realm>().HasOne(realm => realm.Subscription).WithOne(subscription => subscription.Realm) modelBuilder.Entity<Realm>().HasOne(realm => realm.Subscription).WithOne(subscription => subscription.Realm)
.HasForeignKey<Subscription>(subscription => subscription.RealmId).OnDelete(DeleteBehavior.Cascade); .HasForeignKey<Subscription>(subscription => subscription.RealmId).OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<Player>().HasOne(player => player.Realm).WithMany(realm => realm.Players)
.HasForeignKey(player => player.RealmId).OnDelete(DeleteBehavior.Cascade);
} }
} }
+2
View File
@@ -7,4 +7,6 @@ public class Player
public required string Name { get; set; } public required string Name { get; set; }
public required bool Operator { get; set; } public required bool Operator { get; set; }
public required bool Accepted { get; set; } public required bool Accepted { get; set; }
public int? RealmId { get; set; }
public Realm Realm { get; set; } = null!;
} }
@@ -0,0 +1,293 @@
// <auto-generated />
using Core.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 Core.Migrations
{
[DbContext(typeof(DataContext))]
[Migration("20260615193348_Realms_Players_Relation")]
partial class Realms_Players_Relation
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "10.0.9")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Core.Entities.AppConfig", b =>
{
b.Property<string>("Key")
.HasColumnType("text");
b.Property<object>("Value")
.IsRequired()
.HasColumnType("jsonb");
b.HasKey("Key");
b.ToTable("AppConfig");
});
modelBuilder.Entity("Core.Entities.Player", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<bool>("Accepted")
.HasColumnType("boolean");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<bool>("Operator")
.HasColumnType("boolean");
b.Property<int?>("RealmId")
.HasColumnType("integer");
b.Property<string>("Uuid")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("RealmId");
b.ToTable("Players");
});
modelBuilder.Entity("Core.Entities.Realm", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int>("ActiveSlotId")
.HasColumnType("integer");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<int?>("ParentWorldId")
.HasColumnType("integer");
b.Property<string>("State")
.IsRequired()
.HasColumnType("text");
b.Property<int>("SubscriptionId")
.HasColumnType("integer");
b.Property<string>("WorldType")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("ActiveSlotId");
b.HasIndex("ParentWorldId");
b.ToTable("Realms");
});
modelBuilder.Entity("Core.Entities.Slot", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int>("OptionsId")
.HasColumnType("integer");
b.Property<int?>("RealmId")
.HasColumnType("integer");
b.Property<int>("SettingsId")
.HasColumnType("integer");
b.Property<int>("SlotId")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("OptionsId");
b.HasIndex("RealmId");
b.HasIndex("SettingsId");
b.ToTable("Slots");
});
modelBuilder.Entity("Core.Entities.SlotOptions", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int>("Difficulty")
.HasColumnType("integer");
b.Property<bool>("ForceGamemode")
.HasColumnType("boolean");
b.Property<int>("Gamemode")
.HasColumnType("integer");
b.Property<string>("SlotName")
.IsRequired()
.HasColumnType("text");
b.Property<int>("SpawnProtection")
.HasColumnType("integer");
b.Property<string>("Version")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("SlotOptions");
});
modelBuilder.Entity("Core.Entities.Subscription", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int>("DaysLeft")
.HasColumnType("integer");
b.Property<int?>("RealmId")
.HasColumnType("integer");
b.Property<string>("SubscriptionId")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("RealmId")
.IsUnique();
b.ToTable("Subscriptions");
});
modelBuilder.Entity("Core.Entities.WorldSettings", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<bool>("Hardcore")
.HasColumnType("boolean");
b.HasKey("Id");
b.ToTable("WorldSettings");
});
modelBuilder.Entity("Core.Entities.Player", b =>
{
b.HasOne("Core.Entities.Realm", "Realm")
.WithMany("Players")
.HasForeignKey("RealmId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Realm");
});
modelBuilder.Entity("Core.Entities.Realm", b =>
{
b.HasOne("Core.Entities.Slot", "ActiveSlot")
.WithMany()
.HasForeignKey("ActiveSlotId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Core.Entities.Realm", "ParentWorld")
.WithMany()
.HasForeignKey("ParentWorldId");
b.Navigation("ActiveSlot");
b.Navigation("ParentWorld");
});
modelBuilder.Entity("Core.Entities.Slot", b =>
{
b.HasOne("Core.Entities.SlotOptions", "Options")
.WithMany()
.HasForeignKey("OptionsId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Core.Entities.Realm", null)
.WithMany("Slots")
.HasForeignKey("RealmId");
b.HasOne("Core.Entities.WorldSettings", "Settings")
.WithMany()
.HasForeignKey("SettingsId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Options");
b.Navigation("Settings");
});
modelBuilder.Entity("Core.Entities.Subscription", b =>
{
b.HasOne("Core.Entities.Realm", "Realm")
.WithOne("Subscription")
.HasForeignKey("Core.Entities.Subscription", "RealmId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Realm");
});
modelBuilder.Entity("Core.Entities.Realm", b =>
{
b.Navigation("Players");
b.Navigation("Slots");
b.Navigation("Subscription")
.IsRequired();
});
#pragma warning restore 612, 618
}
}
}
@@ -0,0 +1,41 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Core.Migrations
{
/// <inheritdoc />
public partial class Realms_Players_Relation : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Players_Realms_RealmId",
table: "Players");
migrationBuilder.AddForeignKey(
name: "FK_Players_Realms_RealmId",
table: "Players",
column: "RealmId",
principalTable: "Realms",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Players_Realms_RealmId",
table: "Players");
migrationBuilder.AddForeignKey(
name: "FK_Players_Realms_RealmId",
table: "Players",
column: "RealmId",
principalTable: "Realms",
principalColumn: "Id");
}
}
}
+5 -2
View File
@@ -217,9 +217,12 @@ namespace Core.Migrations
modelBuilder.Entity("Core.Entities.Player", b => modelBuilder.Entity("Core.Entities.Player", b =>
{ {
b.HasOne("Core.Entities.Realm", null) b.HasOne("Core.Entities.Realm", "Realm")
.WithMany("Players") .WithMany("Players")
.HasForeignKey("RealmId"); .HasForeignKey("RealmId")
.OnDelete(DeleteBehavior.Cascade);
b.Navigation("Realm");
}); });
modelBuilder.Entity("Core.Entities.Realm", b => modelBuilder.Entity("Core.Entities.Realm", b =>