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,6 +1,10 @@
 | 
				
			||||||
import queue from '../queue';
 | 
					import queue from '../queue';
 | 
				
			||||||
 | 
					import db from './db';
 | 
				
			||||||
import http from './http';
 | 
					import http from './http';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default () => {
 | 
				
			||||||
 | 
						queue.process('db', db);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
		256 is the default concurrency limit of Mozilla Firefox and Google
 | 
							256 is the default concurrency limit of Mozilla Firefox and Google
 | 
				
			||||||
		Chromium.
 | 
							Chromium.
 | 
				
			||||||
| 
						 | 
					@ -10,4 +14,5 @@ import http from './http';
 | 
				
			||||||
		Network.http.max-connections - MozillaZine Knowledge Base
 | 
							Network.http.max-connections - MozillaZine Knowledge Base
 | 
				
			||||||
		http://kb.mozillazine.org/Network.http.max-connections
 | 
							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 create from './create';
 | 
				
			||||||
 | 
					import performDeleteActivity from './delete';
 | 
				
			||||||
import follow from './follow';
 | 
					import follow from './follow';
 | 
				
			||||||
import undo from './undo';
 | 
					import undo from './undo';
 | 
				
			||||||
import createObject from '../create';
 | 
					import createObject from '../create';
 | 
				
			||||||
| 
						 | 
					@ -19,6 +20,9 @@ export default async (parentResolver: Resolver, actor, value, distribute?: boole
 | 
				
			||||||
		case 'Create':
 | 
							case 'Create':
 | 
				
			||||||
			return create(resolver, actor, object, distribute);
 | 
								return create(resolver, actor, object, distribute);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							case 'Delete':
 | 
				
			||||||
 | 
								return performDeleteActivity(resolver, actor, object);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		case 'Follow':
 | 
							case 'Follow':
 | 
				
			||||||
			return follow(resolver, actor, object, distribute);
 | 
								return follow(resolver, actor, object, distribute);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue