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/games | |
| parent | Update CHANGELOG.md (diff) | |
| download | misskey-2756f553c68082342a784ef716c62da6cea6f3ca.tar.gz misskey-2756f553c68082342a784ef716c62da6cea6f3ca.tar.bz2 misskey-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/games')
6 files changed, 74 insertions, 41 deletions
diff --git a/src/server/api/endpoints/games/reversi/games.ts b/src/server/api/endpoints/games/reversi/games.ts index fd9308f7e5..b188ba996d 100644 --- a/src/server/api/endpoints/games/reversi/games.ts +++ b/src/server/api/endpoints/games/reversi/games.ts @@ -27,12 +27,7 @@ export const meta = { } }; -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'); - } - +export default define(meta, async (ps, user) => { const q: any = ps.my ? { isStarted: true, $or: [{ @@ -65,8 +60,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { limit: ps.limit }); - // Reponse - res(Promise.all(games.map(async (g) => await pack(g, user, { + return await Promise.all(games.map((g) => pack(g, user, { detail: false - })))); -})); + }))); +}); diff --git a/src/server/api/endpoints/games/reversi/games/show.ts b/src/server/api/endpoints/games/reversi/games/show.ts index 212d72bb7b..d70ab8de92 100644 --- a/src/server/api/endpoints/games/reversi/games/show.ts +++ b/src/server/api/endpoints/games/reversi/games/show.ts @@ -3,6 +3,7 @@ import ID, { transform } from '../../../../../../misc/cafy-id'; import ReversiGame, { pack } from '../../../../../../models/games/reversi/game'; import Reversi from '../../../../../../games/reversi/core'; import define from '../../../../define'; +import { ApiError } from '../../../../error'; export const meta = { params: { @@ -10,14 +11,22 @@ export const meta = { validator: $.type(ID), transform: transform, }, + }, + + errors: { + noSuchGame: { + message: 'No such game.', + code: 'NO_SUCH_GAME', + id: 'f13a03db-fae1-46c9-87f3-43c8165419e1' + }, } }; -export default define(meta, (ps, user) => new Promise(async (res, rej) => { +export default define(meta, async (ps, user) => { const game = await ReversiGame.findOne({ _id: ps.gameId }); if (game == null) { - return rej('game not found'); + throw new ApiError(meta.errors.noSuchGame); } const o = new Reversi(game.settings.map, { @@ -31,8 +40,8 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { const packed = await pack(game, user); - res(Object.assign({ + return Object.assign({ board: o.board, turn: o.turn - }, packed)); -})); + }, packed); +}); diff --git a/src/server/api/endpoints/games/reversi/games/surrender.ts b/src/server/api/endpoints/games/reversi/games/surrender.ts index a19743fee9..954ae07ebc 100644 --- a/src/server/api/endpoints/games/reversi/games/surrender.ts +++ b/src/server/api/endpoints/games/reversi/games/surrender.ts @@ -3,6 +3,7 @@ import ID, { transform } from '../../../../../../misc/cafy-id'; import ReversiGame, { pack } from '../../../../../../models/games/reversi/game'; import { publishReversiGameStream } from '../../../../../../services/stream'; import define from '../../../../define'; +import { ApiError } from '../../../../error'; export const meta = { desc: { @@ -19,22 +20,42 @@ export const meta = { 'ja-JP': '投了したい対局' } } + }, + + errors: { + noSuchGame: { + message: 'No such game.', + code: 'NO_SUCH_GAME', + id: 'ace0b11f-e0a6-4076-a30d-e8284c81b2df' + }, + + alreadyEnded: { + message: 'That game has already ended.', + code: 'ALREADY_ENDED', + id: '6c2ad4a6-cbf1-4a5b-b187-b772826cfc6d' + }, + + accessDenied: { + message: 'Access denied.', + code: 'ACCESS_DENIED', + id: '6e04164b-a992-4c93-8489-2123069973e1' + }, } }; -export default define(meta, (ps, user) => new Promise(async (res, rej) => { +export default define(meta, async (ps, user) => { const game = await ReversiGame.findOne({ _id: ps.gameId }); if (game == null) { - return rej('game not found'); + throw new ApiError(meta.errors.noSuchGame); } if (game.isEnded) { - return rej('this game is already ended'); + throw new ApiError(meta.errors.alreadyEnded); } if (!game.user1Id.equals(user._id) && !game.user2Id.equals(user._id)) { - return rej('access denied'); + throw new ApiError(meta.errors.accessDenied); } const winnerId = game.user1Id.equals(user._id) ? game.user2Id : game.user1Id; @@ -54,5 +75,5 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { game: await pack(game._id, user) }); - res(); -})); + return; +}); diff --git a/src/server/api/endpoints/games/reversi/invitations.ts b/src/server/api/endpoints/games/reversi/invitations.ts index d808ff2e78..034c84bdd5 100644 --- a/src/server/api/endpoints/games/reversi/invitations.ts +++ b/src/server/api/endpoints/games/reversi/invitations.ts @@ -5,7 +5,7 @@ export const meta = { requireCredential: true }; -export default define(meta, (ps, user) => new Promise(async (res, rej) => { +export default define(meta, async (ps, user) => { // Find session const invitations = await Matching.find({ childId: user._id @@ -15,6 +15,5 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { } }); - // Reponse - res(Promise.all(invitations.map(async (i) => await packMatching(i, user)))); -})); + return await Promise.all(invitations.map((i) => packMatching(i, user))); +}); diff --git a/src/server/api/endpoints/games/reversi/match.ts b/src/server/api/endpoints/games/reversi/match.ts index febf815067..4fd4aedc15 100644 --- a/src/server/api/endpoints/games/reversi/match.ts +++ b/src/server/api/endpoints/games/reversi/match.ts @@ -6,6 +6,7 @@ import User from '../../../../../models/user'; import { publishMainStream, publishReversiStream } from '../../../../../services/stream'; import { eighteight } from '../../../../../games/reversi/maps'; import define from '../../../define'; +import { ApiError } from '../../../error'; export const meta = { requireCredential: true, @@ -19,13 +20,27 @@ export const meta = { 'en-US': 'Target user ID' } }, + }, + + errors: { + noSuchUser: { + message: 'No such user.', + code: 'NO_SUCH_USER', + id: '0b4f0559-b484-4e31-9581-3f73cee89b28' + }, + + isYourself: { + message: 'Target user is yourself.', + code: 'TARGET_IS_YOURSELF', + id: '96fd7bd6-d2bc-426c-a865-d055dcd2828e' + }, } }; -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('invalid userId param'); + throw new ApiError(meta.errors.isYourself); } // Find session @@ -57,9 +72,6 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { } }); - // Reponse - res(await packGame(game, user)); - publishReversiStream(exist.parentId, 'matched', await packGame(game, exist.parentId)); const other = await Matching.count({ @@ -69,6 +81,8 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { if (other == 0) { publishMainStream(user._id, 'reversiNoInvites'); } + + return await packGame(game, user); } else { // Fetch child const child = await User.findOne({ @@ -80,7 +94,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { }); if (child === null) { - return rej('user not found'); + throw new ApiError(meta.errors.noSuchUser); } // 以前のセッションはすべて削除しておく @@ -95,14 +109,10 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { childId: child._id }); - // Reponse - res(); - const packed = await packMatching(matching, child); - - // 招待 publishReversiStream(child._id, 'invited', packed); - publishMainStream(child._id, 'reversiInvited', packed); + + return; } -})); +}); diff --git a/src/server/api/endpoints/games/reversi/match/cancel.ts b/src/server/api/endpoints/games/reversi/match/cancel.ts index ac51e416ed..03b76babd7 100644 --- a/src/server/api/endpoints/games/reversi/match/cancel.ts +++ b/src/server/api/endpoints/games/reversi/match/cancel.ts @@ -5,10 +5,10 @@ export const meta = { requireCredential: true }; -export default define(meta, (ps, user) => new Promise(async (res, rej) => { +export default define(meta, async (ps, user) => { await Matching.remove({ parentId: user._id }); - res(); -})); + return; +}); |