User blocking (Following part) (#3035)
* block wip * UndoBlock * UnBlock * wip * follow * UI * fix
This commit is contained in:
		
							parent
							
								
									bcb0588409
								
							
						
					
					
						commit
						d64dc45899
					
				
					 17 changed files with 537 additions and 4 deletions
				
			
		
							
								
								
									
										75
									
								
								src/server/api/endpoints/blocking/create.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								src/server/api/endpoints/blocking/create.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,75 @@
 | 
			
		|||
import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 | 
			
		||||
const ms = require('ms');
 | 
			
		||||
import User, { pack, ILocalUser } from '../../../../models/user';
 | 
			
		||||
import Blocking from '../../../../models/blocking';
 | 
			
		||||
import create from '../../../../services/blocking/create';
 | 
			
		||||
import getParams from '../../get-params';
 | 
			
		||||
 | 
			
		||||
export const meta = {
 | 
			
		||||
	stability: 'stable',
 | 
			
		||||
 | 
			
		||||
	desc: {
 | 
			
		||||
		'ja-JP': '指定したユーザーをブロックします。',
 | 
			
		||||
		'en-US': 'Block a user.'
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	limit: {
 | 
			
		||||
		duration: ms('1hour'),
 | 
			
		||||
		max: 100
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	requireCredential: true,
 | 
			
		||||
 | 
			
		||||
	kind: 'following-write',
 | 
			
		||||
 | 
			
		||||
	params: {
 | 
			
		||||
		userId: $.type(ID).note({
 | 
			
		||||
			desc: {
 | 
			
		||||
				'ja-JP': '対象のユーザーのID',
 | 
			
		||||
				'en-US': 'Target user ID'
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
 | 
			
		||||
	const [ps, psErr] = getParams(meta, params);
 | 
			
		||||
	if (psErr) return rej(psErr);
 | 
			
		||||
 | 
			
		||||
	const blocker = user;
 | 
			
		||||
 | 
			
		||||
	// 自分自身
 | 
			
		||||
	if (user._id.equals(ps.userId)) {
 | 
			
		||||
		return rej('blockee is yourself');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Get blockee
 | 
			
		||||
	const blockee = await User.findOne({
 | 
			
		||||
		_id: ps.userId
 | 
			
		||||
	}, {
 | 
			
		||||
		fields: {
 | 
			
		||||
			data: false,
 | 
			
		||||
			profile: false
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	if (blockee === null) {
 | 
			
		||||
		return rej('user not found');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Check if already blocking
 | 
			
		||||
	const exist = await Blocking.findOne({
 | 
			
		||||
		blockerId: blocker._id,
 | 
			
		||||
		blockeeId: blockee._id
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	if (exist !== null) {
 | 
			
		||||
		return rej('already blocking');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Create blocking
 | 
			
		||||
	await create(blocker, blockee);
 | 
			
		||||
 | 
			
		||||
	// Send response
 | 
			
		||||
	res(await pack(blockee._id, user));
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										75
									
								
								src/server/api/endpoints/blocking/delete.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								src/server/api/endpoints/blocking/delete.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,75 @@
 | 
			
		|||
import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 | 
			
		||||
const ms = require('ms');
 | 
			
		||||
import User, { pack, ILocalUser } from '../../../../models/user';
 | 
			
		||||
import Blocking from '../../../../models/blocking';
 | 
			
		||||
import deleteBlocking from '../../../../services/blocking/delete';
 | 
			
		||||
import getParams from '../../get-params';
 | 
			
		||||
 | 
			
		||||
export const meta = {
 | 
			
		||||
	stability: 'stable',
 | 
			
		||||
 | 
			
		||||
	desc: {
 | 
			
		||||
		'ja-JP': '指定したユーザーのブロックを解除します。',
 | 
			
		||||
		'en-US': 'Unblock a user.'
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	limit: {
 | 
			
		||||
		duration: ms('1hour'),
 | 
			
		||||
		max: 100
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	requireCredential: true,
 | 
			
		||||
 | 
			
		||||
	kind: 'following-write',
 | 
			
		||||
 | 
			
		||||
	params: {
 | 
			
		||||
		userId: $.type(ID).note({
 | 
			
		||||
			desc: {
 | 
			
		||||
				'ja-JP': '対象のユーザーのID',
 | 
			
		||||
				'en-US': 'Target user ID'
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
 | 
			
		||||
	const [ps, psErr] = getParams(meta, params);
 | 
			
		||||
	if (psErr) return rej(psErr);
 | 
			
		||||
 | 
			
		||||
	const blocker = user;
 | 
			
		||||
 | 
			
		||||
	// Check if the blockee is yourself
 | 
			
		||||
	if (user._id.equals(ps.userId)) {
 | 
			
		||||
		return rej('blockee is yourself');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Get blockee
 | 
			
		||||
	const blockee = await User.findOne({
 | 
			
		||||
		_id: ps.userId
 | 
			
		||||
	}, {
 | 
			
		||||
		fields: {
 | 
			
		||||
			data: false,
 | 
			
		||||
			'profile': false
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	if (blockee === null) {
 | 
			
		||||
		return rej('user not found');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Check not blocking
 | 
			
		||||
	const exist = await Blocking.findOne({
 | 
			
		||||
		blockerId: blocker._id,
 | 
			
		||||
		blockeeId: blockee._id
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	if (exist === null) {
 | 
			
		||||
		return rej('already not blocking');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Delete blocking
 | 
			
		||||
	await deleteBlocking(blocker, blockee);
 | 
			
		||||
 | 
			
		||||
	// Send response
 | 
			
		||||
	res(await pack(blockee._id, user));
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			@ -68,7 +68,11 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	// Create following
 | 
			
		||||
	await create(follower, followee);
 | 
			
		||||
	try {
 | 
			
		||||
		await create(follower, followee);
 | 
			
		||||
	} catch (e) {
 | 
			
		||||
		return rej(e && e.message ? e.message : e);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Send response
 | 
			
		||||
	res(await pack(followee._id, user));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue