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/polls | |
| 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/polls')
| -rw-r--r-- | src/server/api/endpoints/notes/polls/recommendation.ts | 49 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/polls/vote.ts | 46 |
2 files changed, 61 insertions, 34 deletions
diff --git a/src/server/api/endpoints/notes/polls/recommendation.ts b/src/server/api/endpoints/notes/polls/recommendation.ts index 8e11e65296..61a1840b88 100644 --- a/src/server/api/endpoints/notes/polls/recommendation.ts +++ b/src/server/api/endpoints/notes/polls/recommendation.ts @@ -25,7 +25,7 @@ export const meta = { } }; -export default define(meta, (ps, user) => new Promise(async (res, rej) => { +export default define(meta, async (ps, user) => { // Get votes const votes = await Vote.find({ userId: user._id @@ -41,29 +41,28 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { // 隠すユーザーを取得 const hideUserIds = await getHideUserIds(user); - const notes = await Note - .find({ - '_user.host': null, - _id: { - $nin: nin - }, - userId: { - $ne: user._id, - $nin: hideUserIds - }, - poll: { - $exists: true, - $ne: null - } - }, { - limit: ps.limit, - skip: ps.offset, - sort: { - _id: -1 - } - }); + const notes = await Note.find({ + '_user.host': null, + _id: { + $nin: nin + }, + userId: { + $ne: user._id, + $nin: hideUserIds + }, + poll: { + $exists: true, + $ne: null + } + }, { + limit: ps.limit, + skip: ps.offset, + sort: { + _id: -1 + } + }); - res(await Promise.all(notes.map(note => pack(note, user, { + return await Promise.all(notes.map(note => pack(note, user, { detail: true - })))); -})); + }))); +}); diff --git a/src/server/api/endpoints/notes/polls/vote.ts b/src/server/api/endpoints/notes/polls/vote.ts index 68c3898e05..fe0fffec61 100644 --- a/src/server/api/endpoints/notes/polls/vote.ts +++ b/src/server/api/endpoints/notes/polls/vote.ts @@ -9,6 +9,7 @@ import notify from '../../../../../services/create-notification'; import define from '../../../define'; import createNote from '../../../../../services/note/create'; import User from '../../../../../models/user'; +import { ApiError } from '../../../error'; export const meta = { desc: { @@ -33,24 +34,52 @@ export const meta = { choice: { validator: $.num }, + }, + + errors: { + noSuchNote: { + message: 'No such note.', + code: 'NO_SUCH_NOTE', + id: 'ecafbd2e-c283-4d6d-aecb-1a0a33b75396' + }, + + noPoll: { + message: 'The note does not attach a poll.', + code: 'NO_POLL', + id: '5f979967-52d9-4314-a911-1c673727f92f' + }, + + invalidChoice: { + message: 'Choice ID is invalid.', + code: 'INVALID_CHOICE', + id: 'e0cc9a04-f2e8-41e4-a5f1-4127293260cc' + }, + + alreadyVoted: { + message: 'You have already voted.', + code: 'ALREADY_VOTED', + id: '0963fc77-efac-419b-9424-b391608dc6d8' + }, } }; -export default define(meta, (ps, user) => new Promise(async (res, rej) => { +export default define(meta, async (ps, user) => { // Get votee const note = await Note.findOne({ _id: ps.noteId }); if (note === null) { - return rej('note not found'); + throw new ApiError(meta.errors.noSuchNote); } if (note.poll == null) { - return rej('poll not found'); + throw new ApiError(meta.errors.noPoll); } - if (!note.poll.choices.some(x => x.id == ps.choice)) return rej('invalid choice param'); + if (!note.poll.choices.some(x => x.id == ps.choice)) { + throw new ApiError(meta.errors.invalidChoice); + } // if already voted const exist = await Vote.findOne({ @@ -59,7 +88,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { }); if (exist !== null) { - return rej('already voted'); + throw new ApiError(meta.errors.alreadyVoted); } // Create vote @@ -70,9 +99,6 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { choice: ps.choice }); - // Send response - res(); - const inc: any = {}; inc[`poll.choices.${note.poll.choices.findIndex(c => c.id == ps.choice)}.votes`] = 1; @@ -132,4 +158,6 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { visibleUsers: [ pollOwner ], }); } -})); + + return; +}); |