in code/Server/Common/Managers/RelationshipsManager.cs [111:235]
public async Task UpdateRelationshipToUser(
ProcessType processType,
RelationshipOperation relationshipOperation,
string relationshipHandle,
string followerKeyUserHandle,
string followingKeyUserHandle,
string appHandle,
DateTime lastUpdatedTime,
IUserRelationshipLookupEntity followerRelationshipLookupEntity,
IUserRelationshipLookupEntity followingRelationshipLookupEntity)
{
UserRelationshipStatus userRelationshipStatus = this.GetRelationshipStatus(relationshipOperation);
if (processType == ProcessType.Frontend)
{
await this.userRelationshipsStore.UpdateFollowerRelationship(
StorageConsistencyMode.Strong,
relationshipHandle,
followerKeyUserHandle,
followingKeyUserHandle,
appHandle,
userRelationshipStatus,
lastUpdatedTime,
followerRelationshipLookupEntity);
await this.userRelationshipsStore.UpdateFollowingRelationship(
StorageConsistencyMode.Strong,
relationshipHandle,
followingKeyUserHandle,
followerKeyUserHandle,
appHandle,
userRelationshipStatus,
lastUpdatedTime,
followingRelationshipLookupEntity);
await this.relationshipsQueue.SendRelationshipMessage(
relationshipOperation,
relationshipHandle,
followerKeyUserHandle,
followingKeyUserHandle,
appHandle,
lastUpdatedTime);
}
else if (processType == ProcessType.Backend || processType == ProcessType.BackendRetry)
{
if (relationshipOperation == RelationshipOperation.FollowUser)
{
await this.notificationsManager.CreateNotification(
processType,
followerKeyUserHandle,
appHandle,
relationshipHandle,
ActivityType.Following,
followingKeyUserHandle,
followerKeyUserHandle,
ContentType.Unknown,
null,
lastUpdatedTime);
await this.fanoutActivitiesQueue.SendFanoutActivityMessage(
followingKeyUserHandle,
appHandle,
relationshipHandle,
ActivityType.Following,
followingKeyUserHandle,
followerKeyUserHandle,
ContentType.Unknown,
null,
lastUpdatedTime);
await this.followingImportsQueue.SendFollowingImportMessage(
followingKeyUserHandle,
appHandle,
followerKeyUserHandle);
}
else if (relationshipOperation == RelationshipOperation.PendingUser)
{
await this.notificationsManager.CreateNotification(
processType,
followerKeyUserHandle,
appHandle,
relationshipHandle,
ActivityType.FollowRequest,
followingKeyUserHandle,
followerKeyUserHandle,
ContentType.Unknown,
null,
lastUpdatedTime);
}
else if (relationshipOperation == RelationshipOperation.AcceptUser)
{
await this.notificationsManager.CreateNotification(
processType,
followingKeyUserHandle,
appHandle,
relationshipHandle,
ActivityType.FollowAccept,
followerKeyUserHandle,
followingKeyUserHandle,
ContentType.Unknown,
null,
lastUpdatedTime);
await this.followingImportsQueue.SendFollowingImportMessage(
followingKeyUserHandle,
appHandle,
followerKeyUserHandle);
}
// Update popular user feed when follower count changes
if (relationshipOperation == RelationshipOperation.FollowUser ||
relationshipOperation == RelationshipOperation.UnfollowUser ||
relationshipOperation == RelationshipOperation.DeleteFollower ||
relationshipOperation == RelationshipOperation.BlockUser ||
relationshipOperation == RelationshipOperation.AcceptUser)
{
long? followersCount = await this.userRelationshipsStore.QueryFollowersCount(followerKeyUserHandle, appHandle);
long followersCountValue = followersCount.HasValue ? followersCount.Value : 0;
if (followersCountValue % PopularUsersUpdateFollowersCount == 0)
{
await this.popularUsersManager.UpdatePopularUser(processType, followerKeyUserHandle, appHandle, followersCountValue);
}
}
}
}