Skip to content

Commit 7d84116

Browse files
committed
Use new last visible comment fields to optimize problems
1 parent a18d200 commit 7d84116

File tree

7 files changed

+39
-19
lines changed

7 files changed

+39
-19
lines changed

src/JoinRpg.Domain/CharacterProblemFilters/BrokenCharactersFilter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ private IEnumerable<ClaimProblem> GetProblemFroGroup(CharacterGroup group)
2929
}
3030
if (!group.ParentCharacterGroupIds.Any() || group.ParentCharacterGroupIds.Any(id => id == group.CharacterGroupId))
3131
{
32-
yield return new ClaimProblem(ClaimProblemType.GroupIsBroken, ProblemSeverity.Fatal, null, group.CharacterGroupName);
32+
yield return new ClaimProblem(ClaimProblemType.GroupIsBroken, ProblemSeverity.Fatal, group.CharacterGroupName);
3333
}
3434
}
3535
}

src/JoinRpg.Domain/ClaimProblem.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,36 @@ public class ClaimProblem
1313

1414
public ProblemSeverity Severity { get; }
1515

16-
public ClaimProblem(ClaimProblemType problemType, ProblemSeverity severity, DateTime? problemTime = null, string? extraInfo = null)
16+
public ClaimProblem(ClaimProblemType problemType, ProblemSeverity severity, DateTime problemTime, string? extraInfo = null)
1717
{
1818
ProblemType = problemType;
1919
Severity = severity;
2020
ProblemTime = problemTime;
2121
ExtraInfo = extraInfo;
2222
}
23+
24+
public ClaimProblem(ClaimProblemType problemType, ProblemSeverity severity, string extraInfo)
25+
{
26+
ProblemType = problemType;
27+
Severity = severity;
28+
ProblemTime = null;
29+
ExtraInfo = extraInfo;
30+
}
31+
32+
public ClaimProblem(ClaimProblemType problemType, ProblemSeverity severity)
33+
{
34+
ProblemType = problemType;
35+
Severity = severity;
36+
ProblemTime = null;
37+
ExtraInfo = null;
38+
}
39+
40+
public ClaimProblem(ClaimProblemType problemType, ProblemSeverity severity, DateTimeOffset problemTime, string? extraInfo = null)
41+
{
42+
ProblemType = problemType;
43+
Severity = severity;
44+
ProblemTime = problemTime.DateTime;
45+
ExtraInfo = extraInfo;
46+
}
2347
}
2448
}

src/JoinRpg.Domain/ClaimProblemFilters/ClaimWorkStopped.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using System.Collections.Generic;
3-
using System.Linq;
43
using JoinRpg.DataModel;
54

65
namespace JoinRpg.Domain.ClaimProblemFilters
@@ -24,14 +23,14 @@ public IEnumerable<ClaimProblem> GetProblems(Claim claim)
2423
yield break;
2524
}
2625

27-
if (!claim.CommentDiscussion.GetMasterAnswers().Any())
26+
if (claim.LastVisibleMasterCommentAt is null)
2827
{
2928
yield return new ClaimProblem(ClaimProblemType.ClaimNeverAnswered, ProblemSeverity.Error);
3029
}
3130

32-
else if (!claim.CommentDiscussion.GetMasterAnswers().InLastXDays(60).Any())
31+
else if (!claim.HasMasterCommentsInLastXDays(60))
3332
{
34-
yield return new ClaimProblem(ClaimProblemType.ClaimWorkStopped, ProblemSeverity.Hint, claim.CommentDiscussion.GetMasterAnswers().Last().CreatedAt);
33+
yield return new ClaimProblem(ClaimProblemType.ClaimWorkStopped, ProblemSeverity.Hint, claim.LastVisibleMasterCommentAt.Value);
3534
}
3635
}
3736
}

src/JoinRpg.Domain/ClaimProblemFilters/NotAnsweredClaim.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,17 @@ public IEnumerable<ClaimProblem> GetProblems(Claim claim)
2121
yield break;
2222
}
2323

24-
25-
var masterAnswers = claim.CommentDiscussion.GetMasterAnswers().ToList();
26-
if (!masterAnswers.Any())
24+
if (claim.LastVisibleMasterCommentAt is null)
2725
{
2826
yield return new ClaimProblem(ClaimProblemType.ClaimNeverAnswered, ProblemSeverity.Error, claim.CreateDate);
2927
}
30-
else if (!masterAnswers.InLastXDays(14).Any())
28+
else if (!claim.HasMasterCommentsInLastXDays(14))
3129
{
32-
yield return new ClaimProblem(ClaimProblemType.ClaimDiscussionStopped, ProblemSeverity.Error, masterAnswers.Last().CreatedAt);
30+
yield return new ClaimProblem(ClaimProblemType.ClaimDiscussionStopped, ProblemSeverity.Error, claim.LastVisibleMasterCommentAt.Value);
3331
}
34-
else if (!masterAnswers.InLastXDays(7).Any())
32+
else if (!claim.HasMasterCommentsInLastXDays(7))
3533
{
36-
yield return new ClaimProblem(ClaimProblemType.ClaimDiscussionStopped, ProblemSeverity.Warning, masterAnswers.Last().CreatedAt);
34+
yield return new ClaimProblem(ClaimProblemType.ClaimDiscussionStopped, ProblemSeverity.Warning, claim.LastVisibleMasterCommentAt.Value);
3735
}
3836

3937
if (now.Subtract(claim.CreateDate) > TimeSpan.FromDays(60))

src/JoinRpg.Domain/ClaimProblemFilters/ResponsibleMasterProblemFilter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ public IEnumerable<ClaimProblem> GetProblems(Claim claim)
99
{
1010
if (claim.ResponsibleMasterUser == null)
1111
{
12-
yield return new ClaimProblem(ClaimProblemType.NoResponsibleMaster, ProblemSeverity.Error, null);
12+
yield return new ClaimProblem(ClaimProblemType.NoResponsibleMaster, ProblemSeverity.Error);
1313
}
1414
else if (!claim.HasMasterAccess(claim.ResponsibleMasterUserId))
1515
{
16-
yield return new ClaimProblem(ClaimProblemType.InvalidResponsibleMaster, ProblemSeverity.Error, null);
16+
yield return new ClaimProblem(ClaimProblemType.InvalidResponsibleMaster, ProblemSeverity.Error);
1717
}
1818
}
1919
}

src/JoinRpg.Domain/CommentExtensions.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Collections.Generic;
32
using System.Linq;
43
using JoinRpg.DataModel;
54
using JoinRpg.Helpers;
@@ -14,10 +13,10 @@ private static int GetWatermark(this ICommentDiscussionHeader discussion, int us
1413
{
1514
var comments = discussion.Comments.Where(c => c.AuthorUserId == userId).Select(c => c.Id);
1615
var watermarks = discussion.Watermarks.Where(wm => wm.UserId == userId).Select(c => c.CommentId);
17-
return comments.Union(watermarks).Union(0).Max();
16+
return comments.Union(watermarks).Append(0).Max();
1817
}
1918

20-
public static IEnumerable<Comment> InLastXDays(this IEnumerable<Comment> masterAnswers, int days) => masterAnswers.Where(comment => DateTime.UtcNow.Subtract(comment.CreatedAt) < TimeSpan.FromDays(days));
19+
public static bool HasMasterCommentsInLastXDays(this Claim claim, int days) => claim.LastVisibleMasterCommentAt?.AddDays(days) >= DateTimeOffset.Now;
2120

2221
public static int GetUnreadCount(this ICommentDiscussionHeader commentDiscussion, int currentUserId)
2322
{

src/JoinRpg.Domain/ProblemExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public class FieldRelatedProblem : ClaimProblem
9191
public ProjectField Field { get; }
9292

9393
public FieldRelatedProblem(ClaimProblemType problemType, ProblemSeverity severity, [NotNull] ProjectField field)
94-
: base(problemType, severity, null, field.FieldName) => Field = field ?? throw new ArgumentNullException(nameof(field));
94+
: base(problemType, severity, field.FieldName) => Field = field ?? throw new ArgumentNullException(nameof(field));
9595
}
9696

9797
public enum ClaimProblemType

0 commit comments

Comments
 (0)