diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-06-02 00:38:31 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-06-02 00:38:31 +0900 |
| commit | f14571dc42532c269e606f810ec2af03a3baeba5 (patch) | |
| tree | 04d86f4be12e93502665d4fcbf129f14be184956 /src/services/following/requests/create.ts | |
| parent | wip (diff) | |
| download | misskey-f14571dc42532c269e606f810ec2af03a3baeba5.tar.gz misskey-f14571dc42532c269e606f810ec2af03a3baeba5.tar.bz2 misskey-f14571dc42532c269e606f810ec2af03a3baeba5.zip | |
wip
Diffstat (limited to 'src/services/following/requests/create.ts')
| -rw-r--r-- | src/services/following/requests/create.ts | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/services/following/requests/create.ts b/src/services/following/requests/create.ts new file mode 100644 index 0000000000..1285c21ea8 --- /dev/null +++ b/src/services/following/requests/create.ts @@ -0,0 +1,46 @@ +import User, { isLocalUser, isRemoteUser, pack as packUser, IUser } from '../../../models/user'; +import event from '../../../publishers/stream'; +import notify from '../../../publishers/notify'; +import pack from '../../../remote/activitypub/renderer'; +import renderFollow from '../../../remote/activitypub/renderer/follow'; +import { deliver } from '../../../queue'; +import FollowRequest from '../../../models/follow-request'; + +export default async function(follower: IUser, followee: IUser) { + if (!followee.isLocked) throw '対象のアカウントは鍵アカウントではありません'; + + await FollowRequest.insert({ + createdAt: new Date(), + followerId: follower._id, + followeeId: followee._id, + + // 非正規化 + _follower: { + host: follower.host, + inbox: isRemoteUser(follower) ? follower.inbox : undefined + }, + _followee: { + host: followee.host, + inbox: isRemoteUser(followee) ? followee.inbox : undefined + } + }); + + User.update({ _id: followee._id }, { + $inc: { + pendingReceivedFollowRequestsCount: 1 + } + }); + + // Publish reciveRequest event + if (isLocalUser(followee)) { + packUser(follower, followee).then(packed => event(followee._id, 'reciveRequest', packed)), + + // 通知を作成 + notify(followee._id, follower._id, 'reciveRequest'); + } + + if (isLocalUser(follower) && isRemoteUser(followee)) { + const content = pack(renderFollow(follower, followee)); + deliver(follower, content, followee.inbox); + } +} |