From d060d076c16bcd41786708013473a0e89142baee Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Wed, 24 Apr 2024 21:43:40 +0200 Subject: [PATCH] [backend/core] Refactor DeleteNoteAsync and DeleteUserAsync for improved code reuse (ISH-239) --- .../Core/Services/NoteService.cs | 26 +++---------------- .../Core/Services/UserService.cs | 5 ++++ 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/Iceshrimp.Backend/Core/Services/NoteService.cs b/Iceshrimp.Backend/Core/Services/NoteService.cs index 100d8d27..0537668d 100644 --- a/Iceshrimp.Backend/Core/Services/NoteService.cs +++ b/Iceshrimp.Backend/Core/Services/NoteService.cs @@ -254,7 +254,7 @@ public class NoteService( } /// - /// This needs to be called before SaveChangesAsync on create & after on delete + /// This needs to be called before SaveChangesAsync on create, and afterwards on delete /// private async Task UpdateNoteCountersAsync(Note note, bool create) { @@ -489,15 +489,14 @@ public class NoteService( public async Task DeleteNoteAsync(Note note) { - logger.LogDebug("Deleting note {id}", note.Id); + logger.LogDebug("Deleting note '{id}' owned by {userId}", note.Id, note.User.Id); - db.Update(note.User); db.Remove(note); eventSvc.RaiseNoteDeleted(this, note); await db.SaveChangesAsync(); await UpdateNoteCountersAsync(note, false); - if (note.UserHost != null) + if (note.User.Host != null) { if (note.User.Uri != null) { @@ -554,24 +553,7 @@ public class NoteService( logger.LogDebug("Deleting note '{id}' owned by {userId}", note.Id, actor.Id); - db.Remove(dbNote); - eventSvc.RaiseNoteDeleted(this, dbNote); - await db.SaveChangesAsync(); - await UpdateNoteCountersAsync(dbNote, false); - - // ReSharper disable once EntityFramework.NPlusOne.IncompleteDataUsage (same reason as above) - if (dbNote.User.Uri != null && dbNote.UserHost != null) - { - _ = followupTaskSvc.ExecuteTask("UpdateInstanceNoteCounter", async provider => - { - var bgDb = provider.GetRequiredService(); - var bgInstanceSvc = provider.GetRequiredService(); - // ReSharper disable once EntityFramework.NPlusOne.IncompleteDataUsage (same reason as above) - var dbInstance = await bgInstanceSvc.GetUpdatedInstanceMetadataAsync(dbNote.User); - await bgDb.Instances.Where(p => p.Id == dbInstance.Id) - .ExecuteUpdateAsync(p => p.SetProperty(i => i.NotesCount, i => i.NotesCount - 1)); - }); - } + await DeleteNoteAsync(dbNote); } public async Task UndoAnnounceAsync(ASNote note, User actor) diff --git a/Iceshrimp.Backend/Core/Services/UserService.cs b/Iceshrimp.Backend/Core/Services/UserService.cs index ad462490..a1196d0c 100644 --- a/Iceshrimp.Backend/Core/Services/UserService.cs +++ b/Iceshrimp.Backend/Core/Services/UserService.cs @@ -471,6 +471,11 @@ public class UserService( return; } + await DeleteUserAsync(user); + } + + public async Task DeleteUserAsync(User user) + { await queueSvc.BackgroundTaskQueue.EnqueueAsync(new UserDeleteJobData { UserId = user.Id }); }