[backend/core] Use upsert when inserting hashtags

This fixes a race condition.
This commit is contained in:
Laura Hausmann 2024-03-25 17:48:18 +01:00
parent f2d8bda393
commit 4332d23b32
No known key found for this signature in database
GPG key ID: D044E84C5BE01605
2 changed files with 2 additions and 4 deletions

View file

@ -884,8 +884,7 @@ public class NoteService(
var existing = await bgDb.Hashtags.Where(p => tags.Contains(p.Name)).Select(p => p.Name).ToListAsync(); var existing = await bgDb.Hashtags.Where(p => tags.Contains(p.Name)).Select(p => p.Name).ToListAsync();
var dbTags = tags.Except(existing) var dbTags = tags.Except(existing)
.Select(p => new Hashtag { Id = IdHelpers.GenerateSlowflakeId(), Name = p }); .Select(p => new Hashtag { Id = IdHelpers.GenerateSlowflakeId(), Name = p });
await bgDb.AddRangeAsync(dbTags); await db.UpsertRange(dbTags).On(p => p.Name).NoUpdate().RunAsync();
await bgDb.SaveChangesAsync();
}); });
return tags; return tags;

View file

@ -850,8 +850,7 @@ public class UserService(
var existing = await bgDb.Hashtags.Where(p => tags.Contains(p.Name)).Select(p => p.Name).ToListAsync(); var existing = await bgDb.Hashtags.Where(p => tags.Contains(p.Name)).Select(p => p.Name).ToListAsync();
var dbTags = tags.Except(existing) var dbTags = tags.Except(existing)
.Select(p => new Hashtag { Id = IdHelpers.GenerateSlowflakeId(), Name = p }); .Select(p => new Hashtag { Id = IdHelpers.GenerateSlowflakeId(), Name = p });
await bgDb.AddRangeAsync(dbTags); await db.UpsertRange(dbTags).On(p => p.Name).NoUpdate().RunAsync();
await bgDb.SaveChangesAsync();
}); });
return tags; return tags;