Add group update / transfer API
This commit is contained in:
		
							
								
								
									
										86
									
								
								src/server/api/endpoints/users/groups/transfer.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								src/server/api/endpoints/users/groups/transfer.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,86 @@
 | 
			
		||||
import $ from 'cafy';
 | 
			
		||||
import { ID } from '../../../../../misc/cafy-id';
 | 
			
		||||
import define from '../../../define';
 | 
			
		||||
import { ApiError } from '../../../error';
 | 
			
		||||
import { getUser } from '../../../common/getters';
 | 
			
		||||
import { UserGroups, UserGroupJoinings } from '../../../../../models';
 | 
			
		||||
 | 
			
		||||
export const meta = {
 | 
			
		||||
	desc: {
 | 
			
		||||
		'ja-JP': '指定したユーザーグループを指定したユーザーグループ内のユーザーに譲渡します。',
 | 
			
		||||
		'en-US': 'Transfer user group ownership to another user in group.'
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	tags: ['groups', 'users'],
 | 
			
		||||
 | 
			
		||||
	requireCredential: true,
 | 
			
		||||
 | 
			
		||||
	kind: 'write:user-groups',
 | 
			
		||||
 | 
			
		||||
	params: {
 | 
			
		||||
		groupId: {
 | 
			
		||||
			validator: $.type(ID),
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		userId: {
 | 
			
		||||
			validator: $.type(ID),
 | 
			
		||||
			desc: {
 | 
			
		||||
				'ja-JP': '対象のユーザーのID',
 | 
			
		||||
				'en-US': 'Target user ID'
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	errors: {
 | 
			
		||||
		noSuchGroup: {
 | 
			
		||||
			message: 'No such group.',
 | 
			
		||||
			code: 'NO_SUCH_GROUP',
 | 
			
		||||
			id: '8e31d36b-2f88-4ccd-a438-e2d78a9162db'
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		noSuchUser: {
 | 
			
		||||
			message: 'No such user.',
 | 
			
		||||
			code: 'NO_SUCH_USER',
 | 
			
		||||
			id: '711f7ebb-bbb9-4dfa-b540-b27809fed5e9'
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		noSuchGroupMember: {
 | 
			
		||||
			message: 'No such group member.',
 | 
			
		||||
			code: 'NO_SUCH_GROUP_MEMBER',
 | 
			
		||||
			id: 'd31bebee-196d-42c2-9a3e-9474d4be6cc4'
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default define(meta, async (ps, me) => {
 | 
			
		||||
	// Fetch the group
 | 
			
		||||
	const userGroup = await UserGroups.findOne({
 | 
			
		||||
		id: ps.groupId,
 | 
			
		||||
		userId: me.id,
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	if (userGroup == null) {
 | 
			
		||||
		throw new ApiError(meta.errors.noSuchGroup);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Fetch the user
 | 
			
		||||
	const user = await getUser(ps.userId).catch(e => {
 | 
			
		||||
		if (e.id === '15348ddd-432d-49c2-8a5a-8069753becff') throw new ApiError(meta.errors.noSuchUser);
 | 
			
		||||
		throw e;
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	const joining = await UserGroupJoinings.findOne({
 | 
			
		||||
		userGroupId: userGroup.id,
 | 
			
		||||
		userId: user.id
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	if (!joining) {
 | 
			
		||||
		throw new ApiError(meta.errors.noSuchGroupMember);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	await UserGroups.update(userGroup.id, {
 | 
			
		||||
		userId: ps.userId
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	return await UserGroups.pack(userGroup.id);
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										62
									
								
								src/server/api/endpoints/users/groups/update.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								src/server/api/endpoints/users/groups/update.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
import $ from 'cafy';
 | 
			
		||||
import { ID } from '../../../../../misc/cafy-id';
 | 
			
		||||
import define from '../../../define';
 | 
			
		||||
import { ApiError } from '../../../error';
 | 
			
		||||
import { UserGroups } from '../../../../../models';
 | 
			
		||||
 | 
			
		||||
export const meta = {
 | 
			
		||||
	desc: {
 | 
			
		||||
		'ja-JP': '指定したユーザーグループを更新します。',
 | 
			
		||||
		'en-US': 'Update a user group'
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	tags: ['groups'],
 | 
			
		||||
 | 
			
		||||
	requireCredential: true,
 | 
			
		||||
 | 
			
		||||
	kind: 'write:user-groups',
 | 
			
		||||
 | 
			
		||||
	params: {
 | 
			
		||||
		groupId: {
 | 
			
		||||
			validator: $.type(ID),
 | 
			
		||||
			desc: {
 | 
			
		||||
				'ja-JP': '対象となるユーザーグループのID',
 | 
			
		||||
				'en-US': 'ID of target user group'
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		name: {
 | 
			
		||||
			validator: $.str.range(1, 100),
 | 
			
		||||
			desc: {
 | 
			
		||||
				'ja-JP': 'このユーザーグループの名前',
 | 
			
		||||
				'en-US': 'name of this user group'
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	errors: {
 | 
			
		||||
		noSuchGroup: {
 | 
			
		||||
			message: 'No such group.',
 | 
			
		||||
			code: 'NO_SUCH_GROUP',
 | 
			
		||||
			id: '9081cda3-7a9e-4fac-a6ce-908d70f282f6'
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default define(meta, async (ps, me) => {
 | 
			
		||||
	// Fetch the group
 | 
			
		||||
	const userGroup = await UserGroups.findOne({
 | 
			
		||||
		id: ps.groupId,
 | 
			
		||||
		userId: me.id
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	if (userGroup == null) {
 | 
			
		||||
		throw new ApiError(meta.errors.noSuchGroup);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	await UserGroups.update(userGroup.id, {
 | 
			
		||||
		name: ps.name
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	return await UserGroups.pack(userGroup.id);
 | 
			
		||||
});
 | 
			
		||||
		Reference in New Issue
	
	Block a user