feat(users): implement user following system and following feed

Add follow/unfollow actions and social stats to user profiles
Introduce Following feed scope in Life view
Add notifications for new followers
This commit is contained in:
2026-05-04 15:49:57 +08:00
parent 016364a8b8
commit 8cb8190554
11 changed files with 472 additions and 18 deletions

View File

@@ -106,10 +106,12 @@ export const systemWordingMessages = {
targetLifePost: 'Life post',
targetLifeComment: 'Life comment',
targetDiscussionComment: 'discussion comment',
targetProfile: 'profile',
lifePostComment: '{actor} commented on your Life post',
lifeCommentReply: '{actor} replied to your Life comment',
discussionCommentReply: '{actor} replied to your discussion comment',
lifePostReaction: '{actor} reacted {reaction} to your Life post',
userFollow: '{actor} followed you',
moderationApproved: 'Your {target} passed review',
moderationRejected: 'Your {target} did not pass review',
moderationFailed: 'Review failed for your {target}'
@@ -504,6 +506,14 @@ export const systemWordingMessages = {
passwordSaved: 'Password updated',
passwordSaveFailed: 'Password update failed',
savePassword: 'Save password',
follow: 'Follow',
followBack: 'Follow back',
following: 'Following',
friend: 'Friend',
followers: 'Followers',
followingCount: 'Following',
friends: 'Friends',
followFailed: 'Follow action failed',
joinedAt: 'Joined {date}',
lifePosts: 'Life posts',
lifeComments: 'Life comments',
@@ -848,6 +858,9 @@ export const systemWordingMessages = {
languages: 'Languages',
allLanguages: 'All languages',
allCategories: 'All',
feedScope: 'Feed scope',
allFeed: 'All feed',
followingFeed: 'Following',
allVersions: 'All versions',
versionFilter: 'Version',
ratingFilter: 'Rating',
@@ -1197,6 +1210,7 @@ export const systemWordingMessages = {
invalidResetToken: 'The password reset link is invalid or expired',
currentPasswordInvalid: 'Current password is incorrect',
invalidReferralCode: 'Referral code is invalid',
cannotFollowSelf: 'You cannot follow yourself',
emailDeliveryUnavailable: 'Email delivery is temporarily unavailable. Please try again later.'
},
validation: {
@@ -1411,10 +1425,12 @@ export const systemWordingMessages = {
targetLifePost: 'Life 动态',
targetLifeComment: 'Life 评论',
targetDiscussionComment: '讨论评论',
targetProfile: '个人主页',
lifePostComment: '{actor} 评论了你的 Life 动态',
lifeCommentReply: '{actor} 回复了你的 Life 评论',
discussionCommentReply: '{actor} 回复了你的讨论评论',
lifePostReaction: '{actor} 用 {reaction} Reaction 了你的 Life 动态',
userFollow: '{actor} 关注了你',
moderationApproved: '你的{target}已审核通过',
moderationRejected: '你的{target}未通过审核',
moderationFailed: '你的{target}审核失败'
@@ -1783,6 +1799,14 @@ export const systemWordingMessages = {
passwordSaved: '密码已更新',
passwordSaveFailed: '密码更新失败',
savePassword: '保存密码',
follow: '关注',
followBack: '回关',
following: '已关注',
friend: '好友',
followers: '粉丝',
followingCount: '关注',
friends: '好友',
followFailed: '关注操作失败',
joinedAt: '加入于 {date}',
lifePosts: 'Life 动态',
lifeComments: 'Life 评论',
@@ -2127,6 +2151,9 @@ export const systemWordingMessages = {
languages: '语言区',
allLanguages: '全部语言',
allCategories: '全部',
feedScope: '动态范围',
allFeed: '全部动态',
followingFeed: '关注动态',
allVersions: '全部版本',
versionFilter: '版本',
ratingFilter: '评分',
@@ -2474,9 +2501,10 @@ export const systemWordingMessages = {
invalidCredentials: '邮箱或密码不正确',
verifyEmailFirst: '请先完成邮箱验证',
invalidResetToken: '密码重置链接无效或已过期',
currentPasswordInvalid: '当前密码不正确',
invalidReferralCode: '邀请码无效',
emailDeliveryUnavailable: '邮件发送暂时不可用,请稍后再试。'
currentPasswordInvalid: '当前密码不正确',
invalidReferralCode: '邀请码无效',
cannotFollowSelf: '不能关注自己',
emailDeliveryUnavailable: '邮件发送暂时不可用,请稍后再试。'
},
validation: {
nameRequired: '请输入名称',