From ab2bdcc7caf06a356e500199d5dcf8e3f6020c4e Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Mon, 8 Sep 2025 23:45:57 +0800 Subject: [PATCH] :sparkles: Mix awarded score into ranks --- DysonNetwork.Sphere/Activity/ActivityService.cs | 4 ++-- DysonNetwork.Sphere/Post/PostService.cs | 13 ++++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/DysonNetwork.Sphere/Activity/ActivityService.cs b/DysonNetwork.Sphere/Activity/ActivityService.cs index 2e6a76b..6b427e6 100644 --- a/DysonNetwork.Sphere/Activity/ActivityService.cs +++ b/DysonNetwork.Sphere/Activity/ActivityService.cs @@ -19,12 +19,12 @@ public class ActivityService( { private static double CalculateHotRank(Post.Post post, Instant now) { - var performanceScore = post.Upvotes - post.Downvotes + post.RepliesCount; + var performanceScore = post.Upvotes - post.Downvotes + post.RepliesCount + (int)post.AwardedScore / 10; var postTime = post.PublishedAt ?? post.CreatedAt; var timeScore = (now - postTime).TotalMinutes; // Add 1 to score to prevent negative results for posts with more downvotes than upvotes // Time dominates ranking, performance adjusts within similar timeframes. - var performanceWeight = Math.Log(performanceScore + 5); // smooth adjustment, median ~4-5 + var performanceWeight = performanceScore + 5; // Normalize time influence since average post interval ~60 minutes var normalizedTime = timeScore / 60.0; return performanceWeight / Math.Pow(normalizedTime + 1.0, 1.2); diff --git a/DysonNetwork.Sphere/Post/PostService.cs b/DysonNetwork.Sphere/Post/PostService.cs index 922d4d2..3775371 100644 --- a/DysonNetwork.Sphere/Post/PostService.cs +++ b/DysonNetwork.Sphere/Post/PostService.cs @@ -848,12 +848,19 @@ public partial class PostService( g => g.Count() ); + // Load awardsScores for postsInPeriod + var awardsScores = await db.Posts + .Where(p => postsInPeriod.Contains(p.Id)) + .ToDictionaryAsync(p => p.Id, p => p.AwardedScore); + var reactSocialPoints = postsInPeriod .Select(postId => new { PostId = postId, - Count = (reactionScores.TryGetValue(postId, out var rScore) ? rScore : 0) + - (repliesCounts.TryGetValue(postId, out var repCount) ? repCount : 0) + Count = + (reactionScores.TryGetValue(postId, out var rScore) ? rScore : 0) + + (repliesCounts.TryGetValue(postId, out var repCount) ? repCount : 0) + + (awardsScores.TryGetValue(postId, out var awardScore) ? (int)(awardScore / 10) : 0) }) .OrderByDescending(e => e.Count) .Take(5) @@ -877,7 +884,7 @@ public partial class PostService( SocialCredits = e.Value }).ToList(); - if (records.Any()) + if (records.Count != 0) { db.PostFeaturedRecords.AddRange(records); await db.SaveChangesAsync();