summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints/notes/create.ts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2019-02-22 11:46:58 +0900
committerGitHub <noreply@github.com>2019-02-22 11:46:58 +0900
commit2756f553c68082342a784ef716c62da6cea6f3ca (patch)
tree1e0364ca9ddc1fd88e311f0687746f44e007effd /src/server/api/endpoints/notes/create.ts
parentUpdate CHANGELOG.md (diff)
downloadsharkey-2756f553c68082342a784ef716c62da6cea6f3ca.tar.gz
sharkey-2756f553c68082342a784ef716c62da6cea6f3ca.tar.bz2
sharkey-2756f553c68082342a784ef716c62da6cea6f3ca.zip
Improve error handling of API (#4345)
* wip * wip * wip * Update attached_notes.ts * wip * Refactor * wip * wip * wip * wip * wip * wip * wip * wip * Update call.ts * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * :v: * Fix
Diffstat (limited to 'src/server/api/endpoints/notes/create.ts')
-rw-r--r--src/server/api/endpoints/notes/create.ts62
1 files changed, 45 insertions, 17 deletions
diff --git a/src/server/api/endpoints/notes/create.ts b/src/server/api/endpoints/notes/create.ts
index 47eebc186c..d24cd7b123 100644
--- a/src/server/api/endpoints/notes/create.ts
+++ b/src/server/api/endpoints/notes/create.ts
@@ -8,6 +8,7 @@ import DriveFile, { IDriveFile } from '../../../../models/drive-file';
import create from '../../../../services/note/create';
import define from '../../define';
import fetchMeta from '../../../../misc/fetch-meta';
+import { ApiError } from '../../error';
let maxNoteTextLength = 1000;
@@ -180,10 +181,42 @@ export const meta = {
}
}
}
+ },
+
+ errors: {
+ noSuchRenoteTarget: {
+ message: 'No such renote target.',
+ code: 'NO_SUCH_RENOTE_TARGET',
+ id: 'b5c90186-4ab0-49c8-9bba-a1f76c282ba4'
+ },
+
+ cannotReRenote: {
+ message: 'You can not Renote a pure Renote.',
+ code: 'CANNOT_RENOTE_TO_A_PURE_RENOTE',
+ id: 'fd4cc33e-2a37-48dd-99cc-9b806eb2031a'
+ },
+
+ noSuchReplyTarget: {
+ message: 'No such reply target.',
+ code: 'NO_SUCH_REPLY_TARGET',
+ id: '749ee0f6-d3da-459a-bf02-282e2da4292c'
+ },
+
+ cannotReplyToPureRenote: {
+ message: 'You can not reply to a pure Renote.',
+ code: 'CANNOT_REPLY_TO_A_PURE_RENOTE',
+ 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'
+ },
}
};
-export default define(meta, (ps, user, app) => new Promise(async (res, rej) => {
+export default define(meta, async (ps, user, app) => {
let visibleUsers: IUser[] = [];
if (ps.visibleUserIds) {
visibleUsers = await Promise.all(ps.visibleUserIds.map(id => User.findOne({
@@ -212,9 +245,9 @@ export default define(meta, (ps, user, app) => new Promise(async (res, rej) => {
});
if (renote == null) {
- return rej('renoteee is not found');
+ throw new ApiError(meta.errors.noSuchRenoteTarget);
} else if (renote.renoteId && !renote.text && !renote.fileIds) {
- return rej('cannot renote to renote');
+ throw new ApiError(meta.errors.cannotReRenote);
}
}
@@ -226,12 +259,12 @@ export default define(meta, (ps, user, app) => new Promise(async (res, rej) => {
});
if (reply === null) {
- return rej('in reply to note is not found');
+ throw new ApiError(meta.errors.noSuchReplyTarget);
}
// 返信対象が引用でないRenoteだったらエラー
if (reply.renoteId && !reply.text && !reply.fileIds) {
- return rej('cannot reply to renote');
+ throw new ApiError(meta.errors.cannotReplyToPureRenote);
}
}
@@ -245,7 +278,7 @@ export default define(meta, (ps, user, app) => new Promise(async (res, rej) => {
// テキストが無いかつ添付ファイルが無いかつRenoteも無いかつ投票も無かったらエラー
if (!(ps.text || files.length || renote || ps.poll)) {
- return rej('text, fileIds, renoteId or poll is required');
+ throw new ApiError(meta.errors.contentRequired);
}
// 後方互換性のため
@@ -254,7 +287,7 @@ export default define(meta, (ps, user, app) => new Promise(async (res, rej) => {
}
// 投稿を作成
- create(user, {
+ const note = await create(user, {
createdAt: new Date(),
files: files,
poll: ps.poll,
@@ -271,14 +304,9 @@ export default define(meta, (ps, user, app) => new Promise(async (res, rej) => {
apHashtags: ps.noExtractHashtags ? [] : undefined,
apEmojis: ps.noExtractEmojis ? [] : undefined,
geo: ps.geo
- })
- .then(note => pack(note, user))
- .then(noteObj => {
- res({
- createdNote: noteObj
- });
- })
- .catch(e => {
- rej(e);
});
-}));
+
+ return {
+ createdNote: await pack(note, user)
+ };
+});