summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints/games
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/games
parentUpdate CHANGELOG.md (diff)
downloadmisskey-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')
-rw-r--r--src/server/api/endpoints/games/reversi/games.ts14
-rw-r--r--src/server/api/endpoints/games/reversi/games/show.ts19
-rw-r--r--src/server/api/endpoints/games/reversi/games/surrender.ts33
-rw-r--r--src/server/api/endpoints/games/reversi/invitations.ts7
-rw-r--r--src/server/api/endpoints/games/reversi/match.ts36
-rw-r--r--src/server/api/endpoints/games/reversi/match/cancel.ts6
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;
+});