]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix db error when adding duplicate players in a round (#16206)
authorDrSmugleaf <DrSmugleaf@users.noreply.github.com>
Sun, 7 May 2023 10:13:42 +0000 (03:13 -0700)
committerGitHub <noreply@github.com>
Sun, 7 May 2023 10:13:42 +0000 (20:13 +1000)
Content.Server/Database/ServerDbBase.cs

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