From 484d17f53f26ff3e8961d86f03ef94f62f8f62ed Mon Sep 17 00:00:00 2001 From: syuilo Date: Sat, 2 Jun 2018 00:15:17 +0900 Subject: wip --- src/services/following/requests/accept-all.ts | 24 ++++++++++ src/services/following/requests/accept.ts | 64 +++++++++++++++++++++++++ src/services/following/requests/reject.ts | 24 ++++++++++ src/services/user/accept-all-follow-requests.ts | 24 ---------- src/services/user/accept-follow-request.ts | 64 ------------------------- src/services/user/reject-follow-request.ts | 24 ---------- 6 files changed, 112 insertions(+), 112 deletions(-) create mode 100644 src/services/following/requests/accept-all.ts create mode 100644 src/services/following/requests/accept.ts create mode 100644 src/services/following/requests/reject.ts delete mode 100644 src/services/user/accept-all-follow-requests.ts delete mode 100644 src/services/user/accept-follow-request.ts delete mode 100644 src/services/user/reject-follow-request.ts (limited to 'src/services') diff --git a/src/services/following/requests/accept-all.ts b/src/services/following/requests/accept-all.ts new file mode 100644 index 0000000000..9708d9e658 --- /dev/null +++ b/src/services/following/requests/accept-all.ts @@ -0,0 +1,24 @@ +import User, { IUser } from "../../../models/user"; +import FollowRequest from "../../../models/follow-request"; +import accept from './accept'; + +/** + * 指定したユーザー宛てのフォローリクエストをすべて承認 + * @param user ユーザー + */ +export default async function(user: IUser) { + const requests = await FollowRequest.find({ + followeeId: user._id + }); + + requests.forEach(async request => { + const follower = await User.findOne({ _id: request.followerId }); + accept(user, follower); + }); + + User.update({ _id: user._id }, { + $set: { + pendingReceivedFollowRequestsCount: 0 + } + }); +} diff --git a/src/services/following/requests/accept.ts b/src/services/following/requests/accept.ts new file mode 100644 index 0000000000..2dff9b01fe --- /dev/null +++ b/src/services/following/requests/accept.ts @@ -0,0 +1,64 @@ +import User, { IUser, isRemoteUser, ILocalUser } from "../../../models/user"; +import FollowRequest from "../../../models/follow-request"; +import pack from '../../../remote/activitypub/renderer'; +import renderFollow from '../../../remote/activitypub/renderer/follow'; +import renderAccept from '../../../remote/activitypub/renderer/accept'; +import { deliver } from '../../../queue'; +import Following from "../../../models/following"; +import FollowingLog from "../../../models/following-log"; +import FollowedLog from "../../../models/followed-log"; + +export default async function(followee: IUser, follower: IUser) { + const following = await Following.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 + } + }); + + if (isRemoteUser(follower)) { + const content = pack(renderAccept(renderFollow(follower, followee))); + deliver(followee as ILocalUser, content, follower.inbox); + } + + FollowRequest.remove({ + followeeId: followee._id, + followerId: follower._id + }); + + //#region Increment following count + User.update({ _id: follower._id }, { + $inc: { + followingCount: 1 + } + }); + + FollowingLog.insert({ + createdAt: following.createdAt, + userId: follower._id, + count: follower.followingCount + 1 + }); + //#endregion + + //#region Increment followers count + User.update({ _id: followee._id }, { + $inc: { + followersCount: 1 + } + }); + FollowedLog.insert({ + createdAt: following.createdAt, + userId: followee._id, + count: followee.followersCount + 1 + }); + //#endregion +} diff --git a/src/services/following/requests/reject.ts b/src/services/following/requests/reject.ts new file mode 100644 index 0000000000..acd419d0ee --- /dev/null +++ b/src/services/following/requests/reject.ts @@ -0,0 +1,24 @@ +import User, { IUser, isRemoteUser, ILocalUser } from "../../../models/user"; +import FollowRequest from "../../../models/follow-request"; +import pack from '../../../remote/activitypub/renderer'; +import renderFollow from '../../../remote/activitypub/renderer/follow'; +import renderReject from '../../../remote/activitypub/renderer/reject'; +import { deliver } from '../../../queue'; + +export default async function(followee: IUser, follower: IUser) { + if (isRemoteUser(follower)) { + const content = pack(renderReject(renderFollow(follower, followee))); + deliver(followee as ILocalUser, content, follower.inbox); + } + + await FollowRequest.remove({ + followeeId: followee._id, + followerId: follower._id + }); + + User.update({ _id: followee._id }, { + $inc: { + pendingReceivedFollowRequestsCount: -1 + } + }); +} diff --git a/src/services/user/accept-all-follow-requests.ts b/src/services/user/accept-all-follow-requests.ts deleted file mode 100644 index 397a0d7ec2..0000000000 --- a/src/services/user/accept-all-follow-requests.ts +++ /dev/null @@ -1,24 +0,0 @@ -import User, { IUser } from "../../models/user"; -import FollowRequest from "../../models/follow-request"; -import accept from './accept-follow-request'; - -/** - * 指定したユーザー宛てのフォローリクエストをすべて承認 - * @param user ユーザー - */ -export default async function(user: IUser) { - const requests = await FollowRequest.find({ - followeeId: user._id - }); - - requests.forEach(async request => { - const follower = await User.findOne({ _id: request.followerId }); - accept(user, follower); - }); - - User.update({ _id: user._id }, { - $set: { - pendingReceivedFollowRequestsCount: 0 - } - }); -} diff --git a/src/services/user/accept-follow-request.ts b/src/services/user/accept-follow-request.ts deleted file mode 100644 index 8b5c82c84e..0000000000 --- a/src/services/user/accept-follow-request.ts +++ /dev/null @@ -1,64 +0,0 @@ -import User, { IUser, isRemoteUser, ILocalUser } from "../../models/user"; -import FollowRequest from "../../models/follow-request"; -import pack from '../../remote/activitypub/renderer'; -import renderFollow from '../../remote/activitypub/renderer/follow'; -import renderAccept from '../../remote/activitypub/renderer/accept'; -import { deliver } from '../../queue'; -import Following from "../../models/following"; -import FollowingLog from "../../models/following-log"; -import FollowedLog from "../../models/followed-log"; - -export default async function(followee: IUser, follower: IUser) { - const following = await Following.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 - } - }); - - if (isRemoteUser(follower)) { - const content = pack(renderAccept(renderFollow(follower, followee))); - deliver(followee as ILocalUser, content, follower.inbox); - } - - FollowRequest.remove({ - followeeId: followee._id, - followerId: follower._id - }); - - //#region Increment following count - User.update({ _id: follower._id }, { - $inc: { - followingCount: 1 - } - }); - - FollowingLog.insert({ - createdAt: following.createdAt, - userId: follower._id, - count: follower.followingCount + 1 - }); - //#endregion - - //#region Increment followers count - User.update({ _id: followee._id }, { - $inc: { - followersCount: 1 - } - }); - FollowedLog.insert({ - createdAt: following.createdAt, - userId: followee._id, - count: followee.followersCount + 1 - }); - //#endregion -} diff --git a/src/services/user/reject-follow-request.ts b/src/services/user/reject-follow-request.ts deleted file mode 100644 index c6388f53e1..0000000000 --- a/src/services/user/reject-follow-request.ts +++ /dev/null @@ -1,24 +0,0 @@ -import User, { IUser, isRemoteUser, ILocalUser } from "../../models/user"; -import FollowRequest from "../../models/follow-request"; -import pack from '../../remote/activitypub/renderer'; -import renderFollow from '../../remote/activitypub/renderer/follow'; -import renderReject from '../../remote/activitypub/renderer/reject'; -import { deliver } from '../../queue'; - -export default async function(followee: IUser, follower: IUser) { - if (isRemoteUser(follower)) { - const content = pack(renderReject(renderFollow(follower, followee))); - deliver(followee as ILocalUser, content, follower.inbox); - } - - await FollowRequest.remove({ - followeeId: followee._id, - followerId: follower._id - }); - - User.update({ _id: followee._id }, { - $inc: { - pendingReceivedFollowRequestsCount: -1 - } - }); -} -- cgit v1.2.3-freya