summaryrefslogtreecommitdiff
path: root/src/api/following
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-04-05 01:22:41 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-04-05 01:22:41 +0900
commiteb304cb5fb588a3da8742f234cdf05ce6deeaa59 (patch)
tree1d877e189ab5dfb9f959db62ee30955da7897781 /src/api/following
parentwip (diff)
downloadmisskey-eb304cb5fb588a3da8742f234cdf05ce6deeaa59.tar.gz
misskey-eb304cb5fb588a3da8742f234cdf05ce6deeaa59.tar.bz2
misskey-eb304cb5fb588a3da8742f234cdf05ce6deeaa59.zip
wip
Diffstat (limited to 'src/api/following')
-rw-r--r--src/api/following/delete.ts69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/api/following/delete.ts b/src/api/following/delete.ts
new file mode 100644
index 0000000000..4cdff7ce1b
--- /dev/null
+++ b/src/api/following/delete.ts
@@ -0,0 +1,69 @@
+import User, { isLocalUser, isRemoteUser, pack as packUser, IUser } from '../../models/user';
+import Following from '../../models/following';
+import FollowingLog from '../../models/following-log';
+import FollowedLog from '../../models/followed-log';
+import event from '../../publishers/stream';
+import context from '../../remote/activitypub/renderer/context';
+import renderFollow from '../../remote/activitypub/renderer/follow';
+import renderUndo from '../../remote/activitypub/renderer/undo';
+import { createHttp } from '../../queue';
+
+export default async function(follower: IUser, followee: IUser, activity?) {
+ const following = await Following.findOne({
+ followerId: follower._id,
+ followeeId: followee._id
+ });
+
+ if (following == null) {
+ console.warn('フォロー解除がリクエストされましたがフォローしていませんでした');
+ return;
+ }
+
+ Following.remove({
+ _id: following._id
+ });
+
+ //#region Decrement following count
+ User.update({ _id: follower._id }, {
+ $inc: {
+ followingCount: -1
+ }
+ });
+
+ FollowingLog.insert({
+ createdAt: following.createdAt,
+ userId: follower._id,
+ count: follower.followingCount - 1
+ });
+ //#endregion
+
+ //#region Decrement followers count
+ User.update({ _id: followee._id }, {
+ $inc: {
+ followersCount: -1
+ }
+ });
+ FollowedLog.insert({
+ createdAt: following.createdAt,
+ userId: followee._id,
+ count: followee.followersCount - 1
+ });
+ //#endregion
+
+ // Publish unfollow event
+ if (isLocalUser(follower)) {
+ packUser(followee, follower).then(packed => event(follower._id, 'unfollow', packed));
+ }
+
+ if (isLocalUser(follower) && isRemoteUser(followee)) {
+ const content = renderUndo(renderFollow(follower, followee));
+ content['@context'] = context;
+
+ createHttp({
+ type: 'deliver',
+ user: follower,
+ content,
+ to: followee.account.inbox
+ }).save();
+ }
+}