|
|
@@ -15,6 +15,10 @@ public sealed class Handler(IAppDbContext db, IFileStorage fileStorage) : IComma
|
|
|
}
|
|
|
|
|
|
var posts = await db.Post.Where(c => request.IDs.Contains(c.ID) && c.IsDeleted).ToListAsync(ct);
|
|
|
+ if (posts.Count == 0)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
foreach (var post in posts)
|
|
|
{
|
|
|
@@ -24,26 +28,36 @@ public sealed class Handler(IAppDbContext db, IFileStorage fileStorage) : IComma
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- var boardPostCounts = posts.GroupBy(p => p.BoardID).ToDictionary(g => g.Key, g => g.Count());
|
|
|
- var boards = await db.Board.Where(b => boardPostCounts.Keys.Contains(b.ID)).ToListAsync(ct);
|
|
|
- foreach (var board in boards)
|
|
|
+ var postIDs = posts.Select(c => c.ID).ToList();
|
|
|
+
|
|
|
+ // 로그 테이블 선삭제 (Restrict FK 충돌 방지)
|
|
|
+ // Post 로그
|
|
|
+ var postFileDownLogs = await db.PostFileDownLog.Where(c => postIDs.Contains(c.PostID)).ToListAsync(ct);
|
|
|
+ if (postFileDownLogs.Count > 0)
|
|
|
{
|
|
|
- board.Posts -= boardPostCounts[board.ID];
|
|
|
- board.UpdatedAt = DateTime.UtcNow;
|
|
|
+ db.PostFileDownLog.RemoveRange(postFileDownLogs);
|
|
|
}
|
|
|
|
|
|
- var boardGroupIDs = boards.Select(c => c.BoardGroupID).Distinct().ToList();
|
|
|
- var boardGroups = await db.BoardGroup.Where(g => boardGroupIDs.Contains(g.ID)).ToListAsync(ct);
|
|
|
-
|
|
|
- var boardToGroup = boards.ToDictionary(b => b.ID, b => b.BoardGroupID);
|
|
|
- var groupPostCounts = posts.GroupBy(p => boardToGroup[p.BoardID]).ToDictionary(g => g.Key, g => g.Count());
|
|
|
+ var postLinkClickLogs = await db.PostLinkClickLog.Where(c => postIDs.Contains(c.PostID)).ToListAsync(ct);
|
|
|
+ if (postLinkClickLogs.Count > 0)
|
|
|
+ {
|
|
|
+ db.PostLinkClickLog.RemoveRange(postLinkClickLogs);
|
|
|
+ }
|
|
|
|
|
|
- foreach (var group in boardGroups)
|
|
|
+ // Comment 로그 (Post → Comment Cascade 시 충돌 방지)
|
|
|
+ var commentIDs = await db.Comment.Where(c => postIDs.Contains(c.PostID)).Select(c => c.ID).ToListAsync(ct);
|
|
|
+ if (commentIDs.Count > 0)
|
|
|
{
|
|
|
- if (groupPostCounts.TryGetValue(group.ID, out var count))
|
|
|
+ var commentFileDownLogs = await db.CommentFileDownLog.Where(c => commentIDs.Contains(c.CommentID)).ToListAsync(ct);
|
|
|
+ if (commentFileDownLogs.Count > 0)
|
|
|
+ {
|
|
|
+ db.CommentFileDownLog.RemoveRange(commentFileDownLogs);
|
|
|
+ }
|
|
|
+
|
|
|
+ var commentLinkClickLogs = await db.CommentLinkClickLog.Where(c => commentIDs.Contains(c.CommentID)).ToListAsync(ct);
|
|
|
+ if (commentLinkClickLogs.Count > 0)
|
|
|
{
|
|
|
- group.Posts -= count;
|
|
|
- group.UpdatedAt = DateTime.UtcNow;
|
|
|
+ db.CommentLinkClickLog.RemoveRange(commentLinkClickLogs);
|
|
|
}
|
|
|
}
|
|
|
|