Skip to content

Commit eb76889

Browse files
committed
fix: don't do mod actions if not a mod
Fixes A-CENTRALIZED-MIRROR-1E
1 parent b21656f commit eb76889

1 file changed

Lines changed: 61 additions & 27 deletions

File tree

BackgroundProcessor/Processors/LinkProcessor.cs

Lines changed: 61 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class LinkProcessor : IBackgroundProcessor
2323
private readonly IDbConnectionFactory _dbConnectionFactory;
2424
private readonly ResourceAccessManager _resourceAccessManager;
2525
private readonly SubmissionBrowser _submissionBrowser;
26+
private readonly SubredditBrowser _subredditBrowser;
2627

2728
public LinkProcessor(ILogger<LinkProcessor> logger,
2829
LinkProvider linkProvider,
@@ -32,7 +33,8 @@ public LinkProcessor(ILogger<LinkProcessor> logger,
3233
TemplateCache templateCache,
3334
IDbConnectionFactory dbConnectionFactory,
3435
ResourceAccessManager resourceAccessManager,
35-
SubmissionBrowser submissionBrowser
36+
SubmissionBrowser submissionBrowser,
37+
SubredditBrowser subredditBrowser
3638
)
3739
{
3840
_logger = logger;
@@ -44,6 +46,7 @@ SubmissionBrowser submissionBrowser
4446
_dbConnectionFactory = dbConnectionFactory;
4547
_resourceAccessManager = resourceAccessManager;
4648
_submissionBrowser = submissionBrowser;
49+
_subredditBrowser = subredditBrowser;
4750
}
4851

4952
/// <inheritdoc />
@@ -111,40 +114,34 @@ private async Task<bool> IsCommentAbleToBePosted(LinkThing redditPostId, Cancell
111114

112115
private async Task ProcessLink(string redditPostId, int queuedItemId, CancellationToken cancellationToken)
113116
{
114-
var links = await _linkProvider.GetLinksByRedditPostId(redditPostId);
115-
var maybeExistingComment = await _commentProvider.FindCommentIdByPostId(redditPostId);
117+
var redditPostLinkId = LinkThing.CreateFromShortId(redditPostId);
118+
119+
var maybeExistingSubmission = await _submissionBrowser.GetSubmission(redditPostLinkId);
120+
var links = await _linkProvider.GetLinksByRedditPostId(redditPostLinkId.ShortId);
121+
var maybeExistingComment = await _commentProvider.FindCommentIdByPostId(redditPostLinkId.ShortId);
116122

117123
await using var connection = _dbConnectionFactory.CreateConnection();
118124
await using var lazyTx = LazyDbTransaction.CreateFrom(connection, IsolationLevel.Serializable);
119125

120-
if (!links.Any())
126+
if (!maybeExistingSubmission.Try(out var submission))
127+
{
128+
_logger.LogDebug("Submission {RedditPostId} not found, skipping processing", redditPostLinkId);
129+
}
130+
else if (links.Count == 0 && maybeExistingComment.HasValue)
121131
{
122-
if (maybeExistingComment.HasValue)
123-
await _commentBrowser.DeleteComment(CommentThing.CreateFromShortId(maybeExistingComment.Value));
132+
await _commentBrowser.DeleteComment(CommentThing.CreateFromShortId(maybeExistingComment.Value));
124133
}
125134
else
126135
{
127-
var redditPostLinkId = LinkThing.CreateFromShortId(redditPostId);
128-
129-
var message = await BuildComment(links,
130-
getUsername: async userId => (await _userProvider.FindUserByIdIncludeDeleted(userId)).Value.DisplayUsername,
136+
var subreddit = await _subredditBrowser.GetAboutSubreddit(submission.Subreddit);
137+
138+
await CreateOrEditComment(
139+
lazyTx,
140+
redditPostLinkId,
141+
links,
142+
maybeExistingComment,
143+
isUserModerator: subreddit.Data.IsUserModerator,
131144
cancellationToken);
132-
133-
if (maybeExistingComment.HasValue)
134-
{
135-
var result = await _commentBrowser.EditComment(CommentThing.CreateFromShortId(maybeExistingComment.Value), message);
136-
await TryDistinguishStickyAndLockLogFailure(result.ParentId, result.CommentId);
137-
}
138-
else if (await IsCommentAbleToBePosted(redditPostLinkId, cancellationToken))
139-
{
140-
var result = await _commentBrowser.SubmitComment(redditPostLinkId, message);
141-
await TryDistinguishStickyAndLockLogFailure(result.ParentId, result.CommentId);
142-
143-
#pragma warning disable IDISP001
144-
var innerTx = await lazyTx.GetOrCreateTx(cancellationToken);
145-
#pragma warning restore IDISP001
146-
await RedditCommentProvider.CreateOrUpdateLinkedComment(innerTx, redditPostId, result.CommentId.ShortId);
147-
}
148145
}
149146

150147
#pragma warning disable IDISP001
@@ -156,6 +153,40 @@ private async Task ProcessLink(string redditPostId, int queuedItemId, Cancellati
156153
await tx.Commit(cancellationToken);
157154
}
158155

156+
private async Task CreateOrEditComment(
157+
LazyDbTransaction lazyTx,
158+
LinkThing redditPostId,
159+
IReadOnlyCollection<Link> links,
160+
Maybe<string> maybeExistingComment,
161+
bool isUserModerator,
162+
CancellationToken cancellationToken
163+
)
164+
{
165+
var message = await BuildComment(links,
166+
getUsername: async userId => (await _userProvider.FindUserByIdIncludeDeleted(userId)).Value.DisplayUsername,
167+
cancellationToken);
168+
169+
if (maybeExistingComment.HasValue)
170+
{
171+
var result = await _commentBrowser.EditComment(CommentThing.CreateFromShortId(maybeExistingComment.Value), message);
172+
173+
if (isUserModerator)
174+
await TryDistinguishStickyAndLockLogFailure(result.ParentId, result.CommentId);
175+
}
176+
else if (await IsCommentAbleToBePosted(redditPostId, cancellationToken))
177+
{
178+
var result = await _commentBrowser.SubmitComment(redditPostId, message);
179+
180+
if (isUserModerator)
181+
await TryDistinguishStickyAndLockLogFailure(result.ParentId, result.CommentId);
182+
183+
#pragma warning disable IDISP001
184+
var innerTx = await lazyTx.GetOrCreateTx(cancellationToken);
185+
#pragma warning restore IDISP001
186+
await RedditCommentProvider.CreateOrUpdateLinkedComment(innerTx, redditPostId.ShortId, result.CommentId.ShortId);
187+
}
188+
}
189+
159190
private async Task<string> BuildComment(IReadOnlyCollection<Link> links, Func<int, Task<string>> getUsername, CancellationToken cancellationToken)
160191
{
161192
var mirrors = links
@@ -196,7 +227,10 @@ static async IAsyncEnumerable<string> BuildSection(string heading, string prefix
196227
}
197228
}
198229

199-
private async Task TryDistinguishStickyAndLockLogFailure(OneOf<LinkThing, CommentThing> parent, CommentThing comment)
230+
private async Task TryDistinguishStickyAndLockLogFailure(
231+
OneOf<LinkThing, CommentThing> parent,
232+
CommentThing comment
233+
)
200234
{
201235
try
202236
{

0 commit comments

Comments
 (0)