diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2019-02-22 11:46:58 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-02-22 11:46:58 +0900 |
| commit | 2756f553c68082342a784ef716c62da6cea6f3ca (patch) | |
| tree | 1e0364ca9ddc1fd88e311f0687746f44e007effd /src/server/api/endpoints/notes/create.ts | |
| parent | Update CHANGELOG.md (diff) | |
| download | sharkey-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.ts | 62 |
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) + }; +}); |