summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints/notes/create.ts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-04-02 15:34:03 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2022-04-02 15:34:03 +0900
commit2375359d129b63988b0658f735e1d9c014c10d71 (patch)
treec8b233d00e4b3cbb41b0d211845bdb0cca803267 /packages/backend/src/server/api/endpoints/notes/create.ts
parentMerge branch 'develop' (diff)
parent12.109.0 (diff)
downloadmisskey-2375359d129b63988b0658f735e1d9c014c10d71.tar.gz
misskey-2375359d129b63988b0658f735e1d9c014c10d71.tar.bz2
misskey-2375359d129b63988b0658f735e1d9c014c10d71.zip
Merge branch 'develop'
Diffstat (limited to 'packages/backend/src/server/api/endpoints/notes/create.ts')
-rw-r--r--packages/backend/src/server/api/endpoints/notes/create.ts90
1 files changed, 57 insertions, 33 deletions
diff --git a/packages/backend/src/server/api/endpoints/notes/create.ts b/packages/backend/src/server/api/endpoints/notes/create.ts
index e4a9b28891..4b18ab6023 100644
--- a/packages/backend/src/server/api/endpoints/notes/create.ts
+++ b/packages/backend/src/server/api/endpoints/notes/create.ts
@@ -59,12 +59,6 @@ export const meta = {
id: '3ac74a84-8fd5-4bb0-870f-01804f82ce15',
},
- contentRequired: {
- message: 'Content required. You need to set text, fileIds, renoteId or poll.',
- code: 'CONTENT_REQUIRED',
- id: '6f57e42b-c348-439b-bc45-993995cc515a',
- },
-
cannotCreateAlreadyExpiredPoll: {
message: 'Poll is already expired.',
code: 'CANNOT_CREATE_ALREADY_EXPIRED_POLL',
@@ -92,29 +86,41 @@ export const paramDef = {
visibleUserIds: { type: 'array', uniqueItems: true, items: {
type: 'string', format: 'misskey:id',
} },
- text: { type: 'string', nullable: true, maxLength: MAX_NOTE_TEXT_LENGTH, default: null },
+ text: { type: 'string', maxLength: MAX_NOTE_TEXT_LENGTH, nullable: true },
cw: { type: 'string', nullable: true, maxLength: 100 },
localOnly: { type: 'boolean', default: false },
noExtractMentions: { type: 'boolean', default: false },
noExtractHashtags: { type: 'boolean', default: false },
noExtractEmojis: { type: 'boolean', default: false },
- fileIds: { type: 'array', uniqueItems: true, minItems: 1, maxItems: 16, items: {
- type: 'string', format: 'misskey:id',
- } },
- mediaIds: { type: 'array', uniqueItems: true, minItems: 1, maxItems: 16, items: {
- type: 'string', format: 'misskey:id',
- } },
+ fileIds: {
+ type: 'array',
+ uniqueItems: true,
+ minItems: 1,
+ maxItems: 16,
+ items: { type: 'string', format: 'misskey:id' },
+ },
+ mediaIds: {
+ deprecated: true,
+ description: 'Use `fileIds` instead. If both are specified, this property is discarded.',
+ type: 'array',
+ uniqueItems: true,
+ minItems: 1,
+ maxItems: 16,
+ items: { type: 'string', format: 'misskey:id' },
+ },
replyId: { type: 'string', format: 'misskey:id', nullable: true },
renoteId: { type: 'string', format: 'misskey:id', nullable: true },
channelId: { type: 'string', format: 'misskey:id', nullable: true },
poll: {
- type: 'object', nullable: true,
+ type: 'object',
+ nullable: true,
properties: {
choices: {
- type: 'array', uniqueItems: true, minItems: 2, maxItems: 10,
- items: {
- type: 'string', minLength: 1, maxLength: 50,
- },
+ type: 'array',
+ uniqueItems: true,
+ minItems: 2,
+ maxItems: 10,
+ items: { type: 'string', minLength: 1, maxLength: 50 },
},
multiple: { type: 'boolean', default: false },
expiresAt: { type: 'integer', nullable: true },
@@ -123,14 +129,37 @@ export const paramDef = {
required: ['choices'],
},
},
- required: [],
+ anyOf: [
+ {
+ // (re)note with text, files and poll are optional
+ properties: {
+ text: { type: 'string', maxLength: MAX_NOTE_TEXT_LENGTH, nullable: false },
+ },
+ required: ['text'],
+ },
+ {
+ // (re)note with files, text and poll are optional
+ required: ['fileIds'],
+ },
+ {
+ // (re)note with files, text and poll are optional
+ required: ['mediaIds'],
+ },
+ {
+ // (re)note with poll, text and files are optional
+ properties: {
+ poll: { type: 'object', nullable: false, },
+ },
+ required: ['poll'],
+ },
+ ],
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, user) => {
let visibleUsers: User[] = [];
if (ps.visibleUserIds) {
- visibleUsers = (await Promise.all(ps.visibleUserIds.map(id => Users.findOne(id))))
+ visibleUsers = (await Promise.all(ps.visibleUserIds.map(id => Users.findOneBy({ id }))))
.filter(x => x != null) as User[];
}
@@ -138,17 +167,17 @@ export default define(meta, paramDef, async (ps, user) => {
const fileIds = ps.fileIds != null ? ps.fileIds : ps.mediaIds != null ? ps.mediaIds : null;
if (fileIds != null) {
files = (await Promise.all(fileIds.map(fileId =>
- DriveFiles.findOne({
+ DriveFiles.findOneBy({
id: fileId,
userId: user.id,
})
))).filter(file => file != null) as DriveFile[];
}
- let renote: Note | undefined;
+ let renote: Note | null;
if (ps.renoteId != null) {
// Fetch renote to note
- renote = await Notes.findOne(ps.renoteId);
+ renote = await Notes.findOneBy({ id: ps.renoteId });
if (renote == null) {
throw new ApiError(meta.errors.noSuchRenoteTarget);
@@ -158,7 +187,7 @@ export default define(meta, paramDef, async (ps, user) => {
// Check blocking
if (renote.userId !== user.id) {
- const block = await Blockings.findOne({
+ const block = await Blockings.findOneBy({
blockerId: renote.userId,
blockeeId: user.id,
});
@@ -168,10 +197,10 @@ export default define(meta, paramDef, async (ps, user) => {
}
}
- let reply: Note | undefined;
+ let reply: Note | null;
if (ps.replyId != null) {
// Fetch reply
- reply = await Notes.findOne(ps.replyId);
+ reply = await Notes.findOneBy({ id: ps.replyId });
if (reply == null) {
throw new ApiError(meta.errors.noSuchReplyTarget);
@@ -184,7 +213,7 @@ export default define(meta, paramDef, async (ps, user) => {
// Check blocking
if (reply.userId !== user.id) {
- const block = await Blockings.findOne({
+ const block = await Blockings.findOneBy({
blockerId: reply.userId,
blockeeId: user.id,
});
@@ -204,14 +233,9 @@ export default define(meta, paramDef, async (ps, user) => {
}
}
- // テキストが無いかつ添付ファイルが無いかつRenoteも無いかつ投票も無かったらエラー
- if (!(ps.text || files.length || renote || ps.poll)) {
- throw new ApiError(meta.errors.contentRequired);
- }
-
let channel: Channel | undefined;
if (ps.channelId != null) {
- channel = await Channels.findOne(ps.channelId);
+ channel = await Channels.findOneBy({ id: ps.channelId });
if (channel == null) {
throw new ApiError(meta.errors.noSuchChannel);