Merge player database models (#5267)
This commit is contained in:
committed by
GitHub
parent
57f1e24466
commit
720e750e86
@@ -1,22 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Content.Server.IP;
|
||||
using Content.Server.Preferences;
|
||||
using Content.Server.Preferences.Managers;
|
||||
using Content.Shared;
|
||||
using Content.Shared.CCVar;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Robust.Shared.Configuration;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Network;
|
||||
|
||||
|
||||
namespace Content.Server.Database
|
||||
{
|
||||
/// <summary>
|
||||
@@ -154,69 +150,14 @@ namespace Content.Server.Database
|
||||
await db.SqliteDbContext.SaveChangesAsync();
|
||||
}
|
||||
|
||||
public override async Task UpdatePlayerRecord(
|
||||
NetUserId userId,
|
||||
string userName,
|
||||
IPAddress address,
|
||||
ImmutableArray<byte> hwId)
|
||||
protected override PlayerRecord MakePlayerRecord(Player record)
|
||||
{
|
||||
await using var db = await GetDbImpl();
|
||||
|
||||
var record = await db.SqliteDbContext.Player.SingleOrDefaultAsync(p => p.UserId == userId.UserId);
|
||||
if (record == null)
|
||||
{
|
||||
db.SqliteDbContext.Player.Add(record = new SqlitePlayer
|
||||
{
|
||||
FirstSeenTime = DateTime.UtcNow,
|
||||
UserId = userId.UserId,
|
||||
});
|
||||
}
|
||||
|
||||
record.LastSeenTime = DateTime.UtcNow;
|
||||
record.LastSeenAddress = address.ToString();
|
||||
record.LastSeenUserName = userName;
|
||||
record.LastSeenHWId = hwId.ToArray();
|
||||
|
||||
await db.SqliteDbContext.SaveChangesAsync();
|
||||
}
|
||||
|
||||
public override async Task<PlayerRecord?> GetPlayerRecordByUserName(string userName, CancellationToken cancel)
|
||||
{
|
||||
await using var db = await GetDbImpl();
|
||||
|
||||
// Sort by descending last seen time.
|
||||
// So if due to account renames we have two people with the same username in the DB,
|
||||
// the most recent one is picked.
|
||||
var record = await db.SqliteDbContext.Player
|
||||
.OrderByDescending(p => p.LastSeenTime)
|
||||
.FirstOrDefaultAsync(p => p.LastSeenUserName == userName, cancel);
|
||||
|
||||
return MakePlayerRecord(record);
|
||||
}
|
||||
|
||||
public override async Task<PlayerRecord?> GetPlayerRecordByUserId(NetUserId userId, CancellationToken cancel)
|
||||
{
|
||||
await using var db = await GetDbImpl();
|
||||
|
||||
var record = await db.SqliteDbContext.Player
|
||||
.SingleOrDefaultAsync(p => p.UserId == userId.UserId, cancel);
|
||||
|
||||
return MakePlayerRecord(record);
|
||||
}
|
||||
|
||||
private static PlayerRecord? MakePlayerRecord(SqlitePlayer? record)
|
||||
{
|
||||
if (record == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return new PlayerRecord(
|
||||
new NetUserId(record.UserId),
|
||||
new DateTimeOffset(record.FirstSeenTime, TimeSpan.Zero),
|
||||
record.LastSeenUserName,
|
||||
new DateTimeOffset(record.LastSeenTime, TimeSpan.Zero),
|
||||
IPAddress.Parse(record.LastSeenAddress),
|
||||
record.LastSeenAddress,
|
||||
record.LastSeenHWId?.ToImmutableArray());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user