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/messaging | |
| 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/messaging')
| -rw-r--r-- | src/server/api/endpoints/messaging/history.ts | 6 | ||||
| -rw-r--r-- | src/server/api/endpoints/messaging/messages.ts | 32 | ||||
| -rw-r--r-- | src/server/api/endpoints/messaging/messages/create.ts | 46 | ||||
| -rw-r--r-- | src/server/api/endpoints/messaging/messages/delete.ts | 17 | ||||
| -rw-r--r-- | src/server/api/endpoints/messaging/messages/read.ts | 17 |
5 files changed, 80 insertions, 38 deletions
diff --git a/src/server/api/endpoints/messaging/history.ts b/src/server/api/endpoints/messaging/history.ts index 408e2d42a6..e42bf79c54 100644 --- a/src/server/api/endpoints/messaging/history.ts +++ b/src/server/api/endpoints/messaging/history.ts @@ -21,7 +21,7 @@ export const meta = { } }; -export default define(meta, (ps, user) => new Promise(async (res, rej) => { +export default define(meta, async (ps, user) => { const mute = await Mute.find({ muterId: user._id, deletedAt: { $exists: false } @@ -58,5 +58,5 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { } } - res(await Promise.all(history.map(h => pack(h._id, user)))); -})); + return await Promise.all(history.map(h => pack(h._id, user))); +}); diff --git a/src/server/api/endpoints/messaging/messages.ts b/src/server/api/endpoints/messaging/messages.ts index 4c1b7206d6..9b27d4cac1 100644 --- a/src/server/api/endpoints/messaging/messages.ts +++ b/src/server/api/endpoints/messaging/messages.ts @@ -5,6 +5,7 @@ import User from '../../../../models/user'; import { pack } from '../../../../models/messaging-message'; import read from '../../common/read-messaging-message'; import define from '../../define'; +import { ApiError } from '../../error'; export const meta = { desc: { @@ -45,15 +46,18 @@ export const meta = { validator: $.optional.bool, default: true } - } -}; + }, -export default define(meta, (ps, user) => new Promise(async (res, rej) => { - // Check if both of sinceId and untilId is specified - if (ps.sinceId && ps.untilId) { - return rej('cannot set sinceId and untilId'); + errors: { + noSuchUser: { + message: 'No such user.', + code: 'NO_SUCH_USER', + id: '11795c64-40ea-4198-b06e-3c873ed9039d' + }, } +}; +export default define(meta, async (ps, user) => { // Fetch recipient const recipient = await User.findOne({ _id: ps.userId @@ -64,7 +68,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { }); if (recipient === null) { - return rej('user not found'); + throw new ApiError(meta.errors.noSuchUser); } const query = { @@ -98,16 +102,12 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { sort: sort }); - res(await Promise.all(messages.map(message => pack(message, user, { - populateRecipient: false - })))); - - if (messages.length === 0) { - return; - } - // Mark all as read if (ps.markAsRead) { read(user._id, recipient._id, messages); } -})); + + return await Promise.all(messages.map(message => pack(message, user, { + populateRecipient: false + }))); +}); diff --git a/src/server/api/endpoints/messaging/messages/create.ts b/src/server/api/endpoints/messaging/messages/create.ts index 96a047a9bf..3885d2583c 100644 --- a/src/server/api/endpoints/messaging/messages/create.ts +++ b/src/server/api/endpoints/messaging/messages/create.ts @@ -10,6 +10,7 @@ import { publishMainStream } from '../../../../../services/stream'; import { publishMessagingStream, publishMessagingIndexStream } from '../../../../../services/stream'; import pushSw from '../../../../../services/push-notification'; import define from '../../../define'; +import { ApiError } from '../../../error'; export const meta = { desc: { @@ -39,13 +40,39 @@ export const meta = { validator: $.optional.type(ID), transform: transform, } + }, + + errors: { + recipientIsYourself: { + message: 'You can not send a message to yourself.', + code: 'RECIPIENT_IS_YOURSELF', + id: '17e2ba79-e22a-4cbc-bf91-d327643f4a7e' + }, + + noSuchUser: { + message: 'No such user.', + code: 'NO_SUCH_USER', + id: '11795c64-40ea-4198-b06e-3c873ed9039d' + }, + + noSuchFile: { + message: 'No such file.', + code: 'NO_SUCH_FILE', + id: '4372b8e2-185d-4146-8749-2f68864a3e5f' + }, + + contentRequired: { + message: 'Content required. You need to set text or fileId.', + code: 'CONTENT_REQUIRED', + id: '25587321-b0e6-449c-9239-f8925092942c' + } } }; -export default define(meta, (ps, user) => new Promise(async (res, rej) => { +export default define(meta, async (ps, user) => { // Myself if (ps.userId.equals(user._id)) { - return rej('cannot send message to myself'); + throw new ApiError(meta.errors.recipientIsYourself); } // Fetch recipient @@ -58,7 +85,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { }); if (recipient === null) { - return rej('user not found'); + throw new ApiError(meta.errors.noSuchUser); } let file = null; @@ -69,16 +96,15 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { }); if (file === null) { - return rej('file not found'); + throw new ApiError(meta.errors.noSuchFile); } } // テキストが無いかつ添付ファイルも無かったらエラー if (ps.text == null && file == null) { - return rej('text or file is required'); + throw new ApiError(meta.errors.contentRequired); } - // メッセージを作成 const message = await Message.insert({ createdAt: new Date(), fileId: file ? file._id : undefined, @@ -88,12 +114,8 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { isRead: false }); - // Serialize const messageObj = await pack(message); - // Reponse - res(messageObj); - // 自分のストリーム publishMessagingStream(message.userId, message.recipientId, 'message', messageObj); publishMessagingIndexStream(message.userId, 'message', messageObj); @@ -131,4 +153,6 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { pushSw(message.recipientId, 'unreadMessagingMessage', messageObj); } }, 2000); -})); + + return messageObj; +}); diff --git a/src/server/api/endpoints/messaging/messages/delete.ts b/src/server/api/endpoints/messaging/messages/delete.ts index 4f3fabb4ce..5bc492c19d 100644 --- a/src/server/api/endpoints/messaging/messages/delete.ts +++ b/src/server/api/endpoints/messaging/messages/delete.ts @@ -4,6 +4,7 @@ import Message from '../../../../../models/messaging-message'; import define from '../../../define'; import { publishMessagingStream } from '../../../../../services/stream'; import * as ms from 'ms'; +import { ApiError } from '../../../error'; export const meta = { stability: 'stable', @@ -32,17 +33,25 @@ export const meta = { 'en-US': 'Target message ID.' } } + }, + + errors: { + noSuchMessage: { + message: 'No such message.', + code: 'NO_SUCH_MESSAGE', + id: '54b5b326-7925-42cf-8019-130fda8b56af' + }, } }; -export default define(meta, (ps, user) => new Promise(async (res, rej) => { +export default define(meta, async (ps, user) => { const message = await Message.findOne({ _id: ps.messageId, userId: user._id }); if (message === null) { - return rej('message not found'); + throw new ApiError(meta.errors.noSuchMessage); } await Message.remove({ _id: message._id }); @@ -50,5 +59,5 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { publishMessagingStream(message.userId, message.recipientId, 'deleted', message._id); publishMessagingStream(message.recipientId, message.userId, 'deleted', message._id); - res(); -})); + return; +}); diff --git a/src/server/api/endpoints/messaging/messages/read.ts b/src/server/api/endpoints/messaging/messages/read.ts index 8343ea28ca..98f195d753 100644 --- a/src/server/api/endpoints/messaging/messages/read.ts +++ b/src/server/api/endpoints/messaging/messages/read.ts @@ -3,6 +3,7 @@ import ID, { transform } from '../../../../../misc/cafy-id'; import Message from '../../../../../models/messaging-message'; import read from '../../../common/read-messaging-message'; import define from '../../../define'; +import { ApiError } from '../../../error'; export const meta = { desc: { @@ -23,20 +24,28 @@ export const meta = { 'en-US': 'The ID of a message that you want to mark as read' } } + }, + + errors: { + noSuchMessage: { + message: 'No such message.', + code: 'NO_SUCH_MESSAGE', + id: '86d56a2f-a9c3-4afb-b13c-3e9bfef9aa14' + }, } }; -export default define(meta, (ps, user) => new Promise(async (res, rej) => { +export default define(meta, async (ps, user) => { const message = await Message.findOne({ _id: ps.messageId, recipientId: user._id }); if (message == null) { - return rej('message not found'); + throw new ApiError(meta.errors.noSuchMessage); } read(user._id, message.userId, message); - res(); -})); + return; +}); |