summaryrefslogtreecommitdiff
path: root/packages/backend/src/core/UserFollowingService.ts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-02-04 14:23:38 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-02-04 14:23:38 +0900
commit9bde9edcf68430cb98bc08ff74f6804bd56ecf47 (patch)
treee09781a1f26bae331968902a79253820e3a80e4e /packages/backend/src/core/UserFollowingService.ts
parentMerge branch 'develop' (diff)
parent13.3.2 (diff)
downloadmisskey-9bde9edcf68430cb98bc08ff74f6804bd56ecf47.tar.gz
misskey-9bde9edcf68430cb98bc08ff74f6804bd56ecf47.tar.bz2
misskey-9bde9edcf68430cb98bc08ff74f6804bd56ecf47.zip
Merge branch 'develop'
Diffstat (limited to 'packages/backend/src/core/UserFollowingService.ts')
-rw-r--r--packages/backend/src/core/UserFollowingService.ts60
1 files changed, 23 insertions, 37 deletions
diff --git a/packages/backend/src/core/UserFollowingService.ts b/packages/backend/src/core/UserFollowingService.ts
index f1ce311cea..18a2ef5c05 100644
--- a/packages/backend/src/core/UserFollowingService.ts
+++ b/packages/backend/src/core/UserFollowingService.ts
@@ -12,10 +12,11 @@ import { FederatedInstanceService } from '@/core/FederatedInstanceService.js';
import { WebhookService } from '@/core/WebhookService.js';
import { CreateNotificationService } from '@/core/CreateNotificationService.js';
import { DI } from '@/di-symbols.js';
-import type { BlockingsRepository, FollowingsRepository, FollowRequestsRepository, InstancesRepository, UserProfilesRepository, UsersRepository } from '@/models/index.js';
+import type { FollowingsRepository, FollowRequestsRepository, InstancesRepository, UserProfilesRepository, UsersRepository } from '@/models/index.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { ApRendererService } from '@/core/activitypub/ApRendererService.js';
import { bindThis } from '@/decorators.js';
+import { UserBlockingService } from '@/core/UserBlockingService.js';
import Logger from '../logger.js';
const logger = new Logger('following/create');
@@ -48,21 +49,18 @@ export class UserFollowingService {
@Inject(DI.followRequestsRepository)
private followRequestsRepository: FollowRequestsRepository,
- @Inject(DI.blockingsRepository)
- private blockingsRepository: BlockingsRepository,
-
@Inject(DI.instancesRepository)
private instancesRepository: InstancesRepository,
private userEntityService: UserEntityService,
+ private userBlockingService: UserBlockingService,
private idService: IdService,
private queueService: QueueService,
- private globalEventServie: GlobalEventService,
+ private globalEventService: GlobalEventService,
private createNotificationService: CreateNotificationService,
private federatedInstanceService: FederatedInstanceService,
private webhookService: WebhookService,
private apRendererService: ApRendererService,
- private globalEventService: GlobalEventService,
private perUserFollowingChart: PerUserFollowingChart,
private instanceChart: InstanceChart,
) {
@@ -77,26 +75,20 @@ export class UserFollowingService {
// check blocking
const [blocking, blocked] = await Promise.all([
- this.blockingsRepository.findOneBy({
- blockerId: follower.id,
- blockeeId: followee.id,
- }),
- this.blockingsRepository.findOneBy({
- blockerId: followee.id,
- blockeeId: follower.id,
- }),
+ this.userBlockingService.checkBlocked(follower.id, followee.id),
+ this.userBlockingService.checkBlocked(followee.id, follower.id),
]);
if (this.userEntityService.isRemoteUser(follower) && this.userEntityService.isLocalUser(followee) && blocked) {
- // リモートフォローを受けてブロックしていた場合は、エラーにするのではなくRejectを送り返しておしまい。
+ // リモートフォローを受けてブロックしていた場合は、エラーにするのではなくRejectを送り返しておしまい。
const content = this.apRendererService.renderActivity(this.apRendererService.renderReject(this.apRendererService.renderFollow(follower, followee, requestId), followee));
this.queueService.deliver(followee, content, follower.inbox);
return;
} else if (this.userEntityService.isRemoteUser(follower) && this.userEntityService.isLocalUser(followee) && blocking) {
- // リモートフォローを受けてブロックされているはずの場合だったら、ブロック解除しておく。
- await this.blockingsRepository.delete(blocking.id);
+ // リモートフォローを受けてブロックされているはずの場合だったら、ブロック解除しておく。
+ await this.userBlockingService.unblock(follower, followee);
} else {
- // それ以外は単純に例外
+ // それ以外は単純に例外
if (blocking != null) throw new IdentifiableError('710e8fb0-b8c3-4922-be49-d5d93d8e6a6e', 'blocking');
if (blocked != null) throw new IdentifiableError('3338392a-f764-498d-8855-db939dcf8c48', 'blocked');
}
@@ -227,8 +219,8 @@ export class UserFollowingService {
this.userEntityService.pack(followee.id, follower, {
detail: true,
}).then(async packed => {
- this.globalEventServie.publishUserEvent(follower.id, 'follow', packed as Packed<'UserDetailedNotMe'>);
- this.globalEventServie.publishMainStream(follower.id, 'follow', packed as Packed<'UserDetailedNotMe'>);
+ this.globalEventService.publishUserEvent(follower.id, 'follow', packed as Packed<'UserDetailedNotMe'>);
+ this.globalEventService.publishMainStream(follower.id, 'follow', packed as Packed<'UserDetailedNotMe'>);
const webhooks = (await this.webhookService.getActiveWebhooks()).filter(x => x.userId === follower.id && x.on.includes('follow'));
for (const webhook of webhooks) {
@@ -242,7 +234,7 @@ export class UserFollowingService {
// Publish followed event
if (this.userEntityService.isLocalUser(followee)) {
this.userEntityService.pack(follower.id, followee).then(async packed => {
- this.globalEventServie.publishMainStream(followee.id, 'followed', packed);
+ this.globalEventService.publishMainStream(followee.id, 'followed', packed);
const webhooks = (await this.webhookService.getActiveWebhooks()).filter(x => x.userId === followee.id && x.on.includes('followed'));
for (const webhook of webhooks) {
@@ -288,8 +280,8 @@ export class UserFollowingService {
this.userEntityService.pack(followee.id, follower, {
detail: true,
}).then(async packed => {
- this.globalEventServie.publishUserEvent(follower.id, 'unfollow', packed);
- this.globalEventServie.publishMainStream(follower.id, 'unfollow', packed);
+ this.globalEventService.publishUserEvent(follower.id, 'unfollow', packed);
+ this.globalEventService.publishMainStream(follower.id, 'unfollow', packed);
const webhooks = (await this.webhookService.getActiveWebhooks()).filter(x => x.userId === follower.id && x.on.includes('unfollow'));
for (const webhook of webhooks) {
@@ -357,14 +349,8 @@ export class UserFollowingService {
// check blocking
const [blocking, blocked] = await Promise.all([
- this.blockingsRepository.findOneBy({
- blockerId: follower.id,
- blockeeId: followee.id,
- }),
- this.blockingsRepository.findOneBy({
- blockerId: followee.id,
- blockeeId: follower.id,
- }),
+ this.userBlockingService.checkBlocked(follower.id, followee.id),
+ this.userBlockingService.checkBlocked(followee.id, follower.id),
]);
if (blocking != null) throw new Error('blocking');
@@ -388,11 +374,11 @@ export class UserFollowingService {
// Publish receiveRequest event
if (this.userEntityService.isLocalUser(followee)) {
- this.userEntityService.pack(follower.id, followee).then(packed => this.globalEventServie.publishMainStream(followee.id, 'receiveFollowRequest', packed));
+ this.userEntityService.pack(follower.id, followee).then(packed => this.globalEventService.publishMainStream(followee.id, 'receiveFollowRequest', packed));
this.userEntityService.pack(followee.id, followee, {
detail: true,
- }).then(packed => this.globalEventServie.publishMainStream(followee.id, 'meUpdated', packed));
+ }).then(packed => this.globalEventService.publishMainStream(followee.id, 'meUpdated', packed));
// 通知を作成
this.createNotificationService.createNotification(followee.id, 'receiveFollowRequest', {
@@ -440,7 +426,7 @@ export class UserFollowingService {
this.userEntityService.pack(followee.id, followee, {
detail: true,
- }).then(packed => this.globalEventServie.publishMainStream(followee.id, 'meUpdated', packed));
+ }).then(packed => this.globalEventService.publishMainStream(followee.id, 'meUpdated', packed));
}
@bindThis
@@ -468,7 +454,7 @@ export class UserFollowingService {
this.userEntityService.pack(followee.id, followee, {
detail: true,
- }).then(packed => this.globalEventServie.publishMainStream(followee.id, 'meUpdated', packed));
+ }).then(packed => this.globalEventService.publishMainStream(followee.id, 'meUpdated', packed));
}
@bindThis
@@ -583,8 +569,8 @@ export class UserFollowingService {
detail: true,
});
- this.globalEventServie.publishUserEvent(follower.id, 'unfollow', packedFollowee);
- this.globalEventServie.publishMainStream(follower.id, 'unfollow', packedFollowee);
+ this.globalEventService.publishUserEvent(follower.id, 'unfollow', packedFollowee);
+ this.globalEventService.publishMainStream(follower.id, 'unfollow', packedFollowee);
const webhooks = (await this.webhookService.getActiveWebhooks()).filter(x => x.userId === follower.id && x.on.includes('unfollow'));
for (const webhook of webhooks) {