diff --git a/DysonNetwork.Sphere/Chat/ChatRoomController.cs b/DysonNetwork.Sphere/Chat/ChatRoomController.cs index 47dd508..d33d85d 100644 --- a/DysonNetwork.Sphere/Chat/ChatRoomController.cs +++ b/DysonNetwork.Sphere/Chat/ChatRoomController.cs @@ -428,9 +428,30 @@ public class ChatRoomController( ResourceId = chatRoomResourceId }); - db.ChatRooms.Remove(chatRoom); - await db.SaveChangesAsync(); + await using var transaction = await db.Database.BeginTransactionAsync(); + try + { + var now = SystemClock.Instance.GetCurrentInstant(); + await db.ChatMessages + .Where(m => m.ChatRoomId == id) + .ExecuteUpdateAsync(s => s.SetProperty(s => s.DeletedAt, now)); + await db.ChatMembers + .Where(m => m.ChatRoomId == id) + .ExecuteUpdateAsync(s => s.SetProperty(s => s.DeletedAt, now)); + await db.SaveChangesAsync(); + + db.ChatRooms.Remove(chatRoom); + await db.SaveChangesAsync(); + + await transaction.CommitAsync(); + } + catch (Exception) + { + await transaction.RollbackAsync(); + throw; + } + _ = als.CreateActionLogAsync(new CreateActionLogRequest { Action = "chatrooms.delete",