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
* ✌️
* Fix
This commit is contained in:
parent
fc52e95ad0
commit
2756f553c6
181 changed files with 2010 additions and 1322 deletions
|
|
@ -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
|
||||
}))));
|
||||
}));
|
||||
})));
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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)));
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}));
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue