Merge pull request #1388 from akihikodaki/duplicate
Implement Delete activity
This commit is contained in:
		
						commit
						b4ebf4033f
					
				
					 6 changed files with 81 additions and 9 deletions
				
			
		
							
								
								
									
										22
									
								
								src/processor/db/delete-post-dependents.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/processor/db/delete-post-dependents.ts
									
										
									
									
									
										Normal 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 })
 | 
			
		||||
	]))
 | 
			
		||||
]);
 | 
			
		||||
							
								
								
									
										7
									
								
								src/processor/db/index.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/processor/db/index.ts
									
										
									
									
									
										Normal 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);
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,11 @@
 | 
			
		|||
import queue from '../queue';
 | 
			
		||||
import db from './db';
 | 
			
		||||
import http from './http';
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
export default () => {
 | 
			
		||||
	queue.process('db', db);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
		256 is the default concurrency limit of Mozilla Firefox and Google
 | 
			
		||||
		Chromium.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -9,5 +13,6 @@ import http from './http';
 | 
			
		|||
		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);
 | 
			
		||||
	*/
 | 
			
		||||
	queue.process('http', 256, http);
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										24
									
								
								src/remote/activitypub/act/delete/index.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/remote/activitypub/act/delete/index.ts
									
										
									
									
									
										Normal 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;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										10
									
								
								src/remote/activitypub/act/delete/post.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/remote/activitypub/act/delete/post.ts
									
										
									
									
									
										Normal 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()))
 | 
			
		||||
]);
 | 
			
		||||
| 
						 | 
				
			
			@ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue