Implement remote account unfollow

This commit is contained in:
Akihiko Odaki
2018-04-03 17:18:06 +09:00
parent 6b66ec1231
commit 4b507ed349
6 changed files with 81 additions and 47 deletions

View File

@ -15,7 +15,7 @@ export default async (resolver, actor, activity) => {
switch (result.object.$ref) {
case 'following':
await unfollow(result.resolver, result.object);
await unfollow(result.object);
}
}));

View File

@ -1,24 +1,11 @@
import FollowedLog from '../../../../models/followed-log';
import Following from '../../../../models/following';
import FollowingLog from '../../../../models/following-log';
import User from '../../../../models/user';
import queue from '../../../../queue';
export default async (resolver, { $id }) => {
const following = await Following.findOneAndDelete({ _id: $id });
if (following === null) {
return;
}
await Promise.all([
User.update({ _id: following.followerId }, { $inc: { followingCount: -1 } }),
User.findOne({ _id: following.followerId }).then(({ followingCount }) => FollowingLog.insert({
userId: following.followerId,
count: followingCount - 1
})),
User.update({ _id: following.followeeId }, { $inc: { followersCount: -1 } }),
User.findOne({ _id: following.followeeId }).then(({ followersCount }) => FollowedLog.insert({
userId: following.followeeId,
count: followersCount - 1
})),
]);
};
export default ({ $id }) => new Promise((resolve, reject) => {
queue.create('http', { type: 'unfollow', id: $id }).save(error => {
if (error) {
reject(error);
} else {
resolve();
}
});
});

View File

@ -0,0 +1,4 @@
export default object => ({
type: 'Undo',
object
});