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,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);