update zombie models
This commit is contained in:
parent
0d6aaa1d9d
commit
7d67a3dfc9
@ -56,7 +56,8 @@ namespace Data.Context
|
||||
public DbSet<ZombieMatchClientStat> ZombieMatchClientStats { get; set; }
|
||||
public DbSet<ZombieRoundClientStat> ZombieRoundClientStats { get; set; }
|
||||
public DbSet<ZombieAggregateClientStat> ZombieClientStatAggregates { get; set; }
|
||||
|
||||
public DbSet<ZombieClientStatRecord> ZombieClientStatRecords { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
private void SetAuditColumns()
|
||||
@ -173,6 +174,7 @@ namespace Data.Context
|
||||
modelBuilder.Entity(typeof(ZombieRoundClientStat)).ToTable($"EF{nameof(ZombieRoundClientStat)}");
|
||||
modelBuilder.Entity(typeof(ZombieAggregateClientStat)).ToTable($"EF{nameof(ZombieAggregateClientStat)}");
|
||||
modelBuilder.Entity(typeof(ZombieClientStat)).ToTable($"EF{nameof(ZombieClientStat)}");
|
||||
modelBuilder.Entity(typeof(ZombieClientStatRecord)).ToTable($"EF{nameof(ZombieClientStatRecord)}");
|
||||
|
||||
Models.Configuration.StatsModelConfiguration.Configure(modelBuilder);
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,230 +0,0 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace Data.Migrations.Sqlite
|
||||
{
|
||||
public partial class AddZombieStatsInitial : Migration
|
||||
{
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.CreateTable(
|
||||
name: "EFZombieMatch",
|
||||
columns: table => new
|
||||
{
|
||||
ZombieMatchId = table.Column<int>(type: "INTEGER", nullable: false)
|
||||
.Annotation("Sqlite:Autoincrement", true),
|
||||
MapId = table.Column<int>(type: "INTEGER", nullable: true),
|
||||
ServerId = table.Column<long>(type: "INTEGER", nullable: true),
|
||||
MatchStartDate = table.Column<DateTimeOffset>(type: "TEXT", nullable: false),
|
||||
MatchEndDate = table.Column<DateTimeOffset>(type: "TEXT", nullable: true),
|
||||
EFClientClientId = table.Column<int>(type: "INTEGER", nullable: true)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_EFZombieMatch", x => x.ZombieMatchId);
|
||||
table.ForeignKey(
|
||||
name: "FK_EFZombieMatch_EFClients_EFClientClientId",
|
||||
column: x => x.EFClientClientId,
|
||||
principalTable: "EFClients",
|
||||
principalColumn: "ClientId");
|
||||
table.ForeignKey(
|
||||
name: "FK_EFZombieMatch_EFMaps_MapId",
|
||||
column: x => x.MapId,
|
||||
principalTable: "EFMaps",
|
||||
principalColumn: "MapId");
|
||||
table.ForeignKey(
|
||||
name: "FK_EFZombieMatch_EFServers_ServerId",
|
||||
column: x => x.ServerId,
|
||||
principalTable: "EFServers",
|
||||
principalColumn: "ServerId");
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "EFZombieClientStat",
|
||||
columns: table => new
|
||||
{
|
||||
ZombieClientStatId = table.Column<long>(type: "INTEGER", nullable: false)
|
||||
.Annotation("Sqlite:Autoincrement", true),
|
||||
MatchId = table.Column<int>(type: "INTEGER", nullable: true),
|
||||
ClientId = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
Kills = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
Deaths = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
DamageDealt = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
DamageReceived = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
Headshots = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
Melees = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
Downs = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
Revives = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
PointsEarned = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
PointsSpent = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
PerksConsumed = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
PowerupsGrabbed = table.Column<int>(type: "INTEGER", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_EFZombieClientStat", x => x.ZombieClientStatId);
|
||||
table.ForeignKey(
|
||||
name: "FK_EFZombieClientStat_EFClients_ClientId",
|
||||
column: x => x.ClientId,
|
||||
principalTable: "EFClients",
|
||||
principalColumn: "ClientId",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_EFZombieClientStat_EFZombieMatch_MatchId",
|
||||
column: x => x.MatchId,
|
||||
principalTable: "EFZombieMatch",
|
||||
principalColumn: "ZombieMatchId");
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "EFZombieAggregateClientStat",
|
||||
columns: table => new
|
||||
{
|
||||
ZombieClientStatId = table.Column<long>(type: "INTEGER", nullable: false)
|
||||
.Annotation("Sqlite:Autoincrement", true),
|
||||
AverageKillsPerDown = table.Column<double>(type: "REAL", nullable: false),
|
||||
AverageDowns = table.Column<double>(type: "REAL", nullable: false),
|
||||
AverageRevives = table.Column<double>(type: "REAL", nullable: false),
|
||||
HeadshotPercentage = table.Column<double>(type: "REAL", nullable: false),
|
||||
AlivePercentage = table.Column<double>(type: "REAL", nullable: false),
|
||||
AverageMelees = table.Column<double>(type: "REAL", nullable: false),
|
||||
AverageRoundReached = table.Column<double>(type: "REAL", nullable: false),
|
||||
AveragePoints = table.Column<double>(type: "REAL", nullable: false),
|
||||
HighestRound = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
TotalRoundsPlayed = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
TotalMatchesPlayed = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
RankingMetric = table.Column<double>(type: "REAL", nullable: false),
|
||||
EFClientClientId = table.Column<int>(type: "INTEGER", nullable: true)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_EFZombieAggregateClientStat", x => x.ZombieClientStatId);
|
||||
table.ForeignKey(
|
||||
name: "FK_EFZombieAggregateClientStat_EFClients_EFClientClientId",
|
||||
column: x => x.EFClientClientId,
|
||||
principalTable: "EFClients",
|
||||
principalColumn: "ClientId");
|
||||
table.ForeignKey(
|
||||
name: "FK_EFZombieAggregateClientStat_EFZombieClientStat_ZombieClientStatId",
|
||||
column: x => x.ZombieClientStatId,
|
||||
principalTable: "EFZombieClientStat",
|
||||
principalColumn: "ZombieClientStatId",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "EFZombieMatchClientStat",
|
||||
columns: table => new
|
||||
{
|
||||
ZombieClientStatId = table.Column<long>(type: "INTEGER", nullable: false)
|
||||
.Annotation("Sqlite:Autoincrement", true),
|
||||
EFClientClientId = table.Column<int>(type: "INTEGER", nullable: true)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_EFZombieMatchClientStat", x => x.ZombieClientStatId);
|
||||
table.ForeignKey(
|
||||
name: "FK_EFZombieMatchClientStat_EFClients_EFClientClientId",
|
||||
column: x => x.EFClientClientId,
|
||||
principalTable: "EFClients",
|
||||
principalColumn: "ClientId");
|
||||
table.ForeignKey(
|
||||
name: "FK_EFZombieMatchClientStat_EFZombieClientStat_ZombieClientStatId",
|
||||
column: x => x.ZombieClientStatId,
|
||||
principalTable: "EFZombieClientStat",
|
||||
principalColumn: "ZombieClientStatId",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "EFZombieRoundClientStat",
|
||||
columns: table => new
|
||||
{
|
||||
ZombieClientStatId = table.Column<long>(type: "INTEGER", nullable: false)
|
||||
.Annotation("Sqlite:Autoincrement", true),
|
||||
StartTime = table.Column<DateTimeOffset>(type: "TEXT", nullable: false),
|
||||
EndTime = table.Column<DateTimeOffset>(type: "TEXT", nullable: true),
|
||||
Duration = table.Column<TimeSpan>(type: "TEXT", nullable: true),
|
||||
TimeAlive = table.Column<TimeSpan>(type: "TEXT", nullable: true),
|
||||
RoundNumber = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
Points = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
EFClientClientId = table.Column<int>(type: "INTEGER", nullable: true)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_EFZombieRoundClientStat", x => x.ZombieClientStatId);
|
||||
table.ForeignKey(
|
||||
name: "FK_EFZombieRoundClientStat_EFClients_EFClientClientId",
|
||||
column: x => x.EFClientClientId,
|
||||
principalTable: "EFClients",
|
||||
principalColumn: "ClientId");
|
||||
table.ForeignKey(
|
||||
name: "FK_EFZombieRoundClientStat_EFZombieClientStat_ZombieClientStatId",
|
||||
column: x => x.ZombieClientStatId,
|
||||
principalTable: "EFZombieClientStat",
|
||||
principalColumn: "ZombieClientStatId",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_EFZombieAggregateClientStat_EFClientClientId",
|
||||
table: "EFZombieAggregateClientStat",
|
||||
column: "EFClientClientId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_EFZombieClientStat_ClientId",
|
||||
table: "EFZombieClientStat",
|
||||
column: "ClientId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_EFZombieClientStat_MatchId",
|
||||
table: "EFZombieClientStat",
|
||||
column: "MatchId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_EFZombieMatch_EFClientClientId",
|
||||
table: "EFZombieMatch",
|
||||
column: "EFClientClientId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_EFZombieMatch_MapId",
|
||||
table: "EFZombieMatch",
|
||||
column: "MapId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_EFZombieMatch_ServerId",
|
||||
table: "EFZombieMatch",
|
||||
column: "ServerId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_EFZombieMatchClientStat_EFClientClientId",
|
||||
table: "EFZombieMatchClientStat",
|
||||
column: "EFClientClientId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_EFZombieRoundClientStat_EFClientClientId",
|
||||
table: "EFZombieRoundClientStat",
|
||||
column: "EFClientClientId");
|
||||
}
|
||||
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "EFZombieAggregateClientStat");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "EFZombieMatchClientStat");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "EFZombieRoundClientStat");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "EFZombieClientStat");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "EFZombieMatch");
|
||||
}
|
||||
}
|
||||
}
|
@ -438,6 +438,9 @@ namespace Data.Migrations.Sqlite
|
||||
b.Property<bool>("Newest")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("PerformanceBucket")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<double?>("PerformanceMetric")
|
||||
.HasColumnType("REAL");
|
||||
|
||||
@ -1072,6 +1075,9 @@ namespace Data.Migrations.Sqlite
|
||||
b.Property<bool>("IsPasswordProtected")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("PerformanceBucket")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<int>("Port")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
@ -1170,6 +1176,9 @@ namespace Data.Migrations.Sqlite
|
||||
b.Property<int>("ClientId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<DateTimeOffset>("CreatedDateTime")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<int>("DamageDealt")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
@ -1197,10 +1206,10 @@ namespace Data.Migrations.Sqlite
|
||||
b.Property<int>("PerksConsumed")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<int>("PointsEarned")
|
||||
b.Property<long>("PointsEarned")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<int>("PointsSpent")
|
||||
b.Property<long>("PointsSpent")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<int>("PowerupsGrabbed")
|
||||
@ -1209,6 +1218,9 @@ namespace Data.Migrations.Sqlite
|
||||
b.Property<int>("Revives")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<DateTimeOffset?>("UpdatedDateTime")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.HasKey("ZombieClientStatId");
|
||||
|
||||
b.HasIndex("ClientId");
|
||||
@ -1218,12 +1230,57 @@ namespace Data.Migrations.Sqlite
|
||||
b.ToTable("EFZombieClientStat", (string)null);
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Data.Models.Zombie.ZombieClientStatRecord", b =>
|
||||
{
|
||||
b.Property<int>("ZombieClientStatRecordId")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<int?>("ClientId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<DateTimeOffset>("CreatedDateTime")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<long?>("RoundId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("Type")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<DateTimeOffset?>("UpdatedDateTime")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("Value")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.HasKey("ZombieClientStatRecordId");
|
||||
|
||||
b.HasIndex("ClientId");
|
||||
|
||||
b.HasIndex("RoundId");
|
||||
|
||||
b.ToTable("EFZombieClientStatRecord", (string)null);
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Data.Models.Zombie.ZombieMatch", b =>
|
||||
{
|
||||
b.Property<int>("ZombieMatchId")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<int>("ClientsCompleted")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<DateTimeOffset>("CreatedDateTime")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<int?>("EFClientClientId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
@ -1239,6 +1296,9 @@ namespace Data.Migrations.Sqlite
|
||||
b.Property<long?>("ServerId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<DateTimeOffset?>("UpdatedDateTime")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.HasKey("ZombieMatchId");
|
||||
|
||||
b.HasIndex("EFClientClientId");
|
||||
@ -1284,8 +1344,8 @@ namespace Data.Migrations.Sqlite
|
||||
b.Property<int>("HighestRound")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<double>("RankingMetric")
|
||||
.HasColumnType("REAL");
|
||||
b.Property<int>("TotalMatchesCompleted")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<int>("TotalMatchesPlayed")
|
||||
.HasColumnType("INTEGER");
|
||||
@ -1798,6 +1858,21 @@ namespace Data.Migrations.Sqlite
|
||||
b.Navigation("Match");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Data.Models.Zombie.ZombieClientStatRecord", b =>
|
||||
{
|
||||
b.HasOne("Data.Models.Client.EFClient", "Client")
|
||||
.WithMany()
|
||||
.HasForeignKey("ClientId");
|
||||
|
||||
b.HasOne("Data.Models.Zombie.ZombieRoundClientStat", "Round")
|
||||
.WithMany()
|
||||
.HasForeignKey("RoundId");
|
||||
|
||||
b.Navigation("Client");
|
||||
|
||||
b.Navigation("Round");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Data.Models.Zombie.ZombieMatch", b =>
|
||||
{
|
||||
b.HasOne("Data.Models.Client.EFClient", null)
|
||||
|
@ -25,5 +25,6 @@ namespace Data.Models.Client.Stats
|
||||
public int? Ranking { get; set; }
|
||||
public double? ZScore { get; set; }
|
||||
public double? PerformanceMetric { get; set; }
|
||||
public string PerformanceBucket { get; set; }
|
||||
}
|
||||
}
|
||||
|
9
Data/Models/DatedRecord.cs
Normal file
9
Data/Models/DatedRecord.cs
Normal file
@ -0,0 +1,9 @@
|
||||
using System;
|
||||
|
||||
namespace Data.Models;
|
||||
|
||||
public class DatedRecord
|
||||
{
|
||||
public DateTimeOffset CreatedDateTime { get; set; } = DateTimeOffset.UtcNow;
|
||||
public DateTimeOffset? UpdatedDateTime { get; set; }
|
||||
}
|
@ -15,6 +15,7 @@ namespace Data.Models.Server
|
||||
public Reference.Game? GameName { get; set; }
|
||||
public string HostName { get; set; }
|
||||
public bool IsPasswordProtected { get; set; }
|
||||
public string PerformanceBucket { get; set; }
|
||||
public long Id => ServerId;
|
||||
public string Value => EndPoint;
|
||||
}
|
||||
|
@ -1,4 +1,6 @@
|
||||
namespace Data.Models.Zombie;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Data.Models.Zombie;
|
||||
|
||||
public class ZombieAggregateClientStat : ZombieClientStat
|
||||
{
|
||||
@ -20,8 +22,23 @@ public class ZombieAggregateClientStat : ZombieClientStat
|
||||
public int HighestRound { get; set; }
|
||||
public int TotalRoundsPlayed { get; set; }
|
||||
public int TotalMatchesPlayed { get; set; }
|
||||
public int TotalMatchesCompleted { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
public double RankingMetric { get; set; }
|
||||
|
||||
[NotMapped]
|
||||
public static readonly string[] RecordsKeys =
|
||||
{
|
||||
nameof(AverageKillsPerDown),
|
||||
nameof(AverageDowns),
|
||||
nameof(AverageRevives),
|
||||
nameof(HeadshotPercentage),
|
||||
nameof(AlivePercentage),
|
||||
nameof(AverageMelees),
|
||||
nameof(AverageRoundReached),
|
||||
nameof(AveragePoints),
|
||||
nameof(HighestRound),
|
||||
nameof(TotalRoundsPlayed),
|
||||
nameof(TotalMatchesPlayed)
|
||||
};
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ using Data.Models.Client;
|
||||
|
||||
namespace Data.Models.Zombie;
|
||||
|
||||
public abstract class ZombieClientStat
|
||||
public abstract class ZombieClientStat : DatedRecord
|
||||
{
|
||||
[Key]
|
||||
public long ZombieClientStatId { get; set; }
|
||||
@ -27,8 +27,8 @@ public abstract class ZombieClientStat
|
||||
public int Melees { get; set; }
|
||||
public int Downs { get; set; }
|
||||
public int Revives { get; set; }
|
||||
public int PointsEarned { get; set; }
|
||||
public int PointsSpent { get; set; }
|
||||
public long PointsEarned { get; set; }
|
||||
public long PointsSpent { get; set; }
|
||||
public int PerksConsumed { get; set; }
|
||||
public int PowerupsGrabbed { get; set; }
|
||||
}
|
||||
|
29
Data/Models/Zombie/ZombieClientStatRecord.cs
Normal file
29
Data/Models/Zombie/ZombieClientStatRecord.cs
Normal file
@ -0,0 +1,29 @@
|
||||
#nullable enable
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Data.Models.Client;
|
||||
|
||||
namespace Data.Models.Zombie;
|
||||
|
||||
public enum RecordType
|
||||
{
|
||||
Maximum,
|
||||
Minimum
|
||||
}
|
||||
|
||||
public class ZombieClientStatRecord : DatedRecord
|
||||
{
|
||||
[Key]
|
||||
public int ZombieClientStatRecordId { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string Type { get; set; } = string.Empty;
|
||||
public string Value { get; set; } = string.Empty;
|
||||
|
||||
public int? ClientId { get; set; }
|
||||
[ForeignKey(nameof(ClientId))]
|
||||
public virtual EFClient? Client { get; set; }
|
||||
|
||||
public long? RoundId { get; set; }
|
||||
[ForeignKey(nameof(RoundId))]
|
||||
public virtual ZombieRoundClientStat? Round { get; set; }
|
||||
}
|
@ -8,7 +8,7 @@ using Data.Models.Server;
|
||||
|
||||
namespace Data.Models.Zombie;
|
||||
|
||||
public class ZombieMatch
|
||||
public class ZombieMatch : DatedRecord
|
||||
{
|
||||
[Key]
|
||||
public int ZombieMatchId { get; set; }
|
||||
@ -21,6 +21,8 @@ public class ZombieMatch
|
||||
[ForeignKey(nameof(ServerId))]
|
||||
public virtual EFServer? Server { get; set; }
|
||||
|
||||
public int ClientsCompleted { get; set; }
|
||||
|
||||
public virtual ICollection<ZombieClientStat>? ClientStats { get; set; }
|
||||
|
||||
public DateTimeOffset MatchStartDate { get; set; } = DateTimeOffset.UtcNow;
|
||||
|
Loading…
Reference in New Issue
Block a user