Implement Delete activity
This commit is contained in:
		
							parent
							
								
									5bcb4b1dde
								
							
						
					
					
						commit
						210cb57aa5
					
				|  | @ -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 }) | ||||
| 	])) | ||||
| ]); | ||||
|  | @ -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); | ||||
|  | @ -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); | ||||
| }; | ||||
|  |  | |||
|  | @ -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; | ||||
| }; | ||||
|  | @ -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())) | ||||
| ]); | ||||
|  | @ -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); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue