Fix admin log key order. (#23052)

The keys for admin logs were set as (log_id, round_id). This made no sense because logs are usually accessed per round.
This commit is contained in:
Pieter-Jan Briers
2024-01-11 01:03:25 +01:00
committed by GitHub
parent c7ad10d0ad
commit a39999fb9c
7 changed files with 3697 additions and 42 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,105 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Content.Server.Database.Migrations.Postgres
{
/// <inheritdoc />
public partial class AdminLogPk : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_admin_log_player_admin_log_log_id_round_id",
table: "admin_log_player");
migrationBuilder.DropPrimaryKey(
name: "PK_admin_log_player",
table: "admin_log_player");
migrationBuilder.DropIndex(
name: "IX_admin_log_player_log_id_round_id",
table: "admin_log_player");
migrationBuilder.DropPrimaryKey(
name: "PK_admin_log",
table: "admin_log");
migrationBuilder.DropIndex(
name: "IX_admin_log_round_id",
table: "admin_log");
migrationBuilder.AddPrimaryKey(
name: "PK_admin_log_player",
table: "admin_log_player",
columns: new[] { "round_id", "log_id", "player_user_id" });
migrationBuilder.AddPrimaryKey(
name: "PK_admin_log",
table: "admin_log",
columns: new[] { "round_id", "admin_log_id" });
migrationBuilder.CreateIndex(
name: "IX_admin_log_player_player_user_id",
table: "admin_log_player",
column: "player_user_id");
migrationBuilder.AddForeignKey(
name: "FK_admin_log_player_admin_log_round_id_log_id",
table: "admin_log_player",
columns: new[] { "round_id", "log_id" },
principalTable: "admin_log",
principalColumns: new[] { "round_id", "admin_log_id" },
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_admin_log_player_admin_log_round_id_log_id",
table: "admin_log_player");
migrationBuilder.DropPrimaryKey(
name: "PK_admin_log_player",
table: "admin_log_player");
migrationBuilder.DropIndex(
name: "IX_admin_log_player_player_user_id",
table: "admin_log_player");
migrationBuilder.DropPrimaryKey(
name: "PK_admin_log",
table: "admin_log");
migrationBuilder.AddPrimaryKey(
name: "PK_admin_log_player",
table: "admin_log_player",
columns: new[] { "player_user_id", "log_id", "round_id" });
migrationBuilder.AddPrimaryKey(
name: "PK_admin_log",
table: "admin_log",
columns: new[] { "admin_log_id", "round_id" });
migrationBuilder.CreateIndex(
name: "IX_admin_log_player_log_id_round_id",
table: "admin_log_player",
columns: new[] { "log_id", "round_id" });
migrationBuilder.CreateIndex(
name: "IX_admin_log_round_id",
table: "admin_log",
column: "round_id");
migrationBuilder.AddForeignKey(
name: "FK_admin_log_player_admin_log_log_id_round_id",
table: "admin_log_player",
columns: new[] { "log_id", "round_id" },
principalTable: "admin_log",
principalColumns: new[] { "admin_log_id", "round_id" },
onDelete: ReferentialAction.Cascade);
}
}
}

View File

@@ -84,14 +84,14 @@ namespace Content.Server.Database.Migrations.Postgres
modelBuilder.Entity("Content.Server.Database.AdminLog", b => modelBuilder.Entity("Content.Server.Database.AdminLog", b =>
{ {
b.Property<int>("Id")
.HasColumnType("integer")
.HasColumnName("admin_log_id");
b.Property<int>("RoundId") b.Property<int>("RoundId")
.HasColumnType("integer") .HasColumnType("integer")
.HasColumnName("round_id"); .HasColumnName("round_id");
b.Property<int>("Id")
.HasColumnType("integer")
.HasColumnName("admin_log_id");
b.Property<DateTime>("Date") b.Property<DateTime>("Date")
.HasColumnType("timestamp with time zone") .HasColumnType("timestamp with time zone")
.HasColumnName("date"); .HasColumnName("date");
@@ -114,7 +114,7 @@ namespace Content.Server.Database.Migrations.Postgres
.HasColumnType("integer") .HasColumnType("integer")
.HasColumnName("type"); .HasColumnName("type");
b.HasKey("Id", "RoundId") b.HasKey("RoundId", "Id")
.HasName("PK_admin_log"); .HasName("PK_admin_log");
b.HasIndex("Date"); b.HasIndex("Date");
@@ -124,9 +124,6 @@ namespace Content.Server.Database.Migrations.Postgres
NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("Message"), "GIN"); NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("Message"), "GIN");
b.HasIndex("RoundId")
.HasDatabaseName("IX_admin_log_round_id");
b.HasIndex("Type") b.HasIndex("Type")
.HasDatabaseName("IX_admin_log_type"); .HasDatabaseName("IX_admin_log_type");
@@ -135,22 +132,23 @@ namespace Content.Server.Database.Migrations.Postgres
modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b =>
{ {
b.Property<Guid>("PlayerUserId") b.Property<int>("RoundId")
.HasColumnType("uuid") .HasColumnType("integer")
.HasColumnName("player_user_id"); .HasColumnName("round_id");
b.Property<int>("LogId") b.Property<int>("LogId")
.HasColumnType("integer") .HasColumnType("integer")
.HasColumnName("log_id"); .HasColumnName("log_id");
b.Property<int>("RoundId") b.Property<Guid>("PlayerUserId")
.HasColumnType("integer") .HasColumnType("uuid")
.HasColumnName("round_id"); .HasColumnName("player_user_id");
b.HasKey("PlayerUserId", "LogId", "RoundId") b.HasKey("RoundId", "LogId", "PlayerUserId")
.HasName("PK_admin_log_player"); .HasName("PK_admin_log_player");
b.HasIndex("LogId", "RoundId"); b.HasIndex("PlayerUserId")
.HasDatabaseName("IX_admin_log_player_player_user_id");
b.ToTable("admin_log_player", (string)null); b.ToTable("admin_log_player", (string)null);
}); });
@@ -1303,10 +1301,10 @@ namespace Content.Server.Database.Migrations.Postgres
b.HasOne("Content.Server.Database.AdminLog", "Log") b.HasOne("Content.Server.Database.AdminLog", "Log")
.WithMany("Players") .WithMany("Players")
.HasForeignKey("LogId", "RoundId") .HasForeignKey("RoundId", "LogId")
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
.IsRequired() .IsRequired()
.HasConstraintName("FK_admin_log_player_admin_log_log_id_round_id"); .HasConstraintName("FK_admin_log_player_admin_log_round_id_log_id");
b.Navigation("Log"); b.Navigation("Log");

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,105 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Content.Server.Database.Migrations.Sqlite
{
/// <inheritdoc />
public partial class AdminLogPk : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_admin_log_player_admin_log_log_id_round_id",
table: "admin_log_player");
migrationBuilder.DropPrimaryKey(
name: "PK_admin_log_player",
table: "admin_log_player");
migrationBuilder.DropIndex(
name: "IX_admin_log_player_log_id_round_id",
table: "admin_log_player");
migrationBuilder.DropPrimaryKey(
name: "PK_admin_log",
table: "admin_log");
migrationBuilder.DropIndex(
name: "IX_admin_log_round_id",
table: "admin_log");
migrationBuilder.AddPrimaryKey(
name: "PK_admin_log_player",
table: "admin_log_player",
columns: new[] { "round_id", "log_id", "player_user_id" });
migrationBuilder.AddPrimaryKey(
name: "PK_admin_log",
table: "admin_log",
columns: new[] { "round_id", "admin_log_id" });
migrationBuilder.CreateIndex(
name: "IX_admin_log_player_player_user_id",
table: "admin_log_player",
column: "player_user_id");
migrationBuilder.AddForeignKey(
name: "FK_admin_log_player_admin_log_round_id_log_id",
table: "admin_log_player",
columns: new[] { "round_id", "log_id" },
principalTable: "admin_log",
principalColumns: new[] { "round_id", "admin_log_id" },
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_admin_log_player_admin_log_round_id_log_id",
table: "admin_log_player");
migrationBuilder.DropPrimaryKey(
name: "PK_admin_log_player",
table: "admin_log_player");
migrationBuilder.DropIndex(
name: "IX_admin_log_player_player_user_id",
table: "admin_log_player");
migrationBuilder.DropPrimaryKey(
name: "PK_admin_log",
table: "admin_log");
migrationBuilder.AddPrimaryKey(
name: "PK_admin_log_player",
table: "admin_log_player",
columns: new[] { "player_user_id", "log_id", "round_id" });
migrationBuilder.AddPrimaryKey(
name: "PK_admin_log",
table: "admin_log",
columns: new[] { "admin_log_id", "round_id" });
migrationBuilder.CreateIndex(
name: "IX_admin_log_player_log_id_round_id",
table: "admin_log_player",
columns: new[] { "log_id", "round_id" });
migrationBuilder.CreateIndex(
name: "IX_admin_log_round_id",
table: "admin_log",
column: "round_id");
migrationBuilder.AddForeignKey(
name: "FK_admin_log_player_admin_log_log_id_round_id",
table: "admin_log_player",
columns: new[] { "log_id", "round_id" },
principalTable: "admin_log",
principalColumns: new[] { "admin_log_id", "round_id" },
onDelete: ReferentialAction.Cascade);
}
}
}

View File

@@ -75,14 +75,14 @@ namespace Content.Server.Database.Migrations.Sqlite
modelBuilder.Entity("Content.Server.Database.AdminLog", b => modelBuilder.Entity("Content.Server.Database.AdminLog", b =>
{ {
b.Property<int>("Id")
.HasColumnType("INTEGER")
.HasColumnName("admin_log_id");
b.Property<int>("RoundId") b.Property<int>("RoundId")
.HasColumnType("INTEGER") .HasColumnType("INTEGER")
.HasColumnName("round_id"); .HasColumnName("round_id");
b.Property<int>("Id")
.HasColumnType("INTEGER")
.HasColumnName("admin_log_id");
b.Property<DateTime>("Date") b.Property<DateTime>("Date")
.HasColumnType("TEXT") .HasColumnType("TEXT")
.HasColumnName("date"); .HasColumnName("date");
@@ -105,14 +105,11 @@ namespace Content.Server.Database.Migrations.Sqlite
.HasColumnType("INTEGER") .HasColumnType("INTEGER")
.HasColumnName("type"); .HasColumnName("type");
b.HasKey("Id", "RoundId") b.HasKey("RoundId", "Id")
.HasName("PK_admin_log"); .HasName("PK_admin_log");
b.HasIndex("Date"); b.HasIndex("Date");
b.HasIndex("RoundId")
.HasDatabaseName("IX_admin_log_round_id");
b.HasIndex("Type") b.HasIndex("Type")
.HasDatabaseName("IX_admin_log_type"); .HasDatabaseName("IX_admin_log_type");
@@ -121,22 +118,23 @@ namespace Content.Server.Database.Migrations.Sqlite
modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b =>
{ {
b.Property<Guid>("PlayerUserId") b.Property<int>("RoundId")
.HasColumnType("TEXT") .HasColumnType("INTEGER")
.HasColumnName("player_user_id"); .HasColumnName("round_id");
b.Property<int>("LogId") b.Property<int>("LogId")
.HasColumnType("INTEGER") .HasColumnType("INTEGER")
.HasColumnName("log_id"); .HasColumnName("log_id");
b.Property<int>("RoundId") b.Property<Guid>("PlayerUserId")
.HasColumnType("INTEGER") .HasColumnType("TEXT")
.HasColumnName("round_id"); .HasColumnName("player_user_id");
b.HasKey("PlayerUserId", "LogId", "RoundId") b.HasKey("RoundId", "LogId", "PlayerUserId")
.HasName("PK_admin_log_player"); .HasName("PK_admin_log_player");
b.HasIndex("LogId", "RoundId"); b.HasIndex("PlayerUserId")
.HasDatabaseName("IX_admin_log_player_player_user_id");
b.ToTable("admin_log_player", (string)null); b.ToTable("admin_log_player", (string)null);
}); });
@@ -1235,10 +1233,10 @@ namespace Content.Server.Database.Migrations.Sqlite
b.HasOne("Content.Server.Database.AdminLog", "Log") b.HasOne("Content.Server.Database.AdminLog", "Log")
.WithMany("Players") .WithMany("Players")
.HasForeignKey("LogId", "RoundId") .HasForeignKey("RoundId", "LogId")
.OnDelete(DeleteBehavior.Cascade) .OnDelete(DeleteBehavior.Cascade)
.IsRequired() .IsRequired()
.HasConstraintName("FK_admin_log_player_admin_log_log_id_round_id"); .HasConstraintName("FK_admin_log_player_admin_log_round_id_log_id");
b.Navigation("Log"); b.Navigation("Log");

View File

@@ -93,7 +93,7 @@ namespace Content.Server.Database
.IsUnique(); .IsUnique();
modelBuilder.Entity<AdminLog>() modelBuilder.Entity<AdminLog>()
.HasKey(log => new {log.Id, log.RoundId}); .HasKey(log => new {log.RoundId, log.Id});
modelBuilder.Entity<AdminLog>() modelBuilder.Entity<AdminLog>()
.Property(log => log.Id); .Property(log => log.Id);
@@ -111,6 +111,9 @@ namespace Content.Server.Database
.HasForeignKey(player => player.PlayerUserId) .HasForeignKey(player => player.PlayerUserId)
.HasPrincipalKey(player => player.UserId); .HasPrincipalKey(player => player.UserId);
modelBuilder.Entity<AdminLogPlayer>()
.HasIndex(p => p.PlayerUserId);
modelBuilder.Entity<Round>() modelBuilder.Entity<Round>()
.HasIndex(round => round.StartDate); .HasIndex(round => round.StartDate);
@@ -119,7 +122,7 @@ namespace Content.Server.Database
.HasDefaultValue(default(DateTime)); .HasDefaultValue(default(DateTime));
modelBuilder.Entity<AdminLogPlayer>() modelBuilder.Entity<AdminLogPlayer>()
.HasKey(logPlayer => new {logPlayer.PlayerUserId, logPlayer.LogId, logPlayer.RoundId}); .HasKey(logPlayer => new {logPlayer.RoundId, logPlayer.LogId, logPlayer.PlayerUserId});
modelBuilder.Entity<ServerBan>() modelBuilder.Entity<ServerBan>()
.HasIndex(p => p.PlayerUserId); .HasIndex(p => p.PlayerUserId);
@@ -511,10 +514,11 @@ namespace Content.Server.Database
[Index(nameof(Type))] [Index(nameof(Type))]
public class AdminLog public class AdminLog
{ {
[Key, ForeignKey("Round")] public int RoundId { get; set; }
[Key] [Key]
public int Id { get; set; } public int Id { get; set; }
[Key, ForeignKey("Round")] public int RoundId { get; set; }
public Round Round { get; set; } = default!; public Round Round { get; set; } = default!;
[Required] public LogType Type { get; set; } [Required] public LogType Type { get; set; }
@@ -532,12 +536,13 @@ namespace Content.Server.Database
public class AdminLogPlayer public class AdminLogPlayer
{ {
[Required, Key] public int RoundId { get; set; }
[Required, Key] public int LogId { get; set; }
[Required, Key, ForeignKey("Player")] public Guid PlayerUserId { get; set; } [Required, Key, ForeignKey("Player")] public Guid PlayerUserId { get; set; }
public Player Player { get; set; } = default!; public Player Player { get; set; } = default!;
[Required, Key] public int LogId { get; set; } [ForeignKey("RoundId,LogId")] public AdminLog Log { get; set; } = default!;
[Required, Key] public int RoundId { get; set; }
[ForeignKey("LogId,RoundId")] public AdminLog Log { get; set; } = default!;
} }
// Used by SS14.Admin // Used by SS14.Admin