Fix db error when adding duplicate players in a round (#16206)

This commit is contained in:
DrSmugleaf
2023-05-07 03:13:42 -07:00
committed by GitHub
parent 54ef2b71f7
commit c48f17aa33

View File

@@ -663,23 +663,16 @@ namespace Content.Server.Database
{ {
await using var db = await GetDb(); await using var db = await GetDb();
var round = await db.DbContext.Round // ReSharper disable once SuggestVarOrType_Elsewhere
.Include(round => round.Players) Dictionary<Guid, int> players = await db.DbContext.Player
.SingleAsync(round => round.Id == id);
var players = await db.DbContext.Player
.Where(player => playerIds.Contains(player.UserId)) .Where(player => playerIds.Contains(player.UserId))
.ToListAsync(); .ToDictionaryAsync(player => player.UserId, player => player.Id);
var playerSet = new HashSet<Guid>(round.Players.Select(player => player.UserId)); foreach (var player in playerIds)
foreach (var player in players)
{ {
if (playerSet.Contains(player.UserId)) await db.DbContext.Database.ExecuteSqlAsync($"""
{ INSERT INTO player_round (players_id, rounds_id) VALUES ({players[player]}, {id}) ON CONFLICT DO NOTHING
continue; """);
}
round.Players.Add(player);
} }
await db.DbContext.SaveChangesAsync(); await db.DbContext.SaveChangesAsync();