Merge player database models (#5267)
This commit is contained in:
committed by
GitHub
parent
57f1e24466
commit
720e750e86
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Net;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Content.Server.Database
|
||||
@@ -27,6 +28,7 @@ namespace Content.Server.Database
|
||||
public DbSet<Preference> Preference { get; set; } = null!;
|
||||
public DbSet<Profile> Profile { get; set; } = null!;
|
||||
public DbSet<AssignedUserId> AssignedUserId { get; set; } = null!;
|
||||
public DbSet<Player> Player { get; set; } = default!;
|
||||
public DbSet<Admin> Admin { get; set; } = null!;
|
||||
public DbSet<AdminRank> AdminRank { get; set; } = null!;
|
||||
|
||||
@@ -162,6 +164,22 @@ namespace Content.Server.Database
|
||||
public Guid UserId { get; set; }
|
||||
}
|
||||
|
||||
[Table("player")]
|
||||
public class Player
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
// Permanent data
|
||||
public Guid UserId { get; set; }
|
||||
public DateTime FirstSeenTime { get; set; }
|
||||
|
||||
// Data that gets updated on each join.
|
||||
public string LastSeenUserName { get; set; } = null!;
|
||||
public DateTime LastSeenTime { get; set; }
|
||||
public IPAddress LastSeenAddress { get; set; } = null!;
|
||||
public byte[]? LastSeenHWId { get; set; }
|
||||
}
|
||||
|
||||
public class Admin
|
||||
{
|
||||
[Key] public Guid UserId { get; set; }
|
||||
|
||||
@@ -22,7 +22,6 @@ namespace Content.Server.Database
|
||||
|
||||
public DbSet<PostgresServerBan> Ban { get; set; } = default!;
|
||||
public DbSet<PostgresServerUnban> Unban { get; set; } = default!;
|
||||
public DbSet<PostgresPlayer> Player { get; set; } = default!;
|
||||
public DbSet<PostgresConnectionLog> ConnectionLog { get; set; } = default!;
|
||||
|
||||
|
||||
@@ -70,16 +69,16 @@ namespace Content.Server.Database
|
||||
.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address")
|
||||
.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR user_id IS NOT NULL OR hwid IS NOT NULL");
|
||||
|
||||
modelBuilder.Entity<PostgresPlayer>()
|
||||
modelBuilder.Entity<Player>()
|
||||
.HasIndex(p => p.UserId)
|
||||
.IsUnique();
|
||||
|
||||
// ReSharper disable once StringLiteralTypo
|
||||
modelBuilder.Entity<PostgresPlayer>()
|
||||
modelBuilder.Entity<Player>()
|
||||
.HasCheckConstraint("LastSeenAddressNotIPv6MappedIPv4",
|
||||
"NOT inet '::ffff:0.0.0.0/96' >>= last_seen_address");
|
||||
|
||||
modelBuilder.Entity<PostgresPlayer>()
|
||||
modelBuilder.Entity<Player>()
|
||||
.HasIndex(p => p.LastSeenUserName);
|
||||
|
||||
modelBuilder.Entity<PostgresConnectionLog>()
|
||||
@@ -131,25 +130,6 @@ namespace Content.Server.Database
|
||||
public DateTime UnbanTime { get; set; }
|
||||
}
|
||||
|
||||
[Table("player")]
|
||||
public class PostgresPlayer
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
// Permanent data
|
||||
public Guid UserId { get; set; }
|
||||
|
||||
public DateTime FirstSeenTime { get; set; }
|
||||
|
||||
// Data that gets updated on each join.
|
||||
public string LastSeenUserName { get; set; } = null!;
|
||||
|
||||
public DateTime LastSeenTime { get; set; }
|
||||
|
||||
public IPAddress LastSeenAddress { get; set; } = null!;
|
||||
public byte[]? LastSeenHWId { get; set; }
|
||||
}
|
||||
|
||||
[Table("connection_log")]
|
||||
public class PostgresConnectionLog
|
||||
{
|
||||
|
||||
@@ -13,7 +13,6 @@ namespace Content.Server.Database
|
||||
{
|
||||
public DbSet<SqliteServerBan> Ban { get; set; } = default!;
|
||||
public DbSet<SqliteServerUnban> Unban { get; set; } = default!;
|
||||
public DbSet<SqlitePlayer> Player { get; set; } = default!;
|
||||
public DbSet<SqliteConnectionLog> ConnectionLog { get; set; } = default!;
|
||||
|
||||
public SqliteServerDbContext()
|
||||
@@ -37,10 +36,18 @@ namespace Content.Server.Database
|
||||
{
|
||||
base.OnModelCreating(modelBuilder);
|
||||
|
||||
modelBuilder.Entity<SqlitePlayer>()
|
||||
modelBuilder.Entity<Player>()
|
||||
.HasIndex(p => p.LastSeenUserName);
|
||||
|
||||
var converter = new ValueConverter<(IPAddress address, int mask), string>(
|
||||
var ipConverter = new ValueConverter<IPAddress, string>(
|
||||
v => v.ToString(),
|
||||
v => IPAddress.Parse(v));
|
||||
|
||||
modelBuilder.Entity<Player>()
|
||||
.Property(p => p.LastSeenAddress)
|
||||
.HasConversion(ipConverter);
|
||||
|
||||
var ipMaskConverter = new ValueConverter<(IPAddress address, int mask), string>(
|
||||
v => InetToString(v.address, v.mask),
|
||||
v => StringToInet(v)
|
||||
);
|
||||
@@ -49,7 +56,7 @@ namespace Content.Server.Database
|
||||
.Entity<SqliteServerBan>()
|
||||
.Property(e => e.Address)
|
||||
.HasColumnType("TEXT")
|
||||
.HasConversion(converter);
|
||||
.HasConversion(ipMaskConverter);
|
||||
}
|
||||
|
||||
public SqliteServerDbContext(DbContextOptions<ServerDbContext> options) : base(options)
|
||||
@@ -105,22 +112,6 @@ namespace Content.Server.Database
|
||||
public DateTime UnbanTime { get; set; }
|
||||
}
|
||||
|
||||
[Table("player")]
|
||||
public class SqlitePlayer
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
// Permanent data
|
||||
public Guid UserId { get; set; }
|
||||
public DateTime FirstSeenTime { get; set; }
|
||||
|
||||
// Data that gets updated on each join.
|
||||
public string LastSeenUserName { get; set; } = null!;
|
||||
public DateTime LastSeenTime { get; set; }
|
||||
public string LastSeenAddress { get; set; } = null!;
|
||||
public byte[]? LastSeenHWId { get; set; }
|
||||
}
|
||||
|
||||
[Table("connection_log")]
|
||||
public class SqliteConnectionLog
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user