adjust following and followers counts when unfollowing
This commit is contained in:
parent
83d70f3300
commit
6a2752ef73
|
@ -23,6 +23,7 @@ import { CacheService } from '@/core/CacheService.js';
|
||||||
import type { Config } from '@/config.js';
|
import type { Config } from '@/config.js';
|
||||||
import Logger from '../logger.js';
|
import Logger from '../logger.js';
|
||||||
import { ApPersonService } from '@/core/activitypub/models/ApPersonService.js';
|
import { ApPersonService } from '@/core/activitypub/models/ApPersonService.js';
|
||||||
|
import { IsNull } from 'typeorm';
|
||||||
|
|
||||||
const logger = new Logger('following/create');
|
const logger = new Logger('following/create');
|
||||||
|
|
||||||
|
@ -330,7 +331,7 @@ export class UserFollowingService implements OnModuleInit {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (following === null) {
|
if (following === null || !following.follower || !following.followee) {
|
||||||
logger.warn('フォロー解除がリクエストされましたがフォローしていませんでした');
|
logger.warn('フォロー解除がリクエストされましたがフォローしていませんでした');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -339,10 +340,7 @@ export class UserFollowingService implements OnModuleInit {
|
||||||
|
|
||||||
this.cacheService.userFollowingsCache.refresh(follower.id);
|
this.cacheService.userFollowingsCache.refresh(follower.id);
|
||||||
|
|
||||||
// Neither followee nor follower has moved.
|
this.decrementFollowing(following.follower, following.followee);
|
||||||
if (!following.followee?.movedToUri && !following.follower?.movedToUri) {
|
|
||||||
this.decrementFollowing(follower, followee);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Publish unfollow event
|
// Publish unfollow event
|
||||||
if (!silent && this.userEntityService.isLocalUser(follower)) {
|
if (!silent && this.userEntityService.isLocalUser(follower)) {
|
||||||
|
@ -374,11 +372,13 @@ export class UserFollowingService implements OnModuleInit {
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
private async decrementFollowing(
|
private async decrementFollowing(
|
||||||
follower: { id: User['id']; host: User['host']; },
|
follower: User,
|
||||||
followee: { id: User['id']; host: User['host']; },
|
followee: User,
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
this.globalEventService.publishInternalEvent('unfollow', { followerId: follower.id, followeeId: followee.id });
|
this.globalEventService.publishInternalEvent('unfollow', { followerId: follower.id, followeeId: followee.id });
|
||||||
|
|
||||||
|
// Neither followee nor follower has moved.
|
||||||
|
if (!follower.movedToUri && !followee.movedToUri) {
|
||||||
//#region Decrement following / followers counts
|
//#region Decrement following / followers counts
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
this.usersRepository.decrement({ id: follower.id }, 'followingCount', 1),
|
this.usersRepository.decrement({ id: follower.id }, 'followingCount', 1),
|
||||||
|
@ -405,6 +405,41 @@ export class UserFollowingService implements OnModuleInit {
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
this.perUserFollowingChart.update(follower, followee, false);
|
this.perUserFollowingChart.update(follower, followee, false);
|
||||||
|
} else {
|
||||||
|
// Adjust following/followers counts
|
||||||
|
for (const user of [follower, followee]) {
|
||||||
|
if (user.movedToUri) continue; // No need to update if the user has already moved.
|
||||||
|
|
||||||
|
const nonMovedFollowees = await this.followingsRepository.count({
|
||||||
|
relations: {
|
||||||
|
followee: true,
|
||||||
|
},
|
||||||
|
where: {
|
||||||
|
followerId: user.id,
|
||||||
|
followee: {
|
||||||
|
movedToUri: IsNull(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const nonMovedFollowers = await this.followingsRepository.count({
|
||||||
|
relations: {
|
||||||
|
follower: true,
|
||||||
|
},
|
||||||
|
where: {
|
||||||
|
followeeId: user.id,
|
||||||
|
follower: {
|
||||||
|
movedToUri: IsNull(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
await this.usersRepository.update(
|
||||||
|
{ id: user.id },
|
||||||
|
{ followingCount: nonMovedFollowees, followersCount: nonMovedFollowers },
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: adjust charts
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
|
@ -618,14 +653,11 @@ export class UserFollowingService implements OnModuleInit {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!following) return;
|
if (!following || !following.followee || !following.follower) return;
|
||||||
|
|
||||||
await this.followingsRepository.delete(following.id);
|
await this.followingsRepository.delete(following.id);
|
||||||
|
|
||||||
// Neither followee nor follower has moved.
|
this.decrementFollowing(following.follower, following.followee);
|
||||||
if (!following.followee?.movedToUri && !following.follower?.movedToUri) {
|
|
||||||
this.decrementFollowing(follower, followee);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue