Merge player database models (#5267)

This commit is contained in:
Javier Guardia Fernández
2021-11-11 17:54:02 +01:00
committed by GitHub
parent 57f1e24466
commit 720e750e86
6 changed files with 94 additions and 168 deletions

View File

@@ -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; }

View File

@@ -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
{

View File

@@ -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
{