Implement Delete activity

This commit is contained in:
Akihiko Odaki 2018-04-03 17:50:52 +09:00
parent 5bcb4b1dde
commit 210cb57aa5
6 changed files with 81 additions and 9 deletions

View file

@ -0,0 +1,22 @@
import Favorite from '../../models/favorite';
import Notification from '../../models/notification';
import PollVote from '../../models/poll-vote';
import PostReaction from '../../models/post-reaction';
import PostWatching from '../../models/post-watching';
import Post from '../../models/post';
export default async ({ data }) => Promise.all([
Favorite.remove({ postId: data._id }),
Notification.remove({ postId: data._id }),
PollVote.remove({ postId: data._id }),
PostReaction.remove({ postId: data._id }),
PostWatching.remove({ postId: data._id }),
Post.find({ repostId: data._id }).then(reposts => Promise.all([
Notification.remove({
postId: {
$in: reposts.map(({ _id }) => _id)
}
}),
Post.remove({ repostId: data._id })
]))
]);

View file

@ -0,0 +1,7 @@
import deletePostDependents from './delete-post-dependents';
const handlers = {
deletePostDependents
};
export default (job, done) => handlers[job.data.type](job).then(() => done(), done);

View file

@ -1,13 +1,18 @@
import queue from '../queue';
import db from './db';
import http from './http';
/*
256 is the default concurrency limit of Mozilla Firefox and Google
Chromium.
export default () => {
queue.process('db', db);
a8af215e691f3a2205a3758d2d96e9d328e100ff - chromium/src.git - Git at Google
https://chromium.googlesource.com/chromium/src.git/+/a8af215e691f3a2205a3758d2d96e9d328e100ff
Network.http.max-connections - MozillaZine Knowledge Base
http://kb.mozillazine.org/Network.http.max-connections
*/
export default () => queue.process('http', 256, http);
/*
256 is the default concurrency limit of Mozilla Firefox and Google
Chromium.
a8af215e691f3a2205a3758d2d96e9d328e100ff - chromium/src.git - Git at Google
https://chromium.googlesource.com/chromium/src.git/+/a8af215e691f3a2205a3758d2d96e9d328e100ff
Network.http.max-connections - MozillaZine Knowledge Base
http://kb.mozillazine.org/Network.http.max-connections
*/
queue.process('http', 256, http);
};

View file

@ -0,0 +1,24 @@
import create from '../../create';
import deletePost from './post';
export default async (resolver, actor, activity) => {
if ('actor' in activity && actor.account.uri !== activity.actor) {
throw new Error();
}
const results = await create(resolver, actor, activity.object);
await Promise.all(results.map(async promisedResult => {
const result = await promisedResult;
if (result === null) {
return;
}
switch (result.object.$ref) {
case 'posts':
await deletePost(result.object);
}
}));
return null;
};

View file

@ -0,0 +1,10 @@
import Post from '../../../../models/post';
import queue from '../../../../queue';
export default ({ $id }) => Promise.all([
Post.findOneAndDelete({ _id: $id }),
new Promise((resolve, reject) => queue.create('db', {
type: 'deletePostDependents',
id: $id
}).delay(65536).save(error => error ? reject(error) : resolve()))
]);

View file

@ -1,4 +1,5 @@
import create from './create';
import performDeleteActivity from './delete';
import follow from './follow';
import undo from './undo';
import createObject from '../create';
@ -19,6 +20,9 @@ export default async (parentResolver: Resolver, actor, value, distribute?: boole
case 'Create':
return create(resolver, actor, object, distribute);
case 'Delete':
return performDeleteActivity(resolver, actor, object);
case 'Follow':
return follow(resolver, actor, object, distribute);