From 4332d23b32eae7a2c8702b3eb3cc350c009dc8da Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Mon, 25 Mar 2024 17:48:18 +0100 Subject: [PATCH] [backend/core] Use upsert when inserting hashtags This fixes a race condition. --- Iceshrimp.Backend/Core/Services/NoteService.cs | 3 +-- Iceshrimp.Backend/Core/Services/UserService.cs | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Iceshrimp.Backend/Core/Services/NoteService.cs b/Iceshrimp.Backend/Core/Services/NoteService.cs index 4df4abef..6e4fb16c 100644 --- a/Iceshrimp.Backend/Core/Services/NoteService.cs +++ b/Iceshrimp.Backend/Core/Services/NoteService.cs @@ -884,8 +884,7 @@ public class NoteService( var existing = await bgDb.Hashtags.Where(p => tags.Contains(p.Name)).Select(p => p.Name).ToListAsync(); var dbTags = tags.Except(existing) .Select(p => new Hashtag { Id = IdHelpers.GenerateSlowflakeId(), Name = p }); - await bgDb.AddRangeAsync(dbTags); - await bgDb.SaveChangesAsync(); + await db.UpsertRange(dbTags).On(p => p.Name).NoUpdate().RunAsync(); }); return tags; diff --git a/Iceshrimp.Backend/Core/Services/UserService.cs b/Iceshrimp.Backend/Core/Services/UserService.cs index 83df224f..66d6f3cf 100644 --- a/Iceshrimp.Backend/Core/Services/UserService.cs +++ b/Iceshrimp.Backend/Core/Services/UserService.cs @@ -850,8 +850,7 @@ public class UserService( var existing = await bgDb.Hashtags.Where(p => tags.Contains(p.Name)).Select(p => p.Name).ToListAsync(); var dbTags = tags.Except(existing) .Select(p => new Hashtag { Id = IdHelpers.GenerateSlowflakeId(), Name = p }); - await bgDb.AddRangeAsync(dbTags); - await bgDb.SaveChangesAsync(); + await db.UpsertRange(dbTags).On(p => p.Name).NoUpdate().RunAsync(); }); return tags;