iceshrimp-legacy/packages/backend/src/server/api/endpoints/antennas/update.ts

144 lines
2.8 KiB
TypeScript
Raw Normal View History

import $ from 'cafy';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
import { ApiError } from '../../error';
import { Antennas, UserLists, UserGroupJoinings } from '@/models/index';
import { publishInternalEvent } from '@/services/stream';
export const meta = {
tags: ['antennas'],
2020-02-15 13:33:32 +01:00
requireCredential: true as const,
kind: 'write:account',
params: {
antennaId: {
validator: $.type(ID),
},
name: {
2021-12-09 15:58:30 +01:00
validator: $.str.range(1, 100),
},
src: {
2021-12-09 15:58:30 +01:00
validator: $.str.or(['home', 'all', 'users', 'list', 'group']),
},
userListId: {
validator: $.nullable.optional.type(ID),
},
2020-02-14 17:03:59 +01:00
userGroupId: {
validator: $.nullable.optional.type(ID),
},
keywords: {
2021-12-09 15:58:30 +01:00
validator: $.arr($.arr($.str)),
},
2020-02-20 16:28:45 +01:00
excludeKeywords: {
2021-12-09 15:58:30 +01:00
validator: $.arr($.arr($.str)),
2020-02-20 16:28:45 +01:00
},
users: {
2021-12-09 15:58:30 +01:00
validator: $.arr($.str),
},
caseSensitive: {
2021-12-09 15:58:30 +01:00
validator: $.bool,
},
withReplies: {
2021-12-09 15:58:30 +01:00
validator: $.bool,
},
withFile: {
2021-12-09 15:58:30 +01:00
validator: $.bool,
},
notify: {
2021-12-09 15:58:30 +01:00
validator: $.bool,
},
},
errors: {
noSuchAntenna: {
message: 'No such antenna.',
code: 'NO_SUCH_ANTENNA',
2021-12-09 15:58:30 +01:00
id: '10c673ac-8852-48eb-aa1f-f5b67f069290',
},
noSuchUserList: {
message: 'No such user list.',
code: 'NO_SUCH_USER_LIST',
2021-12-09 15:58:30 +01:00
id: '1c6b35c9-943e-48c2-81e4-2844989407f7',
2020-02-14 17:03:59 +01:00
},
noSuchUserGroup: {
message: 'No such user group.',
code: 'NO_SUCH_USER_GROUP',
2021-12-09 15:58:30 +01:00
id: '109ed789-b6eb-456e-b8a9-6059d567d385',
},
},
res: {
type: 'object' as const,
optional: false as const, nullable: false as const,
2021-12-09 15:58:30 +01:00
ref: 'Antenna',
},
};
export default define(meta, async (ps, user) => {
// Fetch the antenna
const antenna = await Antennas.findOne({
id: ps.antennaId,
2021-12-09 15:58:30 +01:00
userId: user.id,
});
if (antenna == null) {
throw new ApiError(meta.errors.noSuchAntenna);
}
let userList;
2020-02-14 17:03:59 +01:00
let userGroupJoining;
if (ps.src === 'list' && ps.userListId) {
userList = await UserLists.findOne({
id: ps.userListId,
userId: user.id,
});
if (userList == null) {
throw new ApiError(meta.errors.noSuchUserList);
}
} else if (ps.src === 'group' && ps.userGroupId) {
2020-02-14 17:03:59 +01:00
userGroupJoining = await UserGroupJoinings.findOne({
userGroupId: ps.userGroupId,
userId: user.id,
});
2020-02-14 17:03:59 +01:00
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,
2020-02-14 17:03:59 +01:00
userGroupJoiningId: userGroupJoining ? userGroupJoining.id : null,
keywords: ps.keywords,
2020-02-20 16:28:45 +01:00
excludeKeywords: ps.excludeKeywords,
users: ps.users,
caseSensitive: ps.caseSensitive,
withReplies: ps.withReplies,
withFile: ps.withFile,
notify: ps.notify,
});
refactor: publishHogeStreamとStreamのEventEmitterに型定義する (#7769) * wip * wip * wip * :v: * add main stream * packedNotificationSchemaを更新 * read:gallery, write:gallery, read:gallery-likes, write:gallery-likesに翻訳を追加 * fix * ok * add header, choice, invitation * add header, choice, invitation * test * fix * fix * yatta * remove no longer needed "as PackedUser/PackedNote" * clean up * add simple-schema * fix lint * fix lint * wip * wip! * wip * fix * wip * wip * :v: * 送信側に型エラーがないことを3回確認した * :v: * wip * update typescript * define items in full Schema * edit comment * edit comment * edit comment * Update src/prelude/types.ts Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com> * https://github.com/misskey-dev/misskey/pull/7769#discussion_r703058458 * user packとnote packの型不整合を修正 * revert https://github.com/misskey-dev/misskey/pull/7772#discussion_r706627736 * revert https://github.com/misskey-dev/misskey/pull/7772#discussion_r706627736 * user packとnote packの型不整合を修正 * add prelude/types.ts * emoji * signin * game * matching * clean up * ev => data * refactor * clean up * add type * antenna * channel * fix * add Packed type * add PackedRef * fix lint * add emoji schema * add reversiGame * add reversiMatching * remove signin schema (use Signin entity) * add schemas refs, fix Packed type * wip PackedHoge => Packed<'Hoge'> * add Packed type * note-reaction * user * user-group * user-list * note * app, messaging-message * notification * drive-file * drive-folder * following * muting * blocking * hashtag * page * app (with modifying schema) * import user? * channel * antenna * clip * gallery-post * emoji * Packed * reversi-matching * update stream.ts * https://github.com/misskey-dev/misskey/pull/7769#issuecomment-917542339 * fix lint * clean up? * add changelog * add changelog * add changelog * fix: アンテナが既読にならないのを修正 * revert fix * https://github.com/misskey-dev/misskey/pull/7769#discussion_r711474875 * spec => payload * edit commetn Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
2021-10-20 18:04:10 +02:00
publishInternalEvent('antennaUpdated', await Antennas.findOneOrFail(antenna.id));
2021-03-23 07:06:56 +01:00
return await Antennas.pack(antenna.id);
});