From 65c0b6c7da1a16c2c81d19800d9aea7b7dfae4b9 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sat, 15 Feb 2020 01:03:59 +0900 Subject: Resolve #5939 --- src/server/api/endpoints/antennas/create.ts | 25 +++++++++++++++++++++++-- src/server/api/endpoints/antennas/update.ts | 25 +++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 4 deletions(-) (limited to 'src/server/api/endpoints') diff --git a/src/server/api/endpoints/antennas/create.ts b/src/server/api/endpoints/antennas/create.ts index 0e00eda1a4..26915c19b3 100644 --- a/src/server/api/endpoints/antennas/create.ts +++ b/src/server/api/endpoints/antennas/create.ts @@ -1,7 +1,7 @@ import $ from 'cafy'; import define from '../../define'; import { genId } from '../../../../misc/gen-id'; -import { Antennas, UserLists } from '../../../../models'; +import { Antennas, UserLists, UserGroupJoinings } from '../../../../models'; import { ID } from '../../../../misc/cafy-id'; import { ApiError } from '../../error'; @@ -18,13 +18,17 @@ export const meta = { }, src: { - validator: $.str.or(['home', 'all', 'users', 'list']) + validator: $.str.or(['home', 'all', 'users', 'list', 'group']) }, userListId: { validator: $.nullable.optional.type(ID), }, + userGroupId: { + validator: $.nullable.optional.type(ID), + }, + keywords: { validator: $.arr($.arr($.str)) }, @@ -55,12 +59,19 @@ export const meta = { message: 'No such user list.', code: 'NO_SUCH_USER_LIST', id: '95063e93-a283-4b8b-9aa5-bcdb8df69a7f' + }, + + noSuchUserGroup: { + message: 'No such user group.', + code: 'NO_SUCH_USER_GROUP', + id: 'aa3c0b9a-8cae-47c0-92ac-202ce5906682' } } }; export default define(meta, async (ps, user) => { let userList; + let userGroupJoining; if (ps.src === 'list') { userList = await UserLists.findOne({ @@ -71,6 +82,15 @@ export default define(meta, async (ps, user) => { if (userList == null) { throw new ApiError(meta.errors.noSuchUserList); } + } else if (ps.src === 'group') { + userGroupJoining = await UserGroupJoinings.findOne({ + userGroupId: ps.userGroupId, + userId: user.id, + }); + + if (userGroupJoining == null) { + throw new ApiError(meta.errors.noSuchUserGroup); + } } const antenna = await Antennas.save({ @@ -80,6 +100,7 @@ export default define(meta, async (ps, user) => { name: ps.name, src: ps.src, userListId: userList ? userList.id : null, + userGroupJoiningId: userGroupJoining ? userGroupJoining.id : null, keywords: ps.keywords, users: ps.users, caseSensitive: ps.caseSensitive, diff --git a/src/server/api/endpoints/antennas/update.ts b/src/server/api/endpoints/antennas/update.ts index 28875d0f08..b4e7168888 100644 --- a/src/server/api/endpoints/antennas/update.ts +++ b/src/server/api/endpoints/antennas/update.ts @@ -2,7 +2,7 @@ import $ from 'cafy'; import { ID } from '../../../../misc/cafy-id'; import define from '../../define'; import { ApiError } from '../../error'; -import { Antennas, UserLists } from '../../../../models'; +import { Antennas, UserLists, UserGroupJoinings } from '../../../../models'; export const meta = { tags: ['antennas'], @@ -21,13 +21,17 @@ export const meta = { }, src: { - validator: $.str.or(['home', 'all', 'users', 'list']) + validator: $.str.or(['home', 'all', 'users', 'list', 'group']) }, userListId: { validator: $.nullable.optional.type(ID), }, + userGroupId: { + validator: $.nullable.optional.type(ID), + }, + keywords: { validator: $.arr($.arr($.str)) }, @@ -64,6 +68,12 @@ export const meta = { message: 'No such user list.', code: 'NO_SUCH_USER_LIST', id: '1c6b35c9-943e-48c2-81e4-2844989407f7' + }, + + noSuchUserGroup: { + message: 'No such user group.', + code: 'NO_SUCH_USER_GROUP', + id: '109ed789-b6eb-456e-b8a9-6059d567d385' } } }; @@ -80,6 +90,7 @@ export default define(meta, async (ps, user) => { } let userList; + let userGroupJoining; if (ps.src === 'list') { userList = await UserLists.findOne({ @@ -90,12 +101,22 @@ export default define(meta, async (ps, user) => { if (userList == null) { throw new ApiError(meta.errors.noSuchUserList); } + } else if (ps.src === 'group') { + userGroupJoining = await UserGroupJoinings.findOne({ + userGroupId: ps.userGroupId, + userId: user.id, + }); + + if (userGroupJoining == null) { + throw new ApiError(meta.errors.noSuchUserGroup); + } } await Antennas.update(antenna.id, { name: ps.name, src: ps.src, userListId: userList ? userList.id : null, + userGroupJoiningId: userGroupJoining ? userGroupJoining.id : null, keywords: ps.keywords, users: ps.users, caseSensitive: ps.caseSensitive, -- cgit v1.2.3-freya